{"version":3,"sources":["../src/soniox-provider.ts","../src/soniox-transcription-model.ts","../src/soniox-error.ts","../src/soniox-transcription-options.ts","../src/version.ts"],"sourcesContent":["import {\n  TranscriptionModelV3,\n  ProviderV3,\n  NoSuchModelError,\n} from \"@ai-sdk/provider\";\nimport {\n  FetchFunction,\n  loadApiKey,\n  withUserAgentSuffix,\n} from \"@ai-sdk/provider-utils\";\nimport { SonioxTranscriptionModel } from \"./soniox-transcription-model\";\nimport { SonioxTranscriptionModelId } from \"./soniox-transcription-options\";\nimport { VERSION } from \"./version\";\n\nexport interface SonioxProvider extends ProviderV3 {\n  (modelId: string, settings?: {}): {\n    transcription: SonioxTranscriptionModel;\n  };\n\n  /**\nCreates a model for transcription.\n   */\n  transcription(modelId: SonioxTranscriptionModelId): TranscriptionModelV3;\n\n  /**\n   * @deprecated Use `embeddingModel` instead.\n   */\n  textEmbeddingModel(modelId: string): never;\n}\n\nexport interface SonioxProviderSettings {\n  /**\nAPI key for authenticating requests.\n     */\n  apiKey?: string;\n\n  /**\nBase URL for Soniox API requests.\n   */\n  apiBaseUrl?: string;\n\n  /**\nCustom headers to include in the requests.\n     */\n  headers?: Record<string, string>;\n\n  /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n    */\n  fetch?: FetchFunction;\n\n  /**\nPolling interval for async transcription status checks in milliseconds.\n     */\n  pollingIntervalMs?: number;\n\n  /**\n   * Timeout for transcription job polling in milliseconds.\n   * Default: 300,000 (5 minutes).\n   */\n  timeoutMs?: number;\n}\n\n/**\nCreate a Soniox provider instance.\n */\nexport function createSoniox(\n  options: SonioxProviderSettings = {}\n): SonioxProvider {\n  const getHeaders = () =>\n    withUserAgentSuffix(\n      {\n        authorization: `Bearer ${loadApiKey({\n          apiKey: options.apiKey,\n          environmentVariableName: \"SONIOX_API_KEY\",\n          description: \"Soniox\",\n        })}`,\n        ...options.headers,\n      },\n      `soniox/vercel-ai-sdk-provider/${VERSION}`\n    );\n\n  const apiBaseUrl = options.apiBaseUrl ?? \"https://api.soniox.com\";\n\n  const createTranscriptionModel = (modelId: SonioxTranscriptionModelId) =>\n    new SonioxTranscriptionModel(modelId, {\n      provider: `soniox.transcription`,\n      url: ({ path }) => new URL(path, apiBaseUrl).toString(),\n      headers: getHeaders,\n      fetch: options.fetch,\n      pollingIntervalMs: options.pollingIntervalMs,\n      timeoutMs: options.timeoutMs,\n    });\n\n  const provider = function (modelId: SonioxTranscriptionModelId) {\n    return {\n      transcription: createTranscriptionModel(modelId),\n    };\n  };\n\n  provider.specificationVersion = \"v3\" as const;\n  provider.transcription = createTranscriptionModel;\n  provider.transcriptionModel = createTranscriptionModel;\n\n  provider.languageModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: \"languageModel\",\n      message: \"Soniox does not provide language models\",\n    });\n  };\n\n  provider.embeddingModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: \"embeddingModel\",\n      message: \"Soniox does not provide embedding models\",\n    });\n  };\n  provider.textEmbeddingModel = provider.embeddingModel;\n\n  provider.imageModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: \"imageModel\",\n      message: \"Soniox does not provide image models\",\n    });\n  };\n\n  return provider as SonioxProvider;\n}\n\n/**\nDefault Soniox provider instance.\n */\nexport const soniox = createSoniox();\n","import {\n  AISDKError,\n  SharedV3Warning,\n  TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  convertBase64ToUint8Array,\n  createJsonResponseHandler,\n  delay,\n  getFromApi,\n  mediaTypeToExtension,\n  parseProviderOptions,\n  postFormDataToApi,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { SonioxConfig } from './soniox-config';\nimport { sonioxFailedResponseHandler } from './soniox-error';\nimport {\n  SonioxTranscriptionModelId,\n  sonioxTranscriptionProviderOptionsSchema,\n} from './soniox-transcription-options';\nimport {\n  SonioxCreateTranscriptionRequest,\n  SonioxTranscriptToken,\n} from './soniox-api-types';\n\nconst sonioxUploadResponseSchema = z.object({\n  id: z.string(),\n});\n\nconst sonioxCreateTranscriptionResponseSchema = z.object({\n  id: z.string(),\n  status: z.string().nullish(),\n});\n\nconst sonioxTranscriptionStatusResponseSchema = z.object({\n  id: z.string(),\n  status: z.string(),\n  audio_duration_ms: z.number().nullish(),\n  error_message: z.string().nullish(),\n});\n\nconst sonioxTranscriptResponseSchema = z.object({\n  id: z.string(),\n  text: z.string().nullish(),\n  tokens: z\n    .array(\n      z.object({\n        text: z.string(),\n        start_ms: z.number().nullish(),\n        end_ms: z.number().nullish(),\n        confidence: z.number().nullish(),\n        speaker: z.union([z.number(), z.string()]).nullish(),\n        language: z.string().nullish(),\n        translation_status: z.string().nullish(),\n      }),\n    )\n    .nullish(),\n});\n\ninterface SonioxTranscriptionModelConfig extends SonioxConfig {\n  _internal?: {\n    currentDate?: () => Date;\n  };\n  pollingIntervalMs?: number;\n  timeoutMs?: number;\n}\n\nexport class SonioxTranscriptionModel implements TranscriptionModelV3 {\n  readonly specificationVersion = 'v3';\n  private readonly POLLING_INTERVAL_MS = 1000;\n  private readonly TIMEOUT_MS = 5 * 60 * 1000;\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  constructor(\n    readonly modelId: SonioxTranscriptionModelId,\n    private readonly config: SonioxTranscriptionModelConfig,\n  ) {}\n\n  private mapContext(\n    context: z.infer<\n      typeof sonioxTranscriptionProviderOptionsSchema\n    >['context'],\n  ): SonioxCreateTranscriptionRequest['context'] | undefined {\n    if (!context) return undefined;\n\n    if (typeof context === 'string') {\n      return context;\n    }\n\n    return {\n      general: context.general ?? undefined,\n      text: context.text ?? undefined,\n      terms: context.terms ?? undefined,\n      translation_terms: context.translationTerms ?? undefined,\n    };\n  }\n\n  private mapTranslation(\n    translation: z.infer<\n      typeof sonioxTranscriptionProviderOptionsSchema\n    >['translation'],\n  ): SonioxCreateTranscriptionRequest['translation'] | undefined {\n    if (!translation) return undefined;\n\n    if (translation.type === 'one_way') {\n      return {\n        type: 'one_way',\n        target_language: translation.targetLanguage,\n      };\n    }\n\n    return {\n      type: 'two_way',\n      language_a: translation.languageA,\n      language_b: translation.languageB,\n    };\n  }\n\n  private buildSegments(tokens: SonioxTranscriptToken[] | null | undefined) {\n    if (!tokens) return [];\n\n    // Soniox tokens that are trasncription tokens will always have start_ms and end_ms\n    // But translation tokens we want to skip here. And are exposed in providerMetadata.soniox.tokens\n    return tokens\n      .filter(\n        token =>\n          typeof token.start_ms === 'number' &&\n          typeof token.end_ms === 'number',\n      )\n      .map(token => ({\n        text: token.text,\n        startSecond: token.start_ms! / 1000,\n        endSecond: token.end_ms! / 1000,\n      }));\n  }\n\n  // Soniox returns language for each token, so we need to find the most common language\n  private getLanguageFromTokens(\n    tokens: SonioxTranscriptToken[] | null | undefined,\n  ) {\n    if (!tokens) return undefined;\n\n    const counts = new Map<string, number>();\n    for (const token of tokens) {\n      const language = token.language ?? undefined;\n      if (!language) continue;\n      counts.set(language, (counts.get(language) ?? 0) + 1);\n    }\n\n    let bestLanguage: string | undefined;\n    let bestCount = 0;\n    for (const [language, count] of counts) {\n      if (count > bestCount) {\n        bestLanguage = language;\n        bestCount = count;\n      }\n    }\n\n    return bestLanguage;\n  }\n\n  private async tryDeleteResource({\n    path,\n    headers,\n    warnings,\n    description,\n  }: {\n    path: string;\n    headers: Record<string, string | undefined>;\n    warnings: SharedV3Warning[];\n    description: string;\n  }) {\n    const fetch = this.config.fetch ?? globalThis.fetch;\n\n    try {\n      const filteredHeaders = Object.fromEntries(\n        Object.entries(headers).filter(([, value]) => value !== undefined),\n      ) as Record<string, string>;\n\n      const response = await fetch(\n        this.config.url({ path, modelId: this.modelId }),\n        {\n          method: 'DELETE',\n          headers: filteredHeaders,\n        },\n      );\n\n      if (!response.ok) {\n        let responseText = '';\n        try {\n          responseText = await response.text();\n        } catch {\n          responseText = '';\n        }\n\n        throw new Error(\n          `HTTP ${response.status} ${response.statusText}${responseText ? `: ${responseText}` : ''}`,\n        );\n      }\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      warnings.push({\n        type: 'other',\n        message: `Failed to auto-delete ${description}: ${message}`,\n      });\n    }\n  }\n\n  async doGenerate(\n    options: Parameters<TranscriptionModelV3['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {\n    const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n    const warnings: SharedV3Warning[] = [];\n\n    const sonioxOptions = await parseProviderOptions({\n      provider: 'soniox',\n      providerOptions: options.providerOptions,\n      schema: sonioxTranscriptionProviderOptionsSchema,\n    });\n\n    let fileId: string | undefined;\n    let transcriptionId: string | undefined;\n    const requestHeaders = combineHeaders(\n      this.config.headers(),\n      options.headers,\n    );\n\n    try {\n      const blob =\n        options.audio instanceof Uint8Array\n          ? new Blob([options.audio as BlobPart])\n          : new Blob([convertBase64ToUint8Array(options.audio) as BlobPart]);\n\n      const fileExtension = mediaTypeToExtension(options.mediaType);\n      const formData = new FormData();\n      formData.append(\n        'file',\n        new File([blob], `audio.${fileExtension}`, {\n          type: options.mediaType,\n        }),\n      );\n\n      const { value: uploadResponse } = await postFormDataToApi({\n        url: this.config.url({\n          path: '/v1/files',\n          modelId: this.modelId,\n        }),\n        headers: requestHeaders,\n        formData,\n        failedResponseHandler: sonioxFailedResponseHandler,\n        successfulResponseHandler: createJsonResponseHandler(\n          sonioxUploadResponseSchema,\n        ),\n        abortSignal: options.abortSignal,\n        fetch: this.config.fetch,\n      });\n\n      fileId = uploadResponse.id;\n\n      const body: SonioxCreateTranscriptionRequest = {\n        model: this.modelId,\n        file_id: fileId,\n        language_hints: sonioxOptions?.languageHints ?? undefined,\n        language_hints_strict: sonioxOptions?.languageHintsStrict ?? undefined,\n        enable_language_identification:\n          sonioxOptions?.enableLanguageIdentification ?? undefined,\n        enable_speaker_diarization:\n          sonioxOptions?.enableSpeakerDiarization ?? undefined,\n        context: this.mapContext(sonioxOptions?.context),\n        client_reference_id: sonioxOptions?.clientReferenceId ?? undefined,\n        webhook_url: sonioxOptions?.webhookUrl ?? undefined,\n        webhook_auth_header_name:\n          sonioxOptions?.webhookAuthHeaderName ?? undefined,\n        webhook_auth_header_value:\n          sonioxOptions?.webhookAuthHeaderValue ?? undefined,\n        translation: this.mapTranslation(sonioxOptions?.translation),\n      };\n\n      const { value: submitResponse } = await postJsonToApi({\n        url: this.config.url({\n          path: '/v1/transcriptions',\n          modelId: this.modelId,\n        }),\n        headers: requestHeaders,\n        body,\n        failedResponseHandler: sonioxFailedResponseHandler,\n        successfulResponseHandler: createJsonResponseHandler(\n          sonioxCreateTranscriptionResponseSchema,\n        ),\n        abortSignal: options.abortSignal,\n        fetch: this.config.fetch,\n      });\n\n      transcriptionId = submitResponse.id;\n\n      const pollingInterval =\n        this.config.pollingIntervalMs ?? this.POLLING_INTERVAL_MS;\n      const timeoutMs = this.config.timeoutMs ?? this.TIMEOUT_MS;\n      const startTime = Date.now();\n\n      let statusResponse:\n        | z.infer<typeof sonioxTranscriptionStatusResponseSchema>\n        | undefined;\n\n      while (true) {\n        if (Date.now() - startTime > timeoutMs) {\n          throw new AISDKError({\n            message: 'Transcription job polling timed out',\n            name: 'TranscriptionJobPollingTimedOut',\n            cause: statusResponse,\n          });\n        }\n\n        if (options.abortSignal?.aborted) {\n          throw new Error('Transcription request was aborted');\n        }\n\n        const { value } = await getFromApi({\n          url: this.config.url({\n            path: `/v1/transcriptions/${submitResponse.id}`,\n            modelId: this.modelId,\n          }),\n          headers: requestHeaders,\n          failedResponseHandler: sonioxFailedResponseHandler,\n          successfulResponseHandler: createJsonResponseHandler(\n            sonioxTranscriptionStatusResponseSchema,\n          ),\n          abortSignal: options.abortSignal,\n          fetch: this.config.fetch,\n        });\n\n        statusResponse = value;\n\n        if (statusResponse.status === 'completed') {\n          break;\n        }\n\n        if (statusResponse.status === 'error') {\n          throw new AISDKError({\n            message: `Transcription failed: ${statusResponse.error_message ?? 'Unknown error'}`,\n            name: 'TranscriptionJobFailed',\n            cause: statusResponse,\n          });\n        }\n\n        await delay(pollingInterval);\n      }\n\n      const {\n        value: transcriptResponse,\n        responseHeaders,\n        rawValue: rawResponse,\n      } = await getFromApi({\n        url: this.config.url({\n          path: `/v1/transcriptions/${submitResponse.id}/transcript`,\n          modelId: this.modelId,\n        }),\n        headers: requestHeaders,\n        failedResponseHandler: sonioxFailedResponseHandler,\n        successfulResponseHandler: createJsonResponseHandler(\n          sonioxTranscriptResponseSchema,\n        ),\n        abortSignal: options.abortSignal,\n        fetch: this.config.fetch,\n      });\n\n      const tokens = transcriptResponse.tokens ?? [];\n      const segments = this.buildSegments(tokens);\n      const language = this.getLanguageFromTokens(tokens);\n\n      return {\n        text: transcriptResponse.text ?? '',\n        segments,\n        language,\n        durationInSeconds:\n          typeof statusResponse.audio_duration_ms === 'number'\n            ? statusResponse.audio_duration_ms / 1000\n            : undefined,\n        warnings,\n        response: {\n          timestamp: currentDate,\n          modelId: this.modelId,\n          headers: responseHeaders,\n          body: rawResponse,\n        },\n        providerMetadata: {\n          soniox: {\n            tokens,\n          },\n        },\n      };\n    } finally {\n      if (transcriptionId) {\n        await this.tryDeleteResource({\n          path: `/v1/transcriptions/${transcriptionId}`,\n          headers: requestHeaders,\n          warnings,\n          description: `transcription ${transcriptionId}`,\n        });\n      }\n\n      if (fileId) {\n        await this.tryDeleteResource({\n          path: `/v1/files/${fileId}`,\n          headers: requestHeaders,\n          warnings,\n          description: `file ${fileId}`,\n        });\n      }\n    }\n  }\n}\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const sonioxErrorDataSchema = z.object({\n  status_code: z.number().nullish(),\n  error_type: z.string().nullish(),\n  message: z.string().nullish(),\n  validation_errors: z\n    .array(\n      z.object({\n        error_type: z.string().nullish(),\n        location: z.string().nullish(),\n        message: z.string().nullish(),\n      }),\n    )\n    .nullish(),\n  request_id: z.string().nullish(),\n});\n\nexport type SonioxErrorData = z.infer<typeof sonioxErrorDataSchema>;\n\nexport const sonioxFailedResponseHandler = createJsonErrorResponseHandler({\n  errorSchema: sonioxErrorDataSchema,\n  errorToMessage: data =>\n    data.message ?? data.error_type ?? 'Soniox API error',\n});\n","import { z } from 'zod/v4';\n\nexport type SonioxTranscriptionModelId = 'stt-async-v3' | 'stt-async-v4' | (string & {});\n\nconst sonioxContextSchema = z\n  .object({\n    general: z\n      .array(\n        z.object({\n          key: z.string(),\n          value: z.string(),\n        }),\n      )\n      .nullish(),\n    text: z.string().nullish(),\n    terms: z.array(z.string()).nullish(),\n    translationTerms: z\n      .array(\n        z.object({\n          source: z.string(),\n          target: z.string(),\n        }),\n      )\n      .nullish(),\n  })\n  .partial();\n\nconst sonioxTranslationSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('one_way'),\n    targetLanguage: z.string(),\n  }),\n  z.object({\n    type: z.literal('two_way'),\n    languageA: z.string(),\n    languageB: z.string(),\n  }),\n]);\n\nexport const sonioxTranscriptionProviderOptionsSchema = z.object({\n  /**\n   * Language hints to improve recognition.\n   */\n  languageHints: z.array(z.string()).nullish(),\n  /**\n   * When true, the model will rely more on language hints.\n   */\n  languageHintsStrict: z.boolean().nullish(),\n  /**\n   * Whether to enable automatic language identification.\n   */\n  enableLanguageIdentification: z.boolean().nullish(),\n  /**\n   * Whether to enable speaker diarization.\n   */\n  enableSpeakerDiarization: z.boolean().nullish(),\n  /**\n   * Additional transcription context to improve accuracy.\n   */\n  context: z.union([z.string(), sonioxContextSchema]).nullish(),\n  /**\n   * Optional client-defined reference ID for the transcription.\n   */\n  clientReferenceId: z.string().nullish(),\n  /**\n   * Webhook URL for transcription completion notifications.\n   */\n  webhookUrl: z.string().nullish(),\n  /**\n   * Webhook authentication header name.\n   */\n  webhookAuthHeaderName: z.string().nullish(),\n  /**\n   * Webhook authentication header value.\n   */\n  webhookAuthHeaderValue: z.string().nullish(),\n  /**\n   * Translation configuration for the transcription.\n   */\n  translation: sonioxTranslationSchema.nullish(),\n});\n\nexport type SonioxTranscriptionProviderOptions = z.infer<\n  typeof sonioxTranscriptionProviderOptionsSchema\n>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n"],"mappings":"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","names":["z","z","z"]}