From 480541a63e2505a131ee94c31918705512bac943 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 00:02:40 +0000 Subject: [PATCH 1/2] feat(openapi): add chatgpt-4o-latest model and Cartesia voice controls --- fern/apis/api/openapi.json | 77 ++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 884b2e807..efdee9398 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -6434,6 +6434,7 @@ "type": "string", "description": "This is the OpenAI model that will be used.", "enum": [ + "chatgpt-4o-latest", "o3-mini", "o1-preview", "o1-preview-2024-09-12", @@ -6466,6 +6467,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": [ + "chatgpt-4o-latest", "o3-mini", "o1-preview", "o1-preview-2024-09-12", @@ -6500,6 +6502,7 @@ "items": { "type": "string", "enum": [ + "chatgpt-4o-latest", "o3-mini", "o1-preview", "o1-preview-2024-09-12", @@ -7618,6 +7621,50 @@ "voiceId" ] }, + "CartesiaExperimentalControls": { + "type": "object", + "properties": { + "speed": { + "type": "string", + "enum": [ + "slowest", + "slow", + "normal", + "fast", + "fastest" + ], + "example": "normal" + }, + "emotion": { + "type": "string", + "enum": [ + "anger:lowest", + "anger:low", + "anger:high", + "anger:highest", + "positivity:lowest", + "positivity:low", + "positivity:high", + "positivity:highest", + "surprise:lowest", + "surprise:low", + "surprise:high", + "surprise:highest", + "sadness:lowest", + "sadness:low", + "sadness:high", + "sadness:highest", + "curiosity:lowest", + "curiosity:low", + "curiosity:high", + "curiosity:highest" + ], + "example": [ + "happiness:high" + ] + } + } + }, "CartesiaVoice": { "type": "object", "properties": { @@ -7628,6 +7675,10 @@ "cartesia" ] }, + "voiceId": { + "type": "string", + "description": "The ID of the particular voice you want to use." + }, "model": { "type": "string", "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.", @@ -7661,6 +7712,14 @@ ], "example": "en" }, + "experimentalControls": { + "description": "Experimental controls for Cartesia voice generation", + "allOf": [ + { + "$ref": "#/components/schemas/CartesiaExperimentalControls" + } + ] + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -7669,10 +7728,6 @@ } ] }, - "voiceId": { - "type": "string", - "description": "This is the provider-specific ID that will be used." - }, "fallbackPlan": { "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ @@ -8657,6 +8712,10 @@ "cartesia" ] }, + "voiceId": { + "type": "string", + "description": "The ID of the particular voice you want to use." + }, "model": { "type": "string", "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.", @@ -8690,9 +8749,13 @@ ], "example": "en" }, - "voiceId": { - "type": "string", - "description": "This is the provider-specific ID that will be used." + "experimentalControls": { + "description": "Experimental controls for Cartesia voice generation", + "allOf": [ + { + "$ref": "#/components/schemas/CartesiaExperimentalControls" + } + ] }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", From 6a721878475f9b198a79240858f65b95942826e0 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 22 Feb 2025 00:02:36 +0000 Subject: [PATCH 2/2] feat(openapi): add test suite and test run schemas and DTOs --- fern/apis/api/openapi.json | 494 +++++++++++++++++++++++++++++++++++++ 1 file changed, 494 insertions(+) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index efdee9398..03be8b53a 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -24086,6 +24086,500 @@ } } }, + "TestSuite": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "This is the unique identifier for the test suite." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this test suite belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test suite was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test suite was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of the test suite.", + "maxLength": 80 + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite." + } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "TestSuitesPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TestSuite" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, + "CreateTestSuiteDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the test suite.", + "maxLength": 80 + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite." + } + } + }, + "UpdateTestSuiteDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the test suite.", + "maxLength": 80 + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite." + } + } + }, + "TestSuiteTestVoice": { + "type": "object", + "properties": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "type": { + "type": "string", + "description": "This is the type of the test, which must be voice.", + "enum": [ + "voice" + ], + "maxLength": 100 + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the test." + }, + "testSuiteId": { + "type": "string", + "description": "This is the unique identifier for the test suite this test belongs to." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization this test belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "scorers", + "type", + "id", + "testSuiteId", + "orgId", + "createdAt", + "updatedAt", + "script" + ] + }, + "CreateTestSuiteTestVoiceDto": { + "type": "object", + "properties": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "type": { + "type": "string", + "description": "This is the type of the test, which must be voice.", + "enum": [ + "voice" + ], + "maxLength": 100 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + }, + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 + } + }, + "required": [ + "scorers", + "type", + "script" + ] + }, + "UpdateTestSuiteTestVoiceDto": { + "type": "object", + "properties": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + } + } + }, + "TestSuiteTestScorerAI": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of the scorer, which must be AI.", + "enum": [ + "ai" + ], + "maxLength": 100 + }, + "rubric": { + "type": "string", + "description": "This is the rubric used by the AI scorer.", + "maxLength": 1000 + } + }, + "required": [ + "type", + "rubric" + ] + }, + "TestSuiteTestsPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "A list of test suite tests.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice" + } + ] + } + }, + "metadata": { + "description": "Metadata about the pagination.", + "allOf": [ + { + "$ref": "#/components/schemas/PaginationMeta" + } + ] + } + }, + "required": [ + "results", + "metadata" + ] + }, + "TestSuiteRunScorerAI": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of the scorer, which must be AI.", + "enum": [ + "ai" + ], + "maxLength": 100 + }, + "result": { + "type": "string", + "description": "This is the result of the test suite.", + "enum": [ + "pass", + "fail" + ], + "maxLength": 100 + }, + "reasoning": { + "type": "string", + "description": "This is the reasoning provided by the AI scorer.", + "maxLength": 10000 + }, + "rubric": { + "type": "string", + "description": "This is the rubric used by the AI scorer.", + "maxLength": 1000 + } + }, + "required": [ + "type", + "result", + "reasoning", + "rubric" + ] + }, + "TestSuiteRunTestAttemptCall": { + "type": "object", + "properties": { + "artifact": { + "description": "This is the artifact associated with the call.", + "allOf": [ + { + "$ref": "#/components/schemas/Artifact" + } + ] + } + }, + "required": [ + "artifact" + ] + }, + "TestSuiteRunTestAttempt": { + "type": "object", + "properties": { + "scorerResults": { + "type": "array", + "description": "These are the results of the scorers used to evaluate the test attempt.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteRunScorerAI", + "title": "AI" + } + ] + } + }, + "call": { + "description": "This is the call made during the test attempt.", + "allOf": [ + { + "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall" + } + ] + } + }, + "required": [ + "scorerResults", + "call" + ] + }, + "TestSuiteRunTestResult": { + "type": "object", + "properties": { + "test": { + "description": "This is the test that was run.", + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "TestSuiteTestVoice" + } + ], + "allOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice" + } + ] + }, + "attempts": { + "description": "These are the attempts made for this test.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TestSuiteRunTestAttempt" + } + } + }, + "required": [ + "test", + "attempts" + ] + }, + "TestSuiteRun": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "This is the current status of the test suite run.", + "enum": [ + "queued", + "in-progress", + "completed" + ] + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the test suite run." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization this run belongs to." + }, + "testSuiteId": { + "type": "string", + "description": "This is the unique identifier for the test suite this run belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test suite run was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test suite run was last updated." + }, + "testResults": { + "description": "These are the results of the tests in this test suite run.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TestSuiteRunTestResult" + } + }, + "name": { + "type": "string", + "description": "This is the name of the test suite run.", + "maxLength": 80 + } + }, + "required": [ + "status", + "id", + "orgId", + "testSuiteId", + "createdAt", + "updatedAt", + "testResults" + ] + }, + "TestSuiteRunsPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TestSuiteRun" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, + "CreateTestSuiteRunDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the test suite run.", + "maxLength": 80 + } + } + }, + "UpdateTestSuiteRunDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the test suite run.", + "maxLength": 80 + } + } + }, "ClientMessageWorkflowNodeStarted": { "type": "object", "properties": {