Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions apps/desktop/src/constants/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,37 @@ export const AVAILABLE_MODELS: AvailableWhisperModel[] = [
provider: "Amical Cloud",
providerIcon: "/assets/icon_logo.svg",
},
{
id: "openai-whisper",
name: "OpenAI Whisper",
type: "whisper",
description: "Cloud transcription using your own OpenAI API key.",
checksum: "",
filename: "",
downloadUrl: "",
size: 0,
sizeFormatted: "Cloud",
modelSize: "Cloud",
features: [
{
icon: "key-round",
tooltip: "Bring your own API key",
},
{
icon: "bolt",
tooltip: "Fast cloud transcription",
},
{
icon: "languages",
tooltip: "Multilingual support",
},
],
speed: 4.0,
accuracy: 4.5,
setup: "cloud",
provider: "OpenAI",
providerIcon: "/icons/models/openai_dark.svg",
},
{
id: "whisper-tiny",
name: "Whisper Tiny",
Expand Down
6 changes: 6 additions & 0 deletions apps/desktop/src/constants/provider-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const PROVIDER_TYPES = {
openRouter: "openrouter",
ollama: "ollama",
openAICompatible: "openai-compatible",
openAIWhisper: "openai-whisper",
} as const;

export type ProviderType = (typeof PROVIDER_TYPES)[keyof typeof PROVIDER_TYPES];
Expand All @@ -16,6 +17,7 @@ export const SYSTEM_PROVIDER_INSTANCE_IDS = {
openRouter: "system-openrouter",
ollama: "system-ollama",
openAICompatible: "system-openai-compatible",
openAIWhisper: "system-openai-whisper",
} as const;

export function getRemoteProviderType(provider: RemoteProvider): ProviderType {
Expand Down Expand Up @@ -43,6 +45,8 @@ export function getSystemProviderInstanceId(
return SYSTEM_PROVIDER_INSTANCE_IDS.ollama;
case PROVIDER_TYPES.openAICompatible:
return SYSTEM_PROVIDER_INSTANCE_IDS.openAICompatible;
case PROVIDER_TYPES.openAIWhisper:
return SYSTEM_PROVIDER_INSTANCE_IDS.openAIWhisper;
}
}

Expand All @@ -58,5 +62,7 @@ export function getProviderDisplayName(providerType: ProviderType): string {
return REMOTE_PROVIDERS.ollama;
case PROVIDER_TYPES.openAICompatible:
return REMOTE_PROVIDERS.openAICompatible;
case PROVIDER_TYPES.openAIWhisper:
return "OpenAI Whisper";
}
}
3 changes: 3 additions & 0 deletions apps/desktop/src/db/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@ export interface AppSettingsData {
apiKey: string;
baseURL: string;
};
openAIWhisper?: {
apiKey: string;
};
defaultSpeechModel?: string; // Selection key "<providerInstanceId>::speech::<id>" or legacy speech model ID
defaultLanguageModel?: string; // Selection key "<providerInstanceId>::language::<id>" or legacy language model ID
defaultEmbeddingModel?: string; // Selection key "<providerInstanceId>::embedding::<id>" or legacy embedding model ID
Expand Down
49 changes: 49 additions & 0 deletions apps/desktop/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,19 @@
"internetLogin": "Needs internet and login"
}
},
"openai": {
"title": "OpenAI Whisper",
"subtitle": "Bring your own API key - fast cloud transcription",
"description": "Use your own OpenAI API key for cloud-based Whisper transcription. No login required.",
"pros": {
"accurate": "High accuracy",
"fast": "Fast cloud processing",
"noLogin": "No login needed"
},
"cons": {
"apiKey": "Requires OpenAI API key"
}
},
"local": {
"title": "Local Models",
"subtitle": "Private, offline, and free - runs fully on your device.",
Expand Down Expand Up @@ -212,6 +225,19 @@
"loginStartFailed": "Failed to open login. Please try again."
}
},
"openai": {
"title": "Connect OpenAI API Key",
"description": "Enter your OpenAI API key to use cloud-based Whisper transcription.",
"placeholder": "Enter your OpenAI API key (sk-...)",
"connect": "Connect",
"connected": "API key validated and saved!",
"toast": {
"validated": "OpenAI API key validated successfully"
},
"error": {
"validationFailed": "Failed to validate API key. Please check and try again."
}
},
"local": {
"downloadingTitle": "Downloading Local Model",
"downloadingDescription": "Setting up local model for private, offline transcription",
Expand Down Expand Up @@ -326,6 +352,10 @@
"localTranscriptionFailed": {
"title": "Local transcription failed",
"description": "Whisper audio processing failed"
},
"cloudTranscriptionFailed": {
"title": "Cloud transcription failed",
"description": "Cloud transcription request failed"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
}
Expand Down Expand Up @@ -882,6 +912,25 @@
},
"validationFailed": "Validation failed"
},
"openAIWhisper": {
"title": "OpenAI Whisper",
"description": "Use your own OpenAI API key for cloud-based Whisper transcription. No login required.",
"placeholder": "Enter your OpenAI API key (sk-...)",
"statusConnected": "Connected",
"statusNotConfigured": "Not configured",
"connect": "Connect",
"validating": "Validating...",
"remove": "Remove",
"configureFirst": "Please configure your OpenAI API key above first.",
"toast": {
"validated": "OpenAI API key validated successfully",
"validationFailed": "Failed to validate OpenAI API key",
"configSaved": "OpenAI Whisper configuration saved",
"configSaveFailed": "Failed to save OpenAI Whisper configuration",
"configRemoved": "OpenAI Whisper configuration removed",
"configRemoveFailed": "Failed to remove OpenAI Whisper configuration"
}
},
"syncedModels": {
"title": "Synced Models",
"toast": {
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop/src/i18n/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,10 @@
"localTranscriptionFailed": {
"title": "La transcripción local falló",
"description": "El procesamiento de audio de Whisper falló"
},
"cloudTranscriptionFailed": {
"title": "Error de transcripción en la nube",
"description": "La solicitud de transcripción en la nube falló"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
}
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop/src/i18n/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,10 @@
"localTranscriptionFailed": {
"title": "ローカル文字起こしに失敗しました",
"description": "Whisperの音声処理に失敗しました"
},
"cloudTranscriptionFailed": {
"title": "クラウド文字起こしに失敗しました",
"description": "クラウド文字起こしリクエストが失敗しました"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
}
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop/src/i18n/locales/zh-TW.json
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,10 @@
"localTranscriptionFailed": {
"title": "本機轉錄失敗",
"description": "Whisper 音訊處理失敗"
},
"cloudTranscriptionFailed": {
"title": "雲端轉寫失敗",
"description": "雲端轉寫請求失敗"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
}
Expand Down
Loading