feat: add preferred STT languages and fix model settings layout
This commit is contained in:
+4
-1
@@ -63,8 +63,11 @@ export function learningLanguageInstruction(language: Language): string {
|
||||
: "LANGUAGE: Use English for all learner-facing content, including teaching, questions and choices, plans, titles, practice, research summaries, knowledge-graph propositions, and text in generated diagrams, figures and demos. Preserve code, notation, identifiers, proper names and quoted source text. Follow an explicit learner request for a different language or a language-learning exercise when necessary.";
|
||||
}
|
||||
/** Streaming configuration: the language is pinned once at recording start, including reconnects. */
|
||||
export function dictationUrl(language: SttLanguage): string {
|
||||
export function dictationUrl(language: SttLanguage, preferredLanguages: readonly Language[] = []): string {
|
||||
const params = new URLSearchParams({ model: "nova-3", language, encoding: "linear16", sample_rate: "16000", channels: "1", smart_format: "true", punctuate: "true", endpointing: "300" });
|
||||
if (language === "multi") {
|
||||
for (const preferred of new Set(preferredLanguages)) if (isLanguage(preferred)) params.append("language_hint", preferred);
|
||||
}
|
||||
return `wss://api.deepgram.com/v1/listen?${params}`;
|
||||
}
|
||||
|
||||
|
||||
@@ -251,6 +251,10 @@
|
||||
"System default": "System default",
|
||||
"Multilingual": "Multilingual",
|
||||
"Multi": "Multi",
|
||||
"Preferred languages": "Preferred languages",
|
||||
"Used with Multilingual. Favors selected languages; other languages may still be recognized.": "Used with Multilingual. Favors selected languages; other languages may still be recognized.",
|
||||
"Could not save preferred languages": "Could not save preferred languages",
|
||||
"sttPreferredLanguages must be an array of \"en\" and \"ru\"": "sttPreferredLanguages must be an array of \"en\" and \"ru\"",
|
||||
"Global": "Global",
|
||||
"Chat": "Chat",
|
||||
"Graph view": "Graph view",
|
||||
|
||||
@@ -251,6 +251,10 @@
|
||||
"System default": "Язык системы",
|
||||
"Multilingual": "Несколько языков",
|
||||
"Multi": "Мульти",
|
||||
"Preferred languages": "Предпочитаемые языки",
|
||||
"Used with Multilingual. Favors selected languages; other languages may still be recognized.": "Используется в режиме «Несколько языков». Выбранные языки получают приоритет, но могут распознаваться и другие.",
|
||||
"Could not save preferred languages": "Не удалось сохранить предпочитаемые языки",
|
||||
"sttPreferredLanguages must be an array of \"en\" and \"ru\"": "Предпочитаемые языки должны быть списком кодов «en» и «ru»",
|
||||
"Global": "Общие",
|
||||
"Chat": "Занятие",
|
||||
"Graph view": "Граф",
|
||||
|
||||
@@ -184,6 +184,7 @@ export function resolveSettings(record: UserSettings | null): EffectiveSettings
|
||||
autoUpdate: record?.general?.autoUpdate ?? FACTORY_SETTINGS.general.autoUpdate,
|
||||
...(record?.general?.language ? { language: record.general.language } : {}),
|
||||
...(record?.general?.sttLanguage ? { sttLanguage: record.general.sttLanguage } : {}),
|
||||
...(record?.general?.sttPreferredLanguages ? { sttPreferredLanguages: [...record.general.sttPreferredLanguages] } : {}),
|
||||
},
|
||||
agent: {
|
||||
models,
|
||||
|
||||
@@ -240,6 +240,8 @@ export interface GeneralSettings {
|
||||
language?: Language;
|
||||
/** Independent dictation language; multi = multilingual, absent = browser/system language. */
|
||||
sttLanguage?: SttLanguage;
|
||||
/** Optional recognition hints for multilingual dictation; absent/empty = automatic detection. */
|
||||
sttPreferredLanguages?: Language[];
|
||||
}
|
||||
|
||||
/** Agent settings — everything about the non-conversation machinery. */
|
||||
@@ -450,6 +452,7 @@ function sanitizeGeneral(raw: Record<string, unknown>): GeneralSettings {
|
||||
if (autoUpdate !== undefined) out.autoUpdate = autoUpdate;
|
||||
if (isLanguage(raw.language)) out.language = raw.language;
|
||||
if (isSttLanguage(raw.sttLanguage)) out.sttLanguage = raw.sttLanguage;
|
||||
if (Array.isArray(raw.sttPreferredLanguages)) out.sttPreferredLanguages = [...new Set(raw.sttPreferredLanguages.filter(isLanguage))];
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,10 @@ export function parseGeneralSettingsBody(body: unknown): SettingsBodyResult<Gene
|
||||
if (!isSttLanguage(raw.sttLanguage)) return { ok: false, error: 'sttLanguage must be "en", "ru", or "multi"' };
|
||||
settings.sttLanguage = raw.sttLanguage;
|
||||
}
|
||||
if (raw.sttPreferredLanguages !== undefined) {
|
||||
if (!Array.isArray(raw.sttPreferredLanguages) || !raw.sttPreferredLanguages.every(isLanguage)) return { ok: false, error: 'sttPreferredLanguages must be an array of "en" and "ru"' };
|
||||
settings.sttPreferredLanguages = [...new Set(raw.sttPreferredLanguages)];
|
||||
}
|
||||
return { ok: true, settings };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user