From 2703bbe7961037823768d7bf5c6da28284462146 Mon Sep 17 00:00:00 2001 From: monchewharry Date: Thu, 17 Oct 2024 20:45:34 -0400 Subject: [PATCH 1/2] create jazzy docs --- docs/Classes.html | 325 +++ docs/Classes/OpenAI.html | 828 +++++++ docs/Classes/OpenAI/Configuration.html | 494 ++++ docs/Enums.html | 325 +++ docs/Enums/OpenAIError.html | 332 +++ docs/Extensions.html | 325 +++ docs/Extensions/Model.html | 1516 ++++++++++++ docs/Protocols.html | 325 +++ docs/Protocols/OpenAIProtocol.html | 2181 +++++++++++++++++ docs/Structs.html | 1043 ++++++++ docs/Structs/APIError.html | 489 ++++ docs/Structs/APIErrorResponse.html | 359 +++ docs/Structs/AudioSpeechQuery.html | 620 +++++ .../AudioSpeechResponseFormat.html | 422 ++++ .../AudioSpeechQuery/AudioSpeechVoice.html | 468 ++++ docs/Structs/AudioSpeechQuery/CodingKeys.html | 438 ++++ docs/Structs/AudioSpeechQuery/Speed.html | 386 +++ docs/Structs/AudioSpeechResult.html | 335 +++ docs/Structs/AudioTranscriptionQuery.html | 577 +++++ .../AudioTranscriptionQuery/FileType.html | 542 ++++ .../ResponseFormat.html | 438 ++++ docs/Structs/AudioTranscriptionResult.html | 333 +++ docs/Structs/AudioTranslationQuery.html | 549 +++++ docs/Structs/AudioTranslationResult.html | 333 +++ docs/Structs/ChatQuery.html | 1021 ++++++++ ...ChatCompletionFunctionCallOptionParam.html | 438 ++++ .../ChatQuery/ChatCompletionMessageParam.html | 791 ++++++ .../ChatCompletionAssistantMessageParam.html | 528 ++++ .../ChatCompletionMessageToolCallParam.html | 475 ++++ .../FunctionCall.html | 368 +++ .../CodingKeys.html | 416 ++++ .../ChatCompletionSystemMessageParam.html | 446 ++++ .../ChatCompletionToolMessageParam.html | 473 ++++ .../CodingKeys.html | 390 +++ .../ChatCompletionUserMessageParam.html | 473 ++++ .../Content.html | 548 +++++ .../Content/CodingKeys.html | 366 +++ .../Content/VisionContent.html | 550 +++++ .../ChatCompletionContentPartImageParam.html | 449 ++++ .../CodingKeys.html | 370 +++ .../ImageURL.html | 452 ++++ .../ImageURL/Detail.html | 398 +++ .../ChatCompletionContentPartTextParam.html | 396 +++ .../ChatCompletionMessageParam/Role.html | 414 ++++ .../ChatQuery/ChatCompletionToolParam.html | 442 ++++ .../FunctionDefinition.html | 452 ++++ .../FunctionParameters.html | 637 +++++ .../FunctionParameters/JSONType.html | 496 ++++ .../FunctionParameters/Property.html | 772 ++++++ .../FunctionParameters/Property/Items.html | 666 +++++ .../ChatCompletionToolParam/ToolsType.html | 336 +++ docs/Structs/ChatQuery/CodingKeys.html | 776 ++++++ docs/Structs/ChatQuery/ResponseFormat.html | 386 +++ docs/Structs/ChatQuery/Stop.html | 438 ++++ docs/Structs/ChatResult.html | 577 +++++ docs/Structs/ChatResult/Choice.html | 523 ++++ .../ChatResult/Choice/ChoiceLogprobs.html | 363 +++ .../ChatCompletionTokenLogprob.html | 478 ++++ .../CodingKeys.html | 418 ++++ .../TopLogprob.html | 396 +++ .../Structs/ChatResult/Choice/CodingKeys.html | 414 ++++ .../ChatResult/Choice/FinishReason.html | 440 ++++ docs/Structs/ChatResult/CodingKeys.html | 490 ++++ docs/Structs/ChatResult/CompletionUsage.html | 389 +++ docs/Structs/ChatStreamResult.html | 524 ++++ docs/Structs/ChatStreamResult/Choice.html | 524 ++++ .../ChatStreamResult/Choice/ChoiceDelta.html | 470 ++++ .../ChoiceDelta/ChoiceDeltaToolCall.html | 476 ++++ .../ChoiceDeltaToolCallFunction.html | 397 +++ .../Choice/ChoiceDelta/CodingKeys.html | 390 +++ .../Choice/ChoiceLogprobs.html | 364 +++ .../ChatCompletionTokenLogprob.html | 474 ++++ .../CodingKeys.html | 418 ++++ .../TopLogprob.html | 395 +++ .../ChatStreamResult/Choice/CodingKeys.html | 414 ++++ docs/Structs/ChatStreamResult/CodingKeys.html | 464 ++++ docs/Structs/CompletionsQuery.html | 575 +++++ docs/Structs/CompletionsResult.html | 516 ++++ docs/Structs/CompletionsResult/Choice.html | 386 +++ docs/Structs/CompletionsResult/Usage.html | 386 +++ docs/Structs/EditsQuery.html | 494 ++++ docs/Structs/EditsResult.html | 464 ++++ docs/Structs/EditsResult/Choice.html | 360 +++ docs/Structs/EditsResult/Usage.html | 386 +++ docs/Structs/EmbeddingsQuery.html | 530 ++++ docs/Structs/EmbeddingsQuery/CodingKeys.html | 412 ++++ .../EmbeddingsQuery/EncodingFormat.html | 360 +++ docs/Structs/EmbeddingsQuery/Input.html | 542 ++++ docs/Structs/EmbeddingsResult.html | 465 ++++ docs/Structs/EmbeddingsResult/Embedding.html | 390 +++ docs/Structs/EmbeddingsResult/Usage.html | 360 +++ docs/Structs/ImageEditsQuery.html | 639 +++++ docs/Structs/ImageEditsQuery/CodingKeys.html | 516 ++++ docs/Structs/ImageVariationsQuery.html | 559 +++++ .../ImageVariationsQuery/CodingKeys.html | 464 ++++ docs/Structs/ImagesQuery.html | 701 ++++++ docs/Structs/ImagesQuery/CodingKeys.html | 516 ++++ docs/Structs/ImagesQuery/Quality.html | 360 +++ docs/Structs/ImagesQuery/ResponseFormat.html | 360 +++ docs/Structs/ImagesQuery/Size.html | 438 ++++ docs/Structs/ImagesQuery/Style.html | 360 +++ docs/Structs/ImagesResult.html | 387 +++ docs/Structs/ImagesResult/Image.html | 417 ++++ .../ImagesResult/Image/CodingKeys.html | 388 +++ docs/Structs/ModelQuery.html | 360 +++ docs/Structs/ModelResult.html | 442 ++++ docs/Structs/ModelResult/CodingKeys.html | 412 ++++ docs/Structs/ModelsResult.html | 361 +++ docs/Structs/ModerationsQuery.html | 386 +++ docs/Structs/ModerationsResult.html | 412 ++++ .../Structs/ModerationsResult/Moderation.html | 443 ++++ .../Moderation/Categories.html | 660 +++++ .../Moderation/Categories/CodingKeys.html | 598 +++++ .../Moderation/CategoryScores.html | 660 +++++ .../Moderation/CategoryScores/CodingKeys.html | 598 +++++ docs/Structs/Vector.html | 422 ++++ docs/Typealiases.html | 325 +++ docs/badge.svg | 28 + docs/css/highlight.css | 202 ++ docs/css/jazzy.css | 442 ++++ docs/docsets/.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 325 +++ .../Resources/Documents/Classes/OpenAI.html | 828 +++++++ .../Classes/OpenAI/Configuration.html | 494 ++++ .../Contents/Resources/Documents/Enums.html | 325 +++ .../Documents/Enums/OpenAIError.html | 332 +++ .../Resources/Documents/Extensions.html | 325 +++ .../Resources/Documents/Extensions/Model.html | 1516 ++++++++++++ .../Resources/Documents/Protocols.html | 325 +++ .../Documents/Protocols/OpenAIProtocol.html | 2181 +++++++++++++++++ .../Contents/Resources/Documents/Structs.html | 1043 ++++++++ .../Resources/Documents/Structs/APIError.html | 489 ++++ .../Documents/Structs/APIErrorResponse.html | 359 +++ .../Documents/Structs/AudioSpeechQuery.html | 620 +++++ .../AudioSpeechResponseFormat.html | 422 ++++ .../AudioSpeechQuery/AudioSpeechVoice.html | 468 ++++ .../Structs/AudioSpeechQuery/CodingKeys.html | 438 ++++ .../Structs/AudioSpeechQuery/Speed.html | 386 +++ .../Documents/Structs/AudioSpeechResult.html | 335 +++ .../Structs/AudioTranscriptionQuery.html | 577 +++++ .../AudioTranscriptionQuery/FileType.html | 542 ++++ .../ResponseFormat.html | 438 ++++ .../Structs/AudioTranscriptionResult.html | 333 +++ .../Structs/AudioTranslationQuery.html | 549 +++++ .../Structs/AudioTranslationResult.html | 333 +++ .../Documents/Structs/ChatQuery.html | 1021 ++++++++ ...ChatCompletionFunctionCallOptionParam.html | 438 ++++ .../ChatQuery/ChatCompletionMessageParam.html | 791 ++++++ .../ChatCompletionAssistantMessageParam.html | 528 ++++ .../ChatCompletionMessageToolCallParam.html | 475 ++++ .../FunctionCall.html | 368 +++ .../CodingKeys.html | 416 ++++ .../ChatCompletionSystemMessageParam.html | 446 ++++ .../ChatCompletionToolMessageParam.html | 473 ++++ .../CodingKeys.html | 390 +++ .../ChatCompletionUserMessageParam.html | 473 ++++ .../Content.html | 548 +++++ .../Content/CodingKeys.html | 366 +++ .../Content/VisionContent.html | 550 +++++ .../ChatCompletionContentPartImageParam.html | 449 ++++ .../CodingKeys.html | 370 +++ .../ImageURL.html | 452 ++++ .../ImageURL/Detail.html | 398 +++ .../ChatCompletionContentPartTextParam.html | 396 +++ .../ChatCompletionMessageParam/Role.html | 414 ++++ .../ChatQuery/ChatCompletionToolParam.html | 442 ++++ .../FunctionDefinition.html | 452 ++++ .../FunctionParameters.html | 637 +++++ .../FunctionParameters/JSONType.html | 496 ++++ .../FunctionParameters/Property.html | 772 ++++++ .../FunctionParameters/Property/Items.html | 666 +++++ .../ChatCompletionToolParam/ToolsType.html | 336 +++ .../Structs/ChatQuery/CodingKeys.html | 776 ++++++ .../Structs/ChatQuery/ResponseFormat.html | 386 +++ .../Documents/Structs/ChatQuery/Stop.html | 438 ++++ .../Documents/Structs/ChatResult.html | 577 +++++ .../Documents/Structs/ChatResult/Choice.html | 523 ++++ .../ChatResult/Choice/ChoiceLogprobs.html | 363 +++ .../ChatCompletionTokenLogprob.html | 478 ++++ .../CodingKeys.html | 418 ++++ .../TopLogprob.html | 396 +++ .../Structs/ChatResult/Choice/CodingKeys.html | 414 ++++ .../ChatResult/Choice/FinishReason.html | 440 ++++ .../Structs/ChatResult/CodingKeys.html | 490 ++++ .../Structs/ChatResult/CompletionUsage.html | 389 +++ .../Documents/Structs/ChatStreamResult.html | 524 ++++ .../Structs/ChatStreamResult/Choice.html | 524 ++++ .../ChatStreamResult/Choice/ChoiceDelta.html | 470 ++++ .../ChoiceDelta/ChoiceDeltaToolCall.html | 476 ++++ .../ChoiceDeltaToolCallFunction.html | 397 +++ .../Choice/ChoiceDelta/CodingKeys.html | 390 +++ .../Choice/ChoiceLogprobs.html | 364 +++ .../ChatCompletionTokenLogprob.html | 474 ++++ .../CodingKeys.html | 418 ++++ .../TopLogprob.html | 395 +++ .../ChatStreamResult/Choice/CodingKeys.html | 414 ++++ .../Structs/ChatStreamResult/CodingKeys.html | 464 ++++ .../Documents/Structs/CompletionsQuery.html | 575 +++++ .../Documents/Structs/CompletionsResult.html | 516 ++++ .../Structs/CompletionsResult/Choice.html | 386 +++ .../Structs/CompletionsResult/Usage.html | 386 +++ .../Documents/Structs/EditsQuery.html | 494 ++++ .../Documents/Structs/EditsResult.html | 464 ++++ .../Documents/Structs/EditsResult/Choice.html | 360 +++ .../Documents/Structs/EditsResult/Usage.html | 386 +++ .../Documents/Structs/EmbeddingsQuery.html | 530 ++++ .../Structs/EmbeddingsQuery/CodingKeys.html | 412 ++++ .../EmbeddingsQuery/EncodingFormat.html | 360 +++ .../Structs/EmbeddingsQuery/Input.html | 542 ++++ .../Documents/Structs/EmbeddingsResult.html | 465 ++++ .../Structs/EmbeddingsResult/Embedding.html | 390 +++ .../Structs/EmbeddingsResult/Usage.html | 360 +++ .../Documents/Structs/ImageEditsQuery.html | 639 +++++ .../Structs/ImageEditsQuery/CodingKeys.html | 516 ++++ .../Structs/ImageVariationsQuery.html | 559 +++++ .../ImageVariationsQuery/CodingKeys.html | 464 ++++ .../Documents/Structs/ImagesQuery.html | 701 ++++++ .../Structs/ImagesQuery/CodingKeys.html | 516 ++++ .../Structs/ImagesQuery/Quality.html | 360 +++ .../Structs/ImagesQuery/ResponseFormat.html | 360 +++ .../Documents/Structs/ImagesQuery/Size.html | 438 ++++ .../Documents/Structs/ImagesQuery/Style.html | 360 +++ .../Documents/Structs/ImagesResult.html | 387 +++ .../Documents/Structs/ImagesResult/Image.html | 417 ++++ .../ImagesResult/Image/CodingKeys.html | 388 +++ .../Documents/Structs/ModelQuery.html | 360 +++ .../Documents/Structs/ModelResult.html | 442 ++++ .../Structs/ModelResult/CodingKeys.html | 412 ++++ .../Documents/Structs/ModelsResult.html | 361 +++ .../Documents/Structs/ModerationsQuery.html | 386 +++ .../Documents/Structs/ModerationsResult.html | 412 ++++ .../Structs/ModerationsResult/Moderation.html | 443 ++++ .../Moderation/Categories.html | 660 +++++ .../Moderation/Categories/CodingKeys.html | 598 +++++ .../Moderation/CategoryScores.html | 660 +++++ .../Moderation/CategoryScores/CodingKeys.html | 598 +++++ .../Resources/Documents/Structs/Vector.html | 422 ++++ .../Resources/Documents/Typealiases.html | 325 +++ .../Contents/Resources/Documents/badge.svg | 28 + .../Resources/Documents/css/highlight.css | 202 ++ .../Resources/Documents/css/jazzy.css | 442 ++++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 1280 ++++++++++ .../Contents/Resources/Documents/js/jazzy.js | 74 + .../Resources/Documents/js/jazzy.search.js | 74 + .../Resources/Documents/js/jquery.min.js | 2 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1695 +++++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Resources/Documents/undocumented.json | 6 + .../.docset/Contents/Resources/docSet.dsidx | Bin 0 -> 253952 bytes docs/docsets/.tgz | Bin 0 -> 279182 bytes docs/img/carat.png | Bin 0 -> 274 bytes docs/img/dash.png | Bin 0 -> 1338 bytes docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 1280 ++++++++++ docs/js/jazzy.js | 74 + docs/js/jazzy.search.js | 74 + docs/js/jquery.min.js | 2 + docs/js/lunr.min.js | 6 + docs/js/typeahead.jquery.js | 1695 +++++++++++++ docs/search.json | 1 + docs/undocumented.json | 6 + 265 files changed, 123148 insertions(+) create mode 100644 docs/Classes.html create mode 100644 docs/Classes/OpenAI.html create mode 100644 docs/Classes/OpenAI/Configuration.html create mode 100644 docs/Enums.html create mode 100644 docs/Enums/OpenAIError.html create mode 100644 docs/Extensions.html create mode 100644 docs/Extensions/Model.html create mode 100644 docs/Protocols.html create mode 100644 docs/Protocols/OpenAIProtocol.html create mode 100644 docs/Structs.html create mode 100644 docs/Structs/APIError.html create mode 100644 docs/Structs/APIErrorResponse.html create mode 100644 docs/Structs/AudioSpeechQuery.html create mode 100644 docs/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html create mode 100644 docs/Structs/AudioSpeechQuery/AudioSpeechVoice.html create mode 100644 docs/Structs/AudioSpeechQuery/CodingKeys.html create mode 100644 docs/Structs/AudioSpeechQuery/Speed.html create mode 100644 docs/Structs/AudioSpeechResult.html create mode 100644 docs/Structs/AudioTranscriptionQuery.html create mode 100644 docs/Structs/AudioTranscriptionQuery/FileType.html create mode 100644 docs/Structs/AudioTranscriptionQuery/ResponseFormat.html create mode 100644 docs/Structs/AudioTranscriptionResult.html create mode 100644 docs/Structs/AudioTranslationQuery.html create mode 100644 docs/Structs/AudioTranslationResult.html create mode 100644 docs/Structs/ChatQuery.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionMessageParam/Role.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html create mode 100644 docs/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html create mode 100644 docs/Structs/ChatQuery/CodingKeys.html create mode 100644 docs/Structs/ChatQuery/ResponseFormat.html create mode 100644 docs/Structs/ChatQuery/Stop.html create mode 100644 docs/Structs/ChatResult.html create mode 100644 docs/Structs/ChatResult/Choice.html create mode 100644 docs/Structs/ChatResult/Choice/ChoiceLogprobs.html create mode 100644 docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html create mode 100644 docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html create mode 100644 docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html create mode 100644 docs/Structs/ChatResult/Choice/CodingKeys.html create mode 100644 docs/Structs/ChatResult/Choice/FinishReason.html create mode 100644 docs/Structs/ChatResult/CodingKeys.html create mode 100644 docs/Structs/ChatResult/CompletionUsage.html create mode 100644 docs/Structs/ChatStreamResult.html create mode 100644 docs/Structs/ChatStreamResult/Choice.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceDelta.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html create mode 100644 docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html create mode 100644 docs/Structs/ChatStreamResult/Choice/CodingKeys.html create mode 100644 docs/Structs/ChatStreamResult/CodingKeys.html create mode 100644 docs/Structs/CompletionsQuery.html create mode 100644 docs/Structs/CompletionsResult.html create mode 100644 docs/Structs/CompletionsResult/Choice.html create mode 100644 docs/Structs/CompletionsResult/Usage.html create mode 100644 docs/Structs/EditsQuery.html create mode 100644 docs/Structs/EditsResult.html create mode 100644 docs/Structs/EditsResult/Choice.html create mode 100644 docs/Structs/EditsResult/Usage.html create mode 100644 docs/Structs/EmbeddingsQuery.html create mode 100644 docs/Structs/EmbeddingsQuery/CodingKeys.html create mode 100644 docs/Structs/EmbeddingsQuery/EncodingFormat.html create mode 100644 docs/Structs/EmbeddingsQuery/Input.html create mode 100644 docs/Structs/EmbeddingsResult.html create mode 100644 docs/Structs/EmbeddingsResult/Embedding.html create mode 100644 docs/Structs/EmbeddingsResult/Usage.html create mode 100644 docs/Structs/ImageEditsQuery.html create mode 100644 docs/Structs/ImageEditsQuery/CodingKeys.html create mode 100644 docs/Structs/ImageVariationsQuery.html create mode 100644 docs/Structs/ImageVariationsQuery/CodingKeys.html create mode 100644 docs/Structs/ImagesQuery.html create mode 100644 docs/Structs/ImagesQuery/CodingKeys.html create mode 100644 docs/Structs/ImagesQuery/Quality.html create mode 100644 docs/Structs/ImagesQuery/ResponseFormat.html create mode 100644 docs/Structs/ImagesQuery/Size.html create mode 100644 docs/Structs/ImagesQuery/Style.html create mode 100644 docs/Structs/ImagesResult.html create mode 100644 docs/Structs/ImagesResult/Image.html create mode 100644 docs/Structs/ImagesResult/Image/CodingKeys.html create mode 100644 docs/Structs/ModelQuery.html create mode 100644 docs/Structs/ModelResult.html create mode 100644 docs/Structs/ModelResult/CodingKeys.html create mode 100644 docs/Structs/ModelsResult.html create mode 100644 docs/Structs/ModerationsQuery.html create mode 100644 docs/Structs/ModerationsResult.html create mode 100644 docs/Structs/ModerationsResult/Moderation.html create mode 100644 docs/Structs/ModerationsResult/Moderation/Categories.html create mode 100644 docs/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html create mode 100644 docs/Structs/ModerationsResult/Moderation/CategoryScores.html create mode 100644 docs/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html create mode 100644 docs/Structs/Vector.html create mode 100644 docs/Typealiases.html create mode 100644 docs/badge.svg create mode 100644 docs/css/highlight.css create mode 100644 docs/css/jazzy.css create mode 100644 docs/docsets/.docset/Contents/Info.plist create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI/Configuration.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Enums/OpenAIError.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Extensions/Model.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Protocols/OpenAIProtocol.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/APIError.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/APIErrorResponse.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechVoice.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/Speed.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/FileType.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/ResponseFormat.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/Role.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ResponseFormat.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/Stop.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/FinishReason.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CompletionUsage.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Choice.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Usage.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Choice.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Usage.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/EncodingFormat.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/Input.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Embedding.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Usage.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Quality.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/ResponseFormat.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Size.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Style.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelsResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsQuery.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Structs/Vector.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Typealiases.html create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/badge.svg create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/docsets/.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/docsets/.docset/Contents/Resources/Documents/img/dash.png create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/index.html create mode 100755 docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/search.json create mode 100644 docs/docsets/.docset/Contents/Resources/Documents/undocumented.json create mode 100644 docs/docsets/.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/docsets/.tgz create mode 100755 docs/img/carat.png create mode 100755 docs/img/dash.png create mode 100644 docs/img/spinner.gif create mode 100644 docs/index.html create mode 100755 docs/js/jazzy.js create mode 100644 docs/js/jazzy.search.js create mode 100644 docs/js/jquery.min.js create mode 100644 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js create mode 100644 docs/search.json create mode 100644 docs/undocumented.json diff --git a/docs/Classes.html b/docs/Classes.html new file mode 100644 index 00000000..2831f986 --- /dev/null +++ b/docs/Classes.html @@ -0,0 +1,325 @@ + + + + Classes Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Classes/OpenAI.html b/docs/Classes/OpenAI.html new file mode 100644 index 00000000..5404d16c --- /dev/null +++ b/docs/Classes/OpenAI.html @@ -0,0 +1,828 @@ + + + + OpenAI Class Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAI

+
+
+ +
final public class OpenAI : OpenAIProtocol
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Classes/OpenAI/Configuration.html b/docs/Classes/OpenAI/Configuration.html new file mode 100644 index 00000000..e07e9912 --- /dev/null +++ b/docs/Classes/OpenAI/Configuration.html @@ -0,0 +1,494 @@ + + + + Configuration Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Configuration

+
+
+ +
public struct Configuration
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    + +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let organizationIdentifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + host + +
    +
    +
    +
    +
    +
    +

    API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let host: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + port + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let port: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scheme + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let scheme: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeoutInterval + +
    +
    +
    +
    +
    +
    +

    Default request timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let timeoutInterval: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(token: String, organizationIdentifier: String? = nil, host: String = "api.openai.com", port: Int = 443, scheme: String = "https", timeoutInterval: TimeInterval = 60.0)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 00000000..4aef1836 --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,325 @@ + + + + Enumerations Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + OpenAIError + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum OpenAIError : Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums/OpenAIError.html b/docs/Enums/OpenAIError.html new file mode 100644 index 00000000..682f456c --- /dev/null +++ b/docs/Enums/OpenAIError.html @@ -0,0 +1,332 @@ + + + + OpenAIError Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAIError

+
+
+ +
public enum OpenAIError : Error
+ +
+
+ +
+
+
+
    +
  • +
    + + + + emptyData + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case emptyData
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 00000000..56666ea1 --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,325 @@ + + + + Extensions Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Model + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Model
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Extensions/Model.html b/docs/Extensions/Model.html new file mode 100644 index 00000000..e1d188ed --- /dev/null +++ b/docs/Extensions/Model.html @@ -0,0 +1,1516 @@ + + + + Model Extension Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Model

+
+
+ +
public extension Model
+ +
+
+ +
+
+
+
    +
  • +
    + + + + gpt4_o + +
    +
    +
    +
    +
    +
    +

    gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_o: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_o_mini + +
    +
    +
    +
    +
    +
    +

    gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_o_mini: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_turbo + +
    +
    +
    +
    +
    +
    +

    gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_turbo: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_turbo_preview + +
    +
    +
    +
    +
    +
    +

    gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_turbo_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_vision_preview + +
    +
    +
    +
    +
    +
    +

    gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_vision_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0125_preview + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_0125_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_1106_preview + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_1106_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4 + +
    +
    +
    +
    +
    +
    +

    Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0314 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_0314: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k + +
    +
    +
    +
    +
    +
    +

    Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_32k: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_32k_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k_0314 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_32k_0314: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo + +
    +
    +
    +
    +
    +
    +

    Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0125 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_0125: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_1106 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_1106: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0301 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_0301: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_16k + +
    +
    +
    +
    +
    +
    +

    Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_16k: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_16k_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_16k_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_003 + +
    +
    +
    +
    +
    +
    +

    Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_003: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_002 + +
    +
    +
    +
    +
    +
    +

    Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_002: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textCurie + +
    +
    +
    +
    +
    +
    +

    Very capable, faster and lower cost than Davinci.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textCurie: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textBabbage + +
    +
    +
    +
    +
    +
    +

    Capable of straightforward tasks, very fast, and lower cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textBabbage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textAda + +
    +
    +
    +
    +
    +
    +

    Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_001 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + codeDavinciEdit_001 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let codeDavinciEdit_001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tts_1 + +
    +
    +
    +
    +
    +
    +

    The latest text to speech model, optimized for speed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let tts_1: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tts_1_hd + +
    +
    +
    +
    +
    +
    +

    The latest text to speech model, optimized for quality.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let tts_1_hd: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + whisper_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let whisper_1: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + dall_e_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let dall_e_2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + dall_e_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let dall_e_3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + davinci + +
    +
    +
    +
    +
    +
    +

    Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let davinci: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + curie + +
    +
    +
    +
    +
    +
    +

    Very capable, but faster and lower cost than Davinci.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let curie: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + babbage + +
    +
    +
    +
    +
    +
    +

    Capable of straightforward tasks, very fast, and lower cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let babbage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ada + +
    +
    +
    +
    +
    +
    +

    Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let ada: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbeddingAda + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbeddingAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textSearchAda + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textSearchBabbageDoc + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchBabbageDoc: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchBabbageQuery001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbedding3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbedding3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbedding3Large + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbedding3Large: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textModerationStable + +
    +
    +
    +
    +
    +
    +

    Almost as capable as the latest model, but slightly older.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textModerationStable: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textModerationLatest + +
    +
    +
    +
    +
    +
    +

    Most capable moderation model. Accuracy will be slightly higher than the stable model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textModerationLatest: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let moderation: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Protocols.html b/docs/Protocols.html new file mode 100644 index 00000000..4cfb4346 --- /dev/null +++ b/docs/Protocols.html @@ -0,0 +1,325 @@ + + + + Protocols Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • +
    + + + + OpenAIProtocol + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol OpenAIProtocol
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Protocols/OpenAIProtocol.html b/docs/Protocols/OpenAIProtocol.html new file mode 100644 index 00000000..eeb3620a --- /dev/null +++ b/docs/Protocols/OpenAIProtocol.html @@ -0,0 +1,2181 @@ + + + + OpenAIProtocol Protocol Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAIProtocol

+
+
+ +
public protocol OpenAIProtocol
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

    + +

    Example:

    +
    let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?")
    +openAI.completions(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(query: CompletionsQuery, completion: @escaping (Result<CompletionsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A CompletionsQuery object containing the input parameters for the API request. This includes the prompt, model, temperature, max tokens, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<CompletionsResult, Error>, will contain either the CompletionsResult object with the generated completions, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

    + +

    Example:

    +
    let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?")
    +openAI.completions(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(query: CompletionsQuery, onResult: @escaping (Result<CompletionsResult, Error>) -> Void, completion: ((Error?) -> Void)?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + query + + +
    +

    A CompletionsQuery object containing the input parameters for the API request. This includes the prompt, model, temperature, max tokens, and other settings.

    +
    +
    + + onResult + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<CompletionsResult, Error>, will contain either the CompletionsResult object with the generated completions, or an error if the request failed.

    +
    +
    + + completion + + +
    +

    A closure that is being called when all chunks are delivered or uncrecoverable error occured

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesQuery(prompt: "White cat with heterochromia sitting on the kitchen table", n: 1, size: ImagesQuery.Size._1024)
    +openAI.images(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(query: ImagesQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesQuery object containing the input parameters for the API request. This includes the query parameters such as the text prompt, image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesEditQuery(image: "@whitecat.png", prompt: "White cat with heterochromia sitting on the kitchen table with a bowl of food", n: 1, size: ImagesQuery.Size._1024)
    +openAI.imageEdits(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(query: ImageEditsQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesEditQuery object containing the input parameters for the API request. This includes the query parameters such as the image to be edited, an image to be used a mask if applicable, text prompt, image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesVariationQuery(image: "@whitecat.png", n: 1, size: ImagesQuery.Size._1024)
    +openAI.imageVariations(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(query: ImageVariationsQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesVariationQuery object containing the input parameters for the API request. This includes the query parameters such as the image to use as a basis for the variation(s), image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

    + +

    Example:

    +
    let query = EmbeddingsQuery(model: .textSearchBabbageDoc, input: "The food was delicious and the waiter...")
    +openAI.embeddings(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(query: EmbeddingsQuery, completion: @escaping (Result<EmbeddingsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An EmbeddingsQuery object containing the input parameters for the API request. This includes the list of text prompts to be converted into embeddings, the model to be used, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<EmbeddingsResult, Error>, will contain either the EmbeddingsResult object with the generated embeddings, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

    + +

    Example:

    +
    let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: "user", content: "who are you")])
    +openAI.chats(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(query: ChatQuery, completion: @escaping (Result<ChatResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ChatQuery object containing the input parameters for the API request. This includes the lists of message objects for the conversation, the model to be used, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ChatResult, Error>, will contain either the ChatResult object with the model’s response to the conversation, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

    + +

    Example:

    +
    let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: "user", content: "who are you")])
    +openAI.chats(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(query: ChatQuery, onResult: @escaping (Result<ChatStreamResult, Error>) -> Void, completion: ((Error?) -> Void)?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + query + + +
    +

    A ChatQuery object containing the input parameters for the API request. This includes the lists of message objects for the conversation, the model to be used, and other settings.

    +
    +
    + + onResult + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ChatStreamResult, Error>, will contain either the ChatStreamResult object with the model’s response to the conversation, or an error if the request failed.

    +
    +
    + + completion + + +
    +

    A closure that is being called when all chunks are delivered or uncrecoverable error occured

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

    + +

    Example:

    +
    let query = EditsQuery(model: .gpt4, input: "What day of the wek is it?", instruction: "Fix the spelling mistakes")
    +openAI.edits(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(query: EditsQuery, completion: @escaping (Result<EditsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An EditsQuery object containing the input parameters for the API request. This includes the input to be edited, the instruction specifying how it should be edited, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<EditsResult, Error>, will contain either the EditsResult object with the model’s response to the queried edit, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

    + +

    Example:

    +
    let query = ModelQuery(model: .gpt3_5Turbo)
    +openAI.model(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(query: ModelQuery, completion: @escaping (Result<ModelResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ModelQuery object containing the input parameters for the API request, which is only the model to be queried.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModelResult, Error>, will contain either the ModelResult object with more information about the model, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + models(completion:) + +
    +
    +
    +
    +
    +
    +

    This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

    + +

    Example:

    +
    openAI.models() { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models(completion: @escaping (Result<ModelsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModelsResult, Error>, will contain either the ModelsResult object with the list of model types, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

    + +

    Example:

    +
    let query = ModerationsQuery(input: "I want to kill them.")
    +openAI.moderations(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 13.0, *)
    +func moderations(query: ModerationsQuery, completion: @escaping (Result<ModerationsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ModerationsQuery object containing the input parameters for the API request. This includes the input text and optionally the model to be used.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModerationsResult, Error>, will contain either the ModerationsResult object with the list of category results, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

    + +

    Example:

    +
    let query = AudioSpeechQuery(model: .tts_1, input: "Hello, world!", voice: .alloy, responseFormat: .mp3, speed: 1.0)
    +openAI.audioCreateSpeech(query: query) { result in
    +   // Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(query: AudioSpeechQuery, completion: @escaping (Result<AudioSpeechResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An AudioSpeechQuery object containing the parameters for the API request. This includes the Text-to-Speech model to be used, input text, voice to be used for generating the audio, the desired audio format, and the speed of the generated audio.

    +
    +
    + + completion + + +
    +

    A closure which receives the result. The closure’s parameter, Result<AudioSpeechResult, Error>, will either contain the AudioSpeechResult object with the audio data or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(query: AudioTranscriptionQuery, completion: @escaping (Result<AudioTranscriptionResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    The AudioTranscriptionQuery instance, containing the information required for the transcription request.

    +
    +
    + + completion + + +
    +

    The completion handler to be executed upon completion of the transcription request. + Returns a Result of type AudioTranscriptionResult if successful, or an Error if an error occurs. +*

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(query: AudioTranslationQuery, completion: @escaping (Result<AudioTranslationResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    The AudioTranslationQuery instance, containing the information required for the translation request.

    +
    +
    + + completion + + +
    +

    The completion handler to be executed upon completion of the translation request. + Returns a Result of type AudioTranslationResult if successful, or an Error if an error occurs. +*

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + completions(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(
    +    query: CompletionsQuery
    +) async throws -> CompletionsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(
    +    query: CompletionsQuery
    +) -> AsyncThrowingStream<CompletionsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + images(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(
    +    query: ImagesQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageEdits(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(
    +    query: ImageEditsQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageVariations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(
    +    query: ImageVariationsQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embeddings(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(
    +    query: EmbeddingsQuery
    +) async throws -> EmbeddingsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chats(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(
    +    query: ChatQuery
    +) async throws -> ChatResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(
    +    query: ChatQuery
    +) -> AsyncThrowingStream<ChatStreamResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + edits(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(
    +    query: EditsQuery
    +) async throws -> EditsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(
    +    query: ModelQuery
    +) async throws -> ModelResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + models() + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models() async throws -> ModelsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moderations(
    +    query: ModerationsQuery
    +) async throws -> ModerationsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioCreateSpeech(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(
    +    query: AudioSpeechQuery
    +) async throws -> AudioSpeechResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranscriptions(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(
    +    query: AudioTranscriptionQuery
    +) async throws -> AudioTranscriptionResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranslations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(
    +    query: AudioTranslationQuery
    +) async throws -> AudioTranslationResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completions(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(query: CompletionsQuery) -> AnyPublisher<CompletionsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(query: CompletionsQuery) -> AnyPublisher<Result<CompletionsResult, Error>, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + images(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(query: ImagesQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageEdits(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(query: ImageEditsQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageVariations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(query: ImageVariationsQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embeddings(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(query: EmbeddingsQuery) -> AnyPublisher<EmbeddingsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chats(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(query: ChatQuery) -> AnyPublisher<ChatResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(query: ChatQuery) -> AnyPublisher<Result<ChatStreamResult, Error>, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + edits(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(query: EditsQuery) -> AnyPublisher<EditsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(query: ModelQuery) -> AnyPublisher<ModelResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + models() + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models() -> AnyPublisher<ModelsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moderations(query: ModerationsQuery) -> AnyPublisher<ModerationsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioCreateSpeech(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(query: AudioSpeechQuery) -> AnyPublisher<AudioSpeechResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranscriptions(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(query: AudioTranscriptionQuery) -> AnyPublisher<AudioTranscriptionResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranslations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(query: AudioTranslationQuery) -> AnyPublisher<AudioTranslationResult, Error>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs.html b/docs/Structs.html new file mode 100644 index 00000000..047a7c8d --- /dev/null +++ b/docs/Structs.html @@ -0,0 +1,1043 @@ + + + + Structures Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + APIError + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct APIError : Error, Decodable, Equatable
    +
    extension APIError: LocalizedError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APIErrorResponse + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct APIErrorResponse : Error, Decodable, Equatable
    +
    extension APIErrorResponse: LocalizedError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioSpeechQuery + +
    +
    +
    +
    +
    +
    +

    Generates audio from the input text. +Learn more: OpenAI Speech – Documentation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioSpeechQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioSpeechResult + +
    +
    +
    +
    +
    +
    +

    The audio file content. +Learn more: OpenAI Speech – Documentation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioSpeechResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranscriptionQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranscriptionResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioTranslationQuery + +
    +
    +
    +
    +
    +
    +

    Translates audio into English.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranslationQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranslationResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatQuery + +
    +
    +
    +
    +
    +
    +

    Creates a model response for the given chat conversation +https://platform.openai.com/docs/guides/text-generation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatQuery : Equatable, Codable, Streamable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatStreamResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatStreamResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionsQuery : Codable, Streamable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EmbeddingsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EmbeddingsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EmbeddingsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EmbeddingsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageEditsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageEditsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageVariationsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageVariationsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImagesQuery + +
    +
    +
    +
    +
    +
    +

    Given a prompt and/or an input image, the model will generate a new image. +https://platform.openai.com/docs/guides/images

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImagesQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImagesResult + +
    +
    +
    +
    +
    +
    +

    Returns a list of image objects.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImagesResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelQuery + +
    +
    +
    +
    +
    +
    +

    Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelQuery : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelResult + +
    +
    +
    +
    +
    +
    +

    The model object matching the specified ID.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelsResult + +
    +
    +
    +
    +
    +
    +

    A list of model objects.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModerationsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModerationsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModerationsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModerationsResult : Codable, Equatable
    +
    extension ModerationsResult: Identifiable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Vector + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Vector
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/APIError.html b/docs/Structs/APIError.html new file mode 100644 index 00000000..2ddf50e6 --- /dev/null +++ b/docs/Structs/APIError.html @@ -0,0 +1,489 @@ + + + + APIError Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

APIError

+
+
+ +
public struct APIError : Error, Decodable, Equatable
+
extension APIError: LocalizedError
+ +
+
+ +
+
+
+
    +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let message: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + param + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let param: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + code + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let code: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(message: String, type: String, param: String?, code: String?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(from:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(from decoder: Decoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorDescription + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorDescription: String? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/APIErrorResponse.html b/docs/Structs/APIErrorResponse.html new file mode 100644 index 00000000..9b5a0389 --- /dev/null +++ b/docs/Structs/APIErrorResponse.html @@ -0,0 +1,359 @@ + + + + APIErrorResponse Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

APIErrorResponse

+
+
+ +
public struct APIErrorResponse : Error, Decodable, Equatable
+
extension APIErrorResponse: LocalizedError
+ +
+
+ +
+
+
+
    +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let error: APIError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorDescription + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorDescription: String? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechQuery.html b/docs/Structs/AudioSpeechQuery.html new file mode 100644 index 00000000..b63839da --- /dev/null +++ b/docs/Structs/AudioSpeechQuery.html @@ -0,0 +1,620 @@ + + + + AudioSpeechQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechQuery

+
+
+ +
public struct AudioSpeechQuery : Codable
+ +
+
+

Generates audio from the input text. +Learn more: OpenAI Speech – Documentation

+ +
+
+
+
    +
  • +
    + + + + AudioSpeechVoice + +
    +
    +
    +
    +
    +
    +

    Encapsulates the voices available for audio generation.

    + +

    To get aquinted with each of the voices and listen to the samples visit: +OpenAI Text-to-Speech – Voice Options

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum AudioSpeechVoice : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Encapsulates the response formats available for audio data.

    + +

    Formats:

    + +
      +
    • mp3
    • +
    • opus
    • +
    • aac
    • +
    • flac
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum AudioSpeechResponseFormat : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    The text to generate audio for. The maximum length is 4096 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    One of the available TTS models: tts-1 or tts-1-hd

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + voice + +
    +
    +
    +
    +
    +
    +

    The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide. +https://platform.openai.com/docs/guides/text-to-speech/voice-options

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let voice: AudioSpeechVoice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format to audio in. Supported formats are mp3, opus, aac, and flac. +Defaults to mp3

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: AudioSpeechResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + speed + +
    +
    +
    +
    +
    +
    +

    The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let speed: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, input: String, voice: AudioSpeechVoice, responseFormat: AudioSpeechResponseFormat = .mp3, speed: Double?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Speed + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    enum Speed : Double
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func normalizeSpeechSpeed(_ inputSpeed: Double?) -> String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html b/docs/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html new file mode 100644 index 00000000..b68d2557 --- /dev/null +++ b/docs/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html @@ -0,0 +1,422 @@ + + + + AudioSpeechResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechResponseFormat

+
+
+ +
public enum AudioSpeechResponseFormat : String, Codable, CaseIterable
+ +
+
+

Encapsulates the response formats available for audio data.

+ +

Formats:

+ +
    +
  • mp3
  • +
  • opus
  • +
  • aac
  • +
  • flac
  • +
+ +
+
+
+
    +
  • +
    + + + + mp3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp3
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case opus
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aac
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flac
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechQuery/AudioSpeechVoice.html b/docs/Structs/AudioSpeechQuery/AudioSpeechVoice.html new file mode 100644 index 00000000..2cdea3a2 --- /dev/null +++ b/docs/Structs/AudioSpeechQuery/AudioSpeechVoice.html @@ -0,0 +1,468 @@ + + + + AudioSpeechVoice Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechVoice

+
+
+ +
public enum AudioSpeechVoice : String, Codable, CaseIterable
+ +
+
+

Encapsulates the voices available for audio generation.

+ +

To get aquinted with each of the voices and listen to the samples visit: +OpenAI Text-to-Speech – Voice Options

+ +
+
+
+
    +
  • +
    + + + + alloy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case alloy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + echo + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case echo
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fable + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onyx + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onyx
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + nova + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case nova
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shimmer + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shimmer
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechQuery/CodingKeys.html b/docs/Structs/AudioSpeechQuery/CodingKeys.html new file mode 100644 index 00000000..88e7eaf0 --- /dev/null +++ b/docs/Structs/AudioSpeechQuery/CodingKeys.html @@ -0,0 +1,438 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + voice + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case voice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + speed + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case speed
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechQuery/Speed.html b/docs/Structs/AudioSpeechQuery/Speed.html new file mode 100644 index 00000000..37d4ed0c --- /dev/null +++ b/docs/Structs/AudioSpeechQuery/Speed.html @@ -0,0 +1,386 @@ + + + + Speed Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Speed

+
+
+ +
enum Speed : Double
+ +
+
+ +
+
+
+
    +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal = 1.0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + max + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case max = 4.0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + min + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case min = 0.25
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioSpeechResult.html b/docs/Structs/AudioSpeechResult.html new file mode 100644 index 00000000..1daa0273 --- /dev/null +++ b/docs/Structs/AudioSpeechResult.html @@ -0,0 +1,335 @@ + + + + AudioSpeechResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechResult

+
+
+ +
public struct AudioSpeechResult : Codable, Equatable
+ +
+
+

The audio file content. +Learn more: OpenAI Speech – Documentation

+ +
+
+
+
    +
  • +
    + + + + audio + +
    +
    +
    +
    +
    +
    +

    Audio data for one of the following formats :mp3, opus, aac, flac

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let audio: Data
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranscriptionQuery.html b/docs/Structs/AudioTranscriptionQuery.html new file mode 100644 index 00000000..f96d291b --- /dev/null +++ b/docs/Structs/AudioTranscriptionQuery.html @@ -0,0 +1,577 @@ + + + + AudioTranscriptionQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranscriptionQuery

+
+
+ +
public struct AudioTranscriptionQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + file + +
    +
    +
    +
    +
    +
    +

    The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let file: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileType: `Self`.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. Only whisper-1 is currently available.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. +Defaults to json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit. +Defaults to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + language + +
    +
    +
    +
    +
    +
    +

    The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency. +https://platform.openai.com/docs/guides/speech-to-text/prompting

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let language: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(file: Data, fileType: `Self`.FileType, model: Model, prompt: String? = nil, temperature: Double? = nil, language: String? = nil, responseFormat: `Self`.ResponseFormat? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FileType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FileType : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranscriptionQuery/FileType.html b/docs/Structs/AudioTranscriptionQuery/FileType.html new file mode 100644 index 00000000..6ed68c6f --- /dev/null +++ b/docs/Structs/AudioTranscriptionQuery/FileType.html @@ -0,0 +1,542 @@ + + + + FileType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FileType

+
+
+ +
public enum FileType : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + flac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flac
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mp3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp3
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mpga + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mpga
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mp4 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp4
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + m4a + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case m4a
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mpeg + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mpeg
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ogg + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ogg
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wav + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wav
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + webm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case webm
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranscriptionQuery/ResponseFormat.html b/docs/Structs/AudioTranscriptionQuery/ResponseFormat.html new file mode 100644 index 00000000..9d2100c0 --- /dev/null +++ b/docs/Structs/AudioTranscriptionQuery/ResponseFormat.html @@ -0,0 +1,438 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case json
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case text
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verboseJson + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case verboseJson = "verbose_json"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + srt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case srt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vtt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vtt
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranscriptionResult.html b/docs/Structs/AudioTranscriptionResult.html new file mode 100644 index 00000000..5477b0e7 --- /dev/null +++ b/docs/Structs/AudioTranscriptionResult.html @@ -0,0 +1,333 @@ + + + + AudioTranscriptionResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranscriptionResult

+
+
+ +
public struct AudioTranscriptionResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The transcribed text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranslationQuery.html b/docs/Structs/AudioTranslationQuery.html new file mode 100644 index 00000000..bc412efa --- /dev/null +++ b/docs/Structs/AudioTranslationQuery.html @@ -0,0 +1,549 @@ + + + + AudioTranslationQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranslationQuery

+
+
+ +
public struct AudioTranslationQuery : Codable
+ +
+
+

Translates audio into English.

+ +
+
+
+
    +
  • +
    + + + + FileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias FileType = AudioTranscriptionQuery.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = AudioTranscriptionQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + file + +
    +
    +
    +
    +
    +
    +

    The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let file: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileType: `Self`.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. Only whisper-1 is currently available.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. +Defaults to json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English. +https://platform.openai.com/docs/guides/speech-to-text/prompting

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit. +Defaults to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(file: Data, fileType: `Self`.FileType, model: Model, prompt: String? = nil, temperature: Double? = nil, responseFormat: `Self`.ResponseFormat? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/AudioTranslationResult.html b/docs/Structs/AudioTranslationResult.html new file mode 100644 index 00000000..d64aa14a --- /dev/null +++ b/docs/Structs/AudioTranslationResult.html @@ -0,0 +1,333 @@ + + + + AudioTranslationResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranslationResult

+
+
+ +
public struct AudioTranslationResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The translated text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery.html b/docs/Structs/ChatQuery.html new file mode 100644 index 00000000..d48d47c4 --- /dev/null +++ b/docs/Structs/ChatQuery.html @@ -0,0 +1,1021 @@ + + + + ChatQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatQuery

+
+
+ +
public struct ChatQuery : Equatable, Codable, Streamable
+ +
+
+

Creates a model response for the given chat conversation +https://platform.openai.com/docs/guides/text-generation

+ +
+
+
+
    +
  • +
    + + + + messages + +
    +
    +
    +
    +
    +
    +

    A list of messages comprising the conversation so far

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let messages: [`Self`.ChatCompletionMessageParam]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API. +https://platform.openai.com/docs/models/model-endpoint-compatibility

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim. +Defaults to 0 +https://platform.openai.com/docs/guides/text-generation/parameter-details

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let frequencyPenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logitBias + +
    +
    +
    +
    +
    +
    +

    Modify the likelihood of specified tokens appearing in the completion. +Accepts a JSON object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. +Defaults to null

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logitBias: [String : Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model. +Defaults to false

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: Bool?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    +

    The maximum number of tokens to generate in the completion. +The total length of input tokens and generated tokens is limited by the model’s context length. +https://platform.openai.com/tokenizer

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxTokens: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics. +https://platform.openai.com/docs/guides/text-generation/parameter-details

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let presencePenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106. +Setting to { “type”: “json_object” } enables JSON mode, which guarantees the message the model generates is valid JSON. +Important: when using JSON mode, you must also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly “stuck” request. Also note that the message content may be partially cut off if finish_reason=“length”, which indicates the generation exceeded max_tokens or the conversation exceeded the max context length.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + seed + +
    +
    +
    +
    +
    +
    +

    This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let seed: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    +

    Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence. +Defaults to null

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let stop: Stop?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. +We generally recommend altering this or top_p but not both. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolChoice + +
    +
    +
    +
    +
    +
    +

    Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function. +none is the default when no functions are present. auto is the default if functions are present

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolChoice: `Self`.ChatCompletionFunctionCallOptionParam?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tools + +
    +
    +
    +
    +
    +
    +

    A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let tools: [`Self`.ChatCompletionToolParam]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. +We generally recommend altering this or temperature but not both. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stream + +
    +
    +
    +
    +
    +
    +

    If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message. +https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var stream: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    messages: [Self.ChatCompletionMessageParam],
    +    model: Model,
    +    frequencyPenalty: Double? = nil,
    +    logitBias: [String : Int]? = nil,
    +    logprobs: Bool? = nil,
    +    maxTokens: Int? = nil,
    +    n: Int? = nil,
    +    presencePenalty: Double? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    seed: Int? = nil,
    +    stop: Self.Stop? = nil,
    +    temperature: Double? = nil,
    +    toolChoice: Self.ChatCompletionFunctionCallOptionParam? = nil,
    +    tools: [Self.ChatCompletionToolParam]? = nil,
    +    topLogprobs: Int? = nil,
    +    topP: Double? = nil,
    +    user: String? = nil,
    +    stream: Bool = false
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatCompletionMessageParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Stop + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Stop : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatCompletionFunctionCallOptionParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionToolParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html b/docs/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html new file mode 100644 index 00000000..14274779 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html @@ -0,0 +1,438 @@ + + + + ChatCompletionFunctionCallOptionParam Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionFunctionCallOptionParam

+
+
+ +
public enum ChatCompletionFunctionCallOptionParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case function(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(function: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam.html new file mode 100644 index 00000000..f6323aa5 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam.html @@ -0,0 +1,791 @@ + + + + ChatCompletionMessageParam Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionMessageParam

+
+
+ +
public enum ChatCompletionMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html new file mode 100644 index 00000000..20a6e7df --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html @@ -0,0 +1,528 @@ + + + + ChatCompletionAssistantMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionAssistantMessageParam

+
+
+ +
public struct ChatCompletionAssistantMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    / The role of the messages author, in this case assistant.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the assistant message. Required unless tool_calls is specified.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    +

    The tool calls generated by the model, such as function calls.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCalls: [`Self`.ChatCompletionMessageToolCallParam]?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String? = nil,
    +    name: String? = nil,
    +    toolCalls: [Self.ChatCompletionMessageToolCallParam]? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionMessageToolCallParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html new file mode 100644 index 00000000..4c08eaf2 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html @@ -0,0 +1,475 @@ + + + + ChatCompletionMessageToolCallParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionMessageToolCallParam

+
+
+ +
public struct ChatCompletionMessageToolCallParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ToolsType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ToolsType = ChatQuery.ChatCompletionToolParam.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The ID of the tool call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    +

    The function that the model called.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.FunctionCall
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the tool. Currently, only function is supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    id: String,
    +    function:  Self.FunctionCall
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FunctionCall + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FunctionCall : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html new file mode 100644 index 00000000..8a50f6cc --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html @@ -0,0 +1,368 @@ + + + + FunctionCall Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionCall

+
+
+ +
public struct FunctionCall : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the function to call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html new file mode 100644 index 00000000..a451143d --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html @@ -0,0 +1,416 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case name
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html new file mode 100644 index 00000000..4dd31f2c --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html @@ -0,0 +1,446 @@ + + + + ChatCompletionSystemMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionSystemMessageParam

+
+
+ +
public struct ChatCompletionSystemMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the system message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name for the participant. Provides the model information to differentiate between participants of the same role.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(content:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html new file mode 100644 index 00000000..87fcde21 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html @@ -0,0 +1,473 @@ + + + + ChatCompletionToolMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionToolMessageParam

+
+
+ +
public struct ChatCompletionToolMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the tool message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case tool.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCallId + +
    +
    +
    +
    +
    +
    +

    Tool call that this message is responding to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCallId: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String,
    +    toolCallId: String
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html new file mode 100644 index 00000000..21ab5d41 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html @@ -0,0 +1,390 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCallId + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCallId = "tool_call_id"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html new file mode 100644 index 00000000..efc3ba92 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html @@ -0,0 +1,473 @@ + + + + ChatCompletionUserMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionUserMessageParam

+
+
+ +
public struct ChatCompletionUserMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the user message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: Content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case user.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name for the participant. Provides the model information to differentiate between participants of the same role.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(content:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: Content,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Content + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Content : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html new file mode 100644 index 00000000..9a7eff8e --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html @@ -0,0 +1,548 @@ + + + + Content Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Content

+
+
+ +
public enum Content : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vision(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vision([VisionContent])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var string: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(vision:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(vision: [VisionContent])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VisionContent + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum VisionContent : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(from:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(from decoder: Decoder) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html new file mode 100644 index 00000000..0503ce5d --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html @@ -0,0 +1,366 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vision + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vision
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html new file mode 100644 index 00000000..c34fc068 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html @@ -0,0 +1,550 @@ + + + + VisionContent Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

VisionContent

+
+
+ +
public enum VisionContent : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html new file mode 100644 index 00000000..0da0715f --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html @@ -0,0 +1,449 @@ + + + + ChatCompletionContentPartImageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionContentPartImageParam

+
+
+ +
public struct ChatCompletionContentPartImageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + imageUrl + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let imageUrl: ImageURL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the content part.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(imageUrl:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(imageUrl: ImageURL)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageURL + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageURL : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html new file mode 100644 index 00000000..8af7efdb --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html @@ -0,0 +1,370 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + imageUrl + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case imageUrl = "image_url"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case type
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html new file mode 100644 index 00000000..3e54f49b --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html @@ -0,0 +1,452 @@ + + + + ImageURL Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageURL

+
+
+ +
public struct ImageURL : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Either a URL of the image or the base64 encoded image data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let url: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + detail + +
    +
    +
    +
    +
    +
    +

    Specifies the detail level of the image. Learn more in the +Vision guide https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let detail: Detail
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(url:detail:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(url: String, detail: Detail)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(url:detail:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(url: Data, detail: Detail)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Detail + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Detail : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html new file mode 100644 index 00000000..30667954 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html @@ -0,0 +1,398 @@ + + + + Detail Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Detail

+
+
+ +
public enum Detail : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + low + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case low
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + high + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case high
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html new file mode 100644 index 00000000..2d4e9b1a --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html @@ -0,0 +1,396 @@ + + + + ChatCompletionContentPartTextParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionContentPartTextParam

+
+
+ +
public struct ChatCompletionContentPartTextParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The text content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the content part.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionMessageParam/Role.html b/docs/Structs/ChatQuery/ChatCompletionMessageParam/Role.html new file mode 100644 index 00000000..2a48f81b --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionMessageParam/Role.html @@ -0,0 +1,414 @@ + + + + Role Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Role

+
+
+ +
public enum Role : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + system + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case system
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + assistant + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case assistant
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tool + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam.html b/docs/Structs/ChatQuery/ChatCompletionToolParam.html new file mode 100644 index 00000000..c1b69352 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam.html @@ -0,0 +1,442 @@ + + + + ChatCompletionToolParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionToolParam

+
+
+ +
public struct ChatCompletionToolParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.FunctionDefinition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    function: Self.FunctionDefinition
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FunctionDefinition + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FunctionDefinition : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ToolsType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ToolsType : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html new file mode 100644 index 00000000..41495366 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html @@ -0,0 +1,452 @@ + + + + FunctionDefinition Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionDefinition

+
+
+ +
public struct FunctionDefinition : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html new file mode 100644 index 00000000..704e3d15 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html @@ -0,0 +1,637 @@ + + + + FunctionParameters Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionParameters

+
+
+ +
public struct FunctionParameters : Codable, Equatable
+ +
+
+

See the guide for examples, and the JSON Schema reference for documentation about the format.

+ +
+
+
+
    +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + properties + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let properties: [String : Property]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + required + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let required: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Int?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    properties: [String : Property]? = nil,
    +    required: [String]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    enum: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Int? = nil,
    +    maximum: Int? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Property + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Property : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum JSONType : String, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html new file mode 100644 index 00000000..c7ca614d --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html @@ -0,0 +1,496 @@ + + + + JSONType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

JSONType

+
+
+ +
public enum JSONType : String, Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + integer + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case integer
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + boolean + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case boolean
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + array + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case array
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + number + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case number
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + null + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case null
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html new file mode 100644 index 00000000..3a32d386 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html @@ -0,0 +1,772 @@ + + + + Property Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Property

+
+
+ +
public struct Property : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias JSONType = ChatQuery.ChatCompletionToolParam.FunctionDefinition.FunctionParameters.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let description: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + format + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let format: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + items + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let items: `Self`.Items?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + required + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let required: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + uniqueItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let uniqueItems: Bool?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    description: String? = nil,
    +    format: String? = nil,
    +    items: Self.Items? = nil,
    +    required: [String]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    enum: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Double? = nil,
    +    maximum: Double? = nil,
    +    minItems: Int? = nil,
    +    maxItems: Int? = nil,
    +    uniqueItems: Bool? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Items + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Items : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html new file mode 100644 index 00000000..b94c4d7b --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html @@ -0,0 +1,666 @@ + + + + Items Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Items

+
+
+ +
public struct Items : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias JSONType = ChatQuery.ChatCompletionToolParam.FunctionDefinition.FunctionParameters.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + properties + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let properties: [String : Property]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + uniqueItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let uniqueItems: Bool?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    properties: [String : Property]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    `enum`: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Double? = nil,
    +    maximum: Double? = nil,
    +    minItems: Int? = nil,
    +    maxItems: Int? = nil,
    +    uniqueItems: Bool? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html b/docs/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html new file mode 100644 index 00000000..cddc3257 --- /dev/null +++ b/docs/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html @@ -0,0 +1,336 @@ + + + + ToolsType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ToolsType

+
+
+ +
public enum ToolsType : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case function
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/CodingKeys.html b/docs/Structs/ChatQuery/CodingKeys.html new file mode 100644 index 00000000..62e5f81e --- /dev/null +++ b/docs/Structs/ChatQuery/CodingKeys.html @@ -0,0 +1,776 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + messages + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messages
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case frequencyPenalty = "frequency_penalty"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logitBias + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logitBias = "logit_bias"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case maxTokens = "max_tokens"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case presencePenalty = "presence_penalty"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + seed + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case seed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stop
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case temperature
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolChoice + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolChoice = "tool_choice"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tools + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tools
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topP = "top_p"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stream + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stream
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/ResponseFormat.html b/docs/Structs/ChatQuery/ResponseFormat.html new file mode 100644 index 00000000..12b0450d --- /dev/null +++ b/docs/Structs/ChatQuery/ResponseFormat.html @@ -0,0 +1,386 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + jsonObject + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case jsonObject = "json_object"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case text
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatQuery/Stop.html b/docs/Structs/ChatQuery/Stop.html new file mode 100644 index 00000000..c03477e1 --- /dev/null +++ b/docs/Structs/ChatQuery/Stop.html @@ -0,0 +1,438 @@ + + + + Stop Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Stop

+
+
+ +
public enum Stop : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stringList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stringList([String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(stringList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringList: [String])
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult.html b/docs/Structs/ChatResult.html new file mode 100644 index 00000000..58ae263f --- /dev/null +++ b/docs/Structs/ChatResult.html @@ -0,0 +1,577 @@ + + + + ChatResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatResult

+
+
+ +
public struct ChatResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionUsage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionUsage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the chat completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always chat.completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) of when the chat completion was created.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model used for the chat completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    +

    A list of chat completion choices. Can be more than one if n is greater than 1.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    +

    Usage statistics for the completion request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: `Self`.CompletionUsage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    +

    This fingerprint represents the backend configuration that the model runs with. +Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let systemFingerprint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice.html b/docs/Structs/ChatResult/Choice.html new file mode 100644 index 00000000..b724075c --- /dev/null +++ b/docs/Structs/ChatResult/Choice.html @@ -0,0 +1,523 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ChatCompletionMessage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ChatCompletionMessage = ChatQuery.ChatCompletionMessageParam
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the choice in the list of choices.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Log probability information for the choice.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: `Self`.ChoiceLogprobs?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    +

    A chat completion message generated by the model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let message: `Self`.ChatCompletionMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    +

    The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceLogprobs + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceLogprobs : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FinishReason + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FinishReason : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/ChoiceLogprobs.html b/docs/Structs/ChatResult/Choice/ChoiceLogprobs.html new file mode 100644 index 00000000..dfb22cde --- /dev/null +++ b/docs/Structs/ChatResult/Choice/ChoiceLogprobs.html @@ -0,0 +1,363 @@ + + + + ChoiceLogprobs Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceLogprobs

+
+
+ +
public struct ChoiceLogprobs : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html new file mode 100644 index 00000000..4e8d67fc --- /dev/null +++ b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html @@ -0,0 +1,478 @@ + + + + ChatCompletionTokenLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionTokenLogprob

+
+
+ +
public struct ChatCompletionTokenLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. +Useful in instances where characters are represented by multiple tokens and +their byte representations must be combined to generate the correct text +representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    List of the most likely tokens and their log probability, at this token position. +In rare cases, there may be fewer than the number of requested top_logprobs returned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: [TopLogprob]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TopLogprob + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TopLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html new file mode 100644 index 00000000..c15be5f8 --- /dev/null +++ b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html @@ -0,0 +1,418 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case token
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bytes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprob
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html new file mode 100644 index 00000000..dbcf56c9 --- /dev/null +++ b/docs/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html @@ -0,0 +1,396 @@ + + + + TopLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

TopLogprob

+
+
+ +
public struct TopLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. +Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/CodingKeys.html b/docs/Structs/ChatResult/Choice/CodingKeys.html new file mode 100644 index 00000000..c74c9053 --- /dev/null +++ b/docs/Structs/ChatResult/Choice/CodingKeys.html @@ -0,0 +1,414 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case message
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case finishReason = "finish_reason"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/Choice/FinishReason.html b/docs/Structs/ChatResult/Choice/FinishReason.html new file mode 100644 index 00000000..9a2ee189 --- /dev/null +++ b/docs/Structs/ChatResult/Choice/FinishReason.html @@ -0,0 +1,440 @@ + + + + FinishReason Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FinishReason

+
+
+ +
public enum FinishReason : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stop
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + length + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case length
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentFilter + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case contentFilter = "content_filter"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + functionCall + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case functionCall = "function_call"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/CodingKeys.html b/docs/Structs/ChatResult/CodingKeys.html new file mode 100644 index 00000000..74f6690a --- /dev/null +++ b/docs/Structs/ChatResult/CodingKeys.html @@ -0,0 +1,490 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case choices
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case usage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case systemFingerprint = "system_fingerprint"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatResult/CompletionUsage.html b/docs/Structs/ChatResult/CompletionUsage.html new file mode 100644 index 00000000..d670ccde --- /dev/null +++ b/docs/Structs/ChatResult/CompletionUsage.html @@ -0,0 +1,389 @@ + + + + CompletionUsage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionUsage

+
+
+ +
public struct CompletionUsage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    +

    Number of tokens in the generated completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    +

    Number of tokens in the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    +

    Total number of tokens used in the request (prompt + completion).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult.html b/docs/Structs/ChatStreamResult.html new file mode 100644 index 00000000..ea9c41c8 --- /dev/null +++ b/docs/Structs/ChatStreamResult.html @@ -0,0 +1,524 @@ + + + + ChatStreamResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatStreamResult

+
+
+ +
public struct ChatStreamResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the chat completion. Each chunk has the same ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always chat.completion.chunk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) of when the chat completion was created. +Each chunk has the same timestamp.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to generate the completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    +

    A list of chat completion choices. +Can be more than one if n is greater than 1.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    +

    This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let systemFingerprint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice.html b/docs/Structs/ChatStreamResult/Choice.html new file mode 100644 index 00000000..07ec3ba2 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice.html @@ -0,0 +1,524 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + FinishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias FinishReason = ChatResult.Choice.FinishReason
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceDelta + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDelta : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the choice in the list of choices.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delta + +
    +
    +
    +
    +
    +
    +

    A chat completion delta generated by streamed model responses.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let delta: `Self`.ChoiceDelta
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    +

    The reason the model stopped generating tokens. +This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: FinishReason?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Log probability information for the choice.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: `Self`.ChoiceLogprobs?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceLogprobs + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceLogprobs : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceDelta.html b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta.html new file mode 100644 index 00000000..1d2aaf57 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta.html @@ -0,0 +1,470 @@ + + + + ChoiceDelta Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDelta

+
+
+ +
public struct ChoiceDelta : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the chunk message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the author of this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCalls: [`Self`.ChoiceDeltaToolCall]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceDeltaToolCall + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDeltaToolCall : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html new file mode 100644 index 00000000..80421b18 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html @@ -0,0 +1,476 @@ + + + + ChoiceDeltaToolCall Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDeltaToolCall

+
+
+ +
public struct ChoiceDeltaToolCall : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The ID of the tool call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    +

    The function that the model called.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.ChoiceDeltaToolCallFunction?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the tool. Currently, only function is supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    index: Int,
    +    id: String? = nil,
    +    function: Self.ChoiceDeltaToolCallFunction? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDeltaToolCallFunction : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html new file mode 100644 index 00000000..7859e501 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html @@ -0,0 +1,397 @@ + + + + ChoiceDeltaToolCallFunction Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDeltaToolCallFunction

+
+
+ +
public struct ChoiceDeltaToolCallFunction : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the function to call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(arguments:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    arguments: String? = nil,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html new file mode 100644 index 00000000..b066c3d9 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html @@ -0,0 +1,390 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html new file mode 100644 index 00000000..6d3adc29 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html @@ -0,0 +1,364 @@ + + + + ChoiceLogprobs Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceLogprobs

+
+
+ +
public struct ChoiceLogprobs : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    A list of message content tokens with log probability information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: [`Self`.ChatCompletionTokenLogprob]?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionTokenLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html new file mode 100644 index 00000000..87b531b2 --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html @@ -0,0 +1,474 @@ + + + + ChatCompletionTokenLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionTokenLogprob

+
+
+ +
public struct ChatCompletionTokenLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: [`Self`.TopLogprob]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TopLogprob + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TopLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html new file mode 100644 index 00000000..8cd920fa --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html @@ -0,0 +1,418 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case token
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bytes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprob
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html new file mode 100644 index 00000000..532a768e --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html @@ -0,0 +1,395 @@ + + + + TopLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

TopLogprob

+
+
+ +
public struct TopLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/Choice/CodingKeys.html b/docs/Structs/ChatStreamResult/Choice/CodingKeys.html new file mode 100644 index 00000000..11ad4d0e --- /dev/null +++ b/docs/Structs/ChatStreamResult/Choice/CodingKeys.html @@ -0,0 +1,414 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delta + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case delta
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case finishReason = "finish_reason"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ChatStreamResult/CodingKeys.html b/docs/Structs/ChatStreamResult/CodingKeys.html new file mode 100644 index 00000000..6458b785 --- /dev/null +++ b/docs/Structs/ChatStreamResult/CodingKeys.html @@ -0,0 +1,464 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case choices
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case systemFingerprint = "system_fingerprint"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/CompletionsQuery.html b/docs/Structs/CompletionsQuery.html new file mode 100644 index 00000000..5b863fac --- /dev/null +++ b/docs/Structs/CompletionsQuery.html @@ -0,0 +1,575 @@ + + + + CompletionsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionsQuery

+
+
+ +
public struct CompletionsQuery : Codable, Streamable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    +

    The maximum number of tokens to generate in the completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxTokens: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let frequencyPenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let presencePenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    +

    Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let stop: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, prompt: String, temperature: Double? = nil, maxTokens: Int? = nil, topP: Double? = nil, frequencyPenalty: Double? = nil, presencePenalty: Double? = nil, stop: [String]? = nil, user: String? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/CompletionsResult.html b/docs/Structs/CompletionsResult.html new file mode 100644 index 00000000..ac1aaf9e --- /dev/null +++ b/docs/Structs/CompletionsResult.html @@ -0,0 +1,516 @@ + + + + CompletionsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionsResult

+
+
+ +
public struct CompletionsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/CompletionsResult/Choice.html b/docs/Structs/CompletionsResult/Choice.html new file mode 100644 index 00000000..afada57d --- /dev/null +++ b/docs/Structs/CompletionsResult/Choice.html @@ -0,0 +1,386 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: String?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/CompletionsResult/Usage.html b/docs/Structs/CompletionsResult/Usage.html new file mode 100644 index 00000000..e83845d5 --- /dev/null +++ b/docs/Structs/CompletionsResult/Usage.html @@ -0,0 +1,386 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EditsQuery.html b/docs/Structs/EditsQuery.html new file mode 100644 index 00000000..d6efa469 --- /dev/null +++ b/docs/Structs/EditsQuery.html @@ -0,0 +1,494 @@ + + + + EditsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EditsQuery

+
+
+ +
public struct EditsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    Input text to get embeddings for.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + instruction + +
    +
    +
    +
    +
    +
    +

    The instruction that tells the model how to edit the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let instruction: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, input: String?, instruction: String, n: Int? = nil, temperature: Double? = nil, topP: Double? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EditsResult.html b/docs/Structs/EditsResult.html new file mode 100644 index 00000000..9c4b1915 --- /dev/null +++ b/docs/Structs/EditsResult.html @@ -0,0 +1,464 @@ + + + + EditsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EditsResult

+
+
+ +
public struct EditsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EditsResult/Choice.html b/docs/Structs/EditsResult/Choice.html new file mode 100644 index 00000000..0cfccc44 --- /dev/null +++ b/docs/Structs/EditsResult/Choice.html @@ -0,0 +1,360 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EditsResult/Usage.html b/docs/Structs/EditsResult/Usage.html new file mode 100644 index 00000000..1e848023 --- /dev/null +++ b/docs/Structs/EditsResult/Usage.html @@ -0,0 +1,386 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsQuery.html b/docs/Structs/EmbeddingsQuery.html new file mode 100644 index 00000000..fb78cd32 --- /dev/null +++ b/docs/Structs/EmbeddingsQuery.html @@ -0,0 +1,530 @@ + + + + EmbeddingsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EmbeddingsQuery

+
+
+ +
public struct EmbeddingsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: `Self`.Input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them. +https://platform.openai.com/docs/api-reference/models/list +https://platform.openai.com/docs/models/overview

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encodingFormat + +
    +
    +
    +
    +
    +
    +

    The format to return the embeddings in. Can be either float or base64. +https://pypi.org/project/pybase64/

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let encodingFormat: `Self`.EncodingFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    input: Self.Input,
    +    model: Model,
    +    encodingFormat: Self.EncodingFormat? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Input + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Input : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EncodingFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EncodingFormat : String, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsQuery/CodingKeys.html b/docs/Structs/EmbeddingsQuery/CodingKeys.html new file mode 100644 index 00000000..994c7dcf --- /dev/null +++ b/docs/Structs/EmbeddingsQuery/CodingKeys.html @@ -0,0 +1,412 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encodingFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encodingFormat = "encoding_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsQuery/EncodingFormat.html b/docs/Structs/EmbeddingsQuery/EncodingFormat.html new file mode 100644 index 00000000..d1d98399 --- /dev/null +++ b/docs/Structs/EmbeddingsQuery/EncodingFormat.html @@ -0,0 +1,360 @@ + + + + EncodingFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EncodingFormat

+
+
+ +
public enum EncodingFormat : String, Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + float + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case float
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + base64 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case base64
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsQuery/Input.html b/docs/Structs/EmbeddingsQuery/Input.html new file mode 100644 index 00000000..ff7e775a --- /dev/null +++ b/docs/Structs/EmbeddingsQuery/Input.html @@ -0,0 +1,542 @@ + + + + Input Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Input

+
+
+ +
public enum Input : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stringList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stringList([String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case intList([Int])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intMatrix(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case intMatrix([[Int]])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(stringList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringList: [String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intList: [Int])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intMatrix:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intMatrix: [[Int]])
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsResult.html b/docs/Structs/EmbeddingsResult.html new file mode 100644 index 00000000..d8251f10 --- /dev/null +++ b/docs/Structs/EmbeddingsResult.html @@ -0,0 +1,465 @@ + + + + EmbeddingsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EmbeddingsResult

+
+
+ +
public struct EmbeddingsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Embedding + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Embedding : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [Embedding]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “list”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsResult/Embedding.html b/docs/Structs/EmbeddingsResult/Embedding.html new file mode 100644 index 00000000..71f10564 --- /dev/null +++ b/docs/Structs/EmbeddingsResult/Embedding.html @@ -0,0 +1,390 @@ + + + + Embedding Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Embedding

+
+
+ +
public struct Embedding : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “embedding”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embedding + +
    +
    +
    +
    +
    +
    +

    The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide. +https://platform.openai.com/docs/guides/embeddings

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let embedding: [Double]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the embedding in the list of embeddings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/EmbeddingsResult/Usage.html b/docs/Structs/EmbeddingsResult/Usage.html new file mode 100644 index 00000000..ac8f6faf --- /dev/null +++ b/docs/Structs/EmbeddingsResult/Usage.html @@ -0,0 +1,360 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImageEditsQuery.html b/docs/Structs/ImageEditsQuery.html new file mode 100644 index 00000000..b4f190f8 --- /dev/null +++ b/docs/Structs/ImageEditsQuery.html @@ -0,0 +1,639 @@ + + + + ImageEditsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageEditsQuery

+
+
+ +
public struct ImageEditsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = ImagesQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Size = ImagesQuery.Size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let image: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mask + +
    +
    +
    +
    +
    +
    +

    An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let mask: Data?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    A text description of the desired image(s). The maximum length is 1000 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: Size?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: Data,
    +    prompt: String,
    +    mask: Data? = nil,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: Self.Size? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImageEditsQuery/CodingKeys.html b/docs/Structs/ImageEditsQuery/CodingKeys.html new file mode 100644 index 00000000..003f87f3 --- /dev/null +++ b/docs/Structs/ImageEditsQuery/CodingKeys.html @@ -0,0 +1,516 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mask + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mask
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prompt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImageVariationsQuery.html b/docs/Structs/ImageVariationsQuery.html new file mode 100644 index 00000000..a2e95236 --- /dev/null +++ b/docs/Structs/ImageVariationsQuery.html @@ -0,0 +1,559 @@ + + + + ImageVariationsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageVariationsQuery

+
+
+ +
public struct ImageVariationsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = ImagesQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to edit. Must be a valid PNG file, less than 4MB, and square.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let image: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. Only dall-e-2 is supported at this time. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024. +Defaults to 1024x1024

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: Data,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: String? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImageVariationsQuery/CodingKeys.html b/docs/Structs/ImageVariationsQuery/CodingKeys.html new file mode 100644 index 00000000..d3c555a5 --- /dev/null +++ b/docs/Structs/ImageVariationsQuery/CodingKeys.html @@ -0,0 +1,464 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery.html b/docs/Structs/ImagesQuery.html new file mode 100644 index 00000000..4812d094 --- /dev/null +++ b/docs/Structs/ImagesQuery.html @@ -0,0 +1,701 @@ + + + + ImagesQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImagesQuery

+
+
+ +
public struct ImagesQuery : Codable
+ +
+
+

Given a prompt and/or an input image, the model will generate a new image. +https://platform.openai.com/docs/guides/images

+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models. +Defaults to 1024x1024

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: `Self`.Size?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + style + +
    +
    +
    +
    +
    +
    +

    The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3. +Defaults to vivid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let style: `Self`.Style?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quality + +
    +
    +
    +
    +
    +
    +

    The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3. +Defaults to standard

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let quality: `Self`.Quality?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    prompt: String,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    quality:Self.Quality? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: Size? = nil,
    +    style: Self.Style? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Style + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Style : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Quality + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Quality : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Size + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Size : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery/CodingKeys.html b/docs/Structs/ImagesQuery/CodingKeys.html new file mode 100644 index 00000000..bf4b7cbf --- /dev/null +++ b/docs/Structs/ImagesQuery/CodingKeys.html @@ -0,0 +1,516 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prompt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + style + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case style
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quality + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case quality
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery/Quality.html b/docs/Structs/ImagesQuery/Quality.html new file mode 100644 index 00000000..99029b9a --- /dev/null +++ b/docs/Structs/ImagesQuery/Quality.html @@ -0,0 +1,360 @@ + + + + Quality Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Quality

+
+
+ +
public enum Quality : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + standard + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case standard
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hd + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hd
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery/ResponseFormat.html b/docs/Structs/ImagesQuery/ResponseFormat.html new file mode 100644 index 00000000..6b771624 --- /dev/null +++ b/docs/Structs/ImagesQuery/ResponseFormat.html @@ -0,0 +1,360 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case url
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + b64_json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case b64_json
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery/Size.html b/docs/Structs/ImagesQuery/Size.html new file mode 100644 index 00000000..4bee5dbb --- /dev/null +++ b/docs/Structs/ImagesQuery/Size.html @@ -0,0 +1,438 @@ + + + + Size Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Size

+
+
+ +
public enum Size : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + _256 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _256 = "256x256"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _512 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _512 = "512x512"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1024 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1024 = "1024x1024"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1792_1024 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1792_1024 = "1792x1024"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1024_1792 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1024_1792 = "1024x1792"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesQuery/Style.html b/docs/Structs/ImagesQuery/Style.html new file mode 100644 index 00000000..6376cc05 --- /dev/null +++ b/docs/Structs/ImagesQuery/Style.html @@ -0,0 +1,360 @@ + + + + Style Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Style

+
+
+ +
public enum Style : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + natural + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case natural
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vivid + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vivid
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesResult.html b/docs/Structs/ImagesResult.html new file mode 100644 index 00000000..80096634 --- /dev/null +++ b/docs/Structs/ImagesResult.html @@ -0,0 +1,387 @@ + + + + ImagesResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImagesResult

+
+
+ +
public struct ImagesResult : Codable, Equatable
+ +
+
+

Returns a list of image objects.

+ +
+
+
+
    +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [`Self`.Image]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Image + +
    +
    +
    +
    +
    +
    +

    Represents the url or the content of an image generated by the OpenAI API.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Image : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesResult/Image.html b/docs/Structs/ImagesResult/Image.html new file mode 100644 index 00000000..3facad36 --- /dev/null +++ b/docs/Structs/ImagesResult/Image.html @@ -0,0 +1,417 @@ + + + + Image Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Image

+
+
+ +
public struct Image : Codable, Equatable
+ +
+
+

Represents the url or the content of an image generated by the OpenAI API.

+ +
+
+
+
    +
  • +
    + + + + b64Json + +
    +
    +
    +
    +
    +
    +

    The base64-encoded JSON of the generated image, if response_format is b64_json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let b64Json: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + revisedPrompt + +
    +
    +
    +
    +
    +
    +

    The prompt that was used to generate the image, if there was any revision to the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let revisedPrompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    The URL of the generated image, if response_format is url (default).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let url: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ImagesResult/Image/CodingKeys.html b/docs/Structs/ImagesResult/Image/CodingKeys.html new file mode 100644 index 00000000..6993ab03 --- /dev/null +++ b/docs/Structs/ImagesResult/Image/CodingKeys.html @@ -0,0 +1,388 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + b64Json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case b64Json = "b64_json"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + revisedPrompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case revisedPrompt = "revised_prompt"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case url
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModelQuery.html b/docs/Structs/ModelQuery.html new file mode 100644 index 00000000..f359c1fc --- /dev/null +++ b/docs/Structs/ModelQuery.html @@ -0,0 +1,360 @@ + + + + ModelQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelQuery

+
+
+ +
public struct ModelQuery : Codable, Equatable
+ +
+
+

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The ID of the model to use for this request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(model:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModelResult.html b/docs/Structs/ModelResult.html new file mode 100644 index 00000000..2e416535 --- /dev/null +++ b/docs/Structs/ModelResult.html @@ -0,0 +1,442 @@ + + + + ModelResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelResult

+
+
+ +
public struct ModelResult : Codable, Equatable
+ +
+
+

The model object matching the specified ID.

+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The model identifier, which can be referenced in the API endpoints.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) when the model was created.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “model”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ownedBy + +
    +
    +
    +
    +
    +
    +

    The organization that owns the model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let ownedBy: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModelResult/CodingKeys.html b/docs/Structs/ModelResult/CodingKeys.html new file mode 100644 index 00000000..cc3da332 --- /dev/null +++ b/docs/Structs/ModelResult/CodingKeys.html @@ -0,0 +1,412 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ownedBy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ownedBy = "owned_by"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModelsResult.html b/docs/Structs/ModelsResult.html new file mode 100644 index 00000000..0aadfcf5 --- /dev/null +++ b/docs/Structs/ModelsResult.html @@ -0,0 +1,361 @@ + + + + ModelsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelsResult

+
+
+ +
public struct ModelsResult : Codable, Equatable
+ +
+
+

A list of model objects.

+ +
+
+
+
    +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    A list of model objects.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [ModelResult]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always list

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsQuery.html b/docs/Structs/ModerationsQuery.html new file mode 100644 index 00000000..8749658a --- /dev/null +++ b/docs/Structs/ModerationsQuery.html @@ -0,0 +1,386 @@ + + + + ModerationsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModerationsQuery

+
+
+ +
public struct ModerationsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    The input text to classify.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(input:model:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(input: String, model: Model? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult.html b/docs/Structs/ModerationsResult.html new file mode 100644 index 00000000..6a579df1 --- /dev/null +++ b/docs/Structs/ModerationsResult.html @@ -0,0 +1,412 @@ + + + + ModerationsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModerationsResult

+
+
+ +
public struct ModerationsResult : Codable, Equatable
+
extension ModerationsResult: Identifiable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Moderation + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Moderation : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + results + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let results: [`Self`.Moderation]
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult/Moderation.html b/docs/Structs/ModerationsResult/Moderation.html new file mode 100644 index 00000000..634e1d49 --- /dev/null +++ b/docs/Structs/ModerationsResult/Moderation.html @@ -0,0 +1,443 @@ + + + + Moderation Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Moderation

+
+
+ +
public struct Moderation : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Categories + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Categories : Codable, Equatable, Sequence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CategoryScores + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CategoryScores : Codable, Equatable, Sequence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    +

    Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let categories: Categories
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categoryScores + +
    +
    +
    +
    +
    +
    +

    Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let categoryScores: CategoryScores
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flagged + +
    +
    +
    +
    +
    +
    +

    True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let flagged: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult/Moderation/Categories.html b/docs/Structs/ModerationsResult/Moderation/Categories.html new file mode 100644 index 00000000..24b32f05 --- /dev/null +++ b/docs/Structs/ModerationsResult/Moderation/Categories.html @@ -0,0 +1,660 @@ + + + + Categories Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Categories

+
+
+ +
public struct Categories : Codable, Equatable, Sequence
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes harassing language towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassment: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    +

    Harassment content that also includes violence or serious harm towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassmentThreatening: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hate: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    +

    Hateful content that also includes violence or serious harm towards the targeted group.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hateThreatening: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    +

    Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarm: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    +

    Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmIntent: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    +

    Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmInstructions: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    +

    Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexual: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    +

    Sexual content that includes an individual who is under 18 years old.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexualMinors: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    +

    Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violence: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    +

    Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violenceGraphic: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeIterator() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func makeIterator() -> IndexingIterator<[(String, Bool)]>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html b/docs/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html new file mode 100644 index 00000000..1f7905fe --- /dev/null +++ b/docs/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html @@ -0,0 +1,598 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassmentThreatening = "harassment/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hateThreatening = "hate/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarm = "self-harm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmIntent = "self-harm/intent"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmInstructions = "self-harm/instructions"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexualMinors = "sexual/minors"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violenceGraphic = "violence/graphic"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult/Moderation/CategoryScores.html b/docs/Structs/ModerationsResult/Moderation/CategoryScores.html new file mode 100644 index 00000000..ebc27305 --- /dev/null +++ b/docs/Structs/ModerationsResult/Moderation/CategoryScores.html @@ -0,0 +1,660 @@ + + + + CategoryScores Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CategoryScores

+
+
+ +
public struct CategoryScores : Codable, Equatable, Sequence
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes harassing language towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassment: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    +

    Harassment content that also includes violence or serious harm towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassmentThreatening: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hate: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    +

    Hateful content that also includes violence or serious harm towards the targeted group.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hateThreatening: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    +

    Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarm: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    +

    Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmIntent: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    +

    Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmInstructions: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    +

    Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexual: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    +

    Sexual content that includes an individual who is under 18 years old.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexualMinors: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    +

    Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violence: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    +

    Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violenceGraphic: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeIterator() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func makeIterator() -> IndexingIterator<[(String, Bool)]>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html b/docs/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html new file mode 100644 index 00000000..9ceabfbf --- /dev/null +++ b/docs/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html @@ -0,0 +1,598 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassmentThreatening = "harassment/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hateThreatening = "hate/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarm = "self-harm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmIntent = "self-harm/intent"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmInstructions = "self-harm/instructions"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexualMinors = "sexual/minors"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violenceGraphic = "violence/graphic"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Structs/Vector.html b/docs/Structs/Vector.html new file mode 100644 index 00000000..353605b1 --- /dev/null +++ b/docs/Structs/Vector.html @@ -0,0 +1,422 @@ + + + + Vector Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Vector

+
+
+ +
public struct Vector
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns the similarity between two vectors

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cosineSimilarity(a: [Double], b: [Double]) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + a + + +
    +

    The first vector

    +
    +
    + + b + + +
    +

    The second vector

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cosineDifference(a: [Double], b: [Double]) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + a + + +
    +

    The first vector

    +
    +
    + + b + + +
    +

    The second vector

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Typealiases.html b/docs/Typealiases.html new file mode 100644 index 00000000..1b045dd1 --- /dev/null +++ b/docs/Typealiases.html @@ -0,0 +1,325 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + Model + +
    +
    +
    +
    +
    +
    +

    Defines all available OpenAI models supported by the library.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Model = String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 00000000..a096feca --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 100% + + + 100% + + + diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 00000000..c170357c --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 00000000..f84ef864 --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,442 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +pre > code { + padding: 0; } + +a { + color: #0088cc; + text-decoration: none; } + a code { + color: inherit; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +hr { + height: 1px; + border: none; + background-color: #e2e2e2; } + +.footnote-ref { + display: inline-block; + scroll-margin-top: 70px; } + +.footnote-def { + scroll-margin-top: 70px; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 32px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 3; } + header img { + padding-right: 6px; + vertical-align: -3px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 26px; + padding-top: 12px; + position: fixed; + width: inherit; + z-index: 2; + margin-top: 32px; + white-space: nowrap; + overflow-x: scroll; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + margin-top: 10px; + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + +.declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } + +form[role=search] { + float: right; } + form[role=search] input { + font: Helvetica, freesans, Arial, sans-serif; + margin-top: 6px; + font-size: 13px; + line-height: 20px; + padding: 0px 10px; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fff; + color: #333; + border: 1px solid #e2e2e2; + z-index: 4; } + form[role=search] .tt-highlight { + font-weight: bold; } + form[role=search] .tt-suggestion { + font: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + form[role=search] .tt-suggestion:hover, + form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + form[role=search] .tt-suggestion:hover .doc-parent-name, + form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/.docset/Contents/Info.plist b/docs/docsets/.docset/Contents/Info.plist new file mode 100644 index 00000000..61863ec4 --- /dev/null +++ b/docs/docsets/.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy. + CFBundleName + + DocSetPlatformFamily + + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 00000000..2831f986 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,325 @@ + + + + Classes Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI.html new file mode 100644 index 00000000..5404d16c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI.html @@ -0,0 +1,828 @@ + + + + OpenAI Class Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAI

+
+
+ +
final public class OpenAI : OpenAIProtocol
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI/Configuration.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI/Configuration.html new file mode 100644 index 00000000..e07e9912 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/OpenAI/Configuration.html @@ -0,0 +1,494 @@ + + + + Configuration Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Configuration

+
+
+ +
public struct Configuration
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    + +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let organizationIdentifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + host + +
    +
    +
    +
    +
    +
    +

    API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let host: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + port + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let port: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scheme + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let scheme: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeoutInterval + +
    +
    +
    +
    +
    +
    +

    Default request timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let timeoutInterval: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(token: String, organizationIdentifier: String? = nil, host: String = "api.openai.com", port: Int = 443, scheme: String = "https", timeoutInterval: TimeInterval = 60.0)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 00000000..4aef1836 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,325 @@ + + + + Enumerations Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + OpenAIError + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum OpenAIError : Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums/OpenAIError.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums/OpenAIError.html new file mode 100644 index 00000000..682f456c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Enums/OpenAIError.html @@ -0,0 +1,332 @@ + + + + OpenAIError Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAIError

+
+
+ +
public enum OpenAIError : Error
+ +
+
+ +
+
+
+
    +
  • +
    + + + + emptyData + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case emptyData
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 00000000..56666ea1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,325 @@ + + + + Extensions Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Model + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Model
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Extensions/Model.html b/docs/docsets/.docset/Contents/Resources/Documents/Extensions/Model.html new file mode 100644 index 00000000..e1d188ed --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Extensions/Model.html @@ -0,0 +1,1516 @@ + + + + Model Extension Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Model

+
+
+ +
public extension Model
+ +
+
+ +
+
+
+
    +
  • +
    + + + + gpt4_o + +
    +
    +
    +
    +
    +
    +

    gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_o: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_o_mini + +
    +
    +
    +
    +
    +
    +

    gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_o_mini: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_turbo + +
    +
    +
    +
    +
    +
    +

    gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_turbo: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_turbo_preview + +
    +
    +
    +
    +
    +
    +

    gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_turbo_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_vision_preview + +
    +
    +
    +
    +
    +
    +

    gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_vision_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0125_preview + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_0125_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_1106_preview + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_1106_preview: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4 + +
    +
    +
    +
    +
    +
    +

    Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_0314 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_0314: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k + +
    +
    +
    +
    +
    +
    +

    Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_32k: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt4_32k_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt4_32k_0314 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt4_32k_0314: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo + +
    +
    +
    +
    +
    +
    +

    Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0125 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_0125: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_1106 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_1106: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_0301 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Please upgrade to the newer model")
    +static let gpt3_5Turbo_0301: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_16k + +
    +
    +
    +
    +
    +
    +

    Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_16k: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + gpt3_5Turbo_16k_0613 + +
    +
    +
    +
    +
    +
    +

    Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let gpt3_5Turbo_16k_0613: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_003 + +
    +
    +
    +
    +
    +
    +

    Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_003: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_002 + +
    +
    +
    +
    +
    +
    +

    Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_002: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textCurie + +
    +
    +
    +
    +
    +
    +

    Very capable, faster and lower cost than Davinci.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textCurie: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textBabbage + +
    +
    +
    +
    +
    +
    +

    Capable of straightforward tasks, very fast, and lower cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textBabbage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textAda + +
    +
    +
    +
    +
    +
    +

    Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textDavinci_001 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textDavinci_001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + codeDavinciEdit_001 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let codeDavinciEdit_001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tts_1 + +
    +
    +
    +
    +
    +
    +

    The latest text to speech model, optimized for speed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let tts_1: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tts_1_hd + +
    +
    +
    +
    +
    +
    +

    The latest text to speech model, optimized for quality.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let tts_1_hd: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + whisper_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let whisper_1: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + dall_e_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let dall_e_2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + dall_e_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let dall_e_3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + davinci + +
    +
    +
    +
    +
    +
    +

    Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let davinci: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + curie + +
    +
    +
    +
    +
    +
    +

    Very capable, but faster and lower cost than Davinci.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let curie: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + babbage + +
    +
    +
    +
    +
    +
    +

    Capable of straightforward tasks, very fast, and lower cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let babbage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ada + +
    +
    +
    +
    +
    +
    +

    Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let ada: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbeddingAda + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbeddingAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textSearchAda + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchAda: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textSearchBabbageDoc + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchBabbageDoc: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textSearchBabbageQuery001: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbedding3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbedding3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textEmbedding3Large + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textEmbedding3Large: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textModerationStable + +
    +
    +
    +
    +
    +
    +

    Almost as capable as the latest model, but slightly older.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textModerationStable: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textModerationLatest + +
    +
    +
    +
    +
    +
    +

    Most capable moderation model. Accuracy will be slightly higher than the stable model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let textModerationLatest: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let moderation: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 00000000..4cfb4346 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,325 @@ + + + + Protocols Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • +
    + + + + OpenAIProtocol + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol OpenAIProtocol
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Protocols/OpenAIProtocol.html b/docs/docsets/.docset/Contents/Resources/Documents/Protocols/OpenAIProtocol.html new file mode 100644 index 00000000..eeb3620a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Protocols/OpenAIProtocol.html @@ -0,0 +1,2181 @@ + + + + OpenAIProtocol Protocol Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

OpenAIProtocol

+
+
+ +
public protocol OpenAIProtocol
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

    + +

    Example:

    +
    let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?")
    +openAI.completions(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(query: CompletionsQuery, completion: @escaping (Result<CompletionsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A CompletionsQuery object containing the input parameters for the API request. This includes the prompt, model, temperature, max tokens, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<CompletionsResult, Error>, will contain either the CompletionsResult object with the generated completions, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

    + +

    Example:

    +
    let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?")
    +openAI.completions(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(query: CompletionsQuery, onResult: @escaping (Result<CompletionsResult, Error>) -> Void, completion: ((Error?) -> Void)?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + query + + +
    +

    A CompletionsQuery object containing the input parameters for the API request. This includes the prompt, model, temperature, max tokens, and other settings.

    +
    +
    + + onResult + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<CompletionsResult, Error>, will contain either the CompletionsResult object with the generated completions, or an error if the request failed.

    +
    +
    + + completion + + +
    +

    A closure that is being called when all chunks are delivered or uncrecoverable error occured

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesQuery(prompt: "White cat with heterochromia sitting on the kitchen table", n: 1, size: ImagesQuery.Size._1024)
    +openAI.images(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(query: ImagesQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesQuery object containing the input parameters for the API request. This includes the query parameters such as the text prompt, image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesEditQuery(image: "@whitecat.png", prompt: "White cat with heterochromia sitting on the kitchen table with a bowl of food", n: 1, size: ImagesQuery.Size._1024)
    +openAI.imageEdits(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(query: ImageEditsQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesEditQuery object containing the input parameters for the API request. This includes the query parameters such as the image to be edited, an image to be used a mask if applicable, text prompt, image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

    + +

    Example:

    +
    let query = ImagesVariationQuery(image: "@whitecat.png", n: 1, size: ImagesQuery.Size._1024)
    +openAI.imageVariations(query: query) { result in
    +  //Handle result here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(query: ImageVariationsQuery, completion: @escaping (Result<ImagesResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An ImagesVariationQuery object containing the input parameters for the API request. This includes the query parameters such as the image to use as a basis for the variation(s), image size, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ImagesResult, Error>, will contain either the ImagesResult object with the generated images, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

    + +

    Example:

    +
    let query = EmbeddingsQuery(model: .textSearchBabbageDoc, input: "The food was delicious and the waiter...")
    +openAI.embeddings(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(query: EmbeddingsQuery, completion: @escaping (Result<EmbeddingsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An EmbeddingsQuery object containing the input parameters for the API request. This includes the list of text prompts to be converted into embeddings, the model to be used, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<EmbeddingsResult, Error>, will contain either the EmbeddingsResult object with the generated embeddings, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

    + +

    Example:

    +
    let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: "user", content: "who are you")])
    +openAI.chats(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(query: ChatQuery, completion: @escaping (Result<ChatResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ChatQuery object containing the input parameters for the API request. This includes the lists of message objects for the conversation, the model to be used, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ChatResult, Error>, will contain either the ChatResult object with the model’s response to the conversation, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

    + +

    Example:

    +
    let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: "user", content: "who are you")])
    +openAI.chats(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(query: ChatQuery, onResult: @escaping (Result<ChatStreamResult, Error>) -> Void, completion: ((Error?) -> Void)?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + query + + +
    +

    A ChatQuery object containing the input parameters for the API request. This includes the lists of message objects for the conversation, the model to be used, and other settings.

    +
    +
    + + onResult + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ChatStreamResult, Error>, will contain either the ChatStreamResult object with the model’s response to the conversation, or an error if the request failed.

    +
    +
    + + completion + + +
    +

    A closure that is being called when all chunks are delivered or uncrecoverable error occured

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

    + +

    Example:

    +
    let query = EditsQuery(model: .gpt4, input: "What day of the wek is it?", instruction: "Fix the spelling mistakes")
    +openAI.edits(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(query: EditsQuery, completion: @escaping (Result<EditsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An EditsQuery object containing the input parameters for the API request. This includes the input to be edited, the instruction specifying how it should be edited, and other settings.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<EditsResult, Error>, will contain either the EditsResult object with the model’s response to the queried edit, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

    + +

    Example:

    +
    let query = ModelQuery(model: .gpt3_5Turbo)
    +openAI.model(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(query: ModelQuery, completion: @escaping (Result<ModelResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ModelQuery object containing the input parameters for the API request, which is only the model to be queried.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModelResult, Error>, will contain either the ModelResult object with more information about the model, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + models(completion:) + +
    +
    +
    +
    +
    +
    +

    This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

    + +

    Example:

    +
    openAI.models() { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models(completion: @escaping (Result<ModelsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModelsResult, Error>, will contain either the ModelsResult object with the list of model types, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

    + +

    Example:

    +
    let query = ModerationsQuery(input: "I want to kill them.")
    +openAI.moderations(query: query) { result in
    +  //Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 13.0, *)
    +func moderations(query: ModerationsQuery, completion: @escaping (Result<ModerationsResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    A ModerationsQuery object containing the input parameters for the API request. This includes the input text and optionally the model to be used.

    +
    +
    + + completion + + +
    +

    A closure which receives the result when the API request finishes. The closure’s parameter, Result<ModerationsResult, Error>, will contain either the ModerationsResult object with the list of category results, or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

    + +

    Example:

    +
    let query = AudioSpeechQuery(model: .tts_1, input: "Hello, world!", voice: .alloy, responseFormat: .mp3, speed: 1.0)
    +openAI.audioCreateSpeech(query: query) { result in
    +   // Handle response here
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(query: AudioSpeechQuery, completion: @escaping (Result<AudioSpeechResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    An AudioSpeechQuery object containing the parameters for the API request. This includes the Text-to-Speech model to be used, input text, voice to be used for generating the audio, the desired audio format, and the speed of the generated audio.

    +
    +
    + + completion + + +
    +

    A closure which receives the result. The closure’s parameter, Result<AudioSpeechResult, Error>, will either contain the AudioSpeechResult object with the audio data or an error if the request failed.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(query: AudioTranscriptionQuery, completion: @escaping (Result<AudioTranscriptionResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    The AudioTranscriptionQuery instance, containing the information required for the transcription request.

    +
    +
    + + completion + + +
    +

    The completion handler to be executed upon completion of the transcription request. + Returns a Result of type AudioTranscriptionResult if successful, or an Error if an error occurs. +*

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(query: AudioTranslationQuery, completion: @escaping (Result<AudioTranslationResult, Error>) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + query + + +
    +

    The AudioTranslationQuery instance, containing the information required for the translation request.

    +
    +
    + + completion + + +
    +

    The completion handler to be executed upon completion of the translation request. + Returns a Result of type AudioTranslationResult if successful, or an Error if an error occurs. +*

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + completions(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(
    +    query: CompletionsQuery
    +) async throws -> CompletionsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(
    +    query: CompletionsQuery
    +) -> AsyncThrowingStream<CompletionsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + images(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(
    +    query: ImagesQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageEdits(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(
    +    query: ImageEditsQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageVariations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(
    +    query: ImageVariationsQuery
    +) async throws -> ImagesResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embeddings(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(
    +    query: EmbeddingsQuery
    +) async throws -> EmbeddingsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chats(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(
    +    query: ChatQuery
    +) async throws -> ChatResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(
    +    query: ChatQuery
    +) -> AsyncThrowingStream<ChatStreamResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + edits(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(
    +    query: EditsQuery
    +) async throws -> EditsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(
    +    query: ModelQuery
    +) async throws -> ModelResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + models() + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models() async throws -> ModelsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moderations(
    +    query: ModerationsQuery
    +) async throws -> ModerationsResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioCreateSpeech(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(
    +    query: AudioSpeechQuery
    +) async throws -> AudioSpeechResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranscriptions(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(
    +    query: AudioTranscriptionQuery
    +) async throws -> AudioTranscriptionResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranslations(query:) + + + Extension method, asynchronous + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(
    +    query: AudioTranslationQuery
    +) async throws -> AudioTranslationResult
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completions(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completions(query: CompletionsQuery) -> AnyPublisher<CompletionsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func completionsStream(query: CompletionsQuery) -> AnyPublisher<Result<CompletionsResult, Error>, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + images(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func images(query: ImagesQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageEdits(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageEdits(query: ImageEditsQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + imageVariations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func imageVariations(query: ImageVariationsQuery) -> AnyPublisher<ImagesResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embeddings(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func embeddings(query: EmbeddingsQuery) -> AnyPublisher<EmbeddingsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chats(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chats(query: ChatQuery) -> AnyPublisher<ChatResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatsStream(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func chatsStream(query: ChatQuery) -> AnyPublisher<Result<ChatStreamResult, Error>, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + edits(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func edits(query: EditsQuery) -> AnyPublisher<EditsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func model(query: ModelQuery) -> AnyPublisher<ModelResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + models() + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func models() -> AnyPublisher<ModelsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + moderations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moderations(query: ModerationsQuery) -> AnyPublisher<ModerationsResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioCreateSpeech(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioCreateSpeech(query: AudioSpeechQuery) -> AnyPublisher<AudioSpeechResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranscriptions(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranscriptions(query: AudioTranscriptionQuery) -> AnyPublisher<AudioTranscriptionResult, Error>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + audioTranslations(query:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func audioTranslations(query: AudioTranslationQuery) -> AnyPublisher<AudioTranslationResult, Error>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 00000000..047a7c8d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,1043 @@ + + + + Structures Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + APIError + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct APIError : Error, Decodable, Equatable
    +
    extension APIError: LocalizedError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APIErrorResponse + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct APIErrorResponse : Error, Decodable, Equatable
    +
    extension APIErrorResponse: LocalizedError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioSpeechQuery + +
    +
    +
    +
    +
    +
    +

    Generates audio from the input text. +Learn more: OpenAI Speech – Documentation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioSpeechQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioSpeechResult + +
    +
    +
    +
    +
    +
    +

    The audio file content. +Learn more: OpenAI Speech – Documentation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioSpeechResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranscriptionQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranscriptionResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AudioTranslationQuery + +
    +
    +
    +
    +
    +
    +

    Translates audio into English.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranslationQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AudioTranslationResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatQuery + +
    +
    +
    +
    +
    +
    +

    Creates a model response for the given chat conversation +https://platform.openai.com/docs/guides/text-generation

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatQuery : Equatable, Codable, Streamable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChatStreamResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatStreamResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionsQuery : Codable, Streamable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EmbeddingsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EmbeddingsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EmbeddingsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EmbeddingsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageEditsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageEditsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageVariationsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageVariationsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImagesQuery + +
    +
    +
    +
    +
    +
    +

    Given a prompt and/or an input image, the model will generate a new image. +https://platform.openai.com/docs/guides/images

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImagesQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImagesResult + +
    +
    +
    +
    +
    +
    +

    Returns a list of image objects.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImagesResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelQuery + +
    +
    +
    +
    +
    +
    +

    Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelQuery : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelResult + +
    +
    +
    +
    +
    +
    +

    The model object matching the specified ID.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModelsResult + +
    +
    +
    +
    +
    +
    +

    A list of model objects.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModelsResult : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModerationsQuery + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModerationsQuery : Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ModerationsResult + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ModerationsResult : Codable, Equatable
    +
    extension ModerationsResult: Identifiable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Vector + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Vector
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIError.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIError.html new file mode 100644 index 00000000..2ddf50e6 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIError.html @@ -0,0 +1,489 @@ + + + + APIError Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

APIError

+
+
+ +
public struct APIError : Error, Decodable, Equatable
+
extension APIError: LocalizedError
+ +
+
+ +
+
+
+
    +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let message: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + param + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let param: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + code + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let code: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(message: String, type: String, param: String?, code: String?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(from:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(from decoder: Decoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorDescription + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorDescription: String? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIErrorResponse.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIErrorResponse.html new file mode 100644 index 00000000..9b5a0389 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/APIErrorResponse.html @@ -0,0 +1,359 @@ + + + + APIErrorResponse Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

APIErrorResponse

+
+
+ +
public struct APIErrorResponse : Error, Decodable, Equatable
+
extension APIErrorResponse: LocalizedError
+ +
+
+ +
+
+
+
    +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let error: APIError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorDescription + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorDescription: String? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery.html new file mode 100644 index 00000000..b63839da --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery.html @@ -0,0 +1,620 @@ + + + + AudioSpeechQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechQuery

+
+
+ +
public struct AudioSpeechQuery : Codable
+ +
+
+

Generates audio from the input text. +Learn more: OpenAI Speech – Documentation

+ +
+
+
+
    +
  • +
    + + + + AudioSpeechVoice + +
    +
    +
    +
    +
    +
    +

    Encapsulates the voices available for audio generation.

    + +

    To get aquinted with each of the voices and listen to the samples visit: +OpenAI Text-to-Speech – Voice Options

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum AudioSpeechVoice : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Encapsulates the response formats available for audio data.

    + +

    Formats:

    + +
      +
    • mp3
    • +
    • opus
    • +
    • aac
    • +
    • flac
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum AudioSpeechResponseFormat : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    The text to generate audio for. The maximum length is 4096 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    One of the available TTS models: tts-1 or tts-1-hd

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + voice + +
    +
    +
    +
    +
    +
    +

    The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide. +https://platform.openai.com/docs/guides/text-to-speech/voice-options

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let voice: AudioSpeechVoice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format to audio in. Supported formats are mp3, opus, aac, and flac. +Defaults to mp3

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: AudioSpeechResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + speed + +
    +
    +
    +
    +
    +
    +

    The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let speed: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, input: String, voice: AudioSpeechVoice, responseFormat: AudioSpeechResponseFormat = .mp3, speed: Double?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Speed + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    enum Speed : Double
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func normalizeSpeechSpeed(_ inputSpeed: Double?) -> String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html new file mode 100644 index 00000000..b68d2557 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html @@ -0,0 +1,422 @@ + + + + AudioSpeechResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechResponseFormat

+
+
+ +
public enum AudioSpeechResponseFormat : String, Codable, CaseIterable
+ +
+
+

Encapsulates the response formats available for audio data.

+ +

Formats:

+ +
    +
  • mp3
  • +
  • opus
  • +
  • aac
  • +
  • flac
  • +
+ +
+
+
+
    +
  • +
    + + + + mp3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp3
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case opus
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aac
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flac
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechVoice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechVoice.html new file mode 100644 index 00000000..2cdea3a2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/AudioSpeechVoice.html @@ -0,0 +1,468 @@ + + + + AudioSpeechVoice Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechVoice

+
+
+ +
public enum AudioSpeechVoice : String, Codable, CaseIterable
+ +
+
+

Encapsulates the voices available for audio generation.

+ +

To get aquinted with each of the voices and listen to the samples visit: +OpenAI Text-to-Speech – Voice Options

+ +
+
+
+
    +
  • +
    + + + + alloy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case alloy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + echo + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case echo
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fable + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onyx + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onyx
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + nova + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case nova
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shimmer + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shimmer
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/CodingKeys.html new file mode 100644 index 00000000..88e7eaf0 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/CodingKeys.html @@ -0,0 +1,438 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + voice + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case voice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + speed + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case speed
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/Speed.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/Speed.html new file mode 100644 index 00000000..37d4ed0c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechQuery/Speed.html @@ -0,0 +1,386 @@ + + + + Speed Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Speed

+
+
+ +
enum Speed : Double
+ +
+
+ +
+
+
+
    +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal = 1.0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + max + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case max = 4.0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + min + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case min = 0.25
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechResult.html new file mode 100644 index 00000000..1daa0273 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioSpeechResult.html @@ -0,0 +1,335 @@ + + + + AudioSpeechResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioSpeechResult

+
+
+ +
public struct AudioSpeechResult : Codable, Equatable
+ +
+
+

The audio file content. +Learn more: OpenAI Speech – Documentation

+ +
+
+
+
    +
  • +
    + + + + audio + +
    +
    +
    +
    +
    +
    +

    Audio data for one of the following formats :mp3, opus, aac, flac

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let audio: Data
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery.html new file mode 100644 index 00000000..f96d291b --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery.html @@ -0,0 +1,577 @@ + + + + AudioTranscriptionQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranscriptionQuery

+
+
+ +
public struct AudioTranscriptionQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + file + +
    +
    +
    +
    +
    +
    +

    The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let file: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileType: `Self`.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. Only whisper-1 is currently available.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. +Defaults to json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit. +Defaults to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + language + +
    +
    +
    +
    +
    +
    +

    The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency. +https://platform.openai.com/docs/guides/speech-to-text/prompting

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let language: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(file: Data, fileType: `Self`.FileType, model: Model, prompt: String? = nil, temperature: Double? = nil, language: String? = nil, responseFormat: `Self`.ResponseFormat? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FileType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FileType : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/FileType.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/FileType.html new file mode 100644 index 00000000..6ed68c6f --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/FileType.html @@ -0,0 +1,542 @@ + + + + FileType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FileType

+
+
+ +
public enum FileType : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + flac + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flac
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mp3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp3
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mpga + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mpga
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mp4 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mp4
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + m4a + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case m4a
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mpeg + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mpeg
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ogg + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ogg
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wav + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wav
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + webm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case webm
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/ResponseFormat.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/ResponseFormat.html new file mode 100644 index 00000000..9d2100c0 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionQuery/ResponseFormat.html @@ -0,0 +1,438 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case json
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case text
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verboseJson + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case verboseJson = "verbose_json"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + srt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case srt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vtt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vtt
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionResult.html new file mode 100644 index 00000000..5477b0e7 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranscriptionResult.html @@ -0,0 +1,333 @@ + + + + AudioTranscriptionResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranscriptionResult

+
+
+ +
public struct AudioTranscriptionResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The transcribed text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationQuery.html new file mode 100644 index 00000000..bc412efa --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationQuery.html @@ -0,0 +1,549 @@ + + + + AudioTranslationQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranslationQuery

+
+
+ +
public struct AudioTranslationQuery : Codable
+ +
+
+

Translates audio into English.

+ +
+
+
+
    +
  • +
    + + + + FileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias FileType = AudioTranscriptionQuery.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = AudioTranscriptionQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + file + +
    +
    +
    +
    +
    +
    +

    The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let file: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fileType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileType: `Self`.FileType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. Only whisper-1 is currently available.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. +Defaults to json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English. +https://platform.openai.com/docs/guides/speech-to-text/prompting

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit. +Defaults to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(file: Data, fileType: `Self`.FileType, model: Model, prompt: String? = nil, temperature: Double? = nil, responseFormat: `Self`.ResponseFormat? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationResult.html new file mode 100644 index 00000000..d64aa14a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/AudioTranslationResult.html @@ -0,0 +1,333 @@ + + + + AudioTranslationResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

AudioTranslationResult

+
+
+ +
public struct AudioTranslationResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The translated text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html new file mode 100644 index 00000000..d48d47c4 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html @@ -0,0 +1,1021 @@ + + + + ChatQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatQuery

+
+
+ +
public struct ChatQuery : Equatable, Codable, Streamable
+ +
+
+

Creates a model response for the given chat conversation +https://platform.openai.com/docs/guides/text-generation

+ +
+
+
+
    +
  • +
    + + + + messages + +
    +
    +
    +
    +
    +
    +

    A list of messages comprising the conversation so far

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let messages: [`Self`.ChatCompletionMessageParam]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API. +https://platform.openai.com/docs/models/model-endpoint-compatibility

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim. +Defaults to 0 +https://platform.openai.com/docs/guides/text-generation/parameter-details

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let frequencyPenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logitBias + +
    +
    +
    +
    +
    +
    +

    Modify the likelihood of specified tokens appearing in the completion. +Accepts a JSON object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. +Defaults to null

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logitBias: [String : Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model. +Defaults to false

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: Bool?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    +

    The maximum number of tokens to generate in the completion. +The total length of input tokens and generated tokens is limited by the model’s context length. +https://platform.openai.com/tokenizer

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxTokens: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics. +https://platform.openai.com/docs/guides/text-generation/parameter-details

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let presencePenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106. +Setting to { “type”: “json_object” } enables JSON mode, which guarantees the message the model generates is valid JSON. +Important: when using JSON mode, you must also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly “stuck” request. Also note that the message content may be partially cut off if finish_reason=“length”, which indicates the generation exceeded max_tokens or the conversation exceeded the max context length.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + seed + +
    +
    +
    +
    +
    +
    +

    This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let seed: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    +

    Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence. +Defaults to null

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let stop: Stop?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. +We generally recommend altering this or top_p but not both. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolChoice + +
    +
    +
    +
    +
    +
    +

    Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function. +none is the default when no functions are present. auto is the default if functions are present

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolChoice: `Self`.ChatCompletionFunctionCallOptionParam?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tools + +
    +
    +
    +
    +
    +
    +

    A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let tools: [`Self`.ChatCompletionToolParam]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. +We generally recommend altering this or temperature but not both. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stream + +
    +
    +
    +
    +
    +
    +

    If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message. +https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var stream: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    messages: [Self.ChatCompletionMessageParam],
    +    model: Model,
    +    frequencyPenalty: Double? = nil,
    +    logitBias: [String : Int]? = nil,
    +    logprobs: Bool? = nil,
    +    maxTokens: Int? = nil,
    +    n: Int? = nil,
    +    presencePenalty: Double? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    seed: Int? = nil,
    +    stop: Self.Stop? = nil,
    +    temperature: Double? = nil,
    +    toolChoice: Self.ChatCompletionFunctionCallOptionParam? = nil,
    +    tools: [Self.ChatCompletionToolParam]? = nil,
    +    topLogprobs: Int? = nil,
    +    topP: Double? = nil,
    +    user: String? = nil,
    +    stream: Bool = false
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatCompletionMessageParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Stop + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Stop : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatCompletionFunctionCallOptionParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionToolParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html new file mode 100644 index 00000000..14274779 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html @@ -0,0 +1,438 @@ + + + + ChatCompletionFunctionCallOptionParam Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionFunctionCallOptionParam

+
+
+ +
public enum ChatCompletionFunctionCallOptionParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case function(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(function: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam.html new file mode 100644 index 00000000..f6323aa5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam.html @@ -0,0 +1,791 @@ + + + + ChatCompletionMessageParam Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionMessageParam

+
+
+ +
public enum ChatCompletionMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html new file mode 100644 index 00000000..20a6e7df --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html @@ -0,0 +1,528 @@ + + + + ChatCompletionAssistantMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionAssistantMessageParam

+
+
+ +
public struct ChatCompletionAssistantMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    / The role of the messages author, in this case assistant.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the assistant message. Required unless tool_calls is specified.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    +

    The tool calls generated by the model, such as function calls.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCalls: [`Self`.ChatCompletionMessageToolCallParam]?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String? = nil,
    +    name: String? = nil,
    +    toolCalls: [Self.ChatCompletionMessageToolCallParam]? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionMessageToolCallParam : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html new file mode 100644 index 00000000..4c08eaf2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html @@ -0,0 +1,475 @@ + + + + ChatCompletionMessageToolCallParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionMessageToolCallParam

+
+
+ +
public struct ChatCompletionMessageToolCallParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ToolsType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ToolsType = ChatQuery.ChatCompletionToolParam.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The ID of the tool call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    +

    The function that the model called.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.FunctionCall
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the tool. Currently, only function is supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    id: String,
    +    function:  Self.FunctionCall
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FunctionCall + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FunctionCall : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html new file mode 100644 index 00000000..8a50f6cc --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html @@ -0,0 +1,368 @@ + + + + FunctionCall Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionCall

+
+
+ +
public struct FunctionCall : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the function to call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html new file mode 100644 index 00000000..a451143d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html @@ -0,0 +1,416 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case name
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html new file mode 100644 index 00000000..4dd31f2c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html @@ -0,0 +1,446 @@ + + + + ChatCompletionSystemMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionSystemMessageParam

+
+
+ +
public struct ChatCompletionSystemMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the system message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name for the participant. Provides the model information to differentiate between participants of the same role.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(content:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html new file mode 100644 index 00000000..87fcde21 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html @@ -0,0 +1,473 @@ + + + + ChatCompletionToolMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionToolMessageParam

+
+
+ +
public struct ChatCompletionToolMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the tool message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case tool.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCallId + +
    +
    +
    +
    +
    +
    +

    Tool call that this message is responding to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCallId: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: String,
    +    toolCallId: String
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html new file mode 100644 index 00000000..21ab5d41 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html @@ -0,0 +1,390 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCallId + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCallId = "tool_call_id"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html new file mode 100644 index 00000000..efc3ba92 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html @@ -0,0 +1,473 @@ + + + + ChatCompletionUserMessageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionUserMessageParam

+
+
+ +
public struct ChatCompletionUserMessageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the user message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: Content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the messages author, in this case user.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name for the participant. Provides the model information to differentiate between participants of the same role.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(content:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    content: Content,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Content + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Content : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html new file mode 100644 index 00000000..9a7eff8e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html @@ -0,0 +1,548 @@ + + + + Content Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Content

+
+
+ +
public enum Content : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vision(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vision([VisionContent])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var string: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(vision:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(vision: [VisionContent])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VisionContent + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum VisionContent : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(from:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(from decoder: Decoder) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html new file mode 100644 index 00000000..0503ce5d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html @@ -0,0 +1,366 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vision + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vision
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html new file mode 100644 index 00000000..c34fc068 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html @@ -0,0 +1,550 @@ + + + + VisionContent Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

VisionContent

+
+
+ +
public enum VisionContent : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html new file mode 100644 index 00000000..0da0715f --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html @@ -0,0 +1,449 @@ + + + + ChatCompletionContentPartImageParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionContentPartImageParam

+
+
+ +
public struct ChatCompletionContentPartImageParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + imageUrl + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let imageUrl: ImageURL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the content part.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(imageUrl:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(imageUrl: ImageURL)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ImageURL + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ImageURL : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html new file mode 100644 index 00000000..8af7efdb --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html @@ -0,0 +1,370 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + imageUrl + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case imageUrl = "image_url"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case type
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html new file mode 100644 index 00000000..3e54f49b --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html @@ -0,0 +1,452 @@ + + + + ImageURL Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageURL

+
+
+ +
public struct ImageURL : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Either a URL of the image or the base64 encoded image data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let url: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + detail + +
    +
    +
    +
    +
    +
    +

    Specifies the detail level of the image. Learn more in the +Vision guide https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let detail: Detail
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(url:detail:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(url: String, detail: Detail)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(url:detail:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(url: Data, detail: Detail)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Detail + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Detail : String, Codable, Equatable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html new file mode 100644 index 00000000..30667954 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html @@ -0,0 +1,398 @@ + + + + Detail Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Detail

+
+
+ +
public enum Detail : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + low + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case low
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + high + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case high
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html new file mode 100644 index 00000000..2d4e9b1a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html @@ -0,0 +1,396 @@ + + + + ChatCompletionContentPartTextParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionContentPartTextParam

+
+
+ +
public struct ChatCompletionContentPartTextParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The text content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the content part.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/Role.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/Role.html new file mode 100644 index 00000000..2a48f81b --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionMessageParam/Role.html @@ -0,0 +1,414 @@ + + + + Role Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Role

+
+
+ +
public enum Role : String, Codable, Equatable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + system + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case system
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + assistant + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case assistant
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tool + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam.html new file mode 100644 index 00000000..c1b69352 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam.html @@ -0,0 +1,442 @@ + + + + ChatCompletionToolParam Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionToolParam

+
+
+ +
public struct ChatCompletionToolParam : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.FunctionDefinition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.ToolsType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(function:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    function: Self.FunctionDefinition
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FunctionDefinition + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FunctionDefinition : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ToolsType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ToolsType : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html new file mode 100644 index 00000000..41495366 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html @@ -0,0 +1,452 @@ + + + + FunctionDefinition Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionDefinition

+
+
+ +
public struct FunctionDefinition : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html new file mode 100644 index 00000000..704e3d15 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html @@ -0,0 +1,637 @@ + + + + FunctionParameters Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FunctionParameters

+
+
+ +
public struct FunctionParameters : Codable, Equatable
+ +
+
+

See the guide for examples, and the JSON Schema reference for documentation about the format.

+ +
+
+
+
    +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + properties + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let properties: [String : Property]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + required + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let required: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Int?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    properties: [String : Property]? = nil,
    +    required: [String]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    enum: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Int? = nil,
    +    maximum: Int? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Property + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Property : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum JSONType : String, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html new file mode 100644 index 00000000..c7ca614d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html @@ -0,0 +1,496 @@ + + + + JSONType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

JSONType

+
+
+ +
public enum JSONType : String, Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + integer + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case integer
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + boolean + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case boolean
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + array + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case array
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + number + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case number
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + null + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case null
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html new file mode 100644 index 00000000..3a32d386 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html @@ -0,0 +1,772 @@ + + + + Property Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Property

+
+
+ +
public struct Property : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias JSONType = ChatQuery.ChatCompletionToolParam.FunctionDefinition.FunctionParameters.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let description: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + format + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let format: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + items + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let items: `Self`.Items?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + required + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let required: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + uniqueItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let uniqueItems: Bool?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    description: String? = nil,
    +    format: String? = nil,
    +    items: Self.Items? = nil,
    +    required: [String]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    enum: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Double? = nil,
    +    maximum: Double? = nil,
    +    minItems: Int? = nil,
    +    maxItems: Int? = nil,
    +    uniqueItems: Bool? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Items + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Items : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html new file mode 100644 index 00000000..b94c4d7b --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html @@ -0,0 +1,666 @@ + + + + Items Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Items

+
+
+ +
public struct Items : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + JSONType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias JSONType = ChatQuery.ChatCompletionToolParam.FunctionDefinition.FunctionParameters.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: `Self`.JSONType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + properties + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let properties: [String : Property]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pattern + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let pattern: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + const + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let const: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let `enum`: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + multipleOf + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let multipleOf: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minimum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maximum: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let minItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxItems: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + uniqueItems + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let uniqueItems: Bool?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    type: Self.JSONType,
    +    properties: [String : Property]? = nil,
    +    pattern: String? = nil,
    +    const: String? = nil,
    +    `enum`: [String]? = nil,
    +    multipleOf: Int? = nil,
    +    minimum: Double? = nil,
    +    maximum: Double? = nil,
    +    minItems: Int? = nil,
    +    maxItems: Int? = nil,
    +    uniqueItems: Bool? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html new file mode 100644 index 00000000..cddc3257 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html @@ -0,0 +1,336 @@ + + + + ToolsType Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ToolsType

+
+
+ +
public enum ToolsType : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case function
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/CodingKeys.html new file mode 100644 index 00000000..62e5f81e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/CodingKeys.html @@ -0,0 +1,776 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + messages + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messages
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case frequencyPenalty = "frequency_penalty"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logitBias + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logitBias = "logit_bias"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case maxTokens = "max_tokens"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case presencePenalty = "presence_penalty"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + seed + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case seed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stop
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case temperature
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolChoice + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolChoice = "tool_choice"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tools + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tools
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topP = "top_p"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stream + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stream
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ResponseFormat.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ResponseFormat.html new file mode 100644 index 00000000..12b0450d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/ResponseFormat.html @@ -0,0 +1,386 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + jsonObject + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case jsonObject = "json_object"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case text
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/Stop.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/Stop.html new file mode 100644 index 00000000..c03477e1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery/Stop.html @@ -0,0 +1,438 @@ + + + + Stop Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Stop

+
+
+ +
public enum Stop : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stringList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stringList([String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(stringList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringList: [String])
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html new file mode 100644 index 00000000..58ae263f --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html @@ -0,0 +1,577 @@ + + + + ChatResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatResult

+
+
+ +
public struct ChatResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CompletionUsage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CompletionUsage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the chat completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always chat.completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) of when the chat completion was created.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model used for the chat completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    +

    A list of chat completion choices. Can be more than one if n is greater than 1.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    +

    Usage statistics for the completion request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: `Self`.CompletionUsage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    +

    This fingerprint represents the backend configuration that the model runs with. +Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let systemFingerprint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html new file mode 100644 index 00000000..b724075c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html @@ -0,0 +1,523 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ChatCompletionMessage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ChatCompletionMessage = ChatQuery.ChatCompletionMessageParam
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the choice in the list of choices.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Log probability information for the choice.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: `Self`.ChoiceLogprobs?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    +

    A chat completion message generated by the model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let message: `Self`.ChatCompletionMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    +

    The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceLogprobs + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceLogprobs : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FinishReason + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FinishReason : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs.html new file mode 100644 index 00000000..dfb22cde --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs.html @@ -0,0 +1,363 @@ + + + + ChoiceLogprobs Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceLogprobs

+
+
+ +
public struct ChoiceLogprobs : Codable, Equatable
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html new file mode 100644 index 00000000..4e8d67fc --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html @@ -0,0 +1,478 @@ + + + + ChatCompletionTokenLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionTokenLogprob

+
+
+ +
public struct ChatCompletionTokenLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. +Useful in instances where characters are represented by multiple tokens and +their byte representations must be combined to generate the correct text +representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    List of the most likely tokens and their log probability, at this token position. +In rare cases, there may be fewer than the number of requested top_logprobs returned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: [TopLogprob]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TopLogprob + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TopLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html new file mode 100644 index 00000000..c15be5f8 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html @@ -0,0 +1,418 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case token
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bytes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprob
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html new file mode 100644 index 00000000..dbcf56c9 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html @@ -0,0 +1,396 @@ + + + + TopLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

TopLogprob

+
+
+ +
public struct TopLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. +Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/CodingKeys.html new file mode 100644 index 00000000..c74c9053 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/CodingKeys.html @@ -0,0 +1,414 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case message
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case finishReason = "finish_reason"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/FinishReason.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/FinishReason.html new file mode 100644 index 00000000..9a2ee189 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice/FinishReason.html @@ -0,0 +1,440 @@ + + + + FinishReason Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

FinishReason

+
+
+ +
public enum FinishReason : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stop
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + length + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case length
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentFilter + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case contentFilter = "content_filter"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + functionCall + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case functionCall = "function_call"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CodingKeys.html new file mode 100644 index 00000000..74f6690a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CodingKeys.html @@ -0,0 +1,490 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case choices
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case usage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case systemFingerprint = "system_fingerprint"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CompletionUsage.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CompletionUsage.html new file mode 100644 index 00000000..d670ccde --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/CompletionUsage.html @@ -0,0 +1,389 @@ + + + + CompletionUsage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionUsage

+
+
+ +
public struct CompletionUsage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    +

    Number of tokens in the generated completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    +

    Number of tokens in the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    +

    Total number of tokens used in the request (prompt + completion).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult.html new file mode 100644 index 00000000..ea9c41c8 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult.html @@ -0,0 +1,524 @@ + + + + ChatStreamResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatStreamResult

+
+
+ +
public struct ChatStreamResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the chat completion. Each chunk has the same ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always chat.completion.chunk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) of when the chat completion was created. +Each chunk has the same timestamp.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to generate the completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    +

    A list of chat completion choices. +Can be more than one if n is greater than 1.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    +

    This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let systemFingerprint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice.html new file mode 100644 index 00000000..07ec3ba2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice.html @@ -0,0 +1,524 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + FinishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias FinishReason = ChatResult.Choice.FinishReason
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceDelta + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDelta : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the choice in the list of choices.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delta + +
    +
    +
    +
    +
    +
    +

    A chat completion delta generated by streamed model responses.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let delta: `Self`.ChoiceDelta
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    +

    The reason the model stopped generating tokens. +This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: FinishReason?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    +

    Log probability information for the choice.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprobs: `Self`.ChoiceLogprobs?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceLogprobs + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceLogprobs : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta.html new file mode 100644 index 00000000..1d2aaf57 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta.html @@ -0,0 +1,470 @@ + + + + ChoiceDelta Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDelta

+
+
+ +
public struct ChoiceDelta : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Role = ChatQuery.ChatCompletionMessageParam.Role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The contents of the chunk message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    +

    The role of the author of this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let role: `Self`.Role?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let toolCalls: [`Self`.ChoiceDeltaToolCall]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ChoiceDeltaToolCall + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDeltaToolCall : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html new file mode 100644 index 00000000..80421b18 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html @@ -0,0 +1,476 @@ + + + + ChoiceDeltaToolCall Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDeltaToolCall

+
+
+ +
public struct ChoiceDeltaToolCall : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The ID of the tool call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + function + +
    +
    +
    +
    +
    +
    +

    The function that the model called.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let function: `Self`.ChoiceDeltaToolCallFunction?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    The type of the tool. Currently, only function is supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    index: Int,
    +    id: String? = nil,
    +    function: Self.ChoiceDeltaToolCallFunction? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChoiceDeltaToolCallFunction : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html new file mode 100644 index 00000000..7859e501 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html @@ -0,0 +1,397 @@ + + + + ChoiceDeltaToolCallFunction Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceDeltaToolCallFunction

+
+
+ +
public struct ChoiceDeltaToolCallFunction : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the function to call.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(arguments:name:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    arguments: String? = nil,
    +    name: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html new file mode 100644 index 00000000..b066c3d9 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html @@ -0,0 +1,390 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case content
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + role + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case role
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toolCalls + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toolCalls = "tool_calls"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html new file mode 100644 index 00000000..6d3adc29 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs.html @@ -0,0 +1,364 @@ + + + + ChoiceLogprobs Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChoiceLogprobs

+
+
+ +
public struct ChoiceLogprobs : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    A list of message content tokens with log probability information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: [`Self`.ChatCompletionTokenLogprob]?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatCompletionTokenLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html new file mode 100644 index 00000000..87b531b2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html @@ -0,0 +1,474 @@ + + + + ChatCompletionTokenLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ChatCompletionTokenLogprob

+
+
+ +
public struct ChatCompletionTokenLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    +

    List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topLogprobs: [`Self`.TopLogprob]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TopLogprob + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TopLogprob : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html new file mode 100644 index 00000000..8cd920fa --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html @@ -0,0 +1,418 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case token
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bytes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprob
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLogprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLogprobs = "top_logprobs"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html new file mode 100644 index 00000000..532a768e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html @@ -0,0 +1,395 @@ + + + + TopLogprob Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

TopLogprob

+
+
+ +
public struct TopLogprob : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + token + +
    +
    +
    +
    +
    +
    +

    The token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let token: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let bytes: [Int]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprob + +
    +
    +
    +
    +
    +
    +

    The log probability of this token.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let logprob: Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/CodingKeys.html new file mode 100644 index 00000000..11ad4d0e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/Choice/CodingKeys.html @@ -0,0 +1,414 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delta + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case delta
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case finishReason = "finish_reason"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + logprobs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case logprobs
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/CodingKeys.html new file mode 100644 index 00000000..6458b785 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatStreamResult/CodingKeys.html @@ -0,0 +1,464 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case choices
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + systemFingerprint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case systemFingerprint = "system_fingerprint"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsQuery.html new file mode 100644 index 00000000..5b863fac --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsQuery.html @@ -0,0 +1,575 @@ + + + + CompletionsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionsQuery

+
+
+ +
public struct CompletionsQuery : Codable, Streamable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maxTokens + +
    +
    +
    +
    +
    +
    +

    The maximum number of tokens to generate in the completion.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let maxTokens: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frequencyPenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let frequencyPenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + presencePenalty + +
    +
    +
    +
    +
    +
    +

    Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let presencePenalty: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop + +
    +
    +
    +
    +
    +
    +

    Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let stop: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, prompt: String, temperature: Double? = nil, maxTokens: Int? = nil, topP: Double? = nil, frequencyPenalty: Double? = nil, presencePenalty: Double? = nil, stop: [String]? = nil, user: String? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult.html new file mode 100644 index 00000000..ac1aaf9e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult.html @@ -0,0 +1,516 @@ + + + + CompletionsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CompletionsResult

+
+
+ +
public struct CompletionsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Choice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Choice.html new file mode 100644 index 00000000..afada57d --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Choice.html @@ -0,0 +1,386 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + finishReason + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let finishReason: String?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Usage.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Usage.html new file mode 100644 index 00000000..e83845d5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/CompletionsResult/Usage.html @@ -0,0 +1,386 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsQuery.html new file mode 100644 index 00000000..d6efa469 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsQuery.html @@ -0,0 +1,494 @@ + + + + EditsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EditsQuery

+
+
+ +
public struct EditsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    Input text to get embeddings for.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + instruction + +
    +
    +
    +
    +
    +
    +

    The instruction that tells the model how to edit the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let instruction: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + temperature + +
    +
    +
    +
    +
    +
    +

    What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let temperature: Double?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topP + +
    +
    +
    +
    +
    +
    +

    An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let topP: Double?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model, input: String?, instruction: String, n: Int? = nil, temperature: Double? = nil, topP: Double? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult.html new file mode 100644 index 00000000..9c4b1915 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult.html @@ -0,0 +1,464 @@ + + + + EditsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EditsResult

+
+
+ +
public struct EditsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Choice + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Choice : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + choices + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let choices: [Choice]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Choice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Choice.html new file mode 100644 index 00000000..0cfccc44 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Choice.html @@ -0,0 +1,360 @@ + + + + Choice Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Choice

+
+
+ +
public struct Choice : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Usage.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Usage.html new file mode 100644 index 00000000..1e848023 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EditsResult/Usage.html @@ -0,0 +1,386 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + completionTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let completionTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery.html new file mode 100644 index 00000000..fb78cd32 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery.html @@ -0,0 +1,530 @@ + + + + EmbeddingsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EmbeddingsQuery

+
+
+ +
public struct EmbeddingsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: `Self`.Input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them. +https://platform.openai.com/docs/api-reference/models/list +https://platform.openai.com/docs/models/overview

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encodingFormat + +
    +
    +
    +
    +
    +
    +

    The format to return the embeddings in. Can be either float or base64. +https://pypi.org/project/pybase64/

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let encodingFormat: `Self`.EncodingFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    input: Self.Input,
    +    model: Model,
    +    encodingFormat: Self.EncodingFormat? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Input + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Input : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EncodingFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EncodingFormat : String, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/CodingKeys.html new file mode 100644 index 00000000..994c7dcf --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/CodingKeys.html @@ -0,0 +1,412 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case input
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encodingFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encodingFormat = "encoding_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/EncodingFormat.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/EncodingFormat.html new file mode 100644 index 00000000..d1d98399 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/EncodingFormat.html @@ -0,0 +1,360 @@ + + + + EncodingFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EncodingFormat

+
+
+ +
public enum EncodingFormat : String, Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + float + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case float
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + base64 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case base64
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/Input.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/Input.html new file mode 100644 index 00000000..ff7e775a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsQuery/Input.html @@ -0,0 +1,542 @@ + + + + Input Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Input

+
+
+ +
public enum Input : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case string(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stringList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stringList([String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intList(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case intList([Int])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intMatrix(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case intMatrix([[Int]])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + encode(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func encode(to encoder: Encoder) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(string:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(stringList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringList: [String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intList:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intList: [Int])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intMatrix:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intMatrix: [[Int]])
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult.html new file mode 100644 index 00000000..d8251f10 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult.html @@ -0,0 +1,465 @@ + + + + EmbeddingsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

EmbeddingsResult

+
+
+ +
public struct EmbeddingsResult : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Embedding + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Embedding : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Usage + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Usage : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [Embedding]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usage + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let usage: Usage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “list”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Embedding.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Embedding.html new file mode 100644 index 00000000..71f10564 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Embedding.html @@ -0,0 +1,390 @@ + + + + Embedding Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Embedding

+
+
+ +
public struct Embedding : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “embedding”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + embedding + +
    +
    +
    +
    +
    +
    +

    The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide. +https://platform.openai.com/docs/guides/embeddings

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let embedding: [Double]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index + +
    +
    +
    +
    +
    +
    +

    The index of the embedding in the list of embeddings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let index: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Usage.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Usage.html new file mode 100644 index 00000000..ac8f6faf --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/EmbeddingsResult/Usage.html @@ -0,0 +1,360 @@ + + + + Usage Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Usage

+
+
+ +
public struct Usage : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + promptTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let promptTokens: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalTokens + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let totalTokens: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery.html new file mode 100644 index 00000000..b4f190f8 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery.html @@ -0,0 +1,639 @@ + + + + ImageEditsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageEditsQuery

+
+
+ +
public struct ImageEditsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = ImagesQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Size = ImagesQuery.Size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let image: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mask + +
    +
    +
    +
    +
    +
    +

    An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let mask: Data?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    A text description of the desired image(s). The maximum length is 1000 characters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: Size?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: Data,
    +    prompt: String,
    +    mask: Data? = nil,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: Self.Size? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery/CodingKeys.html new file mode 100644 index 00000000..003f87f3 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageEditsQuery/CodingKeys.html @@ -0,0 +1,516 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mask + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mask
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prompt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery.html new file mode 100644 index 00000000..a2e95236 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery.html @@ -0,0 +1,559 @@ + + + + ImageVariationsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImageVariationsQuery

+
+
+ +
public struct ImageVariationsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ResponseFormat = ImagesQuery.ResponseFormat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to edit. Must be a valid PNG file, less than 4MB, and square.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let image: Data
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. Only dall-e-2 is supported at this time. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024. +Defaults to 1024x1024

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: Data,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: String? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery/CodingKeys.html new file mode 100644 index 00000000..d3c555a5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImageVariationsQuery/CodingKeys.html @@ -0,0 +1,464 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery.html new file mode 100644 index 00000000..4812d094 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery.html @@ -0,0 +1,701 @@ + + + + ImagesQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImagesQuery

+
+
+ +
public struct ImagesQuery : Codable
+ +
+
+

Given a prompt and/or an input image, the model will generate a new image. +https://platform.openai.com/docs/guides/images

+ +
+
+
+
    +
  • +
    + + + + ResponseFormat + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ResponseFormat : String, Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    +

    A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let prompt: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The model to use for image generation. +Defaults to dall-e-2

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    +

    The format in which the generated images are returned. Must be one of url or b64_json. +Defaults to url

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let responseFormat: `Self`.ResponseFormat?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    +

    The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported. +Defaults to 1

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let n: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models. +Defaults to 1024x1024

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: `Self`.Size?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. +https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + style + +
    +
    +
    +
    +
    +
    +

    The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3. +Defaults to vivid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let style: `Self`.Style?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quality + +
    +
    +
    +
    +
    +
    +

    The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3. +Defaults to standard

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let quality: `Self`.Quality?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    prompt: String,
    +    model: Model? = nil,
    +    n: Int? = nil,
    +    quality:Self.Quality? = nil,
    +    responseFormat: Self.ResponseFormat? = nil,
    +    size: Size? = nil,
    +    style: Self.Style? = nil,
    +    user: String? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Style + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Style : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Quality + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Quality : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Size + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Size : String, Codable, CaseIterable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/CodingKeys.html new file mode 100644 index 00000000..bf4b7cbf --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/CodingKeys.html @@ -0,0 +1,516 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prompt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + n + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case n
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case size
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case user
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + style + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case style
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + responseFormat + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case responseFormat = "response_format"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quality + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case quality
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Quality.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Quality.html new file mode 100644 index 00000000..99029b9a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Quality.html @@ -0,0 +1,360 @@ + + + + Quality Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Quality

+
+
+ +
public enum Quality : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + standard + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case standard
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hd + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hd
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/ResponseFormat.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/ResponseFormat.html new file mode 100644 index 00000000..6b771624 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/ResponseFormat.html @@ -0,0 +1,360 @@ + + + + ResponseFormat Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ResponseFormat

+
+
+ +
public enum ResponseFormat : String, Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case url
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + b64_json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case b64_json
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Size.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Size.html new file mode 100644 index 00000000..4bee5dbb --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Size.html @@ -0,0 +1,438 @@ + + + + Size Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Size

+
+
+ +
public enum Size : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + _256 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _256 = "256x256"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _512 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _512 = "512x512"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1024 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1024 = "1024x1024"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1792_1024 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1792_1024 = "1792x1024"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + _1024_1792 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case _1024_1792 = "1024x1792"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Style.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Style.html new file mode 100644 index 00000000..6376cc05 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesQuery/Style.html @@ -0,0 +1,360 @@ + + + + Style Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Style

+
+
+ +
public enum Style : String, Codable, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + natural + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case natural
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vivid + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vivid
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult.html new file mode 100644 index 00000000..80096634 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult.html @@ -0,0 +1,387 @@ + + + + ImagesResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ImagesResult

+
+
+ +
public struct ImagesResult : Codable, Equatable
+ +
+
+

Returns a list of image objects.

+ +
+
+
+
    +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [`Self`.Image]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Image + +
    +
    +
    +
    +
    +
    +

    Represents the url or the content of an image generated by the OpenAI API.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Image : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image.html new file mode 100644 index 00000000..3facad36 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image.html @@ -0,0 +1,417 @@ + + + + Image Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Image

+
+
+ +
public struct Image : Codable, Equatable
+ +
+
+

Represents the url or the content of an image generated by the OpenAI API.

+ +
+
+
+
    +
  • +
    + + + + b64Json + +
    +
    +
    +
    +
    +
    +

    The base64-encoded JSON of the generated image, if response_format is b64_json

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let b64Json: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + revisedPrompt + +
    +
    +
    +
    +
    +
    +

    The prompt that was used to generate the image, if there was any revision to the prompt.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let revisedPrompt: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    The URL of the generated image, if response_format is url (default).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let url: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image/CodingKeys.html new file mode 100644 index 00000000..6993ab03 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ImagesResult/Image/CodingKeys.html @@ -0,0 +1,388 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + b64Json + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case b64Json = "b64_json"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + revisedPrompt + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case revisedPrompt = "revised_prompt"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case url
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelQuery.html new file mode 100644 index 00000000..f359c1fc --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelQuery.html @@ -0,0 +1,360 @@ + + + + ModelQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelQuery

+
+
+ +
public struct ModelQuery : Codable, Equatable
+ +
+
+

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

+ +
+
+
+
    +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    The ID of the model to use for this request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(model:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(model: Model)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult.html new file mode 100644 index 00000000..2e416535 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult.html @@ -0,0 +1,442 @@ + + + + ModelResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelResult

+
+
+ +
public struct ModelResult : Codable, Equatable
+ +
+
+

The model object matching the specified ID.

+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The model identifier, which can be referenced in the API endpoints.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    +

    The Unix timestamp (in seconds) when the model was created.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let created: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always “model”.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ownedBy + +
    +
    +
    +
    +
    +
    +

    The organization that owns the model.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let ownedBy: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult/CodingKeys.html new file mode 100644 index 00000000..cc3da332 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelResult/CodingKeys.html @@ -0,0 +1,412 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey
+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case id
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + created + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case created
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case object
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ownedBy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ownedBy = "owned_by"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelsResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelsResult.html new file mode 100644 index 00000000..0aadfcf5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModelsResult.html @@ -0,0 +1,361 @@ + + + + ModelsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModelsResult

+
+
+ +
public struct ModelsResult : Codable, Equatable
+ +
+
+

A list of model objects.

+ +
+
+
+
    +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    A list of model objects.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: [ModelResult]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The object type, which is always list

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsQuery.html new file mode 100644 index 00000000..8749658a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsQuery.html @@ -0,0 +1,386 @@ + + + + ModerationsQuery Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModerationsQuery

+
+
+ +
public struct ModerationsQuery : Codable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + input + +
    +
    +
    +
    +
    +
    +

    The input text to classify.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let input: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    +

    ID of the model to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(input:model:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(input: String, model: Model? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult.html new file mode 100644 index 00000000..6a579df1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult.html @@ -0,0 +1,412 @@ + + + + ModerationsResult Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

ModerationsResult

+
+
+ +
public struct ModerationsResult : Codable, Equatable
+
extension ModerationsResult: Identifiable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Moderation + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Moderation : Codable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + model + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let model: Model
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + results + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let results: [`Self`.Moderation]
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation.html new file mode 100644 index 00000000..634e1d49 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation.html @@ -0,0 +1,443 @@ + + + + Moderation Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Moderation

+
+
+ +
public struct Moderation : Codable, Equatable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Categories + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Categories : Codable, Equatable, Sequence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CategoryScores + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CategoryScores : Codable, Equatable, Sequence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    +

    Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let categories: Categories
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categoryScores + +
    +
    +
    +
    +
    +
    +

    Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let categoryScores: CategoryScores
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flagged + +
    +
    +
    +
    +
    +
    +

    True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let flagged: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories.html new file mode 100644 index 00000000..24b32f05 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories.html @@ -0,0 +1,660 @@ + + + + Categories Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Categories

+
+
+ +
public struct Categories : Codable, Equatable, Sequence
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes harassing language towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassment: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    +

    Harassment content that also includes violence or serious harm towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassmentThreatening: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hate: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    +

    Hateful content that also includes violence or serious harm towards the targeted group.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hateThreatening: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    +

    Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarm: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    +

    Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmIntent: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    +

    Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmInstructions: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    +

    Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexual: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    +

    Sexual content that includes an individual who is under 18 years old.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexualMinors: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    +

    Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violence: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    +

    Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violenceGraphic: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeIterator() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func makeIterator() -> IndexingIterator<[(String, Bool)]>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html new file mode 100644 index 00000000..1f7905fe --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/Categories/CodingKeys.html @@ -0,0 +1,598 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassmentThreatening = "harassment/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hateThreatening = "hate/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarm = "self-harm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmIntent = "self-harm/intent"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmInstructions = "self-harm/instructions"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexualMinors = "sexual/minors"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violenceGraphic = "violence/graphic"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores.html new file mode 100644 index 00000000..ebc27305 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores.html @@ -0,0 +1,660 @@ + + + + CategoryScores Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CategoryScores

+
+
+ +
public struct CategoryScores : Codable, Equatable, Sequence
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes harassing language towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassment: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    +

    Harassment content that also includes violence or serious harm towards any target.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let harassmentThreatening: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    +

    Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hate: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    +

    Hateful content that also includes violence or serious harm towards the targeted group.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hateThreatening: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    +

    Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarm: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    +

    Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmIntent: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    +

    Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let selfHarmInstructions: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    +

    Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexual: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    +

    Sexual content that includes an individual who is under 18 years old.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sexualMinors: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    +

    Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violence: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    +

    Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let violenceGraphic: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CodingKeys + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CodingKeys : String, CodingKey, CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeIterator() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func makeIterator() -> IndexingIterator<[(String, Bool)]>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html new file mode 100644 index 00000000..9ceabfbf --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html @@ -0,0 +1,598 @@ + + + + CodingKeys Enumeration Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

CodingKeys

+
+
+ +
public enum CodingKeys : String, CodingKey, CaseIterable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + harassment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + harassmentThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case harassmentThreatening = "harassment/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hate + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hateThreatening + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hateThreatening = "hate/threatening"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarm + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarm = "self-harm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmIntent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmIntent = "self-harm/intent"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selfHarmInstructions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selfHarmInstructions = "self-harm/instructions"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexual + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexual
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sexualMinors + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sexualMinors = "sexual/minors"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violence + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violence
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + violenceGraphic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case violenceGraphic = "violence/graphic"
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/Vector.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/Vector.html new file mode 100644 index 00000000..353605b1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/Vector.html @@ -0,0 +1,422 @@ + + + + Vector Structure Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Vector

+
+
+ +
public struct Vector
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns the similarity between two vectors

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cosineSimilarity(a: [Double], b: [Double]) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + a + + +
    +

    The first vector

    +
    +
    + + b + + +
    +

    The second vector

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cosineDifference(a: [Double], b: [Double]) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + a + + +
    +

    The first vector

    +
    +
    + + b + + +
    +

    The second vector

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/.docset/Contents/Resources/Documents/Typealiases.html new file mode 100644 index 00000000..1b045dd1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Typealiases.html @@ -0,0 +1,325 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + Model + +
    +
    +
    +
    +
    +
    +

    Defines all available OpenAI models supported by the library.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Model = String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/badge.svg b/docs/docsets/.docset/Contents/Resources/Documents/badge.svg new file mode 100644 index 00000000..a096feca --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 100% + + + 100% + + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 00000000..c170357c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 00000000..f84ef864 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,442 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +pre > code { + padding: 0; } + +a { + color: #0088cc; + text-decoration: none; } + a code { + color: inherit; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +hr { + height: 1px; + border: none; + background-color: #e2e2e2; } + +.footnote-ref { + display: inline-block; + scroll-margin-top: 70px; } + +.footnote-def { + scroll-margin-top: 70px; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 32px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 3; } + header img { + padding-right: 6px; + vertical-align: -3px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 26px; + padding-top: 12px; + position: fixed; + width: inherit; + z-index: 2; + margin-top: 32px; + white-space: nowrap; + overflow-x: scroll; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + margin-top: 10px; + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + +.declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } + +form[role=search] { + float: right; } + form[role=search] input { + font: Helvetica, freesans, Arial, sans-serif; + margin-top: 6px; + font-size: 13px; + line-height: 20px; + padding: 0px 10px; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fff; + color: #333; + border: 1px solid #e2e2e2; + z-index: 4; } + form[role=search] .tt-highlight { + font-weight: bold; } + form[role=search] .tt-suggestion { + font: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + form[role=search] .tt-suggestion:hover, + form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + form[role=search] .tt-suggestion:hover .doc-parent-name, + form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 zcmaJ>U2NM_6t){^r>#wcfL0VSTvuX@)$vd4#5N6WVkc|1rR}naMb)(7I5(};#!el# zbtCASsp?W-qE8zSJoFVdA%-T$WL8RI_B? zd+t5o`T5Q{p6=<|U$?VqCxRe#u}(PwSIl{LRKstfSbPYV7pzFiI$~t4QN;vEC}X4n z7RxDpAOV!j*w8ni4MAK3S~6v&;)g`l$axh<$7|>E5RD*h?RH*K2Y`j8L7%1v@%vZi za7@bt@uOUvisvQJuXPqpaHQCkREqd6M>0WG?6AwXR*T65ziuw$&~q$MS$o zfPyh>s<0l}mI@eh_hd(oB8*1tHZ@ojWl%QM;T+Jdm>k66jW?rZ#Atx!qns4-g&E4v z(=;FQ%W^avW?3J{L@2IeV>_(Ca)Lk1vm70uX*$9Rewm8!AxRF0BcZTNSFka?U@5u^ zDtpMY2lVtCmQm<8@|YxHuf`Qs(;a!QQ=g4=WngL}AQLr> z9JWrdsBIHKHXF!fSydodRsaOc@jgNkSU^x9kY&;UP<}3pZ{joC5f_Tevd>4eG~;)Y z=eZ~qp=5#aaUn*E3OES^BApKTU&mCAU>iEyt^S9?)&v0^j*SWDqjRZr20>6rTPSJ& zlzz0f);`}+^~w}lP1PK7Ew3f7ot#*uJ@>1Yo3J0TdsRKpA+*n9JnDXDrM~YvF`;uS|vAh|-QdmRf4AqG=`U z#v1n_Lxg8;&z#YCU2K`_W{-A zUf_|V)B9U(WZ~PP>)O(JZ|Vc-*qP&Q{MB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/docsets/.docset/Contents/Resources/Documents/index.html b/docs/docsets/.docset/Contents/Resources/Documents/index.html new file mode 100644 index 00000000..38545af2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,1280 @@ + + + + Index Reference + + + + + + + + + + + + +
+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+ +

OpenAI

+ +

logo

+ +
+ +

Swift Workflow + + +Twitter

+ +

This repository contains Swift community-maintained implementation over OpenAI public API.

+ + +

What is OpenAI

+ +

OpenAI is a non-profit artificial intelligence research organization founded in San Francisco, California in 2015. It was created with the purpose of advancing digital intelligence in ways that benefit humanity as a whole and promote societal progress. The organization strives to develop AI (Artificial Intelligence) programs and systems that can think, act and adapt quickly on their own – autonomously. OpenAI’s mission is to ensure safe and responsible use of AI for civic good, economic growth and other public benefits; this includes cutting-edge research into important topics such as general AI safety, natural language processing, applied reinforcement learning methods, machine vision algorithms etc.

+ +
+

The OpenAI API can be applied to virtually any task that involves understanding or generating natural language or code. We offer a spectrum of models with different levels of power suitable for different tasks, as well as the ability to fine-tune your own custom models. These models can be used for everything from content generation to semantic search and classification.

+
+

Installation

+ +

OpenAI is available with Swift Package Manager. +The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. +Once you have your Swift package set up, adding OpenAI as a dependency is as easy as adding it to the dependencies value of your Package.swift.

+
dependencies: [
+    .package(url: "https://github.com/MacPaw/OpenAI.git", branch: "main")
+]
+
+

Usage

+

Initialization

+ +

To initialize API instance you need to obtain API token from your Open AI organization.

+ +

Remember that your API key is a secret! Do not share it with others or expose it in any client-side code (browsers, apps). Production requests must be routed through your own backend server where your API key can be securely loaded from an environment variable or key management service.

+ +

company

+ +

Once you have a token, you can initialize OpenAI class, which is an entry point to the API.

+ +
+

⚠️ OpenAI strongly recommends developers of client-side applications proxy requests through a separate backend service to keep their API key safe. API keys can access and manipulate customer billing, usage, and organizational data, so it’s a significant risk to expose them.

+
+
let openAI = OpenAI(apiToken: "YOUR_TOKEN_HERE")
+
+ +

Optionally you can initialize OpenAI with token, organization identifier and timeoutInterval.

+
let configuration = OpenAI.Configuration(token: "YOUR_TOKEN_HERE", organizationIdentifier: "YOUR_ORGANIZATION_ID_HERE", timeoutInterval: 60.0)
+let openAI = OpenAI(configuration: configuration)
+
+ +

Once token you posses the token, and the instance is initialized you are ready to make requests.

+

Completions

+ +

Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.

+ +

Request

+
struct CompletionsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.
+    public let prompt: String
+    /// What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.
+    public let temperature: Double?
+    /// The maximum number of tokens to generate in the completion.
+    public let maxTokens: Int?
+    /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+    public let topP: Double?
+    /// Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
+    public let frequencyPenalty: Double?
+    /// Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
+    public let presencePenalty: Double?
+    /// Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.
+    public let stop: [String]?
+    /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
+    public let user: String?
+}
+
+ +

Response

+
struct CompletionsResult: Codable, Equatable {
+    public struct Choice: Codable, Equatable {
+        public let text: String
+        public let index: Int
+    }
+
+    public let id: String
+    public let object: String
+    public let created: TimeInterval
+    public let model: Model
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?", temperature: 0, maxTokens: 100, topP: 1, frequencyPenalty: 0, presencePenalty: 0, stop: ["\\n"])
+openAI.completions(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.completions(query: query)
+
+
(lldb) po result
+▿ CompletionsResult
+  - id : "cmpl-6P9be2p2fQlwB7zTOl0NxCOetGmX3"
+  - object : "text_completion"
+  - created : 1671453146.0
+  - model : OpenAI.Model.textDavinci_003
+  ▿ choices : 1 element
+    ▿ 0 : Choice
+      - text : "\n\n42 is the answer to the ultimate question of life, the universe, and everything, according to the book The Hitchhiker\'s Guide to the Galaxy."
+      - index : 0
+
+

Completions Streaming

+ +

Completions streaming is available by using completionsStream function. Tokens will be sent one-by-one.

+ +

Closures

+
openAI.completionsStream(query: query) { partialResult in
+    switch partialResult {
+    case .success(let result):
+        print(result.choices)
+    case .failure(let error):
+        //Handle chunk error here
+    }
+} completion: { error in
+    //Handle streaming error here
+}
+
+ +

Combine

+
openAI
+    .completionsStream(query: query)
+    .sink { completion in
+        //Handle completion result here
+    } receiveValue: { result in
+        //Handle chunk here
+    }.store(in: &cancellables)
+
+ +

Structured concurrency

+
for try await result in openAI.completionsStream(query: query) {
+   //Handle result here
+}
+
+ +

Review Completions Documentation for more info.

+

Chats

+ +

Using the OpenAI Chat API, you can build your own applications with gpt-3.5-turbo to do things like:

+ +
    +
  • Draft an email or other piece of writing
  • +
  • Write Python code
  • +
  • Answer questions about a set of documents
  • +
  • Create conversational agents
  • +
  • Give your software a natural language interface
  • +
  • Tutor in a range of subjects
  • +
  • Translate languages
  • +
  • Simulate characters for video games and much more
  • +
+ +

Request

+
 struct ChatQuery: Codable {
+     /// ID of the model to use. Currently, only gpt-3.5-turbo and gpt-3.5-turbo-0301 are supported.
+     public let model: Model
+     /// The messages to generate chat completions for
+     public let messages: [Chat]
+     /// A list of functions the model may generate JSON inputs for.
+     public let functions: [ChatFunctionDeclaration]?
+     /// What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and  We generally recommend altering this or top_p but not both.
+     public let temperature: Double?
+     /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+     public let topP: Double?
+     /// How many chat completion choices to generate for each input message.
+     public let n: Int?
+     /// Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.
+     public let stop: [String]?
+     /// The maximum number of tokens to generate in the completion.
+     public let maxTokens: Int?
+     /// Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
+     public let presencePenalty: Double?
+     /// Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
+     public let frequencyPenalty: Double?
+     ///Modify the likelihood of specified tokens appearing in the completion.
+     public let logitBias: [String:Int]?
+     /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
+     public let user: String?
+}
+
+ +

Response

+
struct ChatResult: Codable, Equatable {
+    public struct Choice: Codable, Equatable {
+        public let index: Int
+        public let message: Chat
+        public let finishReason: String
+    }
+
+    public struct Usage: Codable, Equatable {
+        public let promptTokens: Int
+        public let completionTokens: Int
+        public let totalTokens: Int
+    }
+
+    public let id: String
+    public let object: String
+    public let created: TimeInterval
+    public let model: Model
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: .user, content: "who are you")])
+let result = try await openAI.chats(query: query)
+
+
(lldb) po result
+▿ ChatResult
+  - id : "chatcmpl-6pwjgxGV2iPP4QGdyOLXnTY0LE3F8"
+  - object : "chat.completion"
+  - created : 1677838528.0
+  - model : "gpt-3.5-turbo-0301"
+  ▿ choices : 1 element
+    ▿ 0 : Choice
+      - index : 0
+      ▿ message : Chat
+        - role : "assistant"
+        - content : "\n\nI\'m an AI language model developed by OpenAI, created to provide assistance and support for various tasks such as answering questions, generating text, and providing recommendations. Nice to meet you!"
+      - finish_reason : "stop"
+  ▿ usage : Usage
+    - prompt_tokens : 10
+    - completion_tokens : 39
+    - total_tokens : 49
+
+

Chats Streaming

+ +

Chats streaming is available by using chatStream function. Tokens will be sent one-by-one.

+ +

Closures

+
openAI.chatsStream(query: query) { partialResult in
+    switch partialResult {
+    case .success(let result):
+        print(result.choices)
+    case .failure(let error):
+        //Handle chunk error here
+    }
+} completion: { error in
+    //Handle streaming error here
+}
+
+ +

Combine

+
openAI
+    .chatsStream(query: query)
+    .sink { completion in
+        //Handle completion result here
+    } receiveValue: { result in
+        //Handle chunk here
+    }.store(in: &cancellables)
+
+ +

Structured concurrency

+
for try await result in openAI.chatsStream(query: query) {
+   //Handle result here
+}
+
+ +

Function calls

+
let openAI = OpenAI(apiToken: "...")
+// Declare functions which GPT-3 might decide to call.
+let functions = [
+  ChatFunctionDeclaration(
+      name: "get_current_weather",
+      description: "Get the current weather in a given location",
+      parameters:
+        JSONSchema(
+          type: .object,
+          properties: [
+            "location": .init(type: .string, description: "The city and state, e.g. San Francisco, CA"),
+            "unit": .init(type: .string, enumValues: ["celsius", "fahrenheit"])
+          ],
+          required: ["location"]
+        )
+  )
+]
+let query = ChatQuery(
+  model: "gpt-3.5-turbo-0613",  // 0613 is the earliest version with function calls support.
+  messages: [
+      Chat(role: .user, content: "What's the weather like in Boston?")
+  ],
+  functions: functions
+)
+let result = try await openAI.chats(query: query)
+
+ +

Result will be (serialized as JSON here for readability):

+
{
+  "id": "chatcmpl-1234",
+  "object": "chat.completion",
+  "created": 1686000000,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "function_call": {
+          "name": "get_current_weather",
+          "arguments": "{\n  \"location\": \"Boston, MA\"\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": { "total_tokens": 100, "completion_tokens": 18, "prompt_tokens": 82 }
+}
+
+
+ +

Review Chat Documentation for more info.

+

Images

+ +

Given a prompt and/or an input image, the model will generate a new image.

+ +

As Artificial Intelligence continues to develop, so too does the intriguing concept of Dall-E. Developed by OpenAI, a research lab for artificial intelligence purposes, Dall-E has been classified as an AI system that can generate images based on descriptions provided by humans. With its potential applications spanning from animation and illustration to design and engineering - not to mention the endless possibilities in between - it’s easy to see why there is such excitement over this new technology.

+

Create Image

+ +

Request

+
struct ImagesQuery: Codable {
+    /// A text description of the desired image(s). The maximum length is 1000 characters.
+    public let prompt: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+
struct ImagesResult: Codable, Equatable {
+    public struct URLResult: Codable, Equatable {
+        public let url: String
+    }
+    public let created: TimeInterval
+    public let data: [URLResult]
+}
+
+ +

Example

+
let query = ImagesQuery(prompt: "White cat with heterochromia sitting on the kitchen table", n: 1, size: "1024x1024")
+openAI.images(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.images(query: query)
+
+
(lldb) po result
+▿ ImagesResult
+  - created : 1671453505.0
+  ▿ data : 1 element
+    ▿ 0 : URLResult
+      - url : "https://oaidalleapiprodscus.blob.core.windows.net/private/org-CWjU5cDIzgCcVjq10pp5yX5Q/user-GoBXgChvLBqLHdBiMJBUbPqF/img-WZVUK2dOD4HKbKwW1NeMJHBd.png?st=2022-12-19T11%3A38%3A25Z&se=2022-12-19T13%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2022-12-19T09%3A35%3A16Z&ske=2022-12-20T09%3A35%3A16Z&sks=b&skv=2021-08-06&sig=mh52rmtbQ8CXArv5bMaU6lhgZHFBZz/ePr4y%2BJwLKOc%3D"
+
+ +

Generated image

+ +

Generated Image

+

Create Image Edit

+ +

Creates an edited or extended image given an original image and a prompt.

+ +

Request

+
public struct ImageEditsQuery: Codable {
+    /// The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.
+    public let image: Data
+    public let fileName: String
+    /// An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.
+    public let mask: Data?
+    public let maskFileName: String?
+    /// A text description of the desired image(s). The maximum length is 1000 characters.
+    public let prompt: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+ +

Uses the ImagesResult response similarly to ImagesQuery.

+ +

Example

+
let data = image.pngData()
+let query = ImageEditQuery(image: data, fileName: "whitecat.png", prompt: "White cat with heterochromia sitting on the kitchen table with a bowl of food", n: 1, size: "1024x1024")
+openAI.imageEdits(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.imageEdits(query: query)
+
+

Create Image Variation

+ +

Creates a variation of a given image.

+ +

Request

+
public struct ImageVariationsQuery: Codable {
+    /// The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.
+    public let image: Data
+    public let fileName: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+ +

Uses the ImagesResult response similarly to ImagesQuery.

+ +

Example

+
let data = image.pngData()
+let query = ImageVariationQuery(image: data, fileName: "whitecat.png", n: 1, size: "1024x1024")
+openAI.imageVariations(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.imageVariations(query: query)
+
+ +

Review Images Documentation for more info.

+

Audio

+ +

The speech to text API provides two endpoints, transcriptions and translations, based on our state-of-the-art open source large-v2 Whisper model. They can be used to:

+ +

Transcribe audio into whatever language the audio is in. +Translate and transcribe the audio into english. +File uploads are currently limited to 25 MB and the following input file types are supported: mp3, mp4, mpeg, mpga, m4a, wav, and webm.

+

Audio Create Speech

+ +

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

+ +

Learn more about voices.
+Learn more about models.

+ +

Request:

+
public struct AudioSpeechQuery: Codable, Equatable {
+    //...
+    public let model: Model // tts-1 or tts-1-hd  
+    public let input: String
+    public let voice: AudioSpeechVoice
+    public let responseFormat: AudioSpeechResponseFormat
+    public let speed: String? // Initializes with Double?
+    //...
+}
+
+ +

Response:

+
/// Audio data for one of the following formats :`mp3`, `opus`, `aac`, `flac`
+public let audioData: Data?
+
+ +

Example:

+
let query = AudioSpeechQuery(model: .tts_1, input: "Hello, world!", voice: .alloy, responseFormat: .mp3, speed: 1.0)
+
+openAI.audioCreateSpeech(query: query) { result in
+    // Handle response here
+}
+//or
+let result = try await openAI.audioCreateSpeech(query: query)
+
+ +

OpenAI Create Speech – Documentation

+

Audio Transcriptions

+ +

Transcribes audio into the input language.

+ +

Request

+
public struct AudioTranscriptionQuery: Codable, Equatable {
+
+    public let file: Data
+    public let fileName: String
+    public let model: Model
+
+    public let prompt: String?
+    public let temperature: Double?
+    public let language: String?
+}
+
+ +

Response

+
public struct AudioTranscriptionResult: Codable, Equatable {
+
+    public let text: String
+}
+
+ +

Example

+
let data = Data(contentsOfURL:...)
+let query = AudioTranscriptionQuery(file: data, fileName: "audio.m4a", model: .whisper_1)        
+
+openAI.audioTranscriptions(query: query) { result in
+    //Handle result here
+}
+//or
+let result = try await openAI.audioTranscriptions(query: query)
+
+

Audio Translations

+ +

Translates audio into into English.

+ +

Request

+
public struct AudioTranslationQuery: Codable, Equatable {
+
+    public let file: Data
+    public let fileName: String
+    public let model: Model
+
+    public let prompt: String?
+    public let temperature: Double?
+}    
+
+ +

Response

+
public struct AudioTranslationResult: Codable, Equatable {
+
+    public let text: String
+}
+
+ +

Example

+
let data = Data(contentsOfURL:...)
+let query = AudioTranslationQuery(file: data, fileName: "audio.m4a", model: .whisper_1)  
+
+openAI.audioTranslations(query: query) { result in
+    //Handle result here
+}
+//or
+let result = try await openAI.audioTranslations(query: query)
+
+ +

Review Audio Documentation for more info.

+

Edits

+ +

Creates a new edit for the provided input, instruction, and parameters.

+ +

Request

+
struct EditsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// Input text to get embeddings for.
+    public let input: String?
+    /// The instruction that tells the model how to edit the prompt.
+    public let instruction: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.
+    public let temperature: Double?
+    /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+    public let topP: Double?
+}
+
+ +

Response

+
struct EditsResult: Codable, Equatable {
+
+    public struct Choice: Codable, Equatable {
+        public let text: String
+        public let index: Int
+    }
+
+    public struct Usage: Codable, Equatable {
+        public let promptTokens: Int
+        public let completionTokens: Int
+        public let totalTokens: Int
+
+        enum CodingKeys: String, CodingKey {
+            case promptTokens = "prompt_tokens"
+            case completionTokens = "completion_tokens"
+            case totalTokens = "total_tokens"
+        }
+    }
+
+    public let object: String
+    public let created: TimeInterval
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = EditsQuery(model: .gpt4, input: "What day of the wek is it?", instruction: "Fix the spelling mistakes")
+openAI.edits(query: query) { result in
+  //Handle response here
+}
+//or
+let result = try await openAI.edits(query: query)
+
+ +

Review Edits Documentation for more info.

+

Embeddings

+ +

Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.

+ +

Request

+
struct EmbeddingsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// Input text to get embeddings for
+    public let input: String
+}
+
+ +

Response

+
struct EmbeddingsResult: Codable, Equatable {
+
+    public struct Embedding: Codable, Equatable {
+
+        public let object: String
+        public let embedding: [Double]
+        public let index: Int
+    }
+    public let data: [Embedding]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = EmbeddingsQuery(model: .textSearchBabbageDoc, input: "The food was delicious and the waiter...")
+openAI.embeddings(query: query) { result in
+  //Handle response here
+}
+//or
+let result = try await openAI.embeddings(query: query)
+
+
(lldb) po result
+▿ EmbeddingsResult
+  ▿ data : 1 element
+    ▿ 0 : Embedding
+      - object : "embedding"
+      ▿ embedding : 2048 elements
+        - 0 : 0.0010535449
+        - 1 : 0.024234328
+        - 2 : -0.0084999
+        - 3 : 0.008647452
+    .......
+        - 2044 : 0.017536353
+        - 2045 : -0.005897616
+        - 2046 : -0.026559394
+        - 2047 : -0.016633155
+      - index : 0
+
+(lldb)
+
+ +

Review Embeddings Documentation for more info.

+

Models

+ +

Models are represented as a typealias typealias Model = String.

+
public extension Model {
+    static let gpt4_turbo_preview = "gpt-4-turbo-preview"
+    static let gpt4_vision_preview = "gpt-4-vision-preview"
+    static let gpt4_0125_preview = "gpt-4-0125-preview"
+    static let gpt4_1106_preview = "gpt-4-1106-preview"
+    static let gpt4 = "gpt-4"
+    static let gpt4_0613 = "gpt-4-0613"
+    static let gpt4_0314 = "gpt-4-0314"
+    static let gpt4_32k = "gpt-4-32k"
+    static let gpt4_32k_0613 = "gpt-4-32k-0613"
+    static let gpt4_32k_0314 = "gpt-4-32k-0314"
+
+    static let gpt3_5Turbo = "gpt-3.5-turbo"
+    static let gpt3_5Turbo_0125 = "gpt-3.5-turbo-0125"
+    static let gpt3_5Turbo_1106 = "gpt-3.5-turbo-1106"
+    static let gpt3_5Turbo_0613 = "gpt-3.5-turbo-0613"
+    static let gpt3_5Turbo_0301 = "gpt-3.5-turbo-0301"
+    static let gpt3_5Turbo_16k = "gpt-3.5-turbo-16k"
+    static let gpt3_5Turbo_16k_0613 = "gpt-3.5-turbo-16k-0613"
+
+    static let textDavinci_003 = "text-davinci-003"
+    static let textDavinci_002 = "text-davinci-002"
+    static let textCurie = "text-curie-001"
+    static let textBabbage = "text-babbage-001"
+    static let textAda = "text-ada-001"
+
+    static let textDavinci_001 = "text-davinci-001"
+    static let codeDavinciEdit_001 = "code-davinci-edit-001"
+
+    static let tts_1 = "tts-1"
+    static let tts_1_hd = "tts-1-hd"
+
+    static let whisper_1 = "whisper-1"
+
+    static let dall_e_2 = "dall-e-2"
+    static let dall_e_3 = "dall-e-3"
+
+    static let davinci = "davinci"
+    static let curie = "curie"
+    static let babbage = "babbage"
+    static let ada = "ada"
+
+    static let textEmbeddingAda = "text-embedding-ada-002"
+    static let textSearchAda = "text-search-ada-doc-001"
+    static let textSearchBabbageDoc = "text-search-babbage-doc-001"
+    static let textSearchBabbageQuery001 = "text-search-babbage-query-001"
+    static let textEmbedding3 = "text-embedding-3-small"
+    static let textEmbedding3Large = "text-embedding-3-large"
+
+    static let textModerationStable = "text-moderation-stable"
+    static let textModerationLatest = "text-moderation-latest"
+    static let moderation = "text-moderation-007"
+}
+
+ +

GPT-4 models are supported.

+ +

As an example: To use the gpt-4-turbo-preview model, pass .gpt4_turbo_preview as the parameter to the ChatQuery init.

+
let query = ChatQuery(model: .gpt4_turbo_preview, messages: [
+    .init(role: .system, content: "You are Librarian-GPT. You know everything about the books."),
+    .init(role: .user, content: "Who wrote Harry Potter?")
+])
+let result = try await openAI.chats(query: query)
+XCTAssertFalse(result.choices.isEmpty)
+
+ +

You can also pass a custom string if you need to use some model, that is not represented above.

+

List Models

+ +

Lists the currently available models.

+ +

Response

+
public struct ModelsResult: Codable, Equatable {
+
+    public let data: [ModelResult]
+    public let object: String
+}
+
+
+ +

Example

+
openAI.models() { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.models()
+
+

Retrieve Model

+ +

Retrieves a model instance, providing ownership information.

+ +

Request

+
public struct ModelQuery: Codable, Equatable {
+
+    public let model: Model
+}    
+
+ +

Response

+
public struct ModelResult: Codable, Equatable {
+
+    public let id: Model
+    public let object: String
+    public let ownedBy: String
+}
+
+ +

Example

+
let query = ModelQuery(model: .gpt4)
+openAI.model(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.model(query: query)
+
+ +

Review Models Documentation for more info.

+

Moderations

+ +

Given a input text, outputs if the model classifies it as violating OpenAI’s content policy.

+ +

Request

+
public struct ModerationsQuery: Codable {
+
+    public let input: String
+    public let model: Model?
+}    
+
+ +

Response

+
public struct ModerationsResult: Codable, Equatable {
+
+    public let id: String
+    public let model: Model
+    public let results: [CategoryResult]
+}
+
+ +

Example

+
let query = ModerationsQuery(input: "I want to kill them.")
+openAI.moderations(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.moderations(query: query)
+
+ +

Review Moderations Documentation for more info.

+

Utilities

+ +

The component comes with several handy utility functions to work with the vectors.

+
public struct Vector {
+
+    /// Returns the similarity between two vectors
+    ///
+    /// - Parameters:
+    ///     - a: The first vector
+    ///     - b: The second vector
+    public static func cosineSimilarity(a: [Double], b: [Double]) -> Double {
+        return dot(a, b) / (mag(a) * mag(b))
+    }
+
+    /// Returns the difference between two vectors. Cosine distance is defined as `1 - cosineSimilarity(a, b)`
+    ///
+    /// - Parameters:
+    ///     - a: The first vector
+    ///     - b: The second vector
+    public func cosineDifference(a: [Double], b: [Double]) -> Double {
+        return 1 - Self.cosineSimilarity(a: a, b: b)
+    }
+}
+
+ +

Example

+
let vector1 = [0.213123, 0.3214124, 0.421412, 0.3214521251, 0.412412, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.4214214, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251]
+let vector2 = [0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.511515, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3213213]
+let similarity = Vector.cosineSimilarity(a: vector1, b: vector2)
+print(similarity) //0.9510201910206734
+
+ +
+

In data analysis, cosine similarity is a measure of similarity between two sequences of numbers.

+
+ +

Screenshot 2022-12-19 at 6 00 33 PM

+ +

Read more about Cosine Similarity here.

+

Combine Extensions

+ +

The library contains built-in Combine extensions.

+
func completions(query: CompletionsQuery) -> AnyPublisher<CompletionsResult, Error>
+func images(query: ImagesQuery) -> AnyPublisher<ImagesResult, Error>
+func embeddings(query: EmbeddingsQuery) -> AnyPublisher<EmbeddingsResult, Error>
+func chats(query: ChatQuery) -> AnyPublisher<ChatResult, Error>
+func edits(query: EditsQuery) -> AnyPublisher<EditsResult, Error>
+func model(query: ModelQuery) -> AnyPublisher<ModelResult, Error>
+func models() -> AnyPublisher<ModelsResult, Error>
+func moderations(query: ModerationsQuery) -> AnyPublisher<ModerationsResult, Error>
+func audioTranscriptions(query: AudioTranscriptionQuery) -> AnyPublisher<AudioTranscriptionResult, Error>
+func audioTranslations(query: AudioTranslationQuery) -> AnyPublisher<AudioTranslationResult, Error>
+
+

Example Project

+ +

You can find example iOS application in Demo folder.

+ +

mockuuups-iphone-13-pro-mockup-perspective-right

+

Contribution Guidelines

+ +

Make your Pull Requests clear and obvious to anyone viewing them.
+Set main as your target branch.

+

Use Conventional Commits principles in naming PRs and branches:

+ +
    +
  • Feat: ... for new features and new functionality implementations.
  • +
  • Bug: ... for bug fixes.
  • +
  • Fix: ... for minor issues fixing, like typos or inaccuracies in code.
  • +
  • Chore: ... for boring stuff like code polishing, refactoring, deprecation fixing etc.
  • +
+ +

PR naming example: Feat: Add Threads API handling or Bug: Fix message result duplication

+ +

Branch naming example: feat/add-threads-API-handling or bug/fix-message-result-duplication

+

Write description to pull requests in following format:

+ +
    +
  • What
  • +
+ +

+ +
    +
  • Why
  • +
+ +

+ +
    +
  • Affected Areas
  • +
+ +

+ +
    +
  • More Info
  • +
+ +

+ +

We’ll appreciate you including tests to your code if it is needed and possible. ❤️

+ + + +

License

+
MIT License
+
+Copyright (c) 2023 MacPaw Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+ +
+
+ +
+
+ + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 00000000..1ac86992 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targeted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 00000000..359cdbb8 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 00000000..7f37b5d9 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docs/docsets/.docset/Contents/Resources/Documents/js/typeahead.jquery.js new file mode 100644 index 00000000..bcb734be --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/docsets/.docset/Contents/Resources/Documents/search.json b/docs/docsets/.docset/Contents/Resources/Documents/search.json new file mode 100644 index 00000000..0b0df834 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/.docset/Contents/Resources/Documents/undocumented.json b/docs/docsets/.docset/Contents/Resources/Documents/undocumented.json new file mode 100644 index 00000000..8b7f1785 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/undocumented.json @@ -0,0 +1,6 @@ +{ + "warnings": [ + + ], + "source_directory": "/Users/dingxiancao/OpenAI" +} \ No newline at end of file diff --git a/docs/docsets/.docset/Contents/Resources/docSet.dsidx b/docs/docsets/.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..ee9547448490db8ce357b7a43db7e0f958f051cf GIT binary patch literal 253952 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 z

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 MnSfXzkn%_WKf9*Jv;Y7A literal 0 HcmV?d00001 diff --git a/docs/docsets/.tgz b/docs/docsets/.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7d0f68530c74b5fb013346c3380b4932eb50ca5b GIT binary patch literal 279182 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

KocKaY%9C}*p-JMQ z5^*z0Ru&S4HX(^!KX3@Gjn#z7m46B-JP1)DU2dQwrs46@u#TFg8<@0xX}CX8@Y1Q& zEMyc6t%+pMIpLvW7#(YkST#47;V?btUxzm_N~+reKEJQ0r8z>U6*B1}(>vvvO_XLB zmgV49l(kGhI~Qm%tt9Pfj&JjnD>P!T+kX2FPJ*wyy~%+o?qCt_P+3S%#j$A$J3#Xk zwt=RR;ilSzd1?>J}d{PT$w49=|8*@T*f zXy^w(@1Ujqa6r`2eVuo5mRao^9fCLO79F_1%L6iI{LJOvNINy;%F@=1u&&j6mzJ6S z2W;c)jKBP)Z23YbwwLfzItvddj+ugKE5;6q?HAkeGF2hy9w(XM<(VHvzMhUuwJ@PtZY?M=5Y{w18VRUdU>Z^l$0t*)_(PB5-K{ zBLW!s*%Mq@dJ^+nv;d#V9eMg`q8+Zf)RuJY|J+Yrq;4EHAy8V{r9mpvrBqv&(W9kA-aplW27*YZ$g_?TZ z{S+qc>9d&hNm9T!vtaD7AFP5AFX%H+ng;akv#HJNj!9aOxEcuiYLGN7$VxU-OO~SC z*|{#+077Rfi*lgr9i%T$+SnfSz>jW&8U_10HCmG%>1UT_s8(xLC9_&-DGUP9MTmE) zL}N>Va@C^>l#x&ASf%Gen0124*RXJHYyp4Q&XE)A^$kAa95}wPfR@|-sC6a_2fB`rLV?RQCgw) zXF4cc3!U4WlQ+eLviz(o3|kQs!B!9~sI3HvSt2R{S9gHee03FQ z3X5|x&;J?7kyP@^!!ea#cj4r+?}=t*(WmUPc%>A?i3Pk^xp3gvlUAK%c9pA_+TXiI zTZDkac*gjxo{#p89+&~jPak3f=iyr;S*k|etPzT#sS8R0TJ8nbpDwO_fI*KsModzT zAc%r5n6;)L%}N~_FOmp7pUk2Kr88>*Wu<`kLgx&%t~iy?Bob?9%Sr=uV%tUV+~$jh+hkV&RGmjWJG`9byp!|6D-^)Pmv} z_U^kSqO9&+b*-#?;cZEsLfqMs-#G89Y}?MNb6ULiCib4C7v~q;Wz@&n%-M#RdAldI zv2BKp)~VdTOskr&f8ZgV$P~1WFt}$ghWva^741JnMgK7l4l#sQ9aL+dNPfMD`RY#D zXVB>Ya7F|Fl>jEUwBfVJV8MU#$XBAv9o1``w%#70Uj6t8b?!3z!^Jt3>wE{qSzwIEwnb2UJXm)i zr4BAa3xdSX#X+_0ZiTwsm+qCyrS`6`q8as22e&U^hW9kxYRE15 zx5xC@jAOo=Nm2Hkq?RSarZz#Al=4UHg(ih6AgJbK0?@Q?z&6Ryl*#BT8v=HzE~ew{ z3+4b}ju$4nVR2Gp;%6*U^S&645Z2!u2l%;Jvtnw z;)#mt475_BT-qT*8#RztWGK&lqwNWJa zd8Pg~yN%)IFWDjWi0>c$EGZwzuqyXKwK-Mbq3q2Ak{TWuEA&wE;sr?w6F|v2{Xd+V zx^&oq{K3h#&Ub#z#MEt2wxlk#By%mBjC zK`}d+3ns$lf|h|n;a34B9S-yc9B^bJ;vfb?(id{YL#^Y9O{jHBNpq`YLD9n+jr7Bm zr7S-uK!IO`>EyIIOJ*f77Yj@@8L9ndPvq?4i)VkVLiKVs&iWb zFel3Ni138f2@_Pnv=Kh)?ckQgo)L}6A_7;m*Dt}<8;$U?l5(-Lxd(fxVIgEY>vxMO z9H;D@^)*9k#({zoU3aZUN4%b>`4z>N_)#gA=>d z*Ej4F6~tuU8EZS7_f6+=!%amxXF84V1p8kNck+Upa9r4pv}US80F?naV}XP|!uX7! z?75)>y`*aK<&*|&n2=jKhsCg6v0rPBpsE0!+0PZFPdL-^yCAicFh(uSgdh9*kkWtX zR24Nw576yF1uY%}9y-5XtRN_WuNo=LD+)sb5!Unt%DqA46}9|fl_(A3FpLM3xa~{8 zPp1l9Tfkd2QmI&ZwK^gOQ50W3hzCn!&Kw{+l?ouyNMx;?Mt8{q;-;PhyHhg1vMQ@i z9vEF**X>j@NiwQex4KJ4yeU0O&*@6f3G2@>b>t)QAb8M`KEMHr?wP9YDX96!KkU&- z3l=95E_H{(cn@Kd6+D4<#KSO_Al&m}Q1H*<32Q%~?a(vd=CUtOQNw6a_Giw8Ai!|e zp9N~5n4iT`A5`6?K*;S#->LbO17$r;n*O17onHNL5O(K<8AUmGhbsF^R6;bL6MQiD z^P0ER=xmk?%=MVHQZroqS1AK&pAGZD8;|2)i2`eUPmofTV?_971LRx0ez$AglV-)6 zzF&wASf^zm8!^yVIbia*1M6z*%Sh3M5Zrq3mhbM?H8EciEWh380l|AqPA}{rd8G1j z0Pfd+>N4M6g{$|g;B43Kefp~NY#{Xp+$901+}7}xUZL25vX{7ih#C#kUkz>3-G~&X zb$8JPi4ure@2<&2AUfBo%onP&5yHY=sz~M?_zn`*kyjS9)gYWfm;+ABInnuP6?CeV z)U6=o>a{iJRg@%i_0}ks%t;v_?>F1PZ0g(j@%gR+Ef%}Lk1ArJc1tn7o z3RSV2bt0;quog8{Hmd5XRV0E6S~bgO6zr}DL*;O6y~%_X9;#w z%i5f!dD%jb+yga>Y+}5;lZ8U$&seHlj``x}Zp$%sF(OsJ(-u{^Mrgo|Oz1&_BSJbi zIy&Y=5wiQw&?6xi=*R7XGx8ysq06PMT`_7bO1(JbKrV;t2Xnt3bZHg4iHd(f-dcX1 zya&A3;T->Q-xnG9uTa+&52J#g%4-W;u1K%Qoh+13e9b}CrFMueCIVj5A?43y(GXvL zy4Rl`E4Kk97~m)vZ=#4|$#h~Xq#{gApzn*6JhoVw6MKraXz`}1+tVuSng3(;5eA8E zn6~H&b1sM1+i;YtHI+?N_sUY5s#%D9cZoa#FVq7toJ_6Fk=jFSQAcb<#Ddlbh^iK$ zCjZ{draoxSl(X~}T>6h<;p%^UUn6evZHQO#HS0Bh=O0<1*WS}(i%;jX)jQxF{fA;5 zWUr~$!Lj)k7}I|)LGvy}G< z%Kjx%tZvq3NkPK6d^v-_97tm(TXE(x6-JS|AT$yiD0CBPcHTqz!I2jP1x{?0+?FWL ztm|K%5`Q!;vmPlf#4p9$A_nnQh0%z`8tg$jGGhM+Bm(<(t&C9#DAcgIq2Me~N2#&N zM1Bp@Aqc|Z4V$hB-v@ySCWZ0Px`0-e_A16TfvMp+z=H<8*#sfoO92($V zE?Br-FE|${n2Kuauxyht8PJR0JO}Kz=pZvd=}SPO6Y|2p8tBL7cJ*Pc5UM;Ztk)hD z7P_FSoTGvZ&`U+L(Y}E%0~Z`xpM&yJJRH6=Xem8!9->dYNTHvfR{SSiQB*pjp%X6f zsxJ!Y?iwy`xy+;|7#FBh?D`DK=wdv+SUkHy+u(_qdm6>EL?)=YnNnm_OrlPjCJ3pg z2RklVi4mHtPGKf=-vfa-Jn?#>!m~elbuq;E00CjxXM3@&>LQGZ7;eew1N(L`>mJA; z5bRvkpiA!PiK>w>QNYI)Tv86e#uR`vU+4CLNPo}?LZhH^Ss_2<&zU%l8O1{@K-z{3 zdSl!_s*pp+81yJK1IWgV-#nugB0Dbz@rCl>w91BlmRP`!<`M}IswvUCq+Eb>helry zG3D&zO|OE{cOekbaywC?-e5@k^DtxL&BVs^fw>+^wHt>%szE|CO@XMDFoh@&md?T5}+;uF}#*+04|r@lGS6tX(r%@utXu& z0faZek5*XQrr+={4A@R_ef zw>sG+`^?&|zZo>fu&V@@hiZY|rPcVUL>Gh6o%lQR;W{bm6I0Z;ZphFxvT}E0>20^% zelQ-l#tnXbTX)~$v+ADh8lutMU3)(o1Ad;KU7AaGqBq*xx-Y$~_1G6f+-o5@#J0P$ zgXbTSfqpY@Eyp2Dg&Pp2i14>I75q*uwXCo||FsuL$rg@miAuN}5$^yA=40Lgx+T{YB9CNsO67V+QmZ#PP>}a z&ecd_e3ZF|&>9-A)*PzN)wk}*_(NR&dpp|3!@9;yh*Ap9K6gP|#G|9sCZB&|B$<4A zKsP{9^u7dB&{jLe%$FaUxrDUPgYR0D+tgc?)A}*e4d;D<7i3le8cc#Z5i9voRH~sP zE6udh17TIH$o^c5pvi4vt(I(M@t(bM!r@9wL(u(mw!GvG5YiA=AJrO)0JB4ld!c-% zVIYQ@tC0&-QKjN~uS6tVN)L)^XN4$i&pZ0YGca2)RPeXqOw5rh@XLAj@l&pe1FFc}XY6r+18uQ4ymY-2_4NQGgs>*0z&vy+ z5kTHZpC>l)lQn@d?S^sHfkwUYLMe2*D*Puvlu99cA6}s8V_q4Fc+}=8z^oK#hU_do zf~qc3YmXsHoN6B>%8g%{zmtTTGM~P3kzH}pDD+fZxD9gz638o01E7n zLsR4&(?c6hHaUBhjWY6#Y>qb&2&!X9=~t zeWV;5z3?sy%vj`RVM(BN(RhNCf$Bjz2laBCYCz!8Ob`cuB(AKbX9!k^%0m`1rDg!8 z-iS#-IcQ8UM%PFI?+>2Arfkr!L7bptlN|k}7dfwZXLQY^DCw0LtbAuf2B$i6{5-Yj z!PJ(Z9VmOK`R=as%?+)u+>5AA^+Z)dz2Zv*BVzjyOzGo)tJKY39|SrH`>BaAT(E_}DHb5+Ao8i0l<54QN)*^9 z3Xu^YnZ6=Gl4p@FNbrA!uf*R*V;VuUp-dMitUP}X|d{A;G$-8y8Dxg%zpBIV@q+HlFe}IaU@)JA{l)Qn! zbNL6jI*9%Ol?N_v*cX127}8iGTpI@n8%Xh3(L-srxZ(L+;E)&tU_9aO5E6Ayw3j#> z2V)$$TYlVdA%GaV^lATSpF%HK+* zrE@y{!}TkvNfyjLXS8Tmv8A^#HhkHzP3cd1NA@Smjc>lQ{bE{{Z5-~4Z!7#<@;`0q zS!gORwVt|#D@MWz5IFOon5PY+pNW*@)!o#AjhDBr`slgsufPVO# zmJ_r@1s_BFR9?tMS2{DVJ18Mnaco6g=oLNDvhYk6=~-c3WpE?ioXE1i8R8hCYK$uv zWI-QuxWgx_NGd(j!z<|M!ehk{Y-q=LRl{LgrRz4_xSc?97z{09B2lqRXE@Ich-; zcUBx{+D(0{@9rnJbv`JI-@v!=)6prJUDgjD_v-yz7@Bg3W>LPNZ$4B2fc+swd^mm{ zYIu9m2y0fVJayNsdbQmqEfNZ*8Vc8FCax||upGk&EfskNdxVh>L{wzeY7*y65`*3N zfU663D*KLj>gmw5Nb#VPREoYBKrA)Tdk5#@$zM*=;2d)AoclS z^xH*BNQ&q3 z07XYgUH^Nj&Ovl`VL|R1`~~h~ks=P7^Th!nu=fB{S{*aHITCLJJWV0Dx!e>s>K`jSvv=hGesKT#-^6XJZ=z@O4TbB@Cs)}@SGMoSqt++ov*)xeti4qZ zgZ~)Mpl@onQ9rP(^+18tk@vzF=1>VFATsL6qet|t1jKy%$VAg2I+$3RWI!FBrkd8SCUevE&A^V zVG%hPuT8=5G|Z#ZMq}37gpkaZ`$+j`7Rn@CR1scnesoj@dyxy&N{3m6OhFQc`eY5I zJs_iE0pe&!9wNDXtO%5{xL8I`2tp=TFq2S%%I_^yl^r0Y>>@ixFGbj6Xg zbubqnc>!ExD#gDk9@&>lkwmmd7REpzqrXjpSLldtfM^EuRt9N$S5kbOCHhPquf?m} zTYAX?8p5Ltj5NJDky@vNy6F^CJ%X^(`dPZ#KJ4_c(tfb*xCtrCdJ@$n)#0qiZ_yIW zYc?%ribVi52lyVW7Gc@M_Szy!wa8tD+y{A86$4{dlu|M!Dw=w(U^g%J+Ahd+3GK>y z=Sl%I_xBysq16s$+RTK1MCD&_#4D26&p~1GEhauuA#pLpLbI0(By*LYdDTjfXwN7W zT2)Vy4hr%sPoi~|Av7=LUIo@wVsgEYh9F)~Rt2mTt8!mbKecgex{geam&N9d_f{24 zt)OoTe>H2ptfQKWe^t<3k0jtoz(;id5qPOxGMwbuc`o1e#P)x+yjI@jHyN=_zm2VX zkDSwiWAN;BtX{MIEd5hF6TabJ#C5U0z}*v@SbB>HEWT4H#(twZW&R@N75M@Tru@_2 zKODu!k|@}kZ(c|oK*=1mx+hzX@ADmc@AEy1A3`aL0&DMI4m2_>wdf(n7@tWRI0KK` zju`(kv2&PD9Dnt2s`<6#YW!g3j@dC+bJ^r#hlE&WWAMkLF@RwsA>H$+}>im=Zq2jLgDzVn|fzyO& z{_J*R|6TDb-QG0esHgQ~%VEMpq)D^@dIwGM5PA*s+zlyK|9+BhcxLoV)2nr+#op5F z1$8=DkM61si!wgGviOrj9;`<6)Z%oJ+`eM$#T?nO*WR|Off*29vQ6v-7TL*Hi0xGA zn;Ptczt2j9(5svi5T+jwf8Wro9868!iB&!L4D8oEW+!kHad-+tX#rvTWA830cRkdy zCKJTlg_`X>2e=dc<3E5!R6Qf8985UP^+19>nBf>p7G%0DutUI!OIr%|L6)|4rIpIb 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 z�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 literal 0 HcmV?d00001 diff --git a/docs/img/carat.png b/docs/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/img/dash.png b/docs/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..38545af2 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,1280 @@ + + + + Index Reference + + + + + + + + + + + + +

+
+

Docs (100% documented)

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+ +

OpenAI

+ +

logo

+ +
+ +

Swift Workflow + + +Twitter

+ +

This repository contains Swift community-maintained implementation over OpenAI public API.

+ + +

What is OpenAI

+ +

OpenAI is a non-profit artificial intelligence research organization founded in San Francisco, California in 2015. It was created with the purpose of advancing digital intelligence in ways that benefit humanity as a whole and promote societal progress. The organization strives to develop AI (Artificial Intelligence) programs and systems that can think, act and adapt quickly on their own – autonomously. OpenAI’s mission is to ensure safe and responsible use of AI for civic good, economic growth and other public benefits; this includes cutting-edge research into important topics such as general AI safety, natural language processing, applied reinforcement learning methods, machine vision algorithms etc.

+ +
+

The OpenAI API can be applied to virtually any task that involves understanding or generating natural language or code. We offer a spectrum of models with different levels of power suitable for different tasks, as well as the ability to fine-tune your own custom models. These models can be used for everything from content generation to semantic search and classification.

+
+

Installation

+ +

OpenAI is available with Swift Package Manager. +The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. +Once you have your Swift package set up, adding OpenAI as a dependency is as easy as adding it to the dependencies value of your Package.swift.

+
dependencies: [
+    .package(url: "https://github.com/MacPaw/OpenAI.git", branch: "main")
+]
+
+

Usage

+

Initialization

+ +

To initialize API instance you need to obtain API token from your Open AI organization.

+ +

Remember that your API key is a secret! Do not share it with others or expose it in any client-side code (browsers, apps). Production requests must be routed through your own backend server where your API key can be securely loaded from an environment variable or key management service.

+ +

company

+ +

Once you have a token, you can initialize OpenAI class, which is an entry point to the API.

+ +
+

⚠️ OpenAI strongly recommends developers of client-side applications proxy requests through a separate backend service to keep their API key safe. API keys can access and manipulate customer billing, usage, and organizational data, so it’s a significant risk to expose them.

+
+
let openAI = OpenAI(apiToken: "YOUR_TOKEN_HERE")
+
+ +

Optionally you can initialize OpenAI with token, organization identifier and timeoutInterval.

+
let configuration = OpenAI.Configuration(token: "YOUR_TOKEN_HERE", organizationIdentifier: "YOUR_ORGANIZATION_ID_HERE", timeoutInterval: 60.0)
+let openAI = OpenAI(configuration: configuration)
+
+ +

Once token you posses the token, and the instance is initialized you are ready to make requests.

+

Completions

+ +

Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.

+ +

Request

+
struct CompletionsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.
+    public let prompt: String
+    /// What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.
+    public let temperature: Double?
+    /// The maximum number of tokens to generate in the completion.
+    public let maxTokens: Int?
+    /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+    public let topP: Double?
+    /// Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
+    public let frequencyPenalty: Double?
+    /// Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
+    public let presencePenalty: Double?
+    /// Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.
+    public let stop: [String]?
+    /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
+    public let user: String?
+}
+
+ +

Response

+
struct CompletionsResult: Codable, Equatable {
+    public struct Choice: Codable, Equatable {
+        public let text: String
+        public let index: Int
+    }
+
+    public let id: String
+    public let object: String
+    public let created: TimeInterval
+    public let model: Model
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = CompletionsQuery(model: .textDavinci_003, prompt: "What is 42?", temperature: 0, maxTokens: 100, topP: 1, frequencyPenalty: 0, presencePenalty: 0, stop: ["\\n"])
+openAI.completions(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.completions(query: query)
+
+
(lldb) po result
+▿ CompletionsResult
+  - id : "cmpl-6P9be2p2fQlwB7zTOl0NxCOetGmX3"
+  - object : "text_completion"
+  - created : 1671453146.0
+  - model : OpenAI.Model.textDavinci_003
+  ▿ choices : 1 element
+    ▿ 0 : Choice
+      - text : "\n\n42 is the answer to the ultimate question of life, the universe, and everything, according to the book The Hitchhiker\'s Guide to the Galaxy."
+      - index : 0
+
+

Completions Streaming

+ +

Completions streaming is available by using completionsStream function. Tokens will be sent one-by-one.

+ +

Closures

+
openAI.completionsStream(query: query) { partialResult in
+    switch partialResult {
+    case .success(let result):
+        print(result.choices)
+    case .failure(let error):
+        //Handle chunk error here
+    }
+} completion: { error in
+    //Handle streaming error here
+}
+
+ +

Combine

+
openAI
+    .completionsStream(query: query)
+    .sink { completion in
+        //Handle completion result here
+    } receiveValue: { result in
+        //Handle chunk here
+    }.store(in: &cancellables)
+
+ +

Structured concurrency

+
for try await result in openAI.completionsStream(query: query) {
+   //Handle result here
+}
+
+ +

Review Completions Documentation for more info.

+

Chats

+ +

Using the OpenAI Chat API, you can build your own applications with gpt-3.5-turbo to do things like:

+ +
    +
  • Draft an email or other piece of writing
  • +
  • Write Python code
  • +
  • Answer questions about a set of documents
  • +
  • Create conversational agents
  • +
  • Give your software a natural language interface
  • +
  • Tutor in a range of subjects
  • +
  • Translate languages
  • +
  • Simulate characters for video games and much more
  • +
+ +

Request

+
 struct ChatQuery: Codable {
+     /// ID of the model to use. Currently, only gpt-3.5-turbo and gpt-3.5-turbo-0301 are supported.
+     public let model: Model
+     /// The messages to generate chat completions for
+     public let messages: [Chat]
+     /// A list of functions the model may generate JSON inputs for.
+     public let functions: [ChatFunctionDeclaration]?
+     /// What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and  We generally recommend altering this or top_p but not both.
+     public let temperature: Double?
+     /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+     public let topP: Double?
+     /// How many chat completion choices to generate for each input message.
+     public let n: Int?
+     /// Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.
+     public let stop: [String]?
+     /// The maximum number of tokens to generate in the completion.
+     public let maxTokens: Int?
+     /// Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
+     public let presencePenalty: Double?
+     /// Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
+     public let frequencyPenalty: Double?
+     ///Modify the likelihood of specified tokens appearing in the completion.
+     public let logitBias: [String:Int]?
+     /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
+     public let user: String?
+}
+
+ +

Response

+
struct ChatResult: Codable, Equatable {
+    public struct Choice: Codable, Equatable {
+        public let index: Int
+        public let message: Chat
+        public let finishReason: String
+    }
+
+    public struct Usage: Codable, Equatable {
+        public let promptTokens: Int
+        public let completionTokens: Int
+        public let totalTokens: Int
+    }
+
+    public let id: String
+    public let object: String
+    public let created: TimeInterval
+    public let model: Model
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = ChatQuery(model: .gpt3_5Turbo, messages: [.init(role: .user, content: "who are you")])
+let result = try await openAI.chats(query: query)
+
+
(lldb) po result
+▿ ChatResult
+  - id : "chatcmpl-6pwjgxGV2iPP4QGdyOLXnTY0LE3F8"
+  - object : "chat.completion"
+  - created : 1677838528.0
+  - model : "gpt-3.5-turbo-0301"
+  ▿ choices : 1 element
+    ▿ 0 : Choice
+      - index : 0
+      ▿ message : Chat
+        - role : "assistant"
+        - content : "\n\nI\'m an AI language model developed by OpenAI, created to provide assistance and support for various tasks such as answering questions, generating text, and providing recommendations. Nice to meet you!"
+      - finish_reason : "stop"
+  ▿ usage : Usage
+    - prompt_tokens : 10
+    - completion_tokens : 39
+    - total_tokens : 49
+
+

Chats Streaming

+ +

Chats streaming is available by using chatStream function. Tokens will be sent one-by-one.

+ +

Closures

+
openAI.chatsStream(query: query) { partialResult in
+    switch partialResult {
+    case .success(let result):
+        print(result.choices)
+    case .failure(let error):
+        //Handle chunk error here
+    }
+} completion: { error in
+    //Handle streaming error here
+}
+
+ +

Combine

+
openAI
+    .chatsStream(query: query)
+    .sink { completion in
+        //Handle completion result here
+    } receiveValue: { result in
+        //Handle chunk here
+    }.store(in: &cancellables)
+
+ +

Structured concurrency

+
for try await result in openAI.chatsStream(query: query) {
+   //Handle result here
+}
+
+ +

Function calls

+
let openAI = OpenAI(apiToken: "...")
+// Declare functions which GPT-3 might decide to call.
+let functions = [
+  ChatFunctionDeclaration(
+      name: "get_current_weather",
+      description: "Get the current weather in a given location",
+      parameters:
+        JSONSchema(
+          type: .object,
+          properties: [
+            "location": .init(type: .string, description: "The city and state, e.g. San Francisco, CA"),
+            "unit": .init(type: .string, enumValues: ["celsius", "fahrenheit"])
+          ],
+          required: ["location"]
+        )
+  )
+]
+let query = ChatQuery(
+  model: "gpt-3.5-turbo-0613",  // 0613 is the earliest version with function calls support.
+  messages: [
+      Chat(role: .user, content: "What's the weather like in Boston?")
+  ],
+  functions: functions
+)
+let result = try await openAI.chats(query: query)
+
+ +

Result will be (serialized as JSON here for readability):

+
{
+  "id": "chatcmpl-1234",
+  "object": "chat.completion",
+  "created": 1686000000,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "function_call": {
+          "name": "get_current_weather",
+          "arguments": "{\n  \"location\": \"Boston, MA\"\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": { "total_tokens": 100, "completion_tokens": 18, "prompt_tokens": 82 }
+}
+
+
+ +

Review Chat Documentation for more info.

+

Images

+ +

Given a prompt and/or an input image, the model will generate a new image.

+ +

As Artificial Intelligence continues to develop, so too does the intriguing concept of Dall-E. Developed by OpenAI, a research lab for artificial intelligence purposes, Dall-E has been classified as an AI system that can generate images based on descriptions provided by humans. With its potential applications spanning from animation and illustration to design and engineering - not to mention the endless possibilities in between - it’s easy to see why there is such excitement over this new technology.

+

Create Image

+ +

Request

+
struct ImagesQuery: Codable {
+    /// A text description of the desired image(s). The maximum length is 1000 characters.
+    public let prompt: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+
struct ImagesResult: Codable, Equatable {
+    public struct URLResult: Codable, Equatable {
+        public let url: String
+    }
+    public let created: TimeInterval
+    public let data: [URLResult]
+}
+
+ +

Example

+
let query = ImagesQuery(prompt: "White cat with heterochromia sitting on the kitchen table", n: 1, size: "1024x1024")
+openAI.images(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.images(query: query)
+
+
(lldb) po result
+▿ ImagesResult
+  - created : 1671453505.0
+  ▿ data : 1 element
+    ▿ 0 : URLResult
+      - url : "https://oaidalleapiprodscus.blob.core.windows.net/private/org-CWjU5cDIzgCcVjq10pp5yX5Q/user-GoBXgChvLBqLHdBiMJBUbPqF/img-WZVUK2dOD4HKbKwW1NeMJHBd.png?st=2022-12-19T11%3A38%3A25Z&se=2022-12-19T13%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2022-12-19T09%3A35%3A16Z&ske=2022-12-20T09%3A35%3A16Z&sks=b&skv=2021-08-06&sig=mh52rmtbQ8CXArv5bMaU6lhgZHFBZz/ePr4y%2BJwLKOc%3D"
+
+ +

Generated image

+ +

Generated Image

+

Create Image Edit

+ +

Creates an edited or extended image given an original image and a prompt.

+ +

Request

+
public struct ImageEditsQuery: Codable {
+    /// The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.
+    public let image: Data
+    public let fileName: String
+    /// An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.
+    public let mask: Data?
+    public let maskFileName: String?
+    /// A text description of the desired image(s). The maximum length is 1000 characters.
+    public let prompt: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+ +

Uses the ImagesResult response similarly to ImagesQuery.

+ +

Example

+
let data = image.pngData()
+let query = ImageEditQuery(image: data, fileName: "whitecat.png", prompt: "White cat with heterochromia sitting on the kitchen table with a bowl of food", n: 1, size: "1024x1024")
+openAI.imageEdits(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.imageEdits(query: query)
+
+

Create Image Variation

+ +

Creates a variation of a given image.

+ +

Request

+
public struct ImageVariationsQuery: Codable {
+    /// The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.
+    public let image: Data
+    public let fileName: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.
+    public let size: String?
+}
+
+ +

Response

+ +

Uses the ImagesResult response similarly to ImagesQuery.

+ +

Example

+
let data = image.pngData()
+let query = ImageVariationQuery(image: data, fileName: "whitecat.png", n: 1, size: "1024x1024")
+openAI.imageVariations(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.imageVariations(query: query)
+
+ +

Review Images Documentation for more info.

+

Audio

+ +

The speech to text API provides two endpoints, transcriptions and translations, based on our state-of-the-art open source large-v2 Whisper model. They can be used to:

+ +

Transcribe audio into whatever language the audio is in. +Translate and transcribe the audio into english. +File uploads are currently limited to 25 MB and the following input file types are supported: mp3, mp4, mpeg, mpga, m4a, wav, and webm.

+

Audio Create Speech

+ +

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

+ +

Learn more about voices.
+Learn more about models.

+ +

Request:

+
public struct AudioSpeechQuery: Codable, Equatable {
+    //...
+    public let model: Model // tts-1 or tts-1-hd  
+    public let input: String
+    public let voice: AudioSpeechVoice
+    public let responseFormat: AudioSpeechResponseFormat
+    public let speed: String? // Initializes with Double?
+    //...
+}
+
+ +

Response:

+
/// Audio data for one of the following formats :`mp3`, `opus`, `aac`, `flac`
+public let audioData: Data?
+
+ +

Example:

+
let query = AudioSpeechQuery(model: .tts_1, input: "Hello, world!", voice: .alloy, responseFormat: .mp3, speed: 1.0)
+
+openAI.audioCreateSpeech(query: query) { result in
+    // Handle response here
+}
+//or
+let result = try await openAI.audioCreateSpeech(query: query)
+
+ +

OpenAI Create Speech – Documentation

+

Audio Transcriptions

+ +

Transcribes audio into the input language.

+ +

Request

+
public struct AudioTranscriptionQuery: Codable, Equatable {
+
+    public let file: Data
+    public let fileName: String
+    public let model: Model
+
+    public let prompt: String?
+    public let temperature: Double?
+    public let language: String?
+}
+
+ +

Response

+
public struct AudioTranscriptionResult: Codable, Equatable {
+
+    public let text: String
+}
+
+ +

Example

+
let data = Data(contentsOfURL:...)
+let query = AudioTranscriptionQuery(file: data, fileName: "audio.m4a", model: .whisper_1)        
+
+openAI.audioTranscriptions(query: query) { result in
+    //Handle result here
+}
+//or
+let result = try await openAI.audioTranscriptions(query: query)
+
+

Audio Translations

+ +

Translates audio into into English.

+ +

Request

+
public struct AudioTranslationQuery: Codable, Equatable {
+
+    public let file: Data
+    public let fileName: String
+    public let model: Model
+
+    public let prompt: String?
+    public let temperature: Double?
+}    
+
+ +

Response

+
public struct AudioTranslationResult: Codable, Equatable {
+
+    public let text: String
+}
+
+ +

Example

+
let data = Data(contentsOfURL:...)
+let query = AudioTranslationQuery(file: data, fileName: "audio.m4a", model: .whisper_1)  
+
+openAI.audioTranslations(query: query) { result in
+    //Handle result here
+}
+//or
+let result = try await openAI.audioTranslations(query: query)
+
+ +

Review Audio Documentation for more info.

+

Edits

+ +

Creates a new edit for the provided input, instruction, and parameters.

+ +

Request

+
struct EditsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// Input text to get embeddings for.
+    public let input: String?
+    /// The instruction that tells the model how to edit the prompt.
+    public let instruction: String
+    /// The number of images to generate. Must be between 1 and 10.
+    public let n: Int?
+    /// What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.
+    public let temperature: Double?
+    /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
+    public let topP: Double?
+}
+
+ +

Response

+
struct EditsResult: Codable, Equatable {
+
+    public struct Choice: Codable, Equatable {
+        public let text: String
+        public let index: Int
+    }
+
+    public struct Usage: Codable, Equatable {
+        public let promptTokens: Int
+        public let completionTokens: Int
+        public let totalTokens: Int
+
+        enum CodingKeys: String, CodingKey {
+            case promptTokens = "prompt_tokens"
+            case completionTokens = "completion_tokens"
+            case totalTokens = "total_tokens"
+        }
+    }
+
+    public let object: String
+    public let created: TimeInterval
+    public let choices: [Choice]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = EditsQuery(model: .gpt4, input: "What day of the wek is it?", instruction: "Fix the spelling mistakes")
+openAI.edits(query: query) { result in
+  //Handle response here
+}
+//or
+let result = try await openAI.edits(query: query)
+
+ +

Review Edits Documentation for more info.

+

Embeddings

+ +

Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.

+ +

Request

+
struct EmbeddingsQuery: Codable {
+    /// ID of the model to use.
+    public let model: Model
+    /// Input text to get embeddings for
+    public let input: String
+}
+
+ +

Response

+
struct EmbeddingsResult: Codable, Equatable {
+
+    public struct Embedding: Codable, Equatable {
+
+        public let object: String
+        public let embedding: [Double]
+        public let index: Int
+    }
+    public let data: [Embedding]
+    public let usage: Usage
+}
+
+ +

Example

+
let query = EmbeddingsQuery(model: .textSearchBabbageDoc, input: "The food was delicious and the waiter...")
+openAI.embeddings(query: query) { result in
+  //Handle response here
+}
+//or
+let result = try await openAI.embeddings(query: query)
+
+
(lldb) po result
+▿ EmbeddingsResult
+  ▿ data : 1 element
+    ▿ 0 : Embedding
+      - object : "embedding"
+      ▿ embedding : 2048 elements
+        - 0 : 0.0010535449
+        - 1 : 0.024234328
+        - 2 : -0.0084999
+        - 3 : 0.008647452
+    .......
+        - 2044 : 0.017536353
+        - 2045 : -0.005897616
+        - 2046 : -0.026559394
+        - 2047 : -0.016633155
+      - index : 0
+
+(lldb)
+
+ +

Review Embeddings Documentation for more info.

+

Models

+ +

Models are represented as a typealias typealias Model = String.

+
public extension Model {
+    static let gpt4_turbo_preview = "gpt-4-turbo-preview"
+    static let gpt4_vision_preview = "gpt-4-vision-preview"
+    static let gpt4_0125_preview = "gpt-4-0125-preview"
+    static let gpt4_1106_preview = "gpt-4-1106-preview"
+    static let gpt4 = "gpt-4"
+    static let gpt4_0613 = "gpt-4-0613"
+    static let gpt4_0314 = "gpt-4-0314"
+    static let gpt4_32k = "gpt-4-32k"
+    static let gpt4_32k_0613 = "gpt-4-32k-0613"
+    static let gpt4_32k_0314 = "gpt-4-32k-0314"
+
+    static let gpt3_5Turbo = "gpt-3.5-turbo"
+    static let gpt3_5Turbo_0125 = "gpt-3.5-turbo-0125"
+    static let gpt3_5Turbo_1106 = "gpt-3.5-turbo-1106"
+    static let gpt3_5Turbo_0613 = "gpt-3.5-turbo-0613"
+    static let gpt3_5Turbo_0301 = "gpt-3.5-turbo-0301"
+    static let gpt3_5Turbo_16k = "gpt-3.5-turbo-16k"
+    static let gpt3_5Turbo_16k_0613 = "gpt-3.5-turbo-16k-0613"
+
+    static let textDavinci_003 = "text-davinci-003"
+    static let textDavinci_002 = "text-davinci-002"
+    static let textCurie = "text-curie-001"
+    static let textBabbage = "text-babbage-001"
+    static let textAda = "text-ada-001"
+
+    static let textDavinci_001 = "text-davinci-001"
+    static let codeDavinciEdit_001 = "code-davinci-edit-001"
+
+    static let tts_1 = "tts-1"
+    static let tts_1_hd = "tts-1-hd"
+
+    static let whisper_1 = "whisper-1"
+
+    static let dall_e_2 = "dall-e-2"
+    static let dall_e_3 = "dall-e-3"
+
+    static let davinci = "davinci"
+    static let curie = "curie"
+    static let babbage = "babbage"
+    static let ada = "ada"
+
+    static let textEmbeddingAda = "text-embedding-ada-002"
+    static let textSearchAda = "text-search-ada-doc-001"
+    static let textSearchBabbageDoc = "text-search-babbage-doc-001"
+    static let textSearchBabbageQuery001 = "text-search-babbage-query-001"
+    static let textEmbedding3 = "text-embedding-3-small"
+    static let textEmbedding3Large = "text-embedding-3-large"
+
+    static let textModerationStable = "text-moderation-stable"
+    static let textModerationLatest = "text-moderation-latest"
+    static let moderation = "text-moderation-007"
+}
+
+ +

GPT-4 models are supported.

+ +

As an example: To use the gpt-4-turbo-preview model, pass .gpt4_turbo_preview as the parameter to the ChatQuery init.

+
let query = ChatQuery(model: .gpt4_turbo_preview, messages: [
+    .init(role: .system, content: "You are Librarian-GPT. You know everything about the books."),
+    .init(role: .user, content: "Who wrote Harry Potter?")
+])
+let result = try await openAI.chats(query: query)
+XCTAssertFalse(result.choices.isEmpty)
+
+ +

You can also pass a custom string if you need to use some model, that is not represented above.

+

List Models

+ +

Lists the currently available models.

+ +

Response

+
public struct ModelsResult: Codable, Equatable {
+
+    public let data: [ModelResult]
+    public let object: String
+}
+
+
+ +

Example

+
openAI.models() { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.models()
+
+

Retrieve Model

+ +

Retrieves a model instance, providing ownership information.

+ +

Request

+
public struct ModelQuery: Codable, Equatable {
+
+    public let model: Model
+}    
+
+ +

Response

+
public struct ModelResult: Codable, Equatable {
+
+    public let id: Model
+    public let object: String
+    public let ownedBy: String
+}
+
+ +

Example

+
let query = ModelQuery(model: .gpt4)
+openAI.model(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.model(query: query)
+
+ +

Review Models Documentation for more info.

+

Moderations

+ +

Given a input text, outputs if the model classifies it as violating OpenAI’s content policy.

+ +

Request

+
public struct ModerationsQuery: Codable {
+
+    public let input: String
+    public let model: Model?
+}    
+
+ +

Response

+
public struct ModerationsResult: Codable, Equatable {
+
+    public let id: String
+    public let model: Model
+    public let results: [CategoryResult]
+}
+
+ +

Example

+
let query = ModerationsQuery(input: "I want to kill them.")
+openAI.moderations(query: query) { result in
+  //Handle result here
+}
+//or
+let result = try await openAI.moderations(query: query)
+
+ +

Review Moderations Documentation for more info.

+

Utilities

+ +

The component comes with several handy utility functions to work with the vectors.

+
public struct Vector {
+
+    /// Returns the similarity between two vectors
+    ///
+    /// - Parameters:
+    ///     - a: The first vector
+    ///     - b: The second vector
+    public static func cosineSimilarity(a: [Double], b: [Double]) -> Double {
+        return dot(a, b) / (mag(a) * mag(b))
+    }
+
+    /// Returns the difference between two vectors. Cosine distance is defined as `1 - cosineSimilarity(a, b)`
+    ///
+    /// - Parameters:
+    ///     - a: The first vector
+    ///     - b: The second vector
+    public func cosineDifference(a: [Double], b: [Double]) -> Double {
+        return 1 - Self.cosineSimilarity(a: a, b: b)
+    }
+}
+
+ +

Example

+
let vector1 = [0.213123, 0.3214124, 0.421412, 0.3214521251, 0.412412, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.4214214, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251]
+let vector2 = [0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.511515, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3214521251, 0.213123, 0.3214124, 0.1414124, 0.3213213]
+let similarity = Vector.cosineSimilarity(a: vector1, b: vector2)
+print(similarity) //0.9510201910206734
+
+ +
+

In data analysis, cosine similarity is a measure of similarity between two sequences of numbers.

+
+ +

Screenshot 2022-12-19 at 6 00 33 PM

+ +

Read more about Cosine Similarity here.

+

Combine Extensions

+ +

The library contains built-in Combine extensions.

+
func completions(query: CompletionsQuery) -> AnyPublisher<CompletionsResult, Error>
+func images(query: ImagesQuery) -> AnyPublisher<ImagesResult, Error>
+func embeddings(query: EmbeddingsQuery) -> AnyPublisher<EmbeddingsResult, Error>
+func chats(query: ChatQuery) -> AnyPublisher<ChatResult, Error>
+func edits(query: EditsQuery) -> AnyPublisher<EditsResult, Error>
+func model(query: ModelQuery) -> AnyPublisher<ModelResult, Error>
+func models() -> AnyPublisher<ModelsResult, Error>
+func moderations(query: ModerationsQuery) -> AnyPublisher<ModerationsResult, Error>
+func audioTranscriptions(query: AudioTranscriptionQuery) -> AnyPublisher<AudioTranscriptionResult, Error>
+func audioTranslations(query: AudioTranslationQuery) -> AnyPublisher<AudioTranslationResult, Error>
+
+

Example Project

+ +

You can find example iOS application in Demo folder.

+ +

mockuuups-iphone-13-pro-mockup-perspective-right

+

Contribution Guidelines

+ +

Make your Pull Requests clear and obvious to anyone viewing them.
+Set main as your target branch.

+

Use Conventional Commits principles in naming PRs and branches:

+ +
    +
  • Feat: ... for new features and new functionality implementations.
  • +
  • Bug: ... for bug fixes.
  • +
  • Fix: ... for minor issues fixing, like typos or inaccuracies in code.
  • +
  • Chore: ... for boring stuff like code polishing, refactoring, deprecation fixing etc.
  • +
+ +

PR naming example: Feat: Add Threads API handling or Bug: Fix message result duplication

+ +

Branch naming example: feat/add-threads-API-handling or bug/fix-message-result-duplication

+

Write description to pull requests in following format:

+ +
    +
  • What
  • +
+ +

+ +
    +
  • Why
  • +
+ +

+ +
    +
  • Affected Areas
  • +
+ +

+ +
    +
  • More Info
  • +
+ +

+ +

We’ll appreciate you including tests to your code if it is needed and possible. ❤️

+ + + +

License

+
MIT License
+
+Copyright (c) 2023 MacPaw Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+ +
+
+ +
+
+ + diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js new file mode 100755 index 00000000..1ac86992 --- /dev/null +++ b/docs/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targeted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 00000000..359cdbb8 --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/js/jquery.min.js b/docs/js/jquery.min.js new file mode 100644 index 00000000..7f37b5d9 --- /dev/null +++ b/docs/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/js/typeahead.jquery.js b/docs/js/typeahead.jquery.js new file mode 100644 index 00000000..bcb734be --- /dev/null +++ b/docs/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 00000000..0b0df834 --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json new file mode 100644 index 00000000..8b7f1785 --- /dev/null +++ b/docs/undocumented.json @@ -0,0 +1,6 @@ +{ + "warnings": [ + + ], + "source_directory": "/Users/dingxiancao/OpenAI" +} \ No newline at end of file From 074608dbd753b352643a46c68a39b27994905aa5 Mon Sep 17 00:00:00 2001 From: monchewharry Date: Thu, 17 Oct 2024 23:30:08 -0400 Subject: [PATCH 2/2] new docs --- .gitignore | 3 ++ Sources/OpenAI/Public/Models/ChatQuery.swift | 1 + Sources/OpenAI/Public/Models/ChatResult.swift | 36 ++++++++++++++++- docs/Structs.html | 38 +++++++++++++++++- docs/Structs/ChatQuery.html | 3 +- docs/Structs/ChatResult.html | 38 +++++++++++++++++- docs/Structs/ChatResult/Choice.html | 3 +- .../Contents/Resources/Documents/Structs.html | 38 +++++++++++++++++- .../Documents/Structs/ChatQuery.html | 3 +- .../Documents/Structs/ChatResult.html | 38 +++++++++++++++++- .../Documents/Structs/ChatResult/Choice.html | 3 +- .../Contents/Resources/Documents/search.json | 2 +- docs/docsets/.tgz | Bin 279182 -> 281430 bytes docs/search.json | 2 +- 14 files changed, 193 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index e838b643..bf30bfd4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# hooks + + # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore diff --git a/Sources/OpenAI/Public/Models/ChatQuery.swift b/Sources/OpenAI/Public/Models/ChatQuery.swift index c7a88649..8f1f521a 100644 --- a/Sources/OpenAI/Public/Models/ChatQuery.swift +++ b/Sources/OpenAI/Public/Models/ChatQuery.swift @@ -9,6 +9,7 @@ import Foundation /// Creates a model response for the given chat conversation /// https://platform.openai.com/docs/guides/text-generation +/// https://platform.openai.com/docs/api-reference/chat/create public struct ChatQuery: Equatable, Codable, Streamable { /// A list of messages comprising the conversation so far diff --git a/Sources/OpenAI/Public/Models/ChatResult.swift b/Sources/OpenAI/Public/Models/ChatResult.swift index c2f7c12d..7cfbbff6 100644 --- a/Sources/OpenAI/Public/Models/ChatResult.swift +++ b/Sources/OpenAI/Public/Models/ChatResult.swift @@ -6,9 +6,43 @@ // import Foundation - +/// https://platform.openai.com/docs/api-reference/chat/object +/// Example Completion object print +/// ``` +/// { +/// "id": "chatcmpl-123456", +/// "object": "chat.completion", +/// "created": 1728933352, +/// "model": "gpt-4o-2024-08-06", +/// "choices": [ +/// { +/// "index": 0, +/// "message": { +/// "role": "assistant", +/// "content": "Hi there! How can I assist you today?", +/// "refusal": null +/// }, +/// "logprobs": null, +/// "finish_reason": "stop" +/// } +/// ], +/// "usage": { +/// "prompt_tokens": 19, +/// "completion_tokens": 10, +/// "total_tokens": 29, +/// "prompt_tokens_details": { +/// "cached_tokens": 0 +/// }, +/// "completion_tokens_details": { +/// "reasoning_tokens": 0 +/// } +/// }, +/// "system_fingerprint": "fp_6b68a8204b" +/// } +/// ``` public struct ChatResult: Codable, Equatable { + /// mimic the choices array in the chat completion object public struct Choice: Codable, Equatable { public typealias ChatCompletionMessage = ChatQuery.ChatCompletionMessageParam diff --git a/docs/Structs.html b/docs/Structs.html index 047a7c8d..423988ff 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -521,7 +521,8 @@

Declaration

@@ -549,7 +550,40 @@

Declaration

- +

https://platform.openai.com/docs/api-reference/chat/object +Example Completion object print

+
{
+ "id": "chatcmpl-123456",
+ "object": "chat.completion",
+ "created": 1728933352,
+ "model": "gpt-4o-2024-08-06",
+ "choices": [
+   {
+     "index": 0,
+     "message": {
+       "role": "assistant",
+       "content": "Hi there! How can I assist you today?",
+       "refusal": null
+     },
+     "logprobs": null,
+     "finish_reason": "stop"
+   }
+ ],
+ "usage": {
+   "prompt_tokens": 19,
+   "completion_tokens": 10,
+   "total_tokens": 29,
+   "prompt_tokens_details": {
+     "cached_tokens": 0
+   },
+   "completion_tokens_details": {
+     "reasoning_tokens": 0
+   }
+ },
+ "system_fingerprint": "fp_6b68a8204b"
+}
+
+ See more
diff --git a/docs/Structs/ChatQuery.html b/docs/Structs/ChatQuery.html index d48d47c4..ffd9d479 100644 --- a/docs/Structs/ChatQuery.html +++ b/docs/Structs/ChatQuery.html @@ -288,7 +288,8 @@

ChatQuery

Creates a model response for the given chat conversation -https://platform.openai.com/docs/guides/text-generation

+https://platform.openai.com/docs/guides/text-generation +https://platform.openai.com/docs/api-reference/chat/create

diff --git a/docs/Structs/ChatResult.html b/docs/Structs/ChatResult.html index 58ae263f..21f86f60 100644 --- a/docs/Structs/ChatResult.html +++ b/docs/Structs/ChatResult.html @@ -287,7 +287,40 @@

ChatResult

- +

https://platform.openai.com/docs/api-reference/chat/object +Example Completion object print

+
{
+ "id": "chatcmpl-123456",
+ "object": "chat.completion",
+ "created": 1728933352,
+ "model": "gpt-4o-2024-08-06",
+ "choices": [
+   {
+     "index": 0,
+     "message": {
+       "role": "assistant",
+       "content": "Hi there! How can I assist you today?",
+       "refusal": null
+     },
+     "logprobs": null,
+     "finish_reason": "stop"
+   }
+ ],
+ "usage": {
+   "prompt_tokens": 19,
+   "completion_tokens": 10,
+   "total_tokens": 29,
+   "prompt_tokens_details": {
+     "cached_tokens": 0
+   },
+   "completion_tokens_details": {
+     "reasoning_tokens": 0
+   }
+ },
+ "system_fingerprint": "fp_6b68a8204b"
+}
+
+
@@ -305,7 +338,8 @@

ChatResult

- +

mimic the choices array in the chat completion object

+ See more
diff --git a/docs/Structs/ChatResult/Choice.html b/docs/Structs/ChatResult/Choice.html index b724075c..11c1df48 100644 --- a/docs/Structs/ChatResult/Choice.html +++ b/docs/Structs/ChatResult/Choice.html @@ -289,7 +289,8 @@

Choice

- +

mimic the choices array in the chat completion object

+
diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html index 047a7c8d..423988ff 100644 --- a/docs/docsets/.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html @@ -521,7 +521,8 @@

Declaration

@@ -549,7 +550,40 @@

Declaration

- +

https://platform.openai.com/docs/api-reference/chat/object +Example Completion object print

+
{
+ "id": "chatcmpl-123456",
+ "object": "chat.completion",
+ "created": 1728933352,
+ "model": "gpt-4o-2024-08-06",
+ "choices": [
+   {
+     "index": 0,
+     "message": {
+       "role": "assistant",
+       "content": "Hi there! How can I assist you today?",
+       "refusal": null
+     },
+     "logprobs": null,
+     "finish_reason": "stop"
+   }
+ ],
+ "usage": {
+   "prompt_tokens": 19,
+   "completion_tokens": 10,
+   "total_tokens": 29,
+   "prompt_tokens_details": {
+     "cached_tokens": 0
+   },
+   "completion_tokens_details": {
+     "reasoning_tokens": 0
+   }
+ },
+ "system_fingerprint": "fp_6b68a8204b"
+}
+
+ See more
diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html index d48d47c4..ffd9d479 100644 --- a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatQuery.html @@ -288,7 +288,8 @@

ChatQuery

Creates a model response for the given chat conversation -https://platform.openai.com/docs/guides/text-generation

+https://platform.openai.com/docs/guides/text-generation +https://platform.openai.com/docs/api-reference/chat/create

diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html index 58ae263f..21f86f60 100644 --- a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult.html @@ -287,7 +287,40 @@

ChatResult

- +

https://platform.openai.com/docs/api-reference/chat/object +Example Completion object print

+
{
+ "id": "chatcmpl-123456",
+ "object": "chat.completion",
+ "created": 1728933352,
+ "model": "gpt-4o-2024-08-06",
+ "choices": [
+   {
+     "index": 0,
+     "message": {
+       "role": "assistant",
+       "content": "Hi there! How can I assist you today?",
+       "refusal": null
+     },
+     "logprobs": null,
+     "finish_reason": "stop"
+   }
+ ],
+ "usage": {
+   "prompt_tokens": 19,
+   "completion_tokens": 10,
+   "total_tokens": 29,
+   "prompt_tokens_details": {
+     "cached_tokens": 0
+   },
+   "completion_tokens_details": {
+     "reasoning_tokens": 0
+   }
+ },
+ "system_fingerprint": "fp_6b68a8204b"
+}
+
+
@@ -305,7 +338,8 @@

ChatResult

- +

mimic the choices array in the chat completion object

+ See more
diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html index b724075c..11c1df48 100644 --- a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatResult/Choice.html @@ -289,7 +289,8 @@

Choice

- +

mimic the choices array in the chat completion object

+
diff --git a/docs/docsets/.docset/Contents/Resources/Documents/search.json b/docs/docsets/.docset/Contents/Resources/Documents/search.json index 0b0df834..a853d0b5 100644 --- a/docs/docsets/.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file +{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","abstract":"

mimic the choices array in the chat completion object

","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult","abstract":"

https://platform.openai.com/docs/api-reference/chat/object"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/.tgz b/docs/docsets/.tgz index 7d0f68530c74b5fb013346c3380b4932eb50ca5b..64fe7e1b5603bdcef68d225296631203afe91d74 100644 GIT binary patch literal 281430 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%0D(K(5iUFoi6wA#O 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 z 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 Kd(#>f0n>8h?4V9)(|CqSzTnz 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 z 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 $akZG>&6w@0JbZrs5iS&RG}r1U1>D%iQ5<{ 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 literal 279182 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

KocKaY%9C}*p-JMQ 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%0DutUI!OIr%|L6)|4rIpIb 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 z�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 diff --git a/docs/search.json b/docs/search.json index 0b0df834..a853d0b5 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file +{"Typealiases.html#/s:6OpenAI5Modela":{"name":"Model","abstract":"

Defines all available OpenAI models supported by the library.

"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineSimilarity1a1bSdSaySdG_AGtFZ":{"name":"cosineSimilarity(a:b:)","abstract":"

Returns the similarity between two vectors

","parent_name":"Vector"},"Structs/Vector.html#/s:6OpenAI6VectorV16cosineDifference1a1bSdSaySdG_AGtF":{"name":"cosineDifference(a:b:)","abstract":"

Returns the difference between two vectors. Cosine distance is defined as 1 - cosineSimilarity(a, b)

","parent_name":"Vector"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV10harassmentSdvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV21harassmentThreateningSdvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV4hateSdvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15hateThreateningSdvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8selfHarmSdvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV14selfHarmIntentSdvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV20selfHarmInstructionsSdvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV6sexualSdvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV12sexualMinorsSdvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV8violenceSdvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:6OpenAI17ModerationsResultV10ModerationV14CategoryScoresV15violenceGraphicSdvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores/CodingKeys.html":{"name":"CodingKeys","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/CategoryScores.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"CategoryScores"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO10harassmentyA2ImF":{"name":"harassment","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO21harassmentThreateningyA2ImF":{"name":"harassmentThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO4hateyA2ImF":{"name":"hate","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15hateThreateningyA2ImF":{"name":"hateThreatening","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8selfHarmyA2ImF":{"name":"selfHarm","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO14selfHarmIntentyA2ImF":{"name":"selfHarmIntent","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO20selfHarmInstructionsyA2ImF":{"name":"selfHarmInstructions","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO6sexualyA2ImF":{"name":"sexual","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO12sexualMinorsyA2ImF":{"name":"sexualMinors","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO8violenceyA2ImF":{"name":"violence","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10CodingKeysO15violenceGraphicyA2ImF":{"name":"violenceGraphic","parent_name":"CodingKeys"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV10harassmentSbvp":{"name":"harassment","abstract":"

Content that expresses, incites, or promotes harassing language towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV21harassmentThreateningSbvp":{"name":"harassmentThreatening","abstract":"

Harassment content that also includes violence or serious harm towards any target.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV4hateSbvp":{"name":"hate","abstract":"

Content that expresses, incites, or promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability status, or caste.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15hateThreateningSbvp":{"name":"hateThreatening","abstract":"

Hateful content that also includes violence or serious harm towards the targeted group.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8selfHarmSbvp":{"name":"selfHarm","abstract":"

Content that promotes, encourages, or depicts acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV14selfHarmIntentSbvp":{"name":"selfHarmIntent","abstract":"

Content where the speaker expresses that they are engaging or intend to engage in acts of self-harm, such as suicide, cutting, and eating disorders.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV20selfHarmInstructionsSbvp":{"name":"selfHarmInstructions","abstract":"

Content that encourages performing acts of self-harm, such as suicide, cutting, and eating disorders, or that gives instructions or advice on how to commit such acts.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV6sexualSbvp":{"name":"sexual","abstract":"

Content meant to arouse sexual excitement, such as the description of sexual activity, or that promotes sexual services (excluding sex education and wellness).

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV12sexualMinorsSbvp":{"name":"sexualMinors","abstract":"

Sexual content that includes an individual who is under 18 years old.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV8violenceSbvp":{"name":"violence","abstract":"

Content that promotes or glorifies violence or celebrates the suffering or humiliation of others.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:6OpenAI17ModerationsResultV10ModerationV10CategoriesV15violenceGraphicSbvp":{"name":"violenceGraphic","abstract":"

Violent content that depicts death, violence, or serious physical injury in extreme graphic detail.

","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories/CodingKeys.html":{"name":"CodingKeys","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html#/s:ST12makeIterator0B0QzyF":{"name":"makeIterator()","parent_name":"Categories"},"Structs/ModerationsResult/Moderation/Categories.html":{"name":"Categories","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation/CategoryScores.html":{"name":"CategoryScores","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV10categoriesAE10CategoriesVvp":{"name":"categories","abstract":"

Collection of per-category binary usage policies violation flags. For each category, the value is true if the model flags the corresponding category as violated, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV14categoryScoresAE08CategoryG0Vvp":{"name":"categoryScores","abstract":"

Collection of per-category raw scores output by the model, denoting the model’s confidence that the input violates the OpenAI’s policy for the category. The value is between 0 and 1, where higher values denote higher confidence. The scores should not be interpreted as probabilities.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html#/s:6OpenAI17ModerationsResultV10ModerationV7flaggedSbvp":{"name":"flagged","abstract":"

True if the model classifies the content as violating OpenAI’s usage policies, false otherwise.

","parent_name":"Moderation"},"Structs/ModerationsResult/Moderation.html":{"name":"Moderation","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:s12IdentifiableP2id2IDQzvp":{"name":"id","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV5modelSSvp":{"name":"model","parent_name":"ModerationsResult"},"Structs/ModerationsResult.html#/s:6OpenAI17ModerationsResultV7resultsSayAC10ModerationVGvp":{"name":"results","parent_name":"ModerationsResult"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5inputSSvp":{"name":"input","abstract":"

The input text to classify.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5modelSSSgvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"ModerationsQuery"},"Structs/ModerationsQuery.html#/s:6OpenAI16ModerationsQueryV5input5modelACSS_SSSgtcfc":{"name":"init(input:model:)","parent_name":"ModerationsQuery"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV4dataSayAA05ModelD0VGvp":{"name":"data","abstract":"

A list of model objects.

","parent_name":"ModelsResult"},"Structs/ModelsResult.html#/s:6OpenAI12ModelsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always list

","parent_name":"ModelsResult"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ModelResult/CodingKeys.html#/s:6OpenAI11ModelResultV10CodingKeysO7ownedByyA2EmF":{"name":"ownedBy","parent_name":"CodingKeys"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV2idSSvp":{"name":"id","abstract":"

The model identifier, which can be referenced in the API endpoints.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) when the model was created.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “model”.

","parent_name":"ModelResult"},"Structs/ModelResult.html#/s:6OpenAI11ModelResultV7ownedBySSvp":{"name":"ownedBy","abstract":"

The organization that owns the model.

","parent_name":"ModelResult"},"Structs/ModelResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ModelResult"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelSSvp":{"name":"model","abstract":"

The ID of the model to use for this request.

","parent_name":"ModelQuery"},"Structs/ModelQuery.html#/s:6OpenAI10ModelQueryV5modelACSS_tcfc":{"name":"init(model:)","parent_name":"ModelQuery"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO7b64JsonyA2GmF":{"name":"b64Json","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO13revisedPromptyA2GmF":{"name":"revisedPrompt","parent_name":"CodingKeys"},"Structs/ImagesResult/Image/CodingKeys.html#/s:6OpenAI12ImagesResultV5ImageV10CodingKeysO3urlyA2GmF":{"name":"url","parent_name":"CodingKeys"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV7b64JsonSSSgvp":{"name":"b64Json","abstract":"

The base64-encoded JSON of the generated image, if response_format is b64_json

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV13revisedPromptSSSgvp":{"name":"revisedPrompt","abstract":"

The prompt that was used to generate the image, if there was any revision to the prompt.

","parent_name":"Image"},"Structs/ImagesResult/Image.html#/s:6OpenAI12ImagesResultV5ImageV3urlSSSgvp":{"name":"url","abstract":"

The URL of the generated image, if response_format is url (default).

","parent_name":"Image"},"Structs/ImagesResult/Image/CodingKeys.html":{"name":"CodingKeys","parent_name":"Image"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV7createdSdvp":{"name":"created","parent_name":"ImagesResult"},"Structs/ImagesResult.html#/s:6OpenAI12ImagesResultV4dataSayAC5ImageVGvp":{"name":"data","parent_name":"ImagesResult"},"Structs/ImagesResult/Image.html":{"name":"Image","abstract":"

Represents the url or the content of an image generated by the OpenAI API.

","parent_name":"ImagesResult"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_256yA2EmF":{"name":"_256","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO4_512yA2EmF":{"name":"_512","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO5_1024yA2EmF":{"name":"_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1792_1024yA2EmF":{"name":"_1792_1024","parent_name":"Size"},"Structs/ImagesQuery/Size.html#/s:6OpenAI11ImagesQueryV4SizeO10_1024_1792yA2EmF":{"name":"_1024_1792","parent_name":"Size"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO8standardyA2EmF":{"name":"standard","parent_name":"Quality"},"Structs/ImagesQuery/Quality.html#/s:6OpenAI11ImagesQueryV7QualityO2hdyA2EmF":{"name":"hd","parent_name":"Quality"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO7naturalyA2EmF":{"name":"natural","parent_name":"Style"},"Structs/ImagesQuery/Style.html#/s:6OpenAI11ImagesQueryV5StyleO5vividyA2EmF":{"name":"vivid","parent_name":"Style"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO5styleyA2EmF":{"name":"style","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImagesQuery/CodingKeys.html#/s:6OpenAI11ImagesQueryV10CodingKeysO7qualityyA2EmF":{"name":"quality","parent_name":"CodingKeys"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO3urlyA2EmF":{"name":"url","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html#/s:6OpenAI11ImagesQueryV14ResponseFormatO8b64_jsonyA2EmF":{"name":"b64_json","parent_name":"ResponseFormat"},"Structs/ImagesQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters for dall-e-2 and 4000 characters for dall-e-3.

","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10. For dall-e-3, only n=1 is supported.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4sizeAC4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024 for dall-e-2. Must be one of 1024x1024, 1792x1024, or 1024x1792 for dall-e-3 models.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV5styleAC5StyleOSgvp":{"name":"style","abstract":"

The style of the generated images. Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV7qualityAC7QualityOSgvp":{"name":"quality","abstract":"

The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image. This param is only supported for dall-e-3.","parent_name":"ImagesQuery"},"Structs/ImagesQuery.html#/s:6OpenAI11ImagesQueryV6prompt5model1n7quality14responseFormat4size5style4userACSS_SSSgSiSgAC7QualityOSgAC08ResponseI0OSgAC4SizeOSgAC5StyleOSgALtcfc":{"name":"init(prompt:model:n:quality:responseFormat:size:style:user:)","parent_name":"ImagesQuery"},"Structs/ImagesQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Style.html":{"name":"Style","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Quality.html":{"name":"Quality","parent_name":"ImagesQuery"},"Structs/ImagesQuery/Size.html":{"name":"Size","parent_name":"ImagesQuery"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery/CodingKeys.html#/s:6OpenAI20ImageVariationsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square.

","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation. Only dall-e-2 is supported at this time.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4sizeSSSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery.html#/s:6OpenAI20ImageVariationsQueryV5image5model1n14responseFormat4size4userAC10Foundation4DataV_SSSgSiSgAA06ImagesE0V08ResponseI0OSgA2Mtcfc":{"name":"init(image:model:n:responseFormat:size:user:)","parent_name":"ImageVariationsQuery"},"Structs/ImageVariationsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageVariationsQuery"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5imageyA2EmF":{"name":"image","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4maskyA2EmF":{"name":"mask","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO6promptyA2EmF":{"name":"prompt","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4sizeyA2EmF":{"name":"size","parent_name":"CodingKeys"},"Structs/ImageEditsQuery/CodingKeys.html#/s:6OpenAI15ImageEditsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4Sizea":{"name":"Size","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image10Foundation4DataVvp":{"name":"image","abstract":"

The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4mask10Foundation4DataVSgvp":{"name":"mask","abstract":"

An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where image should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as image.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV6promptSSvp":{"name":"prompt","abstract":"

A text description of the desired image(s). The maximum length is 1000 characters.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5modelSSSgvp":{"name":"model","abstract":"

The model to use for image generation.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV14responseFormatAA06ImagesE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format in which the generated images are returned. Must be one of url or b64_json.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4sizeAA06ImagesE0V4SizeOSgvp":{"name":"size","abstract":"

The size of the generated images. Must be one of 256x256, 512x512, or 1024x1024.

","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery.html#/s:6OpenAI15ImageEditsQueryV5image6prompt4mask5model1n14responseFormat4size4userAC10Foundation4DataV_SSANSgSSSgSiSgAA06ImagesE0V08ResponseK0OSgAS4SizeOSgAPtcfc":{"name":"init(image:prompt:mask:model:n:responseFormat:size:user:)","parent_name":"ImageEditsQuery"},"Structs/ImageEditsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ImageEditsQuery"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Usage.html#/s:6OpenAI16EmbeddingsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “embedding”.

","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html#/s:6OpenAI16EmbeddingsResultV9EmbeddingV9embeddingSaySdGvp":{"name":"embedding","abstract":"

The embedding vector, which is a list of floats. The length of vector depends on the model as listed in the embedding guide.","parent_name":"Embedding"},"Structs/EmbeddingsResult/Embedding.html":{"name":"Embedding","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult/Usage.html":{"name":"Usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV4dataSayAC9EmbeddingVGvp":{"name":"data","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5modelSSvp":{"name":"model","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsResult.html#/s:6OpenAI16EmbeddingsResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always “list”.

","parent_name":"EmbeddingsResult"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO14encodingFormatyA2EmF":{"name":"encodingFormat","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/CodingKeys.html#/s:6OpenAI15EmbeddingsQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO5floatyA2EmF":{"name":"float","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/EncodingFormat.html#/s:6OpenAI15EmbeddingsQueryV14EncodingFormatO6base64yA2EmF":{"name":"base64","parent_name":"EncodingFormat"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListyAESaySiGcAEmF":{"name":"intList(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixyAESaySaySiGGcAEmF":{"name":"intMatrix(_:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO7intListAESaySiG_tcfc":{"name":"init(intList:)","parent_name":"Input"},"Structs/EmbeddingsQuery/Input.html#/s:6OpenAI15EmbeddingsQueryV5InputO9intMatrixAESaySaySiGG_tcfc":{"name":"init(intMatrix:)","parent_name":"Input"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5inputAC5InputOvp":{"name":"input","abstract":"

Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less.

","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. You can use the List models API to see all of your available models, or see our Model overview for descriptions of them.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV14encodingFormatAC08EncodingF0OSgvp":{"name":"encodingFormat","abstract":"

The format to return the embeddings in. Can be either float or base64.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery.html#/s:6OpenAI15EmbeddingsQueryV5input5model14encodingFormat4userA2C5InputO_SSAC08EncodingH0OSgSSSgtcfc":{"name":"init(input:model:encodingFormat:user:)","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/Input.html":{"name":"Input","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/EncodingFormat.html":{"name":"EncodingFormat","parent_name":"EmbeddingsQuery"},"Structs/EmbeddingsQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"EmbeddingsQuery"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/EditsResult/Usage.html#/s:6OpenAI11EditsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/EditsResult/Choice.html#/s:6OpenAI11EditsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/EditsResult/Choice.html":{"name":"Choice","parent_name":"EditsResult"},"Structs/EditsResult/Usage.html":{"name":"Usage","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV6objectSSvp":{"name":"object","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7createdSdvp":{"name":"created","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"EditsResult"},"Structs/EditsResult.html#/s:6OpenAI11EditsResultV5usageAC5UsageVvp":{"name":"usage","parent_name":"EditsResult"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5inputSSSgvp":{"name":"input","abstract":"

Input text to get embeddings for.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11instructionSSvp":{"name":"instruction","abstract":"

The instruction that tells the model how to edit the prompt.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV1nSiSgvp":{"name":"n","abstract":"

The number of images to generate. Must be between 1 and 10.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"EditsQuery"},"Structs/EditsQuery.html#/s:6OpenAI10EditsQueryV5model5input11instruction1n11temperature4topPACSS_SSSgSSSiSgSdSgALtcfc":{"name":"init(model:input:instruction:n:temperature:topP:)","parent_name":"EditsQuery"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV4textSSvp":{"name":"text","parent_name":"Choice"},"Structs/CompletionsResult/Choice.html#/s:6OpenAI17CompletionsResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","parent_name":"Choice"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV12promptTokensSivp":{"name":"promptTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV16completionTokensSivp":{"name":"completionTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html#/s:6OpenAI17CompletionsResultV5UsageV11totalTokensSivp":{"name":"totalTokens","parent_name":"Usage"},"Structs/CompletionsResult/Usage.html":{"name":"Usage","parent_name":"CompletionsResult"},"Structs/CompletionsResult/Choice.html":{"name":"Choice","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV2idSSvp":{"name":"id","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV6objectSSvp":{"name":"object","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7createdSdvp":{"name":"created","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5modelSSvp":{"name":"model","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","parent_name":"CompletionsResult"},"Structs/CompletionsResult.html#/s:6OpenAI17CompletionsResultV5usageAC5UsageVSgvp":{"name":"usage","parent_name":"CompletionsResult"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV6promptSSvp":{"name":"prompt","abstract":"

The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4stopSaySSGSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

","parent_name":"CompletionsQuery"},"Structs/CompletionsQuery.html#/s:6OpenAI16CompletionsQueryV5model6prompt11temperature9maxTokens4topP16frequencyPenalty08presenceL04stop4userACSS_SSSdSgSiSgA3MSaySSGSgSSSgtcfc":{"name":"init(model:prompt:temperature:maxTokens:topP:frequencyPenalty:presencePenalty:stop:user:)","parent_name":"CompletionsQuery"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatStreamResult/CodingKeys.html#/s:6OpenAI16ChatStreamResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO5deltayA2GmF":{"name":"delta","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topG0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03TopJ0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token. Useful in instances where characters are represented by multiple tokens and their byte representations must be combined to generate the correct text representation. Can be null if there is no bytes representation for the token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV0C22CompletionTokenLogprobV03topG0SayAI03TopJ0VGSgvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position. In rare cases, there may be fewer than the number of requested top_logprobs returned.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","abstract":"

A list of message content tokens with log probability information.

","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9argumentsSSSgvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV4nameSSSgvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV0fghI8FunctionV9arguments4nameAKSSSg_ANtcfc":{"name":"init(arguments:name:)","parent_name":"ChoiceDeltaToolCallFunction"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV2idSSSgvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV8functionAI0fghI8FunctionVSgvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV4typeSSSgvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV0fG8ToolCallV5index2id8functionAISi_SSSgAI0fghI8FunctionVSgtcfc":{"name":"init(index:id:function:)","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall/ChoiceDeltaToolCallFunction.html":{"name":"ChoiceDeltaToolCallFunction","parent_name":"ChoiceDeltaToolCall"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4Rolea":{"name":"Role","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV7contentSSSgvp":{"name":"content","abstract":"

The contents of the chunk message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV4roleAA0C5QueryV0C22CompletionMessageParamO4RoleOSgvp":{"name":"role","abstract":"

The role of the author of this message.

","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html#/s:6OpenAI16ChatStreamResultV6ChoiceV0F5DeltaV9toolCallsSayAG0fG8ToolCallVGSgvp":{"name":"toolCalls","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/ChoiceDeltaToolCall.html":{"name":"ChoiceDeltaToolCall","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice/ChoiceDelta/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChoiceDelta"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12FinishReasona":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceDelta.html":{"name":"ChoiceDelta","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV5deltaAE0F5DeltaVvp":{"name":"delta","abstract":"

A chat completion delta generated by streamed model responses.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV12finishReasonAA0cE0VADV06FinishH0OSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens.","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html#/s:6OpenAI16ChatStreamResultV6ChoiceV8logprobsAE0F8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatStreamResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatStreamResult/Choice.html":{"name":"Choice","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion. Each chunk has the same ID.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.chunk.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV5modelSSvp":{"name":"model","abstract":"

The model to generate the completion.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices.","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult.html#/s:6OpenAI16ChatStreamResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with. Can be used in conjunction with the seed request parameter to understand when backend changes have been made that might impact determinism.

","parent_name":"ChatStreamResult"},"Structs/ChatStreamResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatStreamResult"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO2idyA2EmF":{"name":"id","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO6objectyA2EmF":{"name":"object","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7createdyA2EmF":{"name":"created","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO7choicesyA2EmF":{"name":"choices","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO5usageyA2EmF":{"name":"usage","parent_name":"CodingKeys"},"Structs/ChatResult/CodingKeys.html#/s:6OpenAI10ChatResultV10CodingKeysO17systemFingerprintyA2EmF":{"name":"systemFingerprint","parent_name":"CodingKeys"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV16completionTokensSivp":{"name":"completionTokens","abstract":"

Number of tokens in the generated completion.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV12promptTokensSivp":{"name":"promptTokens","abstract":"

Number of tokens in the prompt.

","parent_name":"CompletionUsage"},"Structs/ChatResult/CompletionUsage.html#/s:6OpenAI10ChatResultV15CompletionUsageV11totalTokensSivp":{"name":"totalTokens","abstract":"

Total number of tokens used in the request (prompt + completion).

","parent_name":"CompletionUsage"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO4stopyA2GmF":{"name":"stop","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO6lengthyA2GmF":{"name":"length","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO9toolCallsyA2GmF":{"name":"toolCalls","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO13contentFilteryA2GmF":{"name":"contentFilter","parent_name":"FinishReason"},"Structs/ChatResult/Choice/FinishReason.html#/s:6OpenAI10ChatResultV6ChoiceV12FinishReasonO12functionCallyA2GmF":{"name":"functionCall","parent_name":"FinishReason"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO8logprobsyA2GmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO7messageyA2GmF":{"name":"message","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV10CodingKeysO12finishReasonyA2GmF":{"name":"finishReason","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5tokenyA2KmF":{"name":"token","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO5bytesyA2KmF":{"name":"bytes","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO7logprobyA2KmF":{"name":"logprob","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV10CodingKeysO03topF0yA2KmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03TopI0V7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"TopLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5tokenSSvp":{"name":"token","abstract":"

The token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV5bytesSaySiGSgvp":{"name":"bytes","abstract":"

A list of integers representing the UTF-8 bytes representation of the token.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV7logprobSdvp":{"name":"logprob","abstract":"

The log probability of this token.

","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV0C22CompletionTokenLogprobV03topF0SayAI03TopI0VGvp":{"name":"topLogprobs","abstract":"

List of the most likely tokens and their log probability, at this token position.","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/TopLogprob.html":{"name":"TopLogprob","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionTokenLogprob"},"Structs/ChatResult/Choice/ChoiceLogprobs.html#/s:6OpenAI10ChatResultV6ChoiceV0E8LogprobsV7contentSayAG0C22CompletionTokenLogprobVGSgvp":{"name":"content","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice/ChoiceLogprobs/ChatCompletionTokenLogprob.html":{"name":"ChatCompletionTokenLogprob","parent_name":"ChoiceLogprobs"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV0C17CompletionMessagea":{"name":"ChatCompletionMessage","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV8logprobsAE0E8LogprobsVSgvp":{"name":"logprobs","abstract":"

Log probability information for the choice.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV7messageAA0C5QueryV0C22CompletionMessageParamOvp":{"name":"message","abstract":"

A chat completion message generated by the model.

","parent_name":"Choice"},"Structs/ChatResult/Choice.html#/s:6OpenAI10ChatResultV6ChoiceV12finishReasonSSSgvp":{"name":"finishReason","abstract":"

The reason the model stopped generating tokens. This will be stop if the model hit a natural stop point or a provided stop sequence, length if the maximum number of tokens specified in the request was reached, content_filter if content was omitted due to a flag from our content filters, tool_calls if the model called a tool, or function_call (deprecated) if the model called a function.

","parent_name":"Choice"},"Structs/ChatResult/Choice/ChoiceLogprobs.html":{"name":"ChoiceLogprobs","parent_name":"Choice"},"Structs/ChatResult/Choice/CodingKeys.html":{"name":"CodingKeys","parent_name":"Choice"},"Structs/ChatResult/Choice/FinishReason.html":{"name":"FinishReason","parent_name":"Choice"},"Structs/ChatResult/Choice.html":{"name":"Choice","abstract":"

mimic the choices array in the chat completion object

","parent_name":"ChatResult"},"Structs/ChatResult/CompletionUsage.html":{"name":"CompletionUsage","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV2idSSvp":{"name":"id","abstract":"

A unique identifier for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV6objectSSvp":{"name":"object","abstract":"

The object type, which is always chat.completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7createdSdvp":{"name":"created","abstract":"

The Unix timestamp (in seconds) of when the chat completion was created.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5modelSSvp":{"name":"model","abstract":"

The model used for the chat completion.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV7choicesSayAC6ChoiceVGvp":{"name":"choices","abstract":"

A list of chat completion choices. Can be more than one if n is greater than 1.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV5usageAC15CompletionUsageVSgvp":{"name":"usage","abstract":"

Usage statistics for the completion request.

","parent_name":"ChatResult"},"Structs/ChatResult.html#/s:6OpenAI10ChatResultV17systemFingerprintSSSgvp":{"name":"systemFingerprint","abstract":"

This fingerprint represents the backend configuration that the model runs with.","parent_name":"ChatResult"},"Structs/ChatResult/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatResult"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8messagesyA2EmF":{"name":"messages","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO16frequencyPenaltyyA2EmF":{"name":"frequencyPenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9logitBiasyA2EmF":{"name":"logitBias","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO8logprobsyA2EmF":{"name":"logprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO9maxTokensyA2EmF":{"name":"maxTokens","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO1nyA2EmF":{"name":"n","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO15presencePenaltyyA2EmF":{"name":"presencePenalty","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4seedyA2EmF":{"name":"seed","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4stopyA2EmF":{"name":"stop","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11temperatureyA2EmF":{"name":"temperature","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO10toolChoiceyA2EmF":{"name":"toolChoice","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO5toolsyA2EmF":{"name":"tools","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO11topLogprobsyA2EmF":{"name":"topLogprobs","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4topPyA2EmF":{"name":"topP","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO4useryA2EmF":{"name":"user","parent_name":"CodingKeys"},"Structs/ChatQuery/CodingKeys.html#/s:6OpenAI9ChatQueryV10CodingKeysO6streamyA2EmF":{"name":"stream","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV9ToolsTypeO8functionyA2GmF":{"name":"function","parent_name":"ToolsType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7integeryA2KmF":{"name":"integer","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6stringyA2KmF":{"name":"string","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO7booleanyA2KmF":{"name":"boolean","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO5arrayyA2KmF":{"name":"array","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6objectyA2KmF":{"name":"object","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO6numberyA2KmF":{"name":"number","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8JSONTypeO4nullyA2KmF":{"name":"null","parent_name":"JSONType"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV8JSONTypea":{"name":"JSONType","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10propertiesSDySSAKGSgvp":{"name":"properties","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7patternSSSgvp":{"name":"pattern","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV5constSSSgvp":{"name":"const","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4enumSaySSGSgvp":{"name":"enum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7minimumSdSgvp":{"name":"minimum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV7maximumSdSgvp":{"name":"maximum","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03minL0SiSgvp":{"name":"minItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV03maxL0SiSgvp":{"name":"maxItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV06uniqueL0SbSgvp":{"name":"uniqueItems","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5ItemsV4type10properties7pattern5const4enum10multipleOf7minimum7maximum03minL003maxL006uniqueL0AmI8JSONTypeO_SDySSAKGSgSSSgA1_SaySSGSgSiSgSdSgA5_A4_A4_SbSgtcfc":{"name":"init(type:properties:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Items"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8JSONTypea":{"name":"JSONType","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11descriptionSSSgvp":{"name":"description","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV6formatSSSgvp":{"name":"format","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5itemsAK5ItemsVSgvp":{"name":"items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8requiredSaySSGSgvp":{"name":"required","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7patternSSSgvp":{"name":"pattern","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV5constSSSgvp":{"name":"const","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4enumSaySSGSgvp":{"name":"enum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7minimumSdSgvp":{"name":"minimum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV7maximumSdSgvp":{"name":"maximum","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8minItemsSiSgvp":{"name":"minItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV8maxItemsSiSgvp":{"name":"maxItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV11uniqueItemsSbSgvp":{"name":"uniqueItems","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8PropertyV4type11description6format5items8required7pattern5const4enum10multipleOf7minimum7maximum8minItems03maxY006uniqueY0AkI8JSONTypeO_SSSgA0_AK0Y0VSgSaySSGSgA0_A0_A5_SiSgSdSgA7_A6_A6_SbSgtcfc":{"name":"init(type:description:format:items:required:pattern:const:enum:multipleOf:minimum:maximum:minItems:maxItems:uniqueItems:)","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property/Items.html":{"name":"Items","parent_name":"Property"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4typeAI8JSONTypeOvp":{"name":"type","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10propertiesSDySSAI8PropertyVGSgvp":{"name":"properties","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV8requiredSaySSGSgvp":{"name":"required","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7patternSSSgvp":{"name":"pattern","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV5constSSSgvp":{"name":"const","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4enumSaySSGSgvp":{"name":"enum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV10multipleOfSiSgvp":{"name":"multipleOf","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7minimumSiSgvp":{"name":"minimum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV7maximumSiSgvp":{"name":"maximum","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV0H10ParametersV4type10properties8required7pattern5const4enum10multipleOf7minimum7maximumA2I8JSONTypeO_SDySSAI8PropertyVGSgSaySSGSgSSSgA_AZSiSgA0_A0_tcfc":{"name":"init(type:properties:required:pattern:const:enum:multipleOf:minimum:maximum:)","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/Property.html":{"name":"Property","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters/JSONType.html":{"name":"JSONType","parent_name":"FunctionParameters"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4nameSSvp":{"name":"name","abstract":"

The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV11descriptionSSSgvp":{"name":"description","abstract":"

The description of what the function does.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV10parametersAG0H10ParametersVSgvp":{"name":"parameters","abstract":"

The parameters the functions accepts, described as a JSON Schema object.","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV18FunctionDefinitionV4name11description10parametersAGSS_SSSgAG0H10ParametersVSgtcfc":{"name":"init(name:description:parameters:)","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition/FunctionParameters.html":{"name":"FunctionParameters","abstract":"

See the guide for examples, and the JSON Schema reference for documentation about the format.

","parent_name":"FunctionDefinition"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionAE18FunctionDefinitionVvp":{"name":"function","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV4typeAE9ToolsTypeOvp":{"name":"type","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam.html#/s:6OpenAI9ChatQueryV0C19CompletionToolParamV8functionA2E18FunctionDefinitionV_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/FunctionDefinition.html":{"name":"FunctionDefinition","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionToolParam/ToolsType.html":{"name":"ToolsType","parent_name":"ChatCompletionToolParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4noneyA2EmF":{"name":"none","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO4autoyA2EmF":{"name":"auto","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionyAESScAEmF":{"name":"function(_:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html#/s:6OpenAI9ChatQueryV0C33CompletionFunctionCallOptionParamO8functionAESS_tcfc":{"name":"init(function:)","parent_name":"ChatCompletionFunctionCallOptionParam"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO10jsonObjectyA2EmF":{"name":"jsonObject","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:6OpenAI9ChatQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/ChatQuery/ResponseFormat.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ResponseFormat"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringyAESScAEmF":{"name":"string(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListyAESaySSGcAEmF":{"name":"stringList(_:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO6stringAESS_tcfc":{"name":"init(string:)","parent_name":"Stop"},"Structs/ChatQuery/Stop.html#/s:6OpenAI9ChatQueryV4StopO10stringListAESaySSG_tcfc":{"name":"init(stringList:)","parent_name":"Stop"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO6systemyA2GmF":{"name":"system","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4useryA2GmF":{"name":"user","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO9assistantyA2GmF":{"name":"assistant","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4RoleO4toolyA2GmF":{"name":"tool","parent_name":"Role"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10CodingKeysO10toolCallIdyA2ImF":{"name":"toolCallId","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the tool message.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case tool.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V10toolCallIdSSvp":{"name":"toolCallId","abstract":"

Tool call that this message is responding to.

","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4ToolfG0V7content10toolCallIdAGSS_SStcfc":{"name":"init(content:toolCallId:)","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionToolMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V9argumentsSSvp":{"name":"arguments","abstract":"

The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V08FunctionJ0V4nameSSvp":{"name":"name","abstract":"

The name of the function to call.

","parent_name":"FunctionCall"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V9ToolsTypea":{"name":"ToolsType","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2idSSvp":{"name":"id","abstract":"

The ID of the tool call.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V8functionAI08FunctionJ0Vvp":{"name":"function","abstract":"

The function that the model called.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V4typeAC0ceiG0V9ToolsTypeOvp":{"name":"type","abstract":"

The type of the tool. Currently, only function is supported.

","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V0cef8ToolCallG0V2id8functionAISS_AI08FunctionJ0Vtcfc":{"name":"init(id:function:)","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam/FunctionCall.html":{"name":"FunctionCall","parent_name":"ChatCompletionMessageToolCallParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4nameyA2ImF":{"name":"name","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO4roleyA2ImF":{"name":"role","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO7contentyA2ImF":{"name":"content","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V10CodingKeysO9toolCallsyA2ImF":{"name":"toolCalls","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

/ The role of the messages author, in this case assistant.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7contentSSSgvp":{"name":"content","abstract":"

The contents of the assistant message. Required unless tool_calls is specified.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V4nameSSSgvp":{"name":"name","abstract":"

The name of the author of this message. name is required if role is function, and it should be the name of the function whose response is in the content. May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V9toolCallsSayAG0cef8ToolCallG0VGSgvp":{"name":"toolCalls","abstract":"

The tool calls generated by the model, such as function calls.

","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce9AssistantfG0V7content4name9toolCallsAGSSSg_AKSayAG0cef8ToolCallG0VGSgtcfc":{"name":"init(content:name:toolCalls:)","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam/ChatCompletionMessageToolCallParam.html":{"name":"ChatCompletionMessageToolCallParam","parent_name":"ChatCompletionAssistantMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO8imageUrlyA2OmF":{"name":"imageUrl","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V10CodingKeysO4typeyA2OmF":{"name":"type","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4autoyA2QmF":{"name":"auto","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO3lowyA2QmF":{"name":"low","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6DetailO4highyA2QmF":{"name":"high","parent_name":"Detail"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3urlSSvp":{"name":"url","abstract":"

Either a URL of the image or the base64 encoded image data.

","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV6detailAO6DetailOvp":{"name":"detail","abstract":"

Specifies the detail level of the image. Learn more in the","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAOSS_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V0L3URLV3url6detailAO10Foundation4DataV_AO6DetailOtcfc":{"name":"init(url:detail:)","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL/Detail.html":{"name":"Detail","parent_name":"ImageURL"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlAM0L3URLVvp":{"name":"imageUrl","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei9PartImageG0V8imageUrlA2M0L3URLV_tcfc":{"name":"init(imageUrl:)","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/ImageURL.html":{"name":"ImageURL","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatCompletionContentPartImageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textSSvp":{"name":"text","abstract":"

The text content.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4typeSSvp":{"name":"type","abstract":"

The type of the content part.

","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O0cei8PartTextG0V4textAMSS_tcfc":{"name":"init(text:)","parent_name":"ChatCompletionContentPartTextParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartTextParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0yA2K0ceilmG0VcAKmF":{"name":"chatCompletionContentPartImageParam(_:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O4textSSSgvp":{"name":"text","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O8imageUrlAK0cei9PartImageG0V0N3URLVSgvp":{"name":"imageUrl","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei8PartTextG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartTextParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO06VisionI0O04chatei9PartImageG0A2K0ceilmG0V_tcfc":{"name":"init(chatCompletionContentPartImageParam:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartTextParam.html":{"name":"ChatCompletionContentPartTextParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent/ChatCompletionContentPartImageParam.html":{"name":"ChatCompletionContentPartImageParam","parent_name":"VisionContent"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6stringyA2KmF":{"name":"string","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO10CodingKeysO6visionyA2KmF":{"name":"vision","parent_name":"CodingKeys"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringyAISScAImF":{"name":"string(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionyAISayAI06VisionI0OGcAImF":{"name":"vision(_:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringSSSgvp":{"name":"string","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6stringAISS_tcfc":{"name":"init(string:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7ContentO6visionAISayAI06VisionI0OG_tcfc":{"name":"init(vision:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/CodingKeys.html":{"name":"CodingKeys","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content/VisionContent.html":{"name":"VisionContent","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"Content"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7contentAG7ContentOvp":{"name":"content","abstract":"

The contents of the user message.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case user.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce4UserfG0V7content4nameA2G7ContentO_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam/Content.html":{"name":"Content","parent_name":"ChatCompletionUserMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4Rolea":{"name":"Role","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7contentSSvp":{"name":"content","abstract":"

The contents of the system message.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4roleAE4RoleOvp":{"name":"role","abstract":"

The role of the messages author, in this case system.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V4nameSSSgvp":{"name":"name","abstract":"

An optional name for the participant. Provides the model information to differentiate between participants of the same role.

","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO0ce6SystemfG0V7content4nameAGSS_SSSgtcfc":{"name":"init(content:name:)","parent_name":"ChatCompletionSystemMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO6systemyA2E0ce6SystemfG0VcAEmF":{"name":"system(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4useryA2E0ce4UserfG0VcAEmF":{"name":"user(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9assistantyA2E0ce9AssistantfG0VcAEmF":{"name":"assistant(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4toolyA2E0ce4ToolfG0VcAEmF":{"name":"tool(_:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO7contentAE0ce4UserfG0V7ContentOSgvp":{"name":"content","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4roleAE4RoleOvp":{"name":"role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4nameSSSgvp":{"name":"name","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO10toolCallIdSSSgvp":{"name":"toolCallId","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO9toolCallsSayAE0ce9AssistantfG0V0cef8ToolCallG0VGSgvp":{"name":"toolCalls","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4name9toolCalls0K6CallIdAESgAE4RoleO_SSSgANSayAE0ce9AssistantfG0V0cef4ToolmG0VGSgANtcfc":{"name":"init(role:content:name:toolCalls:toolCallId:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4role7content4nameAESgAE4RoleO_SayAE0ce4UserfG0V7ContentO06VisionM0OGSSSgtcfc":{"name":"init(role:content:name:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:SE6encode2toys7Encoder_p_tKF":{"name":"encode(to:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionSystemMessageParam.html":{"name":"ChatCompletionSystemMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionUserMessageParam.html":{"name":"ChatCompletionUserMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionAssistantMessageParam.html":{"name":"ChatCompletionAssistantMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/ChatCompletionToolMessageParam.html":{"name":"ChatCompletionToolMessageParam","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam/Role.html":{"name":"Role","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery/ChatCompletionMessageParam.html#/s:6OpenAI9ChatQueryV0C22CompletionMessageParamO4fromAEs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"ChatCompletionMessageParam"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messagesSayAC0C22CompletionMessageParamOGvp":{"name":"messages","abstract":"

A list of messages comprising the conversation so far

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV16frequencyPenaltySdSgvp":{"name":"frequencyPenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9logitBiasSDySSSiGSgvp":{"name":"logitBias","abstract":"

Modify the likelihood of specified tokens appearing in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8logprobsSbSgvp":{"name":"logprobs","abstract":"

Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the content of message. This option is currently not available on the gpt-4-vision-preview model.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV9maxTokensSiSgvp":{"name":"maxTokens","abstract":"

The maximum number of tokens to generate in the completion.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV1nSiSgvp":{"name":"n","abstract":"

How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV15presencePenaltySdSgvp":{"name":"presencePenalty","abstract":"

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV14responseFormatAC08ResponseF0OSgvp":{"name":"responseFormat","abstract":"

An object specifying the format that the model must output. Compatible with gpt-4-1106-preview and gpt-3.5-turbo-1106.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4seedSiSgvp":{"name":"seed","abstract":"

This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4stopAC4StopOSgvp":{"name":"stop","abstract":"

Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV10toolChoiceAC0C33CompletionFunctionCallOptionParamOSgvp":{"name":"toolChoice","abstract":"

Controls which (if any) function is called by the model. none means the model will not call a function and instead generates a message. auto means the model can pick between generating a message or calling a function. Specifying a particular function via {“type”: “function”, “function”: {“name”: “my_function”}} forces the model to call that function.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV5toolsSayAC0C19CompletionToolParamVGSgvp":{"name":"tools","abstract":"

A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV11topLogprobsSiSgvp":{"name":"topLogprobs","abstract":"

An integer between 0 and 5 specifying the number of most likely tokens to return at each token position, each with an associated log probability. logprobs must be set to true if this parameter is used.

","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4topPSdSgvp":{"name":"topP","abstract":"

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV4userSSSgvp":{"name":"user","abstract":"

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV6streamSbvp":{"name":"stream","abstract":"

If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","parent_name":"ChatQuery"},"Structs/ChatQuery.html#/s:6OpenAI9ChatQueryV8messages5model16frequencyPenalty9logitBias8logprobs9maxTokens1n08presenceH014responseFormat4seed4stop11temperature10toolChoice5tools11topLogprobs0W1P4user6streamACSayAC0C22CompletionMessageParamOG_SSSdSgSDySSSiGSgSbSgSiSgA1_AyC08ResponseP0OSgA1_AC4StopOSgAyC0C33CompletionFunctionCallOptionParamOSgSayAC0C19CompletionToolParamVGSgA1_AYSSSgSbtcfc":{"name":"init(messages:model:frequencyPenalty:logitBias:logprobs:maxTokens:n:presencePenalty:responseFormat:seed:stop:temperature:toolChoice:tools:topLogprobs:topP:user:stream:)","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionMessageParam.html":{"name":"ChatCompletionMessageParam","parent_name":"ChatQuery"},"Structs/ChatQuery/Stop.html":{"name":"Stop","parent_name":"ChatQuery"},"Structs/ChatQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionFunctionCallOptionParam.html":{"name":"ChatCompletionFunctionCallOptionParam","parent_name":"ChatQuery"},"Structs/ChatQuery/ChatCompletionToolParam.html":{"name":"ChatCompletionToolParam","parent_name":"ChatQuery"},"Structs/ChatQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"ChatQuery"},"Structs/AudioTranslationResult.html#/s:6OpenAI22AudioTranslationResultV4textSSvp":{"name":"text","abstract":"

The translated text.

","parent_name":"AudioTranslationResult"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8FileTypea":{"name":"FileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14ResponseFormata":{"name":"ResponseFormat","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) translate, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV8fileTypeAA0c13TranscriptionE0V04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV14responseFormatAA0c13TranscriptionE0V08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should be in English.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranslationQuery"},"Structs/AudioTranslationQuery.html#/s:6OpenAI21AudioTranslationQueryV4file0F4Type5model6prompt11temperature14responseFormatAC10Foundation4DataV_AA0c13TranscriptionE0V04FileG0OS2SSgSdSgAN08ResponseL0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:responseFormat:)","parent_name":"AudioTranslationQuery"},"Structs/AudioTranscriptionResult.html#/s:6OpenAI24AudioTranscriptionResultV4textSSvp":{"name":"text","abstract":"

The transcribed text.

","parent_name":"AudioTranscriptionResult"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4flacyA2EmF":{"name":"flac","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp3yA2EmF":{"name":"mp3","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpgayA2EmF":{"name":"mpga","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3mp4yA2EmF":{"name":"mp4","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3m4ayA2EmF":{"name":"m4a","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4mpegyA2EmF":{"name":"mpeg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3oggyA2EmF":{"name":"ogg","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO3wavyA2EmF":{"name":"wav","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/FileType.html#/s:6OpenAI23AudioTranscriptionQueryV8FileTypeO4webmyA2EmF":{"name":"webm","parent_name":"FileType"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4jsonyA2EmF":{"name":"json","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO4textyA2EmF":{"name":"text","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO11verboseJsonyA2EmF":{"name":"verboseJson","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3srtyA2EmF":{"name":"srt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html#/s:6OpenAI23AudioTranscriptionQueryV14ResponseFormatO3vttyA2EmF":{"name":"vtt","parent_name":"ResponseFormat"},"Structs/AudioTranscriptionQuery/ResponseFormat.html":{"name":"ResponseFormat","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file10Foundation4DataVvp":{"name":"file","abstract":"

The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8fileTypeAC04FileG0Ovp":{"name":"fileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV5modelSSvp":{"name":"model","abstract":"

ID of the model to use. Only whisper-1 is currently available.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV14responseFormatAC08ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV6promptSSSgvp":{"name":"prompt","abstract":"

An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV11temperatureSdSgvp":{"name":"temperature","abstract":"

The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV8languageSSSgvp":{"name":"language","abstract":"

The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery.html#/s:6OpenAI23AudioTranscriptionQueryV4file0F4Type5model6prompt11temperature8language14responseFormatAC10Foundation4DataV_AC04FileG0OS2SSgSdSgApC08ResponseM0OSgtcfc":{"name":"init(file:fileType:model:prompt:temperature:language:responseFormat:)","parent_name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionQuery/FileType.html":{"name":"FileType","parent_name":"AudioTranscriptionQuery"},"Structs/AudioSpeechResult.html#/s:6OpenAI17AudioSpeechResultV5audio10Foundation4DataVvp":{"name":"audio","abstract":"

Audio data for one of the following formats :mp3, opus, aac, flac

","parent_name":"AudioSpeechResult"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO6normalyA2EmF":{"name":"normal","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3maxyA2EmF":{"name":"max","parent_name":"Speed"},"Structs/AudioSpeechQuery/Speed.html#/s:6OpenAI16AudioSpeechQueryV5SpeedO3minyA2EmF":{"name":"min","parent_name":"Speed"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5modelyA2EmF":{"name":"model","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5inputyA2EmF":{"name":"input","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5voiceyA2EmF":{"name":"voice","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO14responseFormatyA2EmF":{"name":"responseFormat","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/CodingKeys.html#/s:6OpenAI16AudioSpeechQueryV10CodingKeysO5speedyA2EmF":{"name":"speed","parent_name":"CodingKeys"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3mp3yA2EmF":{"name":"mp3","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4opusyA2EmF":{"name":"opus","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO3aacyA2EmF":{"name":"aac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html#/s:6OpenAI16AudioSpeechQueryV0cD14ResponseFormatO4flacyA2EmF":{"name":"flac","parent_name":"AudioSpeechResponseFormat"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5alloyyA2EmF":{"name":"alloy","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4echoyA2EmF":{"name":"echo","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO5fableyA2EmF":{"name":"fable","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4onyxyA2EmF":{"name":"onyx","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO4novayA2EmF":{"name":"nova","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html#/s:6OpenAI16AudioSpeechQueryV0cD5VoiceO7shimmeryA2EmF":{"name":"shimmer","parent_name":"AudioSpeechVoice"},"Structs/AudioSpeechQuery/AudioSpeechVoice.html":{"name":"AudioSpeechVoice","abstract":"

Encapsulates the voices available for audio generation.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/AudioSpeechResponseFormat.html":{"name":"AudioSpeechResponseFormat","abstract":"

Encapsulates the response formats available for audio data.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5inputSSvp":{"name":"input","abstract":"

The text to generate audio for. The maximum length is 4096 characters.

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5modelSSvp":{"name":"model","abstract":"

One of the available TTS models: tts-1 or tts-1-hd

","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5voiceAC0cD5VoiceOvp":{"name":"voice","abstract":"

The voice to use when generating the audio. Supported voices are alloy, echo, fable, onyx, nova, and shimmer. Previews of the voices are available in the Text to speech guide.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV14responseFormatAC0cd8ResponseG0OSgvp":{"name":"responseFormat","abstract":"

The format to audio in. Supported formats are mp3, opus, aac, and flac.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5speedSSSgvp":{"name":"speed","abstract":"

The speed of the generated audio. Select a value from 0.25 to 4.0. 1.0 is the default.","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/CodingKeys.html":{"name":"CodingKeys","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV5model5input5voice14responseFormat5speedACSS_SSAC0cD5VoiceOAC0cd8ResponseJ0OSdSgtcfc":{"name":"init(model:input:voice:responseFormat:speed:)","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery/Speed.html":{"name":"Speed","parent_name":"AudioSpeechQuery"},"Structs/AudioSpeechQuery.html#/s:6OpenAI16AudioSpeechQueryV09normalizeD5SpeedySSSdSgFZ":{"name":"normalizeSpeechSpeed(_:)","parent_name":"AudioSpeechQuery"},"Structs/APIErrorResponse.html#/s:6OpenAI16APIErrorResponseV5errorAA0C0Vvp":{"name":"error","parent_name":"APIErrorResponse"},"Structs/APIErrorResponse.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIErrorResponse"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7messageSSvp":{"name":"message","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4typeSSvp":{"name":"type","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV5paramSSSgvp":{"name":"param","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV4codeSSSgvp":{"name":"code","parent_name":"APIError"},"Structs/APIError.html#/s:6OpenAI8APIErrorV7message4type5param4codeACSS_S2SSgAHtcfc":{"name":"init(message:type:param:code:)","parent_name":"APIError"},"Structs/APIError.html#/s:Se4fromxs7Decoder_p_tKcfc":{"name":"init(from:)","parent_name":"APIError"},"Structs/APIError.html#/s:10Foundation14LocalizedErrorP16errorDescriptionSSSgvp":{"name":"errorDescription","parent_name":"APIError"},"Structs/APIError.html":{"name":"APIError"},"Structs/APIErrorResponse.html":{"name":"APIErrorResponse"},"Structs/AudioSpeechQuery.html":{"name":"AudioSpeechQuery","abstract":"

Generates audio from the input text."},"Structs/AudioSpeechResult.html":{"name":"AudioSpeechResult","abstract":"

The audio file content."},"Structs/AudioTranscriptionQuery.html":{"name":"AudioTranscriptionQuery"},"Structs/AudioTranscriptionResult.html":{"name":"AudioTranscriptionResult"},"Structs/AudioTranslationQuery.html":{"name":"AudioTranslationQuery","abstract":"

Translates audio into English.

"},"Structs/AudioTranslationResult.html":{"name":"AudioTranslationResult"},"Structs/ChatQuery.html":{"name":"ChatQuery","abstract":"

Creates a model response for the given chat conversation"},"Structs/ChatResult.html":{"name":"ChatResult","abstract":"

https://platform.openai.com/docs/api-reference/chat/object"},"Structs/ChatStreamResult.html":{"name":"ChatStreamResult"},"Structs/CompletionsQuery.html":{"name":"CompletionsQuery"},"Structs/CompletionsResult.html":{"name":"CompletionsResult"},"Structs/EditsQuery.html":{"name":"EditsQuery"},"Structs/EditsResult.html":{"name":"EditsResult"},"Structs/EmbeddingsQuery.html":{"name":"EmbeddingsQuery"},"Structs/EmbeddingsResult.html":{"name":"EmbeddingsResult"},"Structs/ImageEditsQuery.html":{"name":"ImageEditsQuery"},"Structs/ImageVariationsQuery.html":{"name":"ImageVariationsQuery"},"Structs/ImagesQuery.html":{"name":"ImagesQuery","abstract":"

Given a prompt and/or an input image, the model will generate a new image."},"Structs/ImagesResult.html":{"name":"ImagesResult","abstract":"

Returns a list of image objects.

"},"Structs/ModelQuery.html":{"name":"ModelQuery","abstract":"

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

"},"Structs/ModelResult.html":{"name":"ModelResult","abstract":"

The model object matching the specified ID.

"},"Structs/ModelsResult.html":{"name":"ModelsResult","abstract":"

A list of model objects.

"},"Structs/ModerationsQuery.html":{"name":"ModerationsQuery"},"Structs/ModerationsResult.html":{"name":"ModerationsResult"},"Structs/Vector.html":{"name":"Vector"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","abstract":"

This function sends a completions query to the OpenAI API and retrieves generated completions in response. The Completions API enables you to build applications using OpenAI’s language models, like the powerful GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","abstract":"

This function sends an images query to the OpenAI API and retrieves generated images in response. The Images Generation API enables you to create various images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","abstract":"

This function sends an image edit query to the OpenAI API and retrieves generated images in response. The Images Edit API enables you to edit images or graphics using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","abstract":"

This function sends an image variation query to the OpenAI API and retrieves generated images in response. The Images Variations API enables you to create a variation of a given image using OpenAI’s powerful deep learning models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","abstract":"

This function sends an embeddings query to the OpenAI API and retrieves embeddings in response. The Embeddings API enables you to generate high-dimensional vector representations of texts, which can be used for various natural language processing tasks such as semantic similarity, clustering, and classification.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","abstract":"

This function sends a chat query to the OpenAI API and retrieves chat stream conversation responses. The Chat API enables you to build chatbots or conversational applications using OpenAI’s powerful natural language models, like GPT-3. The result is returned by chunks.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","abstract":"

This function sends an edits query to the OpenAI API and retrieves an edited version of the prompt based on the instruction given.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","abstract":"

This function sends a model query to the OpenAI API and retrieves a model instance, providing owner information. The Models API in this usage enables you to gather detailed information on the model in question, like GPT-3.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","abstract":"

This function sends a models query to the OpenAI API and retrieves a list of models. The Models API in this usage enables you to list all the available models.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","abstract":"

This function sends a moderations query to the OpenAI API and retrieves a list of category results to classify how text may violate OpenAI’s Content Policy.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","abstract":"

This function sends an AudioSpeechQuery to the OpenAI API to create audio speech from text using a specific voice and format.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","abstract":"

Transcribes audio data using OpenAI’s audio transcription API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","abstract":"

Translates audio data using OpenAI’s audio translation API and completes the operation asynchronously.

","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5queryAA17CompletionsResultVAA0F5QueryV_tYaKF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5queryScsyAA17CompletionsResultVs5Error_pGAA0G5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5queryAA12ImagesResultVAA0F5QueryV_tYaKF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5queryAA12ImagesResultVAA05ImageE5QueryV_tYaKF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5queryAA16EmbeddingsResultVAA0F5QueryV_tYaKF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5queryAA10ChatResultVAA0F5QueryV_tYaKF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5queryScsyAA04ChatE6ResultVs5Error_pGAA0G5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5queryAA11EditsResultVAA0F5QueryV_tYaKF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5queryAA11ModelResultVAA0F5QueryV_tYaKF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6modelsAA12ModelsResultVyYaKF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5queryAA17ModerationsResultVAA0F5QueryV_tYaKF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5queryAA05AudioF6ResultVAA0hF5QueryV_tYaKF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5queryAA24AudioTranscriptionResultVAA0gH5QueryV_tYaKF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5queryAA22AudioTranslationResultVAA0gH5QueryV_tYaKF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11completions5query7Combine12AnyPublisherVyAA17CompletionsResultVs5Error_pGAA0I5QueryV_tF":{"name":"completions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17completionsStream5query7Combine12AnyPublisherVys6ResultOyAA011CompletionsJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"completionsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6images5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA0I5QueryV_tF":{"name":"images(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10imageEdits5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageEdits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE15imageVariations5query7Combine12AnyPublisherVyAA12ImagesResultVs5Error_pGAA05ImageE5QueryV_tF":{"name":"imageVariations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE10embeddings5query7Combine12AnyPublisherVyAA16EmbeddingsResultVs5Error_pGAA0I5QueryV_tF":{"name":"embeddings(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5chats5query7Combine12AnyPublisherVyAA10ChatResultVs5Error_pGAA0I5QueryV_tF":{"name":"chats(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11chatsStream5query7Combine12AnyPublisherVys6ResultOyAA04ChateJ0Vs5Error_pGsAM_pGAA0K5QueryV_tF":{"name":"chatsStream(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5edits5query7Combine12AnyPublisherVyAA11EditsResultVs5Error_pGAA0I5QueryV_tF":{"name":"edits(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE5model5query7Combine12AnyPublisherVyAA11ModelResultVs5Error_pGAA0I5QueryV_tF":{"name":"model(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE6models7Combine12AnyPublisherVyAA12ModelsResultVs5Error_pGyF":{"name":"models()","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE11moderations5query7Combine12AnyPublisherVyAA17ModerationsResultVs5Error_pGAA0I5QueryV_tF":{"name":"moderations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioCreateSpeech5query7Combine12AnyPublisherVyAA05AudioF6ResultVs5Error_pGAA0kF5QueryV_tF":{"name":"audioCreateSpeech(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE19audioTranscriptions5query7Combine12AnyPublisherVyAA24AudioTranscriptionResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranscriptions(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html#/s:6OpenAI0A10AIProtocolPAAE17audioTranslations5query7Combine12AnyPublisherVyAA22AudioTranslationResultVs5Error_pGAA0jK5QueryV_tF":{"name":"audioTranslations(query:)","parent_name":"OpenAIProtocol"},"Protocols/OpenAIProtocol.html":{"name":"OpenAIProtocol"},"Extensions/Model.html#/s:SS6OpenAIE6gpt4_oSSvpZ":{"name":"gpt4_o","abstract":"

gpt-4o, currently the most advanced, multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt4_o_miniSSvpZ":{"name":"gpt4_o_mini","abstract":"

gpt-4o-mini, currently the most affordable and intelligent model for fast and lightweight requests.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10gpt4_turboSSvpZ":{"name":"gpt4_turbo","abstract":"

gpt-4-turbo, The latest GPT-4 Turbo model with vision capabilities. Vision requests can now use JSON mode and function calling and more. Context window: 128,000 tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE18gpt4_turbo_previewSSvpZ":{"name":"gpt4_turbo_preview","abstract":"

gpt-4-turbo, gpt-4 model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19gpt4_vision_previewSSvpZ":{"name":"gpt4_vision_preview","abstract":"

gpt-4-vision-preview, able to understand images, in addition to all other GPT-4 Turbo capabilities.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_0125_previewSSvpZ":{"name":"gpt4_0125_preview","abstract":"

Snapshot of gpt-4-turbo-preview from January 25th 2024. This model reduces cases of “laziness” where the model doesn’t complete a task. Also fixes the bug impacting non-English UTF-8 generations. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE17gpt4_1106_previewSSvpZ":{"name":"gpt4_1106_preview","abstract":"

Snapshot of gpt-4-turbo-preview from November 6th 2023. Improved instruction following, JSON mode, reproducible outputs, parallel function calling and more. Maximum of 4096 output tokens

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE4gpt4SSvpZ":{"name":"gpt4","abstract":"

Most capable gpt-4 model, outperforms any GPT-3.5 model, able to do more complex tasks, and optimized for chat.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0613SSvpZ":{"name":"gpt4_0613","abstract":"

Snapshot of gpt-4 from June 13th 2023 with function calling data. Unlike gpt-4, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9gpt4_0314SSvpZ":{"name":"gpt4_0314","abstract":"

Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8gpt4_32kSSvpZ":{"name":"gpt4_32k","abstract":"

Same capabilities as the base gpt-4 model but with 4x the context length. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0613SSvpZ":{"name":"gpt4_32k_0613","abstract":"

Snapshot of gpt-4-32k from June 13th 2023. Unlike gpt-4-32k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13gpt4_32k_0314SSvpZ":{"name":"gpt4_32k_0314","abstract":"

Snapshot of gpt-4-32k from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11gpt3_5TurboSSvpZ":{"name":"gpt3_5Turbo","abstract":"

Most capable gpt-3.5-turbo model and optimized for chat. Will be updated with our latest model iteration.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0125SSvpZ":{"name":"gpt3_5Turbo_0125","abstract":"

Snapshot of gpt-3.5-turbo from January 25th 2024. Decreased prices by 50%. Various improvements including higher accuracy at responding in requested formats and a fix for a bug which caused a text encoding issue for non-English language function calls.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_1106SSvpZ":{"name":"gpt3_5Turbo_1106","abstract":"

Snapshot of gpt-3.5-turbo from November 6th 2023. The latest gpt-3.5-turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling and more.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0613SSvpZ":{"name":"gpt3_5Turbo_0613","abstract":"

Snapshot of gpt-3.5-turbo from June 13th 2023 with function calling data. Unlike gpt-3.5-turbo, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16gpt3_5Turbo_0301SSvpZ":{"name":"gpt3_5Turbo_0301","abstract":"

Snapshot of gpt-3.5-turbo from March 1st 2023. Unlike gpt-3.5-turbo, this model will not receive updates, and will only be supported for a three month period ending on June 1st 2023.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15gpt3_5Turbo_16kSSvpZ":{"name":"gpt3_5Turbo_16k","abstract":"

Same capabilities as the standard gpt-3.5-turbo model but with 4 times the context.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20gpt3_5Turbo_16k_0613SSvpZ":{"name":"gpt3_5Turbo_16k_0613","abstract":"

Snapshot of gpt-3.5-turbo-16k from June 13th 2023. Unlike gpt-3.5-turbo-16k, this model will not receive updates, and will be deprecated 3 months after a new version is released.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_003SSvpZ":{"name":"textDavinci_003","abstract":"

Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_002SSvpZ":{"name":"textDavinci_002","abstract":"

Similar capabilities to text-davinci-003 but trained with supervised fine-tuning instead of reinforcement learning.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9textCurieSSvpZ":{"name":"textCurie","abstract":"

Very capable, faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE11textBabbageSSvpZ":{"name":"textBabbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7textAdaSSvpZ":{"name":"textAda","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE15textDavinci_001SSvpZ":{"name":"textDavinci_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19codeDavinciEdit_001SSvpZ":{"name":"codeDavinciEdit_001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5tts_1SSvpZ":{"name":"tts_1","abstract":"

The latest text to speech model, optimized for speed.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8tts_1_hdSSvpZ":{"name":"tts_1_hd","abstract":"

The latest text to speech model, optimized for quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE9whisper_1SSvpZ":{"name":"whisper_1","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_2SSvpZ":{"name":"dall_e_2","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE8dall_e_3SSvpZ":{"name":"dall_e_3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7davinciSSvpZ":{"name":"davinci","abstract":"

Most capable GPT-3 model. Can do any task the other models can do, often with higher quality.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE5curieSSvpZ":{"name":"curie","abstract":"

Very capable, but faster and lower cost than Davinci.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE7babbageSSvpZ":{"name":"babbage","abstract":"

Capable of straightforward tasks, very fast, and lower cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE3adaSSvpZ":{"name":"ada","abstract":"

Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE16textEmbeddingAdaSSvpZ":{"name":"textEmbeddingAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE13textSearchAdaSSvpZ":{"name":"textSearchAda","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textSearchBabbageDocSSvpZ":{"name":"textSearchBabbageDoc","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE25textSearchBabbageQuery001SSvpZ":{"name":"textSearchBabbageQuery001","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE14textEmbedding3SSvpZ":{"name":"textEmbedding3","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE19textEmbedding3LargeSSvpZ":{"name":"textEmbedding3Large","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationStableSSvpZ":{"name":"textModerationStable","abstract":"

Almost as capable as the latest model, but slightly older.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE20textModerationLatestSSvpZ":{"name":"textModerationLatest","abstract":"

Most capable moderation model. Accuracy will be slightly higher than the stable model.

","parent_name":"Model"},"Extensions/Model.html#/s:SS6OpenAIE10moderationSSvpZ":{"name":"moderation","parent_name":"Model"},"Extensions/Model.html":{"name":"Model"},"Enums/OpenAIError.html#/s:6OpenAI0A7AIErrorO9emptyDatayA2CmF":{"name":"emptyData","parent_name":"OpenAIError"},"Enums/OpenAIError.html":{"name":"OpenAIError"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5tokenSSvp":{"name":"token","abstract":"

OpenAI API token. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV22organizationIdentifierSSSgvp":{"name":"organizationIdentifier","abstract":"

Optional OpenAI organization identifier. See https://platform.openai.com/docs/api-reference/authentication

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4hostSSvp":{"name":"host","abstract":"

API host. Set this property if you use some kind of proxy or your own server. Default is api.openai.com

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV4portSivp":{"name":"port","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV6schemeSSvp":{"name":"scheme","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV15timeoutIntervalSdvp":{"name":"timeoutInterval","abstract":"

Default request timeout

","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html#/s:6OpenAIAAC13ConfigurationV5token22organizationIdentifier4host4port6scheme15timeoutIntervalADSS_SSSgSSSiSSSdtcfc":{"name":"init(token:organizationIdentifier:host:port:scheme:timeoutInterval:)","parent_name":"Configuration"},"Classes/OpenAI/Configuration.html":{"name":"Configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationAB13ConfigurationVvp":{"name":"configuration","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC8apiTokenABSS_tcfc":{"name":"init(apiToken:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configurationA2B13ConfigurationV_tcfc":{"name":"init(configuration:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAIAAC13configuration7sessionA2B13ConfigurationV_So12NSURLSessionCtcfc":{"name":"init(configuration:session:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11completions5query10completionyAA16CompletionsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"completions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17completionsStream5query8onResult10completionyAA16CompletionsQueryV_ys0H0OyAA0jH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"completionsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6images5query10completionyAA11ImagesQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"images(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10imageEdits5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageEdits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP15imageVariations5query10completionyAA05ImageE5QueryV_ys6ResultOyAA06ImagesJ0Vs5Error_pGctF":{"name":"imageVariations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP10embeddings5query10completionyAA15EmbeddingsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"embeddings(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5chats5query10completionyAA9ChatQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"chats(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11chatsStream5query8onResult10completionyAA9ChatQueryV_ys0H0OyAA0jeH0Vs5Error_pGcysAN_pSgcSgtF":{"name":"chatsStream(query:onResult:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5edits5query10completionyAA10EditsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"edits(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP5model5query10completionyAA10ModelQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"model(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP6models10completionyys6ResultOyAA06ModelsF0Vs5Error_pGc_tF":{"name":"models(completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP11moderations5query10completionyAA16ModerationsQueryV_ys6ResultOyAA0gI0Vs5Error_pGctF":{"name":"moderations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP19audioTranscriptions5query10completionyAA23AudioTranscriptionQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranscriptions(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioTranslations5query10completionyAA21AudioTranslationQueryV_ys6ResultOyAA0hiK0Vs5Error_pGctF":{"name":"audioTranslations(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html#/s:6OpenAI0A10AIProtocolP17audioCreateSpeech5query10completionyAA05AudioF5QueryV_ys6ResultOyAA0ifK0Vs5Error_pGctF":{"name":"audioCreateSpeech(query:completion:)","parent_name":"OpenAI"},"Classes/OpenAI.html":{"name":"OpenAI"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file