From 6d9bd4206f95bb1d066fd8c84a35b6295a9001ed Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sun, 17 Nov 2024 00:02:48 +0000 Subject: [PATCH 1/4] feat(openapi): add Langfuse credential support and new voice IDs This commit adds support for Langfuse credentials, including the required fields (`provider`, `publicKey`, `apiKey`, `apiUrl`) and the unique identifiers (`id` and `orgId`). It also introduces new voice IDs: `ash`, `ballad`, `coral`, `sage`, and `verse`, which are exclusive to the `gpt-4o-realtime-preview-2024-10-01` model. --- fern/apis/api/openapi.json | 118 ++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index cbbd1fb0e..880b864b4 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -6379,14 +6379,19 @@ ] }, "voiceId": { - "description": "This is the provider-specific ID that will be used.", + "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with the `gpt-4o-realtime-preview-2024-10-01` model.", "enum": [ "alloy", "echo", "fable", "onyx", "nova", - "shimmer" + "shimmer", + "ash", + "ballad", + "coral", + "sage", + "verse" ], "oneOf": [ { @@ -14054,6 +14059,57 @@ "updatedAt" ] }, + "LangfuseCredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "langfuse" + ] + }, + "publicKey": { + "type": "string", + "description": "The public key for Langfuse project. Eg: pk-lf-..." + }, + "apiKey": { + "type": "string", + "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." + }, + "apiUrl": { + "type": "string", + "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" + }, + "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." + } + }, + "required": [ + "provider", + "publicKey", + "apiKey", + "apiUrl", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "LmntCredential": { "type": "object", "properties": { @@ -15090,6 +15146,35 @@ "apiKey" ] }, + "CreateLangfuseCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "langfuse" + ] + }, + "publicKey": { + "type": "string", + "description": "The public key for Langfuse project. Eg: pk-lf-..." + }, + "apiKey": { + "type": "string", + "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." + }, + "apiUrl": { + "type": "string", + "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" + } + }, + "required": [ + "provider", + "publicKey", + "apiKey", + "apiUrl" + ] + }, "CreateLmntCredentialDTO": { "type": "object", "properties": { @@ -15784,6 +15869,35 @@ "apiKey" ] }, + "UpdateLangfuseCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "langfuse" + ] + }, + "publicKey": { + "type": "string", + "description": "The public key for Langfuse project. Eg: pk-lf-..." + }, + "apiKey": { + "type": "string", + "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." + }, + "apiUrl": { + "type": "string", + "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" + } + }, + "required": [ + "provider", + "publicKey", + "apiKey", + "apiUrl" + ] + }, "UpdateLmntCredentialDTO": { "type": "object", "properties": { From 9371cc2cc67e739b2ac4a6b4f1a7ea333f82198c Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 00:02:57 +0000 Subject: [PATCH 2/4] feat(voice): add support for voice provider fallbacks and increase timeouts --- fern/apis/api/openapi.json | 376 +++++++++++++++++++++++++++++++------ 1 file changed, 323 insertions(+), 53 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 880b864b4..17949e6cc 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -2662,7 +2662,7 @@ "type": "number", "description": "This is the timeout in seconds for the request to your server. Defaults to 20 seconds.\n\n@default 20", "minimum": 1, - "maximum": 60, + "maximum": 120, "example": 20 }, "url": { @@ -3538,7 +3538,7 @@ "timingMilliseconds": { "type": "number", "minimum": 100, - "maximum": 20000, + "maximum": 120000, "example": 1000, "description": "The number of milliseconds to wait for the server response before saying this message." }, @@ -5942,6 +5942,75 @@ } } }, + "FallbackPlan": { + "type": "object", + "properties": { + "voices": { + "type": "array", + "items": { + "required": true, + "description": "This is the list of voices to fallback to in the event that the primary voice provider fails.", + "oneOf": [ + { + "$ref": "#/components/schemas/FallbackAzureVoice", + "title": "Azure" + }, + { + "$ref": "#/components/schemas/FallbackCartesiaVoice", + "title": "Cartesia" + }, + { + "$ref": "#/components/schemas/FallbackCustomVoice", + "title": "CustomVoice" + }, + { + "$ref": "#/components/schemas/FallbackDeepgramVoice", + "title": "Deepgram" + }, + { + "$ref": "#/components/schemas/FallbackElevenLabsVoice", + "title": "ElevenLabs" + }, + { + "$ref": "#/components/schemas/FallbackLMNTVoice", + "title": "LMNT" + }, + { + "$ref": "#/components/schemas/FallbackNeetsVoice", + "title": "Neets" + }, + { + "$ref": "#/components/schemas/FallbackOpenAIVoice", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/FallbackPlayHTVoice", + "title": "PlayHT" + }, + { + "$ref": "#/components/schemas/FallbackRimeAIVoice", + "title": "RimeAI" + }, + { + "$ref": "#/components/schemas/FallbackTavusVoice", + "title": "TavusVoice" + } + ], + "default": { + "provider": "playht", + "voiceId": "jennifer" + }, + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "required": [ + "voices" + ] + }, "AzureVoice": { "type": "object", "properties": { @@ -5975,17 +6044,25 @@ } ] }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "speed": { "type": "number", "description": "This is the speed multiplier that will be used.", "minimum": 0.5, "maximum": 2 }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ { - "$ref": "#/components/schemas/ChunkPlan" + "$ref": "#/components/schemas/FallbackPlan" } ] } @@ -6041,15 +6118,23 @@ ], "example": "en" }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "voiceId": { "type": "string", "description": "This is the provider-specific ID that will be used." }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ { - "$ref": "#/components/schemas/ChunkPlan" + "$ref": "#/components/schemas/FallbackPlan" } ] } @@ -6074,6 +6159,14 @@ "custom-voice" ] }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "server": { "description": "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"message\": {\n \"type\": \"voice-request\",\n \"text\": \"Hello, world!\",\n \"sampleRate\": 24000,\n ...other metadata about the call...\n }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n outputStream.write(chunk);\n});\n```", "allOf": [ @@ -6082,11 +6175,11 @@ } ] }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ { - "$ref": "#/components/schemas/ChunkPlan" + "$ref": "#/components/schemas/FallbackPlan" } ] } @@ -6145,6 +6238,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6246,15 +6347,23 @@ ], "example": "eleven_turbo_v2_5" }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "language": { "type": "string", "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided." }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ { - "$ref": "#/components/schemas/ChunkPlan" + "$ref": "#/components/schemas/FallbackPlan" } ] } @@ -6310,6 +6419,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6356,6 +6473,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6426,6 +6551,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6543,6 +6676,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6683,6 +6824,14 @@ "$ref": "#/components/schemas/ChunkPlan" } ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] } }, "required": [ @@ -6766,6 +6915,14 @@ } ] }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "personaId": { "type": "string", "description": "This is the unique identifier for the persona that the replica will use in the conversation." @@ -6794,11 +6951,11 @@ } ] }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ { - "$ref": "#/components/schemas/ChunkPlan" + "$ref": "#/components/schemas/FallbackPlan" } ] } @@ -7696,7 +7853,7 @@ } }, "server": { - "description": "/**\nThis is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", "allOf": [ { "$ref": "#/components/schemas/Server" @@ -8001,7 +8158,7 @@ }, "variableValues": { "type": "object", - "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York." + "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer object" }, "name": { "type": "string", @@ -8100,7 +8257,7 @@ } }, "server": { - "description": "/**\nThis is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", "allOf": [ { "$ref": "#/components/schemas/Server" @@ -8625,6 +8782,15 @@ "type": "string", "description": "This is the explanation for how the call ended.", "enum": [ + "pipeline-error-openai-voice-failed", + "pipeline-error-cartesia-voice-failed", + "pipeline-error-deepgram-voice-failed", + "pipeline-error-eleven-labs-voice-failed", + "pipeline-error-playht-voice-failed", + "pipeline-error-lmnt-voice-failed", + "pipeline-error-azure-voice-failed", + "pipeline-error-rime-ai-voice-failed", + "pipeline-error-neets-voice-failed", "db-error", "assistant-not-found", "license-check-failed", @@ -8647,17 +8813,9 @@ "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", - "pipeline-error-openai-voice-failed", - "pipeline-error-cartesia-voice-failed", "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-deepgram-voice-failed", "pipeline-error-gladia-transcriber-failed", - "pipeline-error-eleven-labs-voice-failed", - "pipeline-error-playht-voice-failed", - "pipeline-error-lmnt-voice-failed", - "pipeline-error-azure-voice-failed", - "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", + "pipeline-error-assembly-ai-transcriber-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -8757,12 +8915,12 @@ "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", - "pipeline-error-custom-voice-failed", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", @@ -9519,7 +9677,7 @@ } }, "server": { - "description": "/**\nThis is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", "allOf": [ { "$ref": "#/components/schemas/Server" @@ -9943,7 +10101,7 @@ } }, "server": { - "description": "/**\nThis is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", "allOf": [ { "$ref": "#/components/schemas/Server" @@ -12755,7 +12913,8 @@ "name": { "type": "string", "description": "This is the name of the file. This is just for your own reference.", - "maxLength": 100 + "minLength": 1, + "maxLength": 40 } } }, @@ -13321,6 +13480,47 @@ "updatedAt" ] }, + "AssemblyAICredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "assembly-ai" + ] + }, + "apiKey": { + "type": "string", + "description": "This is not returned in the API." + }, + "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." + } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "AzureOpenAICredential": { "type": "object", "properties": { @@ -13559,6 +13759,16 @@ "type": "boolean", "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" }, + "techPrefix": { + "type": "string", + "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", + "maxLength": 10000 + }, + "sipDiversionHeader": { + "type": "string", + "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", + "maxLength": 10000 + }, "sbcConfiguration": { "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", "allOf": [ @@ -14824,6 +15034,25 @@ "apiKey" ] }, + "CreateAssemblyAICredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "assembly-ai" + ] + }, + "apiKey": { + "type": "string", + "description": "This is not returned in the API." + } + }, + "required": [ + "provider", + "apiKey" + ] + }, "CreateAzureOpenAICredentialDTO": { "type": "object", "properties": { @@ -14938,6 +15167,16 @@ "type": "boolean", "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" }, + "techPrefix": { + "type": "string", + "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", + "maxLength": 10000 + }, + "sipDiversionHeader": { + "type": "string", + "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", + "maxLength": 10000 + }, "sbcConfiguration": { "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", "allOf": [ @@ -15547,6 +15786,25 @@ "apiKey" ] }, + "UpdateAssemblyAICredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "assembly-ai" + ] + }, + "apiKey": { + "type": "string", + "description": "This is not returned in the API." + } + }, + "required": [ + "provider", + "apiKey" + ] + }, "UpdateAzureOpenAICredentialDTO": { "type": "object", "properties": { @@ -15661,6 +15919,16 @@ "type": "boolean", "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" }, + "techPrefix": { + "type": "string", + "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", + "maxLength": 10000 + }, + "sipDiversionHeader": { + "type": "string", + "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", + "maxLength": 10000 + }, "sbcConfiguration": { "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", "allOf": [ @@ -18068,6 +18336,15 @@ "type": "string", "description": "This is the reason the call ended. This can also be found at `call.endedReason` on GET /call/:id.", "enum": [ + "pipeline-error-openai-voice-failed", + "pipeline-error-cartesia-voice-failed", + "pipeline-error-deepgram-voice-failed", + "pipeline-error-eleven-labs-voice-failed", + "pipeline-error-playht-voice-failed", + "pipeline-error-lmnt-voice-failed", + "pipeline-error-azure-voice-failed", + "pipeline-error-rime-ai-voice-failed", + "pipeline-error-neets-voice-failed", "db-error", "assistant-not-found", "license-check-failed", @@ -18090,17 +18367,9 @@ "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", - "pipeline-error-openai-voice-failed", - "pipeline-error-cartesia-voice-failed", "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-deepgram-voice-failed", "pipeline-error-gladia-transcriber-failed", - "pipeline-error-eleven-labs-voice-failed", - "pipeline-error-playht-voice-failed", - "pipeline-error-lmnt-voice-failed", - "pipeline-error-azure-voice-failed", - "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", + "pipeline-error-assembly-ai-transcriber-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -18200,12 +18469,12 @@ "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", - "pipeline-error-custom-voice-failed", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", @@ -18840,6 +19109,15 @@ "type": "string", "description": "This is the reason the call ended. This is only sent if the status is \"ended\".", "enum": [ + "pipeline-error-openai-voice-failed", + "pipeline-error-cartesia-voice-failed", + "pipeline-error-deepgram-voice-failed", + "pipeline-error-eleven-labs-voice-failed", + "pipeline-error-playht-voice-failed", + "pipeline-error-lmnt-voice-failed", + "pipeline-error-azure-voice-failed", + "pipeline-error-rime-ai-voice-failed", + "pipeline-error-neets-voice-failed", "db-error", "assistant-not-found", "license-check-failed", @@ -18862,17 +19140,9 @@ "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", - "pipeline-error-openai-voice-failed", - "pipeline-error-cartesia-voice-failed", "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-deepgram-voice-failed", "pipeline-error-gladia-transcriber-failed", - "pipeline-error-eleven-labs-voice-failed", - "pipeline-error-playht-voice-failed", - "pipeline-error-lmnt-voice-failed", - "pipeline-error-azure-voice-failed", - "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", + "pipeline-error-assembly-ai-transcriber-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -18972,12 +19242,12 @@ "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", - "pipeline-error-custom-voice-failed", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", From b2f2a445bf93f8fd44341b34de5aa4da66d1fd2f Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 00:02:54 +0000 Subject: [PATCH 3/4] fix(fern/apis/api/openapi.json): Updated openapi.json with new transfer mode and SIP header support This commit introduces a new transfer mode, "blind-transfer-add-summary-to-sip-header", which adds a SIP header with a call summary during a blind transfer. It also adds a new "sipHeaders" object to allow custom headers during a transfer call. Additionally, a new Azure region, "uaenorth", has been added to the list of supported regions. --- 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 17949e6cc..5549440b6 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -4186,9 +4186,10 @@ "properties": { "mode": { "type": "string", - "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n\n@default 'blind-transfer'", + "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n\n@default 'blind-transfer'", "enum": [ "blind-transfer", + "blind-transfer-add-summary-to-sip-header", "warm-transfer-say-message", "warm-transfer-say-summary", "warm-transfer-wait-for-operator-to-speak-first-and-then-say-message", @@ -4311,6 +4312,10 @@ } ] }, + "sipHeaders": { + "type": "object", + "description": "These are custom headers to be added to SIP refer during transfer call." + }, "description": { "type": "string", "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call." @@ -13540,6 +13545,7 @@ "france", "india", "japan", + "uaenorth", "northcentralus", "norway", "southcentralus", @@ -15072,6 +15078,7 @@ "france", "india", "japan", + "uaenorth", "northcentralus", "norway", "southcentralus", @@ -15824,6 +15831,7 @@ "france", "india", "japan", + "uaenorth", "northcentralus", "norway", "southcentralus", From 0eafcb3c90d0b9ff051af383ba2bf201df01e118 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:02:52 +0000 Subject: [PATCH 4/4] fix(fern/apis/api/openapi.json): update transfer mode descriptions and remove unused sipHeaders property --- fern/apis/api/openapi.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 5549440b6..7ec05c053 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -4186,10 +4186,9 @@ "properties": { "mode": { "type": "string", - "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n\n@default 'blind-transfer'", + "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n\n@default 'blind-transfer'", "enum": [ "blind-transfer", - "blind-transfer-add-summary-to-sip-header", "warm-transfer-say-message", "warm-transfer-say-summary", "warm-transfer-wait-for-operator-to-speak-first-and-then-say-message", @@ -4312,10 +4311,6 @@ } ] }, - "sipHeaders": { - "type": "object", - "description": "These are custom headers to be added to SIP refer during transfer call." - }, "description": { "type": "string", "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."