diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 6dd509d73..6219236f0 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -3785,102 +3785,6 @@ ] } }, - "/tool/code/test": { - "post": { - "operationId": "ToolController_testCodeExecution", - "summary": "Test Code Tool Execution", - "parameters": [], - "responses": { - "200": { - "description": "Code execution test result", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "result": { - "type": "object" - }, - "error": { - "type": "string" - }, - "logs": { - "type": "string" - }, - "executionTimeMs": { - "type": "number" - } - } - } - } - } - }, - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - } - }, - "tags": [ - "Tools" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/tool/{id}/mcp-children": { - "post": { - "operationId": "ToolController_mcpChildToolsDiscover", - "summary": "Discover MCP Child Tools", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/McpTool" - } - } - } - } - }, - "201": { - "description": "" - } - }, - "tags": [ - "Tools" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, "/file": { "post": { "operationId": "FileController_create", @@ -13702,6 +13606,42 @@ "type" ] }, + "McpToolMessages": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the tool from the MCP server." + }, + "messages": { + "type": "array", + "description": "Custom messages for this specific tool. Set to an empty array to suppress all messages for this tool. If not provided, the tool will use the default messages from the parent MCP tool configuration.", + "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" + } + ] + } + } + }, + "required": [ + "name" + ] + }, "McpToolMetadata": { "type": "object", "properties": { @@ -13757,6 +13697,13 @@ } ] }, + "toolMessages": { + "description": "Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool.", + "type": "array", + "items": { + "$ref": "#/components/schemas/McpToolMessages" + } + }, "metadata": { "$ref": "#/components/schemas/McpToolMetadata" }, @@ -18841,11 +18788,13 @@ "properties": { "minMessagesThreshold": { "type": "number", - "description": "The minimum number of messages required to run the analysis plan.\nIf the number of messages is less than this, analysis will be skipped.\n@default 2", + "description": "The minimum number of messages required to run the analysis plan.\nIf the number of messages is less than this, analysis will be skipped.\n\n@default 2", + "deprecated": true, "minimum": 0 }, "summaryPlan": { "description": "This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/SummaryPlan" @@ -18854,6 +18803,7 @@ }, "structuredDataPlan": { "description": "This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/StructuredDataPlan" @@ -18862,6 +18812,7 @@ }, "structuredDataMultiPlan": { "description": "This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.", + "deprecated": true, "type": "array", "items": { "$ref": "#/components/schemas/StructuredDataMultiPlan" @@ -18869,6 +18820,7 @@ }, "successEvaluationPlan": { "description": "This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/SuccessEvaluationPlan" @@ -18877,6 +18829,7 @@ }, "outcomeIds": { "description": "This is an array of outcome UUIDs to be calculated during analysis.\nThe outcomes will be calculated and stored in `call.analysis.outcomes`.", + "deprecated": true, "type": "array", "items": { "type": "string" @@ -22252,103 +22205,64 @@ { "type": "string", "enum": [ - "abbie", - "allison", - "ally", - "alona", - "amber", - "ana", - "antoine", - "armon", - "brenda", - "brittany", - "carol", - "colin", - "courtney", - "elena", - "elliot", + "cove", + "moon", + "wildflower", "eva", - "geoff", - "gerald", - "hank", + "amber", + "maya", + "lagoon", + "breeze", "helen", - "hera", - "jen", - "joe", "joy", - "juan", - "kendra", - "kendrick", - "kenneth", - "kevin", - "kris", - "linda", - "madison", - "marge", - "marina", - "marissa", - "marta", - "maya", - "nicholas", - "nyles", - "phil", - "reba", - "rex", - "rick", - "ritu", - "rob", - "rodney", - "rohan", - "rosco", - "samantha", - "sandy", - "selena", - "seth", - "sharon", - "stan", - "tamra", - "tanya", - "tibur", - "tj", - "tyler", - "viv", - "yadira", "marsh", - "bayou", "creek", - "brook", - "flower", - "spore", - "glacier", - "gulch", + "cedar", "alpine", - "cove", - "lagoon", - "tundra", - "steppe", - "mesa", - "grove", - "rainforest", + "summit", + "nicholas", + "tyler", + "colin", + "hank", + "thunder", + "astra", + "eucalyptus", "moraine", - "wildflower", "peak", - "boulder", - "gypsum", - "zest", + "tundra", + "mesa_extra", + "talon", + "marlu", + "glacier", + "falcon", "luna", "celeste", - "orion", - "ursa", - "astra", - "esther", "estelle", - "andromeda" + "andromeda", + "esther", + "lyra", + "lintel", + "oculus", + "vespera", + "transom", + "bond", + "arcade", + "atrium", + "cupola", + "fern", + "sirius", + "orion", + "masonry", + "albion", + "parapet" ], - "title": "Preset Voice Options" + "title": "Suggested Voice Options", + "description": "Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions." }, { "type": "string", - "title": "RimeAI Voice ID" + "title": "Any Rime AI Voice ID", + "description": "Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog." } ] }, @@ -22388,6 +22302,24 @@ "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha", "example": null }, + "language": { + "type": "string", + "description": "Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si.", + "enum": [ + "en", + "es", + "de", + "fr", + "ar", + "hi", + "ja", + "he", + "pt", + "ta", + "si" + ], + "example": "en" + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -24600,103 +24532,64 @@ { "type": "string", "enum": [ - "abbie", - "allison", - "ally", - "alona", - "amber", - "ana", - "antoine", - "armon", - "brenda", - "brittany", - "carol", - "colin", - "courtney", - "elena", - "elliot", + "cove", + "moon", + "wildflower", "eva", - "geoff", - "gerald", - "hank", + "amber", + "maya", + "lagoon", + "breeze", "helen", - "hera", - "jen", - "joe", "joy", - "juan", - "kendra", - "kendrick", - "kenneth", - "kevin", - "kris", - "linda", - "madison", - "marge", - "marina", - "marissa", - "marta", - "maya", - "nicholas", - "nyles", - "phil", - "reba", - "rex", - "rick", - "ritu", - "rob", - "rodney", - "rohan", - "rosco", - "samantha", - "sandy", - "selena", - "seth", - "sharon", - "stan", - "tamra", - "tanya", - "tibur", - "tj", - "tyler", - "viv", - "yadira", "marsh", - "bayou", "creek", - "brook", - "flower", - "spore", - "glacier", - "gulch", + "cedar", "alpine", - "cove", - "lagoon", - "tundra", - "steppe", - "mesa", - "grove", - "rainforest", + "summit", + "nicholas", + "tyler", + "colin", + "hank", + "thunder", + "astra", + "eucalyptus", "moraine", - "wildflower", "peak", - "boulder", - "gypsum", - "zest", + "tundra", + "mesa_extra", + "talon", + "marlu", + "glacier", + "falcon", "luna", "celeste", - "orion", - "ursa", - "astra", - "esther", "estelle", - "andromeda" + "andromeda", + "esther", + "lyra", + "lintel", + "oculus", + "vespera", + "transom", + "bond", + "arcade", + "atrium", + "cupola", + "fern", + "sirius", + "orion", + "masonry", + "albion", + "parapet" ], - "title": "Preset Voice Options" + "title": "Suggested Voice Options", + "description": "Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions." }, { "type": "string", - "title": "RimeAI Voice ID" + "title": "Any Rime AI Voice ID", + "description": "Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog." } ] }, @@ -24736,6 +24629,24 @@ "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha", "example": null }, + "language": { + "type": "string", + "description": "Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si.", + "enum": [ + "en", + "es", + "de", + "fr", + "ar", + "hi", + "ja", + "he", + "pt", + "ta", + "si" + ], + "example": "en" + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -27979,6 +27890,7 @@ }, "analysisPlan": { "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AnalysisPlan" @@ -28837,6 +28749,7 @@ }, "analysisPlan": { "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AnalysisPlan" @@ -29695,6 +29608,7 @@ }, "analysisPlan": { "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AnalysisPlan" @@ -30643,6 +30557,7 @@ }, "analysisPlan": { "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", + "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AnalysisPlan" @@ -40871,6 +40786,13 @@ } ] }, + "toolMessages": { + "description": "Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool.", + "type": "array", + "items": { + "$ref": "#/components/schemas/McpToolMessages" + } + }, "id": { "type": "string", "description": "This is the unique identifier for the tool." @@ -43050,6 +42972,13 @@ } ] }, + "toolMessages": { + "description": "Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool.", + "type": "array", + "items": { + "$ref": "#/components/schemas/McpToolMessages" + } + }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ @@ -45071,6 +45000,20 @@ ] } }, + "targetOverrides": { + "description": "Overrides to inject into the simulated target assistant or squad", + "example": { + "variableValues": { + "customerName": "Alice", + "orderId": "12345" + } + }, + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, "toolMocks": { "description": "Scenario-level tool call mocks to use during simulations.", "type": "array", @@ -45150,6 +45093,20 @@ ] } }, + "targetOverrides": { + "description": "Overrides to inject into the simulated target assistant or squad", + "example": { + "variableValues": { + "customerName": "Alice", + "orderId": "12345" + } + }, + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, "toolMocks": { "description": "Scenario-level tool call mocks to use during simulations.", "type": "array", @@ -45211,6 +45168,20 @@ ] } }, + "targetOverrides": { + "description": "Overrides to inject into the simulated target assistant or squad", + "example": { + "variableValues": { + "customerName": "Alice", + "orderId": "12345" + } + }, + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, "toolMocks": { "type": "array", "items": { @@ -50172,7 +50143,8 @@ "daily", "default", "weekly", - "intuit" + "intuit", + "hcs" ] }, "billingLimit": { @@ -50541,7 +50513,8 @@ "daily", "default", "weekly", - "intuit" + "intuit", + "hcs" ] }, "billingLimit": { @@ -50604,7 +50577,8 @@ "daily", "default", "weekly", - "intuit" + "intuit", + "hcs" ] }, "billingLimit": { @@ -56785,6 +56759,10 @@ "type": "string", "description": "The preview URL of the voice." }, + "sortOrder": { + "type": "number", + "description": "The sort order of the voice for display purposes. Lower values appear first." + }, "description": { "type": "string", "description": "The description of the voice."