diff --git a/.fern/metadata.json b/.fern/metadata.json index 9d704c2e..e215b56d 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,5 +1,5 @@ { - "cliVersion": "5.119.2", + "cliVersion": "5.128.3", "generatorName": "fernapi/fern-typescript-sdk", "generatorVersion": "3.63.0", "generatorConfig": { @@ -11,10 +11,10 @@ "omitUndefined": true, "enableInlineTypes": false }, - "originGitCommit": "ca6a646c295c707d5b6dff2fceab26c86c9137d5", + "originGitCommit": "b07caa2880dc69167e7a25b1e4a97b47f570ddfa", "originGitCommitIsDirty": true, "invokedBy": "ci", "requestedVersion": "AUTO", "ciProvider": "unknown", - "sdkVersion": "2.0.1" + "sdkVersion": "2.1.0" } diff --git a/.fern/replay.lock b/.fern/replay.lock index 3a8062c8..9ec50d5c 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -18,5 +18,11 @@ generations: cli_version: unknown generator_versions: fernapi/fern-typescript-sdk: 3.63.0 -current_generation: 5037338ca89fe36163c30364fd68c07e99299a5b + - commit_sha: 91bc5e6137cbb8a7fd0746d12f3bf3bff73b66c7 + tree_hash: 2540db0ef09dcd3c0413b741383e7791df56e133 + timestamp: 2026-09-18T00:14:25.675Z + cli_version: unknown + generator_versions: + fernapi/fern-typescript-sdk: 3.63.0 +current_generation: 91bc5e6137cbb8a7fd0746d12f3bf3bff73b66c7 patches: [] diff --git a/changelog.md b/changelog.md index e0a673b4..ebcdcfa6 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,11 @@ +## [2.1.0] - 2026-09-18 +### Added +- **`OpenAiReasoner`**, **`OpenAiReasonerModel`**, **`OpenAiReasonerProvider`**, and **`OpenAiReasonerReasoningEffort`** — new types for configuring OpenAI reasoning models. +- **`OpenAiSpeaker`** and **`OpenAiSpeakerPersonalityPacksItem`** — new types for speaker personality pack configuration. +- **`OrgApiLimitsDto`**, **`OrgConcurrencyLimitsDto`**, and **`OrgLimitsResponseDto`** — new types for reading organization-level API and concurrency limits. +- **`AnthropicBedrockModelFallbackModelsItem`** — new type for specifying fallback models in Anthropic Bedrock configurations. +- **`UpdateUserRoleDtoRoleZero.HipaaSpecial`** (`"hipaa-special"`) — new role value added to the user role enum. + ## [2.0.1] - 2026-08-26 ## 2.0.0 - 2026-06-24 diff --git a/package.json b/package.json index 5ebe74c5..51069fc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vapi-ai/server-sdk", - "version": "2.0.1", + "version": "2.1.0", "private": false, "repository": { "type": "git", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07b5e068..3d168465 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -279,8 +279,8 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1153,7 +1153,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true '@open-draft/deferred-promise@2.2.0': {} @@ -1221,7 +1221,7 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@tybys/wasm-util@0.10.3': + '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 optional: true diff --git a/src/BaseClient.ts b/src/BaseClient.ts index 57a9cccf..2aa0cfa5 100644 --- a/src/BaseClient.ts +++ b/src/BaseClient.ts @@ -52,8 +52,8 @@ export function normalizeClientOptions[]; /** * This is the type of the run. diff --git a/src/api/types/FallbackOpenAiVoice.ts b/src/api/types/FallbackOpenAiVoice.ts index 9fd598d5..bfde79e4 100644 --- a/src/api/types/FallbackOpenAiVoice.ts +++ b/src/api/types/FallbackOpenAiVoice.ts @@ -11,6 +11,7 @@ export interface FallbackOpenAiVoice { /** * This is the provider-specific ID that will be used. * Please note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models. + * quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. */ voiceId: Vapi.FallbackOpenAiVoiceId; /** This is the model that will be used for text-to-speech. */ diff --git a/src/api/types/FallbackOpenAiVoiceId.ts b/src/api/types/FallbackOpenAiVoiceId.ts index d9ef3151..34ec02b2 100644 --- a/src/api/types/FallbackOpenAiVoiceId.ts +++ b/src/api/types/FallbackOpenAiVoiceId.ts @@ -5,5 +5,6 @@ import type * as Vapi from "../index.js"; /** * This is the provider-specific ID that will be used. * Please note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models. + * quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. */ export type FallbackOpenAiVoiceId = Vapi.FallbackOpenAiVoiceIdEnum | string; diff --git a/src/api/types/FallbackOpenAiVoiceIdEnum.ts b/src/api/types/FallbackOpenAiVoiceIdEnum.ts index 66222d82..690bf478 100644 --- a/src/api/types/FallbackOpenAiVoiceIdEnum.ts +++ b/src/api/types/FallbackOpenAiVoiceIdEnum.ts @@ -9,5 +9,22 @@ export const FallbackOpenAiVoiceIdEnum = { Shimmer: "shimmer", Marin: "marin", Cedar: "cedar", + Ash: "ash", + Ballad: "ballad", + Beacon: "beacon", + Bossa: "bossa", + Cinder: "cinder", + Coral: "coral", + Delta: "delta", + Gleam: "gleam", + Meridian: "meridian", + Quartz: "quartz", + Ripple: "ripple", + Sage: "sage", + Stone: "stone", + Tempo: "tempo", + Verse: "verse", + Vesper: "vesper", + Willow: "willow", } as const; export type FallbackOpenAiVoiceIdEnum = (typeof FallbackOpenAiVoiceIdEnum)[keyof typeof FallbackOpenAiVoiceIdEnum]; diff --git a/src/api/types/FallbackRimeAiVoiceId.ts b/src/api/types/FallbackRimeAiVoiceId.ts index 799eee73..cc4c0302 100644 --- a/src/api/types/FallbackRimeAiVoiceId.ts +++ b/src/api/types/FallbackRimeAiVoiceId.ts @@ -7,7 +7,7 @@ import type * as Vapi from "../index.js"; */ export type FallbackRimeAiVoiceId = /** - * Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ + * Popular Rime AI voices across mist, mistv2, mistv3, arcana, and coda models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ | Vapi.FallbackRimeAiVoiceIdEnum /** * Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog. */ diff --git a/src/api/types/FallbackRimeAiVoiceIdEnum.ts b/src/api/types/FallbackRimeAiVoiceIdEnum.ts index 47b79861..1ce1e6df 100644 --- a/src/api/types/FallbackRimeAiVoiceIdEnum.ts +++ b/src/api/types/FallbackRimeAiVoiceIdEnum.ts @@ -1,6 +1,6 @@ // This file was auto-generated by Fern from our API Definition. -/** Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ +/** Popular Rime AI voices across mist, mistv2, mistv3, arcana, and coda models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ export const FallbackRimeAiVoiceIdEnum = { Cove: "cove", Moon: "moon", @@ -52,5 +52,12 @@ export const FallbackRimeAiVoiceIdEnum = { Masonry: "masonry", Albion: "albion", Parapet: "parapet", + Clementine: "clementine", + Walnut: "walnut", + Eyre: "eyre", + Bancroft: "bancroft", + Hesse: "hesse", + Beatty: "beatty", + Godfrey: "godfrey", } as const; export type FallbackRimeAiVoiceIdEnum = (typeof FallbackRimeAiVoiceIdEnum)[keyof typeof FallbackRimeAiVoiceIdEnum]; diff --git a/src/api/types/FallbackRimeAiVoiceModel.ts b/src/api/types/FallbackRimeAiVoiceModel.ts index f2e70d56..b950403c 100644 --- a/src/api/types/FallbackRimeAiVoiceModel.ts +++ b/src/api/types/FallbackRimeAiVoiceModel.ts @@ -3,7 +3,9 @@ /** This is the model that will be used. Defaults to 'arcana' when not specified. */ export const FallbackRimeAiVoiceModel = { Arcana: "arcana", + Coda: "coda", Mistv2: "mistv2", + Mistv3: "mistv3", Mist: "mist", } as const; export type FallbackRimeAiVoiceModel = (typeof FallbackRimeAiVoiceModel)[keyof typeof FallbackRimeAiVoiceModel]; diff --git a/src/api/types/InviteUserDtoRoleZero.ts b/src/api/types/InviteUserDtoRoleZero.ts index 0276a9ec..29746339 100644 --- a/src/api/types/InviteUserDtoRoleZero.ts +++ b/src/api/types/InviteUserDtoRoleZero.ts @@ -4,5 +4,6 @@ export const InviteUserDtoRoleZero = { Admin: "admin", Editor: "editor", Viewer: "viewer", + HipaaSpecial: "hipaa-special", } as const; export type InviteUserDtoRoleZero = (typeof InviteUserDtoRoleZero)[keyof typeof InviteUserDtoRoleZero]; diff --git a/src/api/types/JsonQueryOnEventsTableOn.ts b/src/api/types/JsonQueryOnEventsTableOn.ts index a6ec0f47..6952e21b 100644 --- a/src/api/types/JsonQueryOnEventsTableOn.ts +++ b/src/api/types/JsonQueryOnEventsTableOn.ts @@ -57,6 +57,7 @@ export const JsonQueryOnEventsTableOn = { AssistantModelRequestAttemptStarted: "assistant.model.requestAttemptStarted", AssistantModelRequestAttemptSucceeded: "assistant.model.requestAttemptSucceeded", AssistantModelRequestAttemptFailed: "assistant.model.requestAttemptFailed", + AssistantKnowledgeBaseRequestSucceeded: "assistant.knowledgeBase.requestSucceeded", AssistantModelConnectionOpened: "assistant.model.connectionOpened", AssistantModelConnectionClosed: "assistant.model.connectionClosed", AssistantModelFirstTokenReceived: "assistant.model.firstTokenReceived", diff --git a/src/api/types/ModelCost.ts b/src/api/types/ModelCost.ts index b0c086a3..7b35f1bb 100644 --- a/src/api/types/ModelCost.ts +++ b/src/api/types/ModelCost.ts @@ -4,6 +4,10 @@ * Language-model cost for a call, including model, token usage, and amount. */ export interface ModelCost { + /** Provider-reported billable duration in seconds. Currently supplied for GPT-Live; omitted for token-billed models. */ + seconds?: number | undefined; + /** Whether the reported usage is complete. False means the cost reflects missing or partial usage and may understate provider spend. Omitted when the provider integration does not report completeness. */ + usageComplete?: boolean | undefined; /** * This is the model that was used during the call. * diff --git a/src/api/types/OpenAiModel.ts b/src/api/types/OpenAiModel.ts index ba4541a1..3f366e19 100644 --- a/src/api/types/OpenAiModel.ts +++ b/src/api/types/OpenAiModel.ts @@ -29,6 +29,10 @@ export interface OpenAiModel { toolRefs?: Vapi.ToolRef[] | undefined; /** These are the options for the knowledge base. */ knowledgeBase?: Vapi.CreateCustomKnowledgeBaseDto | undefined; + /** Configuration for the GPT-Live speaker. */ + speaker?: Vapi.OpenAiSpeaker | undefined; + /** Configuration for the reasoner supporting the GPT-Live speaker. */ + reasoner?: Vapi.OpenAiReasoner | undefined; /** * This is the OpenAI model that will be used. * diff --git a/src/api/types/OpenAiReasoner.ts b/src/api/types/OpenAiReasoner.ts new file mode 100644 index 00000000..cdccac71 --- /dev/null +++ b/src/api/types/OpenAiReasoner.ts @@ -0,0 +1,18 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Vapi from "../index.js"; + +export interface OpenAiReasoner { + /** The reasoner uses OpenAI. Omit to use OpenAI. */ + provider?: Vapi.OpenAiReasonerProvider | undefined; + /** The delegated reasoning model. Omit to use GPT-5.6 Terra. */ + model?: Vapi.OpenAiReasonerModel | undefined; + /** Higher effort can increase response time. Omit to use low. */ + reasoningEffort?: Vapi.OpenAiReasonerReasoningEffort | undefined; + /** + * Complete reasoner instructions. An explicit empty string is preserved. + * Omit to use Vapi's default reasoner instructions. No behavioral instructions + * are appended to a custom prompt. + */ + instructions?: string | undefined; +} diff --git a/src/api/types/OpenAiReasonerModel.ts b/src/api/types/OpenAiReasonerModel.ts new file mode 100644 index 00000000..c22ade91 --- /dev/null +++ b/src/api/types/OpenAiReasonerModel.ts @@ -0,0 +1,9 @@ +// This file was auto-generated by Fern from our API Definition. + +/** The delegated reasoning model. Omit to use GPT-5.6 Terra. */ +export const OpenAiReasonerModel = { + Gpt56Sol: "gpt-5.6-sol", + Gpt56Terra: "gpt-5.6-terra", + Gpt56Luna: "gpt-5.6-luna", +} as const; +export type OpenAiReasonerModel = (typeof OpenAiReasonerModel)[keyof typeof OpenAiReasonerModel]; diff --git a/src/api/types/OpenAiReasonerProvider.ts b/src/api/types/OpenAiReasonerProvider.ts new file mode 100644 index 00000000..26c79512 --- /dev/null +++ b/src/api/types/OpenAiReasonerProvider.ts @@ -0,0 +1,7 @@ +// This file was auto-generated by Fern from our API Definition. + +/** The reasoner uses OpenAI. Omit to use OpenAI. */ +export const OpenAiReasonerProvider = { + Openai: "openai", +} as const; +export type OpenAiReasonerProvider = (typeof OpenAiReasonerProvider)[keyof typeof OpenAiReasonerProvider]; diff --git a/src/api/types/OpenAiReasonerReasoningEffort.ts b/src/api/types/OpenAiReasonerReasoningEffort.ts new file mode 100644 index 00000000..cfa19c95 --- /dev/null +++ b/src/api/types/OpenAiReasonerReasoningEffort.ts @@ -0,0 +1,13 @@ +// This file was auto-generated by Fern from our API Definition. + +/** Higher effort can increase response time. Omit to use low. */ +export const OpenAiReasonerReasoningEffort = { + None: "none", + Low: "low", + Medium: "medium", + High: "high", + Xhigh: "xhigh", + Max: "max", +} as const; +export type OpenAiReasonerReasoningEffort = + (typeof OpenAiReasonerReasoningEffort)[keyof typeof OpenAiReasonerReasoningEffort]; diff --git a/src/api/types/OpenAiSpeaker.ts b/src/api/types/OpenAiSpeaker.ts new file mode 100644 index 00000000..710b4954 --- /dev/null +++ b/src/api/types/OpenAiSpeaker.ts @@ -0,0 +1,9 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Vapi from "../index.js"; + +export interface OpenAiSpeaker { + /** Omit to use legacy system messages. An explicit empty string is preserved. */ + instructions?: string | undefined; + personalityPacks?: Vapi.OpenAiSpeakerPersonalityPacksItem[] | undefined; +} diff --git a/src/api/types/OpenAiSpeakerPersonalityPacksItem.ts b/src/api/types/OpenAiSpeakerPersonalityPacksItem.ts new file mode 100644 index 00000000..b3ea0d4d --- /dev/null +++ b/src/api/types/OpenAiSpeakerPersonalityPacksItem.ts @@ -0,0 +1,10 @@ +// This file was auto-generated by Fern from our API Definition. + +export const OpenAiSpeakerPersonalityPacksItem = { + EagerListener: "eager-listener", + IdleHummer: "idle-hummer", + Bouncy: "bouncy", + Unhurried: "unhurried", +} as const; +export type OpenAiSpeakerPersonalityPacksItem = + (typeof OpenAiSpeakerPersonalityPacksItem)[keyof typeof OpenAiSpeakerPersonalityPacksItem]; diff --git a/src/api/types/OpenAiVoice.ts b/src/api/types/OpenAiVoice.ts index f593e657..bb8a4ee5 100644 --- a/src/api/types/OpenAiVoice.ts +++ b/src/api/types/OpenAiVoice.ts @@ -11,6 +11,7 @@ export interface OpenAiVoice { /** * This is the provider-specific ID that will be used. * Please note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models. + * quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. */ voiceId: Vapi.OpenAiVoiceId; /** This is the model that will be used for text-to-speech. */ diff --git a/src/api/types/OpenAiVoiceId.ts b/src/api/types/OpenAiVoiceId.ts index 9db8b87c..9f7d30f2 100644 --- a/src/api/types/OpenAiVoiceId.ts +++ b/src/api/types/OpenAiVoiceId.ts @@ -5,5 +5,6 @@ import type * as Vapi from "../index.js"; /** * This is the provider-specific ID that will be used. * Please note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models. + * quartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models. */ export type OpenAiVoiceId = Vapi.OpenAiVoiceIdEnum | string; diff --git a/src/api/types/OpenAiVoiceIdEnum.ts b/src/api/types/OpenAiVoiceIdEnum.ts index 528e1f25..3d9bab02 100644 --- a/src/api/types/OpenAiVoiceIdEnum.ts +++ b/src/api/types/OpenAiVoiceIdEnum.ts @@ -9,5 +9,22 @@ export const OpenAiVoiceIdEnum = { Shimmer: "shimmer", Marin: "marin", Cedar: "cedar", + Ash: "ash", + Ballad: "ballad", + Beacon: "beacon", + Bossa: "bossa", + Cinder: "cinder", + Coral: "coral", + Delta: "delta", + Gleam: "gleam", + Meridian: "meridian", + Quartz: "quartz", + Ripple: "ripple", + Sage: "sage", + Stone: "stone", + Tempo: "tempo", + Verse: "verse", + Vesper: "vesper", + Willow: "willow", } as const; export type OpenAiVoiceIdEnum = (typeof OpenAiVoiceIdEnum)[keyof typeof OpenAiVoiceIdEnum]; diff --git a/src/api/types/OrgApiLimitsDto.ts b/src/api/types/OrgApiLimitsDto.ts new file mode 100644 index 00000000..edd1a5ab --- /dev/null +++ b/src/api/types/OrgApiLimitsDto.ts @@ -0,0 +1,8 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface OrgApiLimitsDto { + /** Approximate number of API requests counted against the rate limit in the current minute, in the region that served this request. The count lives in a tumbling one-minute window aligned to the UTC clock (unix seconds / 60), so it resets to zero at the top of every minute; there is no reset header — the next boundary is (floor(now / 60) + 1) * 60. */ + rateLimitUsage: number; + /** Maximum number of standard API requests allowed per minute, in the region that served this request. Live call media traffic is limited separately and is not reflected here. */ + rateLimitMax: number; +} diff --git a/src/api/types/OrgConcurrencyLimitsDto.ts b/src/api/types/OrgConcurrencyLimitsDto.ts new file mode 100644 index 00000000..26e1845f --- /dev/null +++ b/src/api/types/OrgConcurrencyLimitsDto.ts @@ -0,0 +1,10 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface OrgConcurrencyLimitsDto { + /** True when the org is at or over its concurrency limit at the time of the read. This is a status read, not an admission decision: no call was evaluated and no slot is reserved. */ + concurrencyBlocked: boolean; + /** Maximum number of concurrent calls the subscription allows, at the time of the read. Computed as the subscription's included plus purchased concurrency, defaulting to the initial allowance when either is unset; call create derives its own figure and can differ for subscriptions with an unset allowance. */ + concurrencyLimit: number; + /** Plain concurrent-call headroom at the time of the read, floored at zero. Unlike the call create response, this does not include or reserve a slot for a new call. */ + remainingConcurrentCalls: number; +} diff --git a/src/api/types/OrgLimitsResponseDto.ts b/src/api/types/OrgLimitsResponseDto.ts new file mode 100644 index 00000000..bb35ec1b --- /dev/null +++ b/src/api/types/OrgLimitsResponseDto.ts @@ -0,0 +1,10 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Vapi from "../index.js"; + +export interface OrgLimitsResponseDto { + /** Call concurrency limits for the subscription. Unlike the call create response, remainingConcurrentCalls does not reserve a slot for a new call: it is the plain headroom at the time of the read. Covers the concurrency gate only — credits, frozen subscriptions, included minutes, and the billing limit are not reflected here, so call create can still refuse. Omitted when the limits could not be computed, and for an org with no subscription at all (legacy ungated orgs), which has no concurrency ceiling. */ + subscriptionLimits?: Vapi.OrgConcurrencyLimitsDto | undefined; + /** API rate limit usage for the org. Approximate, per region, and scoped to the current minute. Omitted when the limit information is unavailable. */ + apiLimits?: Vapi.OrgApiLimitsDto | undefined; +} diff --git a/src/api/types/RimeAiVoiceId.ts b/src/api/types/RimeAiVoiceId.ts index 2b81a63b..983e1919 100644 --- a/src/api/types/RimeAiVoiceId.ts +++ b/src/api/types/RimeAiVoiceId.ts @@ -7,7 +7,7 @@ import type * as Vapi from "../index.js"; */ export type RimeAiVoiceId = /** - * Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ + * Popular Rime AI voices across mist, mistv2, mistv3, arcana, and coda models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ | Vapi.RimeAiVoiceIdEnum /** * Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog. */ diff --git a/src/api/types/RimeAiVoiceIdEnum.ts b/src/api/types/RimeAiVoiceIdEnum.ts index 21ed81f3..b47951e2 100644 --- a/src/api/types/RimeAiVoiceIdEnum.ts +++ b/src/api/types/RimeAiVoiceIdEnum.ts @@ -1,6 +1,6 @@ // This file was auto-generated by Fern from our API Definition. -/** Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ +/** Popular Rime AI voices across mist, mistv2, mistv3, arcana, and coda models. Any valid Rime AI voice ID is accepted, not just these suggestions. */ export const RimeAiVoiceIdEnum = { Cove: "cove", Moon: "moon", @@ -52,5 +52,12 @@ export const RimeAiVoiceIdEnum = { Masonry: "masonry", Albion: "albion", Parapet: "parapet", + Clementine: "clementine", + Walnut: "walnut", + Eyre: "eyre", + Bancroft: "bancroft", + Hesse: "hesse", + Beatty: "beatty", + Godfrey: "godfrey", } as const; export type RimeAiVoiceIdEnum = (typeof RimeAiVoiceIdEnum)[keyof typeof RimeAiVoiceIdEnum]; diff --git a/src/api/types/RimeAiVoiceModel.ts b/src/api/types/RimeAiVoiceModel.ts index 12fd07e1..1ffcd792 100644 --- a/src/api/types/RimeAiVoiceModel.ts +++ b/src/api/types/RimeAiVoiceModel.ts @@ -3,7 +3,9 @@ /** This is the model that will be used. Defaults to 'arcana' when not specified. */ export const RimeAiVoiceModel = { Arcana: "arcana", + Coda: "coda", Mistv2: "mistv2", + Mistv3: "mistv3", Mist: "mist", } as const; export type RimeAiVoiceModel = (typeof RimeAiVoiceModel)[keyof typeof RimeAiVoiceModel]; diff --git a/src/api/types/StructuredOutput.ts b/src/api/types/StructuredOutput.ts index 70465476..0b29d45e 100644 --- a/src/api/types/StructuredOutput.ts +++ b/src/api/types/StructuredOutput.ts @@ -16,6 +16,15 @@ export interface StructuredOutput { /** * This is the regex pattern to match against the transcript. * + * Simulation evaluations use a canonical transcript built from recorded messages: + * User: and AI: dialogue, AI: tool_calls: JSON name/arguments records, and + * AI: tool_call_results: JSON results. System messages are excluded. These + * fixed labels apply even when custom artifact transcript labels are configured. + * Tool payloads participate in first-match and all-match extraction in event order. + * An empty message array falls back to the supplied transcript verbatim. + * Production-call extraction and call preview use their existing transcripts, + * so previewing the same output on a simulation's call can return a different result. + * * Only used when type is 'regex'. Supports both raw patterns (e.g. '\d+') and * regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety. * diff --git a/src/api/types/UpdateUserRoleDtoRoleZero.ts b/src/api/types/UpdateUserRoleDtoRoleZero.ts index d92a69f4..e0fb3f90 100644 --- a/src/api/types/UpdateUserRoleDtoRoleZero.ts +++ b/src/api/types/UpdateUserRoleDtoRoleZero.ts @@ -4,5 +4,6 @@ export const UpdateUserRoleDtoRoleZero = { Admin: "admin", Editor: "editor", Viewer: "viewer", + HipaaSpecial: "hipaa-special", } as const; export type UpdateUserRoleDtoRoleZero = (typeof UpdateUserRoleDtoRoleZero)[keyof typeof UpdateUserRoleDtoRoleZero]; diff --git a/src/api/types/index.ts b/src/api/types/index.ts index 4c95df43..a808b9a5 100644 --- a/src/api/types/index.ts +++ b/src/api/types/index.ts @@ -18,6 +18,7 @@ export * from "./AnthropicBedrockCredentialAuthenticationPlan.js"; export * from "./AnthropicBedrockCredentialProvider.js"; export * from "./AnthropicBedrockCredentialRegion.js"; export * from "./AnthropicBedrockModel.js"; +export * from "./AnthropicBedrockModelFallbackModelsItem.js"; export * from "./AnthropicBedrockModelModel.js"; export * from "./AnthropicBedrockModelToolsItem.js"; export * from "./AnthropicCredential.js"; @@ -1224,6 +1225,12 @@ export * from "./OpenAiModelPromptCacheRetention.js"; export * from "./OpenAiModelReasoningEffort.js"; export * from "./OpenAiModelToolStrictCompatibilityMode.js"; export * from "./OpenAiModelToolsItem.js"; +export * from "./OpenAiReasoner.js"; +export * from "./OpenAiReasonerModel.js"; +export * from "./OpenAiReasonerProvider.js"; +export * from "./OpenAiReasonerReasoningEffort.js"; +export * from "./OpenAiSpeaker.js"; +export * from "./OpenAiSpeakerPersonalityPacksItem.js"; export * from "./OpenAiTranscriber.js"; export * from "./OpenAiTranscriberLanguage.js"; export * from "./OpenAiTranscriberModel.js"; @@ -1242,7 +1249,10 @@ export * from "./OpenRouterCredentialProvider.js"; export * from "./OpenRouterModel.js"; export * from "./OpenRouterModelToolsItem.js"; export * from "./Org.js"; +export * from "./OrgApiLimitsDto.js"; export * from "./OrgChannel.js"; +export * from "./OrgConcurrencyLimitsDto.js"; +export * from "./OrgLimitsResponseDto.js"; export * from "./OutputTool.js"; export * from "./OutputToolMessagesItem.js"; export * from "./OutputToolType.js"; diff --git a/src/version.ts b/src/version.ts index 85cbd4ff..58b4ee6c 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const SDK_VERSION = "2.0.1"; +export const SDK_VERSION = "2.1.0"; diff --git a/tests/wire/chats.test.ts b/tests/wire/chats.test.ts index d1b0dda9..b4d7114c 100644 --- a/tests/wire/chats.test.ts +++ b/tests/wire/chats.test.ts @@ -6818,6 +6818,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -9612,6 +9614,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, @@ -11785,6 +11789,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -14572,6 +14578,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, @@ -16745,6 +16753,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -19532,6 +19542,8 @@ describe("ChatsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, diff --git a/tests/wire/eval.test.ts b/tests/wire/eval.test.ts index e7d1b471..7ed203be 100644 --- a/tests/wire/eval.test.ts +++ b/tests/wire/eval.test.ts @@ -1,10 +1,11 @@ // This file was auto-generated by Fern from our API Definition. +import * as Vapi from "../../src/api/index"; import { VapiClient } from "../../src/Client"; import { mockServerPool } from "../mock-server/MockServerPool"; describe("EvalClient", () => { - test("EvalController_getPaginated", async () => { + test("EvalController_getPaginated (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -85,7 +86,20 @@ describe("EvalClient", () => { }); }); - test("EvalController_create", async () => { + test("EvalController_getPaginated (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().get("/eval").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerGetPaginated(); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_create (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); const rawRequestBody = { messages: [{ role: "assistant" }], type: "chat.mockConversation" }; @@ -148,7 +162,40 @@ describe("EvalClient", () => { }); }); - test("EvalController_get", async () => { + test("EvalController_create (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + const rawRequestBody = { + messages: [{ role: "assistant" }, { role: "assistant" }], + type: "chat.mockConversation", + }; + const rawResponseBody = { key: "value" }; + + server + .mockEndpoint() + .post("/eval") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(403) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.eval.evalControllerCreate({ + messages: [ + { + role: "assistant", + }, + { + role: "assistant", + }, + ], + type: "chat.mockConversation", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_get (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -199,7 +246,22 @@ describe("EvalClient", () => { }); }); - test("EvalController_remove", async () => { + test("EvalController_get (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().get("/eval/id").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerGet({ + id: "id", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_remove (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -250,7 +312,22 @@ describe("EvalClient", () => { }); }); - test("EvalController_update", async () => { + test("EvalController_remove (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().delete("/eval/id").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerRemove({ + id: "id", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_update (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); const rawRequestBody = {}; @@ -308,7 +385,29 @@ describe("EvalClient", () => { }); }); - test("EvalController_getRun", async () => { + test("EvalController_update (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + const rawRequestBody = {}; + const rawResponseBody = { key: "value" }; + + server + .mockEndpoint() + .patch("/eval/id") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(403) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.eval.evalControllerUpdate({ + id: "id", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_getRun (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -2261,7 +2360,22 @@ describe("EvalClient", () => { }); }); - test("EvalController_removeRun", async () => { + test("EvalController_getRun (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().get("/eval/run/id").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerGetRun({ + id: "id", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_removeRun (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -4214,7 +4328,22 @@ describe("EvalClient", () => { }); }); - test("EvalController_getRunsPaginated", async () => { + test("EvalController_removeRun (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().delete("/eval/run/id").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerRemoveRun({ + id: "id", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_getRunsPaginated (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); @@ -6143,7 +6272,20 @@ describe("EvalClient", () => { }); }); - test("EvalController_run", async () => { + test("EvalController_getRunsPaginated (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + + server.mockEndpoint().get("/eval/run").respondWith().statusCode(403).jsonBody(rawResponseBody).build(); + + await expect(async () => { + return await client.eval.evalControllerGetRunsPaginated(); + }).rejects.toThrow(Vapi.ForbiddenError); + }); + + test("EvalController_run (1)", async () => { const server = mockServerPool.createServer(); const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); const rawRequestBody = { target: { type: "assistant" }, type: "eval" }; @@ -6168,4 +6310,29 @@ describe("EvalClient", () => { key: "value", }); }); + + test("EvalController_run (2)", async () => { + const server = mockServerPool.createServer(); + const client = new VapiClient({ maxRetries: 0, token: "test", environment: server.baseUrl }); + const rawRequestBody = { target: { type: "assistant" }, type: "eval" }; + const rawResponseBody = { key: "value" }; + + server + .mockEndpoint() + .post("/eval/run") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(403) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.eval.evalControllerRun({ + target: { + type: "assistant", + }, + type: "eval", + }); + }).rejects.toThrow(Vapi.ForbiddenError); + }); }); diff --git a/tests/wire/sessions.test.ts b/tests/wire/sessions.test.ts index 18ef3573..e617a569 100644 --- a/tests/wire/sessions.test.ts +++ b/tests/wire/sessions.test.ts @@ -6590,6 +6590,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -9698,6 +9700,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, @@ -13712,6 +13716,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -16815,6 +16821,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, @@ -20829,6 +20837,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -23932,6 +23942,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", }, @@ -27946,6 +27958,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value" }, promptTokens: 1.1, completionTokens: 1.1, @@ -31056,6 +31070,8 @@ describe("SessionsClient", () => { costs: [ { type: "model", + seconds: 1.1, + usageComplete: true, model: { key: "value", },