Expand AITURK Turkish settings and desktop surfaces for beta 5

This commit is contained in:
2026-09-06 05:03:32 +03:00
parent 237d1e2060
commit 5e76f58637
108 changed files with 6675 additions and 1034 deletions
@@ -157,6 +157,8 @@ interface StaleAuxWarningProps {
// $0-balance provider after switching main away from it) and offers the
// existing one-click reset rather than auto-clearing legitimate pins.
function StaleAuxWarning({ applying, onReset, slots, taskLabel }: StaleAuxWarningProps) {
const { t } = useI18n()
if (!slots.length) {
return null
}
@@ -169,11 +171,14 @@ function StaleAuxWarning({ applying, onReset, slots, taskLabel }: StaleAuxWarnin
<div className="flex flex-wrap items-center gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs text-amber-200">
<AlertTriangle className="size-3.5 shrink-0" />
<span className="grow">
{slots.length} auxiliary task{slots.length === 1 ? '' : 's'} ({names}) still run on{' '}
<span className="font-mono">{allSameProvider ? provider : 'other providers'}</span>, not your main model.
{t.settings.runtime.auxiliaryWarning(
slots.length,
names,
allSameProvider ? provider : t.settings.runtime.otherProviders
)}
</span>
<Button disabled={applying} onClick={onReset} size="sm" variant="textStrong">
Reset all to main
{t.settings.model.resetAllToMain}
</Button>
</div>
)
@@ -852,7 +857,9 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
void activateApiKeyProvider()
}
}}
placeholder={`Paste ${selectedProviderRow?.key_env ?? 'API key'}`}
placeholder={t.settings.runtime.pasteProviderKey(
selectedProviderRow?.key_env ?? t.settings.runtime.apiKey
)}
type="password"
value={apiKeyDraft}
/>
@@ -862,12 +869,12 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
>
{activating && <Loader2 className="size-3.5 animate-spin" />}
{activating ? 'Activating...' : 'Activate'}
{activating ? t.settings.runtime.activatingProvider : t.settings.runtime.activateProvider}
</Button>
</>
) : (
<Button onClick={startProviderSetup} size="sm" variant="textStrong">
Set up {selectedProviderRow?.name ?? 'provider'}
{t.settings.runtime.setupProvider(selectedProviderRow?.name ?? t.settings.runtime.provider)}
</Button>
)
) : (
@@ -1085,15 +1092,12 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
</section>
{moa && currentMoaPreset && (
<section>
<SectionHeading icon={Cpu} title="Mixture of Agents" />
<p className="mb-2 text-xs text-muted-foreground">
Configure named presets that appear as models under the Mixture of Agents provider. The aggregator is the
acting model.
</p>
<SectionHeading icon={Cpu} title={t.settings.runtime.moa.title} />
<p className="mb-2 text-xs text-muted-foreground">{t.settings.runtime.moa.description}</p>
<div className="mb-2 flex flex-wrap items-center gap-2">
<Select onValueChange={setSelectedMoaPreset} value={selectedMoaPreset || moa.default_preset}>
<SelectTrigger className={cn('min-w-40', CONTROL_TEXT)}>
<SelectValue placeholder="Preset" />
<SelectValue placeholder={t.settings.runtime.moa.preset} />
</SelectTrigger>
<SelectContent>
{Object.keys(moa.presets).map(name => (
@@ -1104,7 +1108,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
</SelectContent>
</Select>
<label className="flex items-center gap-2 rounded-sm border border-border px-2 py-1 text-xs">
Enabled
{t.settings.runtime.moa.enabled}
<Switch
checked={currentMoaPreset.enabled !== false}
disabled={applying}
@@ -1125,7 +1129,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
variant="text"
>
Set default
{t.settings.runtime.moa.setDefault}
</Button>
<Button
disabled={Object.keys(moa.presets).length <= 1 || applying}
@@ -1151,12 +1155,12 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
variant="ghost"
>
Delete
{t.common.delete}
</Button>
<Input
className={cn('w-40', CONTROL_TEXT)}
onChange={event => setNewMoaPresetName(event.target.value)}
placeholder="new preset"
placeholder={t.settings.runtime.moa.newPreset}
value={newMoaPresetName}
/>
<Button
@@ -1179,18 +1183,18 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
variant="textStrong"
>
Add preset
{t.settings.runtime.moa.addPreset}
</Button>
</div>
<div className="mb-2 text-xs text-muted-foreground">
Default: <span className="font-mono">{moa.default_preset}</span>
{t.settings.runtime.moa.default} <span className="font-mono">{moa.default_preset}</span>
</div>
<div className="grid gap-1">
{currentMoaPreset.reference_models.map((slot, index) => (
<ListRow
action={
<Switch
aria-label={`${slot.enabled !== false ? 'Disable' : 'Enable'} reference ${index + 1}`}
aria-label={t.settings.runtime.moa.toggleReference(index + 1, slot.enabled === false)}
checked={slot.enabled !== false}
disabled={applying}
onCheckedChange={checked =>
@@ -1267,7 +1271,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
variant="ghost"
>
Remove
{t.common.remove}
</Button>
</div>
}
@@ -1278,7 +1282,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
</span>
}
key={`${selectedMoaPreset}-${index}`}
title={`Reference ${index + 1}`}
title={t.settings.runtime.moa.reference(index + 1)}
/>
))}
<Button
@@ -1292,7 +1296,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
size="sm"
variant="textStrong"
>
Add reference model
{t.settings.runtime.moa.addReference}
</Button>
<ListRow
below={
@@ -1354,7 +1358,7 @@ export function ModelSettings({ onMainModelChanged, scopeProfile }: ModelSetting
{currentMoaPreset.aggregator.provider} · {currentMoaPreset.aggregator.model}
</span>
}
title="Aggregator"
title={t.settings.runtime.moa.aggregator}
/>
</div>
</section>