openAIToolDefinitionSchema: ZodObject<
    {
        function: ZodObject<
            {
                description: ZodOptional<ZodString>;
                name: ZodString;
                parameters: ZodObject<
                    {
                        additionalProperties: ZodOptional<ZodBoolean>;
                        properties: ZodRecord<
                            ZodString,
                            ZodUnion<
                                [
                                    ZodObject<(...), (...), (...), (...), (...)>,
                                    ZodObject<(...), (...), (...), (...), (...)>,
                                ],
                            >,
                        >;
                        required: ZodOptional<ZodArray<ZodString, "many">>;
                        type: ZodLiteral<"object">;
                    } & { strict: ZodOptional<ZodBoolean> },
                    "passthrough",
                    ZodTypeAny,
                    objectOutputType<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        ZodTypeAny,
                        "passthrough",
                    >,
                    objectInputType<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        ZodTypeAny,
                        "passthrough",
                    >,
                >;
            },
            "passthrough",
            ZodTypeAny,
            objectOutputType<
                {
                    description: ZodOptional<ZodString>;
                    name: ZodString;
                    parameters: ZodObject<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        "passthrough",
                        ZodTypeAny,
                        objectOutputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                        objectInputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                    >;
                },
                ZodTypeAny,
                "passthrough",
            >,
            objectInputType<
                {
                    description: ZodOptional<ZodString>;
                    name: ZodString;
                    parameters: ZodObject<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        "passthrough",
                        ZodTypeAny,
                        objectOutputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                        objectInputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                    >;
                },
                ZodTypeAny,
                "passthrough",
            >,
        >;
        type: ZodLiteral<"function">;
    },
    "passthrough",
    ZodTypeAny,
    objectOutputType<
        {
            function: ZodObject<
                {
                    description: ZodOptional<ZodString>;
                    name: ZodString;
                    parameters: ZodObject<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        "passthrough",
                        ZodTypeAny,
                        objectOutputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                        objectInputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                    >;
                },
                "passthrough",
                ZodTypeAny,
                objectOutputType<
                    {
                        description: ZodOptional<ZodString>;
                        name: ZodString;
                        parameters: ZodObject<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            "passthrough",
                            ZodTypeAny,
                            objectOutputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                            objectInputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                        >;
                    },
                    ZodTypeAny,
                    "passthrough",
                >,
                objectInputType<
                    {
                        description: ZodOptional<ZodString>;
                        name: ZodString;
                        parameters: ZodObject<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            "passthrough",
                            ZodTypeAny,
                            objectOutputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                            objectInputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                        >;
                    },
                    ZodTypeAny,
                    "passthrough",
                >,
            >;
            type: ZodLiteral<"function">;
        },
        ZodTypeAny,
        "passthrough",
    >,
    objectInputType<
        {
            function: ZodObject<
                {
                    description: ZodOptional<ZodString>;
                    name: ZodString;
                    parameters: ZodObject<
                        {
                            additionalProperties: ZodOptional<ZodBoolean>;
                            properties: ZodRecord<ZodString, ZodUnion<[(...), (...)]>>;
                            required: ZodOptional<ZodArray<ZodString, "many">>;
                            type: ZodLiteral<"object">;
                        } & { strict: ZodOptional<ZodBoolean> },
                        "passthrough",
                        ZodTypeAny,
                        objectOutputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                        objectInputType<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            ZodTypeAny,
                            "passthrough",
                        >,
                    >;
                },
                "passthrough",
                ZodTypeAny,
                objectOutputType<
                    {
                        description: ZodOptional<ZodString>;
                        name: ZodString;
                        parameters: ZodObject<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            "passthrough",
                            ZodTypeAny,
                            objectOutputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                            objectInputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                        >;
                    },
                    ZodTypeAny,
                    "passthrough",
                >,
                objectInputType<
                    {
                        description: ZodOptional<ZodString>;
                        name: ZodString;
                        parameters: ZodObject<
                            {
                                additionalProperties: ZodOptional<ZodBoolean>;
                                properties: ZodRecord<ZodString, ZodUnion<(...)>>;
                                required: ZodOptional<ZodArray<(...), (...)>>;
                                type: ZodLiteral<"object">;
                            } & { strict: ZodOptional<ZodBoolean> },
                            "passthrough",
                            ZodTypeAny,
                            objectOutputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                            objectInputType<
                                {
                                    additionalProperties: ZodOptional<(...)>;
                                    properties: ZodRecord<(...), (...)>;
                                    required: ZodOptional<(...)>;
                                    type: ZodLiteral<(...)>;
                                } & { strict: ZodOptional<(...)> },
                                ZodTypeAny,
                                "passthrough",
                            >,
                        >;
                    },
                    ZodTypeAny,
                    "passthrough",
                >,
            >;
            type: ZodLiteral<"function">;
        },
        ZodTypeAny,
        "passthrough",
    >,
> = ...

The schema for an OpenAI tool definition

https://platform.openai.com/docs/guides/structured-outputs/supported-schemas

Note: The nested passThrough's are used to allow for extra keys in JSON schema, however, they do not actually allow for extra keys when the zod schema is used for parsing. This is to allow more flexibility for users to define their own tools according