From 2bb10e705e19c0a407efa4b4a56955d9d87d4023 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 00:08:13 +0000 Subject: [PATCH 1/7] fix(openapi): add keypad input plan and remove TrieveKnowledgeBaseCreate references --- fern/apis/api/openapi.json | 56 +++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index eb949620c..acf500458 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -11171,6 +11171,11 @@ "clientSecret": { "type": "string", "description": "This is the OAuth2 client secret." + }, + "scope": { + "type": "string", + "description": "This is the scope of the OAuth2 token.", + "maxLength": 1000 } }, "required": [ @@ -12703,6 +12708,30 @@ "do" ] }, + "KeypadInputPlan": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "This keeps track of whether the user has enabled keypad input.\nBy default, it is off.\n\n@default false" + }, + "timeoutSeconds": { + "type": "number", + "description": "This is the time in seconds to wait before processing the input.\nIf the input is not received within this time, the input will be ignored.\nIf set to \"off\", the input will be processed when the user enters a delimiter or immediately if no delimiter is used.\n\n@default 2", + "minimum": 0.5, + "maximum": 10 + }, + "delimiters": { + "type": "string", + "description": "This is the delimiter(s) that will be used to process the input.\nCan be '#', '*', or an empty array.", + "enum": [ + "#", + "*", + "" + ] + } + } + }, "CreateAssistantDTO": { "type": "object", "properties": { @@ -13275,6 +13304,9 @@ "items": { "$ref": "#/components/schemas/AssistantHooks" } + }, + "keypadInputPlan": { + "$ref": "#/components/schemas/KeypadInputPlan" } } }, @@ -13854,6 +13886,9 @@ "items": { "$ref": "#/components/schemas/AssistantHooks" } + }, + "keypadInputPlan": { + "$ref": "#/components/schemas/KeypadInputPlan" } } }, @@ -15485,6 +15520,9 @@ "$ref": "#/components/schemas/AssistantHooks" } }, + "keypadInputPlan": { + "$ref": "#/components/schemas/KeypadInputPlan" + }, "id": { "type": "string", "description": "This is the unique identifier for the assistant." @@ -16083,6 +16121,9 @@ "items": { "$ref": "#/components/schemas/AssistantHooks" } + }, + "keypadInputPlan": { + "$ref": "#/components/schemas/KeypadInputPlan" } } }, @@ -17172,10 +17213,6 @@ "createPlan": { "description": "This is the plan if you want us to create/import a new vector store using Trieve.", "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBaseCreate", - "title": "Create" - }, { "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", "title": "Import" @@ -17256,10 +17293,6 @@ "createPlan": { "description": "This is the plan if you want us to create/import a new vector store using Trieve.", "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBaseCreate", - "title": "Create" - }, { "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", "title": "Import" @@ -17289,10 +17322,6 @@ "createPlan": { "description": "This is the plan if you want us to create/import a new vector store using Trieve.", "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBaseCreate", - "title": "Create" - }, { "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", "title": "Import" @@ -20253,7 +20282,8 @@ "costBreakdown.llmPromptTokens", "costBreakdown.llmCompletionTokens", "duration", - "concurrency" + "concurrency", + "minutesUsed" ] }, "alias": { From f2a71afb3379f9b03a0047dd40615c72e1f202a6 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 00:08:01 +0000 Subject: [PATCH 2/7] feat(openapi): add support for Supabase storage and Anthropic thinking config This commit adds support for Supabase storage and Anthropic thinking configuration in the OpenAPI specification. It introduces new fields for Supabase credentials, bucket plans, and Anthropic thinking budget tokens. It also updates the description for the "model" field to include the new "claude-3-7-sonnet-20250219" model. --- fern/apis/api/openapi.json | 205 ++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 3 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index acf500458..75bf84e8c 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -6562,6 +6562,27 @@ "model" ] }, + "AnthropicThinkingConfig": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "enabled" + ] + }, + "budgetTokens": { + "type": "number", + "description": "The maximum number of tokens to allocate for thinking.\nMust be between 1024 and 100000 tokens.", + "minimum": 1024, + "maximum": 100000 + } + }, + "required": [ + "type", + "budgetTokens" + ] + }, "AnthropicModel": { "type": "object", "properties": { @@ -6630,22 +6651,32 @@ }, "model": { "type": "string", - "description": "This is the Anthropic/Claude models that will be used.", + "description": "The specific Anthropic/Claude model that will be used.", "enum": [ "claude-3-opus-20240229", "claude-3-sonnet-20240229", "claude-3-haiku-20240307", "claude-3-5-sonnet-20240620", "claude-3-5-sonnet-20241022", - "claude-3-5-haiku-20241022" + "claude-3-5-haiku-20241022", + "claude-3-7-sonnet-20250219" ] }, "provider": { "type": "string", + "description": "The provider identifier for Anthropic.", "enum": [ "anthropic" ] }, + "thinking": { + "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.", + "allOf": [ + { + "$ref": "#/components/schemas/AnthropicThinkingConfig" + } + ] + }, "temperature": { "type": "number", "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", @@ -8970,6 +9001,13 @@ "description": "Defines the use speaker boost for voice settings.", "example": false }, + "speed": { + "type": "number", + "description": "Defines the speed for voice settings.", + "minimum": 0.7, + "maximum": 1.2, + "example": 0.9 + }, "optimizeStreamingLatency": { "type": "number", "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.", @@ -9986,6 +10024,13 @@ "description": "Defines the use speaker boost for voice settings.", "example": false }, + "speed": { + "type": "number", + "description": "Defines the speed for voice settings.", + "minimum": 0.7, + "maximum": 1.2, + "example": 0.9 + }, "optimizeStreamingLatency": { "type": "number", "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.", @@ -11821,6 +11866,84 @@ "s3PathPrefix" ] }, + "SupabaseBucketPlan": { + "type": "object", + "properties": { + "region": { + "type": "string", + "description": "This is the S3 Region. It should look like us-east-1\nIt should be one of the supabase regions defined in the SUPABASE_REGION enum\nCheck https://supabase.com/docs/guides/platform/regions for up to date regions", + "enum": [ + "us-west-1", + "us-east-1", + "us-east-2", + "ca-central-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-central-1", + "eu-central-2", + "eu-north-1", + "ap-south-1", + "ap-southeast-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-southeast-2", + "sa-east-1" + ] + }, + "url": { + "type": "string", + "description": "This is the S3 compatible URL for Supabase S3\nThis should look like https://.supabase.co/storage/v1/s3" + }, + "accessKeyId": { + "type": "string", + "description": "This is the Supabase S3 Access Key ID.\nThe user creates this in the Supabase project Storage settings" + }, + "secretAccessKey": { + "type": "string", + "description": "This is the Supabase S3 Secret Access Key.\nThe user creates this in the Supabase project Storage settings along with the access key id" + }, + "name": { + "type": "string", + "description": "This is the Supabase S3 Bucket Name.\nThe user must create this in Supabase under Storage > Buckets\nA bucket that does not exist will not be checked now, but file uploads will fail" + }, + "path": { + "type": "string", + "description": "This is the Supabase S3 Bucket Folder Path.\nThe user can create this in Supabase under Storage > Buckets\nA path that does not exist will not be checked now, but file uploads will fail\nA Path is like a folder in the bucket\nEg. If the bucket is called \"my-bucket\" and the path is \"my-folder\", the full path is \"my-bucket/my-folder\"" + } + }, + "required": [ + "region", + "url", + "accessKeyId", + "secretAccessKey", + "name" + ] + }, + "CreateSupabaseCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "supabase" + ], + "description": "This is for supabase storage." + }, + "bucketPlan": { + "$ref": "#/components/schemas/SupabaseBucketPlan" + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider" + ] + }, "CreateSmallestAICredentialDTO": { "type": "object", "properties": { @@ -12718,7 +12841,7 @@ "timeoutSeconds": { "type": "number", "description": "This is the time in seconds to wait before processing the input.\nIf the input is not received within this time, the input will be ignored.\nIf set to \"off\", the input will be processed when the user enters a delimiter or immediately if no delimiter is used.\n\n@default 2", - "minimum": 0.5, + "minimum": 0, "maximum": 10 }, "delimiters": { @@ -13165,6 +13288,10 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" @@ -13743,6 +13870,10 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" @@ -15380,6 +15511,10 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" @@ -15982,6 +16117,10 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" @@ -22693,6 +22832,52 @@ "updatedAt" ] }, + "SupabaseCredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "supabase" + ], + "description": "This is for supabase storage." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + }, + "bucketPlan": { + "$ref": "#/components/schemas/SupabaseBucketPlan" + } + }, + "required": [ + "provider", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "SmallestAICredential": { "type": "object", "properties": { @@ -23810,6 +23995,20 @@ } } }, + "UpdateSupabaseCredentialDTO": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + }, + "bucketPlan": { + "$ref": "#/components/schemas/SupabaseBucketPlan" + } + } + }, "UpdateSmallestAICredentialDTO": { "type": "object", "properties": { From 67329e02f19a06c489378972887931d954b3c9ef Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sun, 2 Mar 2025 00:07:58 +0000 Subject: [PATCH 3/7] feat(openapi): add support for Hume AI voices and GPT-4.5-preview model --- fern/apis/api/openapi.json | 67 +++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 75bf84e8c..1659e8bd3 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -6197,11 +6197,12 @@ }, "sipVerb": { "type": "object", - "description": "This specifies the SIP verb to use while transferring the call.\n- 'refer': Uses SIP REFER to transfer the call (default)\n- 'bye': Ends current call with SIP BYE", + "description": "This specifies the SIP verb to use while transferring the call.\n- 'refer': Uses SIP REFER to transfer the call (default)\n- 'bye': Ends current call with SIP BYE\n- 'dial': Uses SIP DIAL to transfer the call", "default": "refer", "enum": [ "refer", - "bye" + "bye", + "dial" ] }, "twiml": { @@ -7522,6 +7523,7 @@ "type": "string", "description": "This is the OpenAI model that will be used.", "enum": [ + "gpt-4.5-preview", "chatgpt-4o-latest", "o3-mini", "o1-preview", @@ -7555,6 +7557,7 @@ "type": "array", "description": "These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.", "enum": [ + "gpt-4.5-preview", "chatgpt-4o-latest", "o3-mini", "o1-preview", @@ -7590,6 +7593,7 @@ "items": { "type": "string", "enum": [ + "gpt-4.5-preview", "chatgpt-4o-latest", "o3-mini", "o1-preview", @@ -8605,6 +8609,10 @@ "$ref": "#/components/schemas/FallbackCartesiaVoice", "title": "Cartesia" }, + { + "$ref": "#/components/schemas/FallbackHumeVoice", + "title": "Hume" + }, { "$ref": "#/components/schemas/FallbackCustomVoice", "title": "CustomVoice" @@ -9958,6 +9966,51 @@ "voiceId" ] }, + "FallbackHumeVoice": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "hume" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used.", + "enum": [ + "octave" + ], + "example": "octave" + }, + "voiceId": { + "type": "string", + "description": "The ID of the particular voice you want to use." + }, + "isCustomHumeVoice": { + "type": "boolean", + "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.", + "example": false + }, + "description": { + "type": "string", + "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description." + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, "FallbackElevenLabsVoice": { "type": "object", "properties": { @@ -14579,6 +14632,7 @@ "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", + "pipeline-error-hume-voice-failed", "pipeline-error-deepgram-transcriber-failed", "pipeline-error-gladia-transcriber-failed", "pipeline-error-speechmatics-transcriber-failed", @@ -24288,12 +24342,12 @@ "minutesIncluded": { "type": "number", "description": "The number of minutes included in the subscription.", - "minimum": 1 + "minimum": 0 }, "minutesUsed": { "type": "number", "description": "The number of minutes used in the subscription.", - "minimum": 1 + "minimum": 0 }, "minutesUsedNextResetAt": { "format": "date-time", @@ -24656,6 +24710,7 @@ "cartesia", "custom-voice", "deepgram", + "hume", "lmnt", "neets", "neuphonic", @@ -25348,6 +25403,7 @@ "cartesia", "custom-voice", "deepgram", + "hume", "lmnt", "neets", "neuphonic", @@ -25365,6 +25421,7 @@ "cartesia", "custom-voice", "deepgram", + "hume", "lmnt", "neets", "neuphonic", @@ -26622,6 +26679,7 @@ "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", + "pipeline-error-hume-voice-failed", "pipeline-error-deepgram-transcriber-failed", "pipeline-error-gladia-transcriber-failed", "pipeline-error-speechmatics-transcriber-failed", @@ -27426,6 +27484,7 @@ "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", + "pipeline-error-hume-voice-failed", "pipeline-error-deepgram-transcriber-failed", "pipeline-error-gladia-transcriber-failed", "pipeline-error-speechmatics-transcriber-failed", From 1707f5519f0de9cb48119478702ae6ed49e02d6b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 00:08:41 +0000 Subject: [PATCH 4/7] feat(openapi.json): added Vapi as a voice provider and fallback voice --- fern/apis/api/openapi.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 1659e8bd3..74d1891e9 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -8625,6 +8625,10 @@ "$ref": "#/components/schemas/FallbackElevenLabsVoice", "title": "ElevenLabs" }, + { + "$ref": "#/components/schemas/FallbackVapiVoice", + "title": "Vapi" + }, { "$ref": "#/components/schemas/FallbackLMNTVoice", "title": "LMNT" @@ -24705,6 +24709,7 @@ "type": "object", "description": "This is the voice provider that will be used.", "enum": [ + "vapi", "11labs", "azure", "cartesia", @@ -25398,6 +25403,7 @@ "type": "array", "description": "List of providers you want to sync.", "enum": [ + "vapi", "11labs", "azure", "cartesia", @@ -25416,6 +25422,7 @@ "items": { "type": "string", "enum": [ + "vapi", "11labs", "azure", "cartesia", @@ -25843,7 +25850,8 @@ "enum": [ "queued", "in-progress", - "completed" + "completed", + "failed" ] }, "id": { From a877a7633064bc4ba5098f001e0afe9a6a40319f Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 00:08:47 +0000 Subject: [PATCH 5/7] feat(openapi): add QueryTool to OpenAPI spec --- fern/apis/api/openapi.json | 399 +++++++++++++++++++++++++++++++++++-- 1 file changed, 384 insertions(+), 15 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 74d1891e9..95b6642ce 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -2150,6 +2150,10 @@ { "$ref": "#/components/schemas/CreateTextEditorToolDTO", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ], "discriminator": { @@ -2164,7 +2168,8 @@ "output": "#/components/schemas/CreateOutputToolDTO", "bash": "#/components/schemas/CreateBashToolDTO", "computer": "#/components/schemas/CreateComputerToolDTO", - "textEditor": "#/components/schemas/CreateTextEditorToolDTO" + "textEditor": "#/components/schemas/CreateTextEditorToolDTO", + "query": "#/components/schemas/CreateQueryToolDTO" } } } @@ -2217,6 +2222,10 @@ { "$ref": "#/components/schemas/TextEditorTool", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" } ], "discriminator": { @@ -2231,7 +2240,8 @@ "output": "#/components/schemas/OutputTool", "bash": "#/components/schemas/BashTool", "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool" + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool" } } } @@ -2392,6 +2402,10 @@ { "$ref": "#/components/schemas/TextEditorTool", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" } ], "discriminator": { @@ -2406,7 +2420,8 @@ "output": "#/components/schemas/OutputTool", "bash": "#/components/schemas/BashTool", "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool" + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool" } } } @@ -2485,6 +2500,10 @@ { "$ref": "#/components/schemas/TextEditorTool", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" } ], "discriminator": { @@ -2499,7 +2518,8 @@ "output": "#/components/schemas/OutputTool", "bash": "#/components/schemas/BashTool", "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool" + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool" } } } @@ -2574,6 +2594,10 @@ { "$ref": "#/components/schemas/UpdateTextEditorToolDTO", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/UpdateQueryToolDTO", + "title": "QueryTool" } ], "discriminator": { @@ -2588,7 +2612,8 @@ "output": "#/components/schemas/UpdateOutputToolDTO", "bash": "#/components/schemas/UpdateBashToolDTO", "computer": "#/components/schemas/UpdateComputerToolDTO", - "textEditor": "#/components/schemas/UpdateTextEditorToolDTO" + "textEditor": "#/components/schemas/UpdateTextEditorToolDTO", + "query": "#/components/schemas/UpdateQueryToolDTO" } } } @@ -2641,6 +2666,10 @@ { "$ref": "#/components/schemas/TextEditorTool", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" } ], "discriminator": { @@ -2655,7 +2684,8 @@ "output": "#/components/schemas/OutputTool", "bash": "#/components/schemas/BashTool", "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool" + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool" } } } @@ -2731,6 +2761,10 @@ { "$ref": "#/components/schemas/TextEditorTool", "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" } ], "discriminator": { @@ -2745,7 +2779,8 @@ "output": "#/components/schemas/OutputTool", "bash": "#/components/schemas/BashTool", "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool" + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool" } } } @@ -4851,7 +4886,6 @@ "id", "it", "ja", - "jp", "jv", "kn", "kk", @@ -4871,7 +4905,7 @@ "mi", "mr", "mn", - "mymr", + "my", "ne", "no", "nn", @@ -6502,6 +6536,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -6626,6 +6664,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -6747,6 +6789,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -6865,6 +6911,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7037,6 +7087,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7161,6 +7215,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7275,6 +7333,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7381,6 +7443,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7488,6 +7554,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7693,6 +7763,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7796,6 +7870,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -7899,6 +7977,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -8159,6 +8241,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -8289,6 +8375,10 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" } ] } @@ -10723,6 +10813,37 @@ "voiceId" ] }, + "FallbackVapiVoice": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "vapi" + ] + }, + "voiceId": { + "type": "string", + "description": "The voices provided by Vapi", + "enum": [ + "Jordan" + ] + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, "TransportConfigurationTwilio": { "type": "object", "properties": { @@ -10958,7 +11079,6 @@ "models": { "type": "array", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -10976,7 +11096,6 @@ "items": { "type": "string", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -14805,6 +14924,7 @@ "pipeline-error-playht-504-gateway-error", "pipeline-error-tavus-video-failed", "pipeline-error-custom-transcriber-failed", + "pipeline-error-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", @@ -19361,6 +19481,133 @@ "name" ] }, + "KnowledgeBase": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the knowledge base", + "example": "My Knowledge Base" + }, + "provider": { + "type": "string", + "description": "The provider of the knowledge base", + "example": "google" + }, + "model": { + "type": "string", + "description": "The model to use for the knowledge base", + "example": "gemini-1.5-flash" + }, + "description": { + "type": "string", + "description": "A description of the knowledge base" + }, + "fileIds": { + "description": "The file IDs associated with this knowledge base", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "provider", + "model", + "description", + "fileIds" + ] + }, + "QueryTool": { + "type": "object", + "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { + "type": "string", + "enum": [ + "query" + ], + "description": "The type of tool. \"query\" for Query tool." + }, + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "CreateOutputToolDTO": { "type": "object", "properties": { @@ -19666,6 +19913,73 @@ "name" ] }, + "CreateQueryToolDTO": { + "type": "object", + "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { + "type": "string", + "enum": [ + "query" + ], + "description": "The type of tool. \"query\" for Query tool." + }, + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "type" + ] + }, "UpdateDtmfToolDTO": { "type": "object", "properties": { @@ -20253,6 +20567,63 @@ } } }, + "UpdateQueryToolDTO": { + "type": "object", + "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + } + }, "CreateFileDTO": { "type": "object", "properties": { @@ -21487,7 +21858,6 @@ "models": { "type": "array", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -21505,7 +21875,6 @@ "items": { "type": "string", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -23513,7 +23882,6 @@ "models": { "type": "array", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -23531,7 +23899,6 @@ "items": { "type": "string", "enum": [ - "gpt-4o-2024-08-06-ptu", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -26856,6 +27223,7 @@ "pipeline-error-playht-504-gateway-error", "pipeline-error-tavus-video-failed", "pipeline-error-custom-transcriber-failed", + "pipeline-error-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", @@ -27661,6 +28029,7 @@ "pipeline-error-playht-504-gateway-error", "pipeline-error-tavus-video-failed", "pipeline-error-custom-transcriber-failed", + "pipeline-error-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", From 9ee8a61bf54831f2145ed66d9a7d5f0445b25e57 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 00:08:42 +0000 Subject: [PATCH 6/7] fix(fern/apis/api/openapi.json): Update model and provider field types and values This commit makes changes to the `openapi.json` file in the `fern/apis/api` directory. Specifically, it updates the schema of the `model` and `provider` fields. The `model` field type is changed from `string` to `object`, and an enum of possible model values is added, including various versions of "Gemini" and "Google". The `provider` field now has an enum specifying "google" as the only possible value. --- fern/apis/api/openapi.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 95b6642ce..419319e84 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -19492,11 +19492,27 @@ "provider": { "type": "string", "description": "The provider of the knowledge base", + "enum": [ + "google" + ], "example": "google" }, "model": { - "type": "string", + "type": "object", "description": "The model to use for the knowledge base", + "enum": [ + "gemini-2.0-flash-thinking-exp", + "gemini-2.0-pro-exp-02-05", + "gemini-2.0-flash", + "gemini-2.0-flash-lite-preview-02-05", + "gemini-2.0-flash-exp", + "gemini-2.0-flash-realtime-exp", + "gemini-1.5-flash", + "gemini-1.5-flash-002", + "gemini-1.5-pro", + "gemini-1.5-pro-002", + "gemini-1.0-pro" + ], "example": "gemini-1.5-flash" }, "description": { From ec8033bfe32e116ce7ed4b7a8654dfd77e224135 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sun, 9 Mar 2025 00:08:30 +0000 Subject: [PATCH 7/7] feat(openapi): add and update voicemail detection and invoice plan --- fern/apis/api/openapi.json | 360 +++++++++++++++---------------------- 1 file changed, 148 insertions(+), 212 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index e3b6d42f0..f2ddee16a 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -10827,7 +10827,12 @@ "type": "string", "description": "The voices provided by Vapi", "enum": [ - "Jordan" + "Jordan", + "Adi", + "Julia", + "Maibri (Web)", + "Maibri (Phone)", + "Ashley" ] }, "chunkPlan": { @@ -12337,7 +12342,7 @@ "type" ] }, - "TwilioVoicemailDetection": { + "TwilioVoicemailDetectionPlan": { "type": "object", "properties": { "provider": { @@ -12409,6 +12414,29 @@ "provider" ] }, + "GoogleVoicemailDetectionPlan": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider to use for voicemail detection.", + "enum": [ + "google" + ] + }, + "voicemailExpectedDurationSeconds": { + "type": "number", + "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15", + "minimum": 5, + "maximum": 60, + "default": 15 + } + }, + "required": [ + "provider", + "voicemailExpectedDurationSeconds" + ] + }, "CompliancePlan": { "type": "object", "properties": { @@ -13027,15 +13055,7 @@ "#", "*", "" - ], - "x-fern-enum": { - "#": { - "name": "Hash" - }, - "*": { - "name": "Asterisk" - } - } + ] } } }, @@ -13204,6 +13224,10 @@ ], "example": "assistant-speaks-first" }, + "voicemailDetection": { + "type": "object", + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + }, "clientMessages": { "type": "array", "enum": [ @@ -13512,14 +13536,6 @@ "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", "maxLength": 40 }, - "voicemailDetection": { - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", - "allOf": [ - { - "$ref": "#/components/schemas/TwilioVoicemailDetection" - } - ] - }, "voicemailMessage": { "type": "string", "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", @@ -13786,6 +13802,10 @@ ], "example": "assistant-speaks-first" }, + "voicemailDetection": { + "type": "object", + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + }, "clientMessages": { "type": "array", "enum": [ @@ -14098,14 +14118,6 @@ "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", "maxLength": 40 }, - "voicemailDetection": { - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", - "allOf": [ - { - "$ref": "#/components/schemas/TwilioVoicemailDetection" - } - ] - }, "voicemailMessage": { "type": "string", "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", @@ -14661,6 +14673,10 @@ "$ref": "#/components/schemas/VapiCost", "title": "VapiCost" }, + { + "$ref": "#/components/schemas/VoicemailDetectionCost", + "title": "VoicemailDetectionCost" + }, { "$ref": "#/components/schemas/AnalysisCost", "title": "AnalysisCost" @@ -15429,6 +15445,10 @@ ], "example": "assistant-speaks-first" }, + "voicemailDetection": { + "type": "object", + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + }, "clientMessages": { "type": "array", "enum": [ @@ -15737,14 +15757,6 @@ "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", "maxLength": 40 }, - "voicemailDetection": { - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", - "allOf": [ - { - "$ref": "#/components/schemas/TwilioVoicemailDetection" - } - ] - }, "voicemailMessage": { "type": "string", "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", @@ -16035,6 +16047,10 @@ ], "example": "assistant-speaks-first" }, + "voicemailDetection": { + "type": "object", + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + }, "clientMessages": { "type": "array", "enum": [ @@ -16343,14 +16359,6 @@ "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", "maxLength": 40 }, - "voicemailDetection": { - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", - "allOf": [ - { - "$ref": "#/components/schemas/TwilioVoicemailDetection" - } - ] - }, "voicemailMessage": { "type": "string", "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", @@ -19632,173 +19640,6 @@ "updatedAt" ] }, - "CreateOutputToolDTO": { - "type": "object", - "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } - }, - "provider": { - "type": "string", - "description": "The provider of the knowledge base", - "enum": [ - "google" - ], - "example": "google" - }, - "model": { - "type": "object", - "description": "The model to use for the knowledge base", - "enum": [ - "gemini-2.0-flash-thinking-exp", - "gemini-2.0-pro-exp-02-05", - "gemini-2.0-flash", - "gemini-2.0-flash-lite-preview-02-05", - "gemini-2.0-flash-exp", - "gemini-2.0-flash-realtime-exp", - "gemini-1.5-flash", - "gemini-1.5-flash-002", - "gemini-1.5-pro", - "gemini-1.5-pro-002", - "gemini-1.0-pro" - ], - "example": "gemini-1.5-flash" - }, - "description": { - "type": "string", - "description": "A description of the knowledge base" - }, - "fileIds": { - "description": "The file IDs associated with this knowledge base", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "name", - "provider", - "model", - "description", - "fileIds" - ] - }, - "QueryTool": { - "type": "object", - "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } - }, - "type": { - "type": "string", - "enum": [ - "query" - ], - "description": "The type of tool. \"query\" for Query tool." - }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." - }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", - "allOf": [ - { - "$ref": "#/components/schemas/OpenAIFunction" - } - ] - }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] - } - }, - "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, "CreateOutputToolDTO": { "type": "object", "properties": { @@ -20839,8 +20680,9 @@ }, "status": { "enum": [ - "indexed", - "not_indexed" + "processing", + "done", + "failed" ], "type": "string" }, @@ -20873,6 +20715,12 @@ "url": { "type": "string" }, + "parsedTextUrl": { + "type": "string" + }, + "parsedTextBytes": { + "type": "number" + }, "metadata": { "type": "object" }, @@ -24786,6 +24634,27 @@ "threshold" ] }, + "InvoicePlan": { + "type": "object", + "properties": { + "companyName": { + "type": "string", + "description": "This is the name of the company." + }, + "companyAddress": { + "type": "string", + "description": "This is the address of the company." + }, + "companyTaxId": { + "type": "string", + "description": "This is the tax ID of the company." + }, + "companyEmail": { + "type": "string", + "description": "This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email." + } + } + }, "Subscription": { "type": "object", "properties": { @@ -24952,6 +24821,14 @@ "couponUsageLeft": { "type": "string", "description": "This is the number of credits left obtained from a coupon." + }, + "invoicePlan": { + "description": "This is the invoice plan for the subscription.", + "allOf": [ + { + "$ref": "#/components/schemas/InvoicePlan" + } + ] } }, "required": [ @@ -27459,6 +27336,10 @@ "$ref": "#/components/schemas/VapiCost", "title": "VapiCost" }, + { + "$ref": "#/components/schemas/VoicemailDetectionCost", + "title": "VoicemailDetectionCost" + }, { "$ref": "#/components/schemas/AnalysisCost", "title": "AnalysisCost" @@ -29888,6 +29769,61 @@ "cost" ] }, + "VoicemailDetectionCost": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of cost, always 'voicemail-detection' for this class.", + "enum": [ + "voicemail-detection" + ] + }, + "model": { + "type": "object", + "description": "This is the model that was used to perform the analysis." + }, + "provider": { + "type": "string", + "description": "This is the provider that was used to detect the voicemail.", + "enum": [ + "twilio", + "google", + "openai" + ] + }, + "promptTextTokens": { + "type": "number", + "description": "This is the number of prompt text tokens used in the voicemail detection." + }, + "promptAudioTokens": { + "type": "number", + "description": "This is the number of prompt audio tokens used in the voicemail detection." + }, + "completionTextTokens": { + "type": "number", + "description": "This is the number of completion text tokens used in the voicemail detection." + }, + "completionAudioTokens": { + "type": "number", + "description": "This is the number of completion audio tokens used in the voicemail detection." + }, + "cost": { + "type": "number", + "description": "This is the cost of the component in USD." + } + }, + "required": [ + "type", + "model", + "provider", + "promptTextTokens", + "promptAudioTokens", + "completionTextTokens", + "completionAudioTokens", + "cost" + ] + }, "FunctionToolWithToolCall": { "type": "object", "properties": {