import type { CloudAsrProviderId } from '../settings/recognition.js'; import type { EarsSettings } from '../config.js'; import type { CloudAsrModelCapabilities, CloudAsrModelTransport } from './types.js'; /** * Static registry of cloud ASR providers. A preset whose wire protocol is * OpenAI-compatible is pure data over the existing adapter; a provider with * a different protocol additionally ships an adapter and declares it here. */ export type CloudAsrProtocol = 'openai-compatible' | 'dashscope-asr' | 'tencent' | 'deepgram' | 'mimo' | 'volcengine'; export type CloudAsrFieldKind = 'credential' | 'model' | 'language' | 'endpoint' | 'host' | 'service' | 'cluster' | 'app-id' | 'secret-id'; export type CloudAsrCredentialField = 'cloudAsrGroqApiKey' | 'cloudAsrDeepgramApiKey' | 'cloudAsrCustomApiKey' | 'cloudAsrBailianApiKey' | 'cloudAsrTencentSecretKey' | 'cloudAsrMimoApiKey' | 'cloudAsrSiliconFlowApiKey' | 'cloudAsrVolcengineApiKey'; export type CloudAsrCredentialConfiguredField = `${CloudAsrCredentialField}Configured`; export type CloudAsrModelField = 'cloudAsrGroqModel' | 'cloudAsrDeepgramModel' | 'cloudAsrCustomModel' | 'cloudAsrBailianModel' | 'cloudAsrTencentEngineType' | 'cloudAsrMimoModel' | 'cloudAsrSiliconFlowModel' | 'cloudAsrVolcengineRealtimeModel' | 'cloudAsrVolcengineRecordingModel'; export type CloudAsrLanguageField = 'cloudAsrGroqLanguage' | 'cloudAsrDeepgramLanguage' | 'cloudAsrCustomLanguage' | 'cloudAsrBailianLanguage' | 'cloudAsrMimoLanguage' | 'cloudAsrSiliconFlowLanguage' | 'cloudAsrVolcengineLanguage'; export type CloudAsrSettingField = CloudAsrCredentialField | CloudAsrModelField | CloudAsrLanguageField | 'cloudAsrCustomEndpoint' | 'cloudAsrBailianHost' | 'cloudAsrDeepgramService' | 'cloudAsrTencentService' | 'cloudAsrTencentAppId' | 'cloudAsrTencentSecretId' | 'cloudAsrMimoService' | 'cloudAsrMimoCluster' | 'cloudAsrVolcengineService'; export interface CloudAsrFieldDefinition { readonly field: CloudAsrSettingField; /** Key inside the corresponding fixed cloudAsr storage slot. */ readonly storageKey: string; readonly kind: CloudAsrFieldKind; readonly required?: boolean; readonly allowedValues?: readonly string[]; readonly optionLabelKeys?: Readonly>; readonly visibleWhen?: { readonly field: CloudAsrSettingField; readonly equals: string; }; readonly maxLength?: number; /** Message for values rejected by `validateCloudAsrFieldValue`; falls back to a generic one. */ readonly invalidMessage?: string; /** Translation identifiers consumed by the browser settings view. */ readonly labelKey: string; readonly hintKey: string; readonly editor?: 'text' | 'model' | 'deepgram-model'; /** Enumerated selects: hovering an option reveals the raw wire value in the shared tooltip. */ readonly valueTooltip?: boolean; } export type CloudAsrEndpointKind = 'fixed' | 'custom' | 'bailian-host' | 'mimo'; export type CloudAsrModelStrategy = 'listing' | 'static' | 'free-form'; export type CloudAsrModelCapability = keyof CloudAsrModelCapabilities; export interface CloudAsrProviderEntry { readonly id: CloudAsrProviderId; readonly storageKey: 'groq' | 'deepgram' | 'customOpenAi' | 'bailian' | 'tencent' | 'mimo' | 'siliconflow' | 'volcengine'; readonly name: { readonly en: string; readonly zh: string; }; readonly providerLabelKey: string; readonly backendHintKey: string; readonly protocol: CloudAsrProtocol; readonly fields: readonly CloudAsrFieldDefinition[]; readonly credentialField: CloudAsrCredentialField; readonly modelField: CloudAsrModelField; readonly languageField?: CloudAsrLanguageField; readonly endpointKind: CloudAsrEndpointKind; readonly modelStrategy: CloudAsrModelStrategy; readonly realtime: boolean; /** Service ids that use the realtime session protocol. */ readonly realtimeServices?: readonly string[]; /** Base URL used to derive the transcription and model-listing endpoints. */ readonly baseUrl?: string; /** Filters the live `/models` reply to transcription-capable models. */ readonly modelFilter?: RegExp; /** Query parameters appended to `GET {baseUrl}/models` (e.g. SiliconFlow `sub_type`). */ readonly modelQuery?: Readonly>; /** Static fallback model list for providers without a listing endpoint. */ readonly staticModels?: readonly string[]; /** Explicit capabilities for static fallback models. */ readonly staticModelCapabilities?: Readonly>; /** Maps a provider service identifier to the catalog capability it requires. */ readonly modelServiceCapabilities?: Readonly>; /** * The wire transports the in-repo adapter can actually issue. A model whose * provider metadata demands a transport the adapter does not implement is * not executable and must not be surfaced for a service that needs it. */ readonly adapterTransports?: readonly CloudAsrModelTransport[]; /** Model used when the settings value is empty (custom keeps whisper-1). */ readonly defaultModel?: string; /** Whether the user edits the transcription endpoint instead of a preset. */ readonly endpointEditable: boolean; /** Whether transcription refuses to run without a configured API key. */ readonly apiKeyRequired: boolean; } export declare const CLOUD_ASR_PROVIDERS: readonly CloudAsrProviderEntry[]; export declare function cloudProviderEntry(id: string): CloudAsrProviderEntry | undefined; /** Translate a registry provider id into the flat backend selection used by the UI and Remote. */ export declare function cloudAsrBackendSelection(providerId: string): { asrBackend: 'cloud-openai'; cloudAsrProvider: CloudAsrProviderId; } | undefined; export declare function isKnownCloudProvider(id: string): boolean; export declare function cloudAsrFieldsFor(providerId: string): readonly CloudAsrFieldDefinition[]; export declare function cloudAsrFieldDefinition(fieldName: string): CloudAsrFieldDefinition | undefined; export declare function cloudAsrFieldFor(providerId: string, kind: CloudAsrFieldKind): CloudAsrFieldDefinition | undefined; export declare function cloudAsrCredentialField(providerId: string): CloudAsrCredentialField | undefined; export declare function cloudAsrModelField(providerId: string): CloudAsrModelField | undefined; export declare function cloudAsrLanguageField(providerId: string): CloudAsrLanguageField | undefined; export declare function cloudAsrFieldValue(settings: Partial>, fieldName: CloudAsrSettingField): string; /** Whether the provider lists its models through `GET {baseUrl}/models`. */ export declare function supportsModelListing(id: string): boolean; /** * Whether catalog metadata explicitly permits a model for a provider service. * A model must both report the capability the service needs and be executable * by the in-repo adapter. A streaming-capable model that requires a newer wire * transport (e.g. Deepgram Listen V2) is not executable here and is rejected * even though the provider reports `streaming: true`. */ export declare function cloudAsrModelSupportsService(providerId: string, service: string, capabilities: CloudAsrModelCapabilities | undefined): boolean; /** Return registry-declared fallback models that are executable for a service. */ export declare function cloudAsrStaticModelsFor(providerId: string, service?: string): readonly string[]; /** Whether the selected provider service is handled by the realtime dispatcher. */ export declare function isCloudAsrRealtime(settings: Pick): boolean; export declare function cloudAsrEndpointFor(settings: Pick): string; export declare function bailianGenerationUrl(host: string): string; export declare function cloudAsrCredentialFor(settings: Pick): string; export declare function cloudAsrModelFor(settings: Pick): string; /** * Settings-level validity deliberately excludes credentials. A keyless * configuration must remain saveable so a key can be entered separately. */ export declare function isCloudConfigurationValid(settings: Pick): boolean; /** Whether the cloud ASR backend has all required credentials and configuration to transcribe. */ export declare function isCloudAsrReady(settings: Pick): boolean; export declare function validateCloudAsrFieldValue(definition: CloudAsrFieldDefinition, value: string): boolean; /** Defaults used by the registry tests to ensure metadata tracks live settings. */ export declare const CLOUD_ASR_REGISTRY_DEFAULTS: Readonly<{ deepgramService: "realtime" | "recording-file"; mimoService: "api" | "token-plan"; mimoCluster: "ams" | "cn" | "sgp"; tencentService: "realtime" | "recording-file"; }>;