import type { MemoryProviderField } from '@/types/hermes' type FieldCopy = Pick & Partial> & { options?: Record } const reasoning = { minimal: 'En az', low: 'Düşük', medium: 'Orta', high: 'Yüksek', max: 'En yüksek' } /** Only presentation is translated; provider keys, credentials and enum values remain authoritative. */ export const TR_MEMORY_FIELDS: Record> = { honcho: { apiKey: { label: 'API anahtarı', description: 'Honcho Cloud kimlik doğrulaması. Kendi sunucunuzdaki temel URL için gerekli değildir.', placeholder: 'Honcho API anahtarını girin' }, baseUrl: { label: 'Temel URL', description: 'Kendi sunucunuzdaki Honcho adresi. Belirtildiğinde ortam değişkenindeki adresin yerine kullanılır.', placeholder: 'https://… (kendi sunucunuz)' }, environment: { label: 'Ortam', description: 'Honcho ortamı. Temel URL belirtildiğinde kullanılmaz.', options: { production: 'Bulut', local: 'Yerel' } }, workspace: { label: 'Çalışma alanı', description: 'Honcho çalışma alanı kimliği. Varsayılan olarak profilin ana bilgisayarını kullanır.' }, peerName: { label: 'Kullanıcı kimliği', description: 'Sabit kullanıcı kimliğiniz. Tek kullanıcılı kurulumlarda farklı platformların belleğini birleştirir.', placeholder: 'ör. eri' }, aiPeer: { label: 'Yapay zekâ kimliği', description: 'Yapay zekâ tarafının kimlik adı. Varsayılan olarak profilin ana bilgisayarını kullanır.' }, sessionStrategy: { label: 'Oturum stratejisi', description: 'Konuşmaların Honcho oturumlarıyla nasıl eşleştirileceği.', info: 'Oturum başına: her konuşma ayrı bir Honcho oturumu kullanır. Klasör başına: aynı çalışma klasöründeki konuşmalar ortak oturum kullanır. Depo başına: aynı Git deposundaki konuşmalar ortak oturum kullanır. Genel: tüm konuşmalar tek bir oturumu paylaşır.', options: { 'per-session': 'Oturum başına', 'per-directory': 'Klasör başına', 'per-repo': 'Depo başına', global: 'Genel' } }, timeout: { label: 'İstek zaman aşımı', description: 'Honcho HTTP istekleri için saniye cinsinden zaman aşımı. Boş bırakılırsa varsayılan süre kullanılır.' }, pinUserPeer: { label: 'Kullanıcı kimliğini sabitle', description: 'Ağ geçidinin çalışma anındaki kimliği yerine belirtilen kullanıcı adını kullanır. Tek kullanıcılı kurulumlarda belleği birleştirir.' }, runtimePeerPrefix: { label: 'Çalışma anındaki kimlik öneki', description: 'Ağ geçidinden gelen bilinmeyen kullanıcı kimliklerine eklenecek önek.', placeholder: 'ör. telegram_' }, userPeerAliases: { label: 'Kullanıcı kimliği eşleştirmeleri', description: 'Ağ geçidinin kullanıcı kimliklerini sabit Honcho kimlikleriyle eşleştirir.' }, sessionPeerPrefix: { label: 'Oturum kimliği öneki', description: 'Oturum kimliği adlarının başına ana bilgisayar adını ekler.' }, sessions: { label: 'Özel oturum eşleştirmeleri', description: 'Çözümleyici anahtarına göre kullanılacak oturum kimlikleri.' }, saveMessages: { label: 'Mesajları kaydet', description: 'Konuşma mesajlarını Honcho üzerinde saklar.' }, writeFrequency: { label: 'Yazma sıklığı', description: 'Mesajların yazılacağı zaman: async, turn, session veya her N turda bir.', info: 'async: mesajları geldikçe arka planda yazar. turn: her turun sonunda yazar. session: oturum sona erdiğinde yazar. N sayısı: her N turda bir yazar.' }, dialecticReasoningLevel: { label: 'Akıl yürütme düzeyi', description: 'Diyalektik (peer.chat) çağrıları için akıl yürütme çabası.', options: reasoning }, dialecticDynamic: { label: 'Dinamik akıl yürütme', description: 'Modelin her çağrı için akıl yürütme düzeyini değiştirmesine izin verir.' }, dialecticMaxChars: { label: 'En fazla sonuç karakteri', description: 'Sistem istemine eklenecek diyalektik sonucunun karakter sınırı.' }, dialecticDepth: { label: 'Derinlik', description: 'Her döngüdeki diyalektik geçiş sayısı (1–3).' }, dialecticDepthLevels: { label: 'Geçiş başına düzeyler', description: 'Her geçişin akıl yürütme düzeyi; dizinin uzunluğu derinlik değeriyle eşleşmelidir.' }, dialecticMaxInputChars: { label: 'En fazla girdi karakteri', description: 'peer.chat() çağrısına gönderilen sorgunun karakter sınırı.' }, reasoningHeuristic: { label: 'Uyarlanabilir akıl yürütme', description: 'Uzun sorgularda akıl yürütme düzeyini yükseltir.' }, reasoningLevelCap: { label: 'Akıl yürütme üst sınırı', description: 'Uyarlanabilir seçimde kullanılabilecek en yüksek akıl yürütme düzeyi.', options: reasoning }, recallMode: { label: 'Bellekten getirme yöntemi', description: 'Bellek bilgisinin getirilme yöntemi: karma, yalnızca bağlam veya yalnızca araçlar.', info: 'Karma: otomatik eklenen bağlam ve gerektiğinde bellek araçları. Yalnızca bağlam: araçlar olmadan bağlama ekleme. Yalnızca araçlar: model belleği açıkça sorgular; bağlama otomatik ekleme yapılmaz.', options: { hybrid: 'Karma', context: 'Yalnızca bağlam', tools: 'Yalnızca araçlar' } }, contextTokens: { label: 'Bağlam token sınırı', description: 'Otomatik eklenen bağlam için token sınırı. Boş bırakılırsa sınır uygulanmaz.', placeholder: '(sınırsız)' }, initOnSessionStart: { label: 'Oturum başında hazırla', description: 'Araçlar modunda oturumu ilk araç çağrısını beklemeden başlangıçta hazırlar.' }, messageMaxChars: { label: 'Mesaj karakter sınırı', description: 'Honcho’ya gönderilen her mesaj için en fazla karakter sayısı.' }, observationMode: { label: 'Gözlem yöntemi', description: 'Kimlik başına gözlem ön ayarı. Yönlü gözlem tüm yönleri izler; birleşik gözlem ortak bir görünüm kullanır.', options: { directional: 'Yönlü', unified: 'Birleşik' } } }, hindsight: { mode: { label: 'Bağlantı yöntemi', description: 'AITURK’ün Hindsight ile bağlantı kurma yöntemi.', options: { cloud: { label: 'Bulut', description: 'Hindsight Cloud API; yalnızca API anahtarı gerektirir.' }, local_external: { label: 'Mevcut yerel sunucu', description: 'Çalışan bir Hindsight sunucusuna bağlanır.' } } }, api_key: { label: 'API anahtarı', description: 'Hindsight API kimlik doğrulaması için kullanılır.', placeholder: 'Hindsight API anahtarını girin' }, api_url: { label: 'API adresi' }, bank_id: { label: 'Bellek bankası kimliği' }, recall_budget: { label: 'Bellekten getirme bütçesi', options: { low: 'Düşük', mid: 'Orta', high: 'Yüksek' } } } } const GROUPS: Record = { Connection: 'Bağlantı', Identity: 'Kimlik', Session: 'Oturum', 'Message writing': 'Mesajların yazılması', Dialectic: 'Diyalektik', Reasoning: 'Akıl yürütme', Recall: 'Bellekten getirme', Limits: 'Sınırlar', Observation: 'Gözlem' } export function localizeMemoryField(provider: string, field: MemoryProviderField, locale: string): MemoryProviderField { const copy = locale === 'tr' ? TR_MEMORY_FIELDS[provider]?.[field.key] : undefined if (!copy) { return field } const { options, ...text } = copy return { ...field, ...text, group: GROUPS[field.group] ?? field.group, options: field.options.map(option => { const translated = options?.[option.value] return translated ? { ...option, ...(typeof translated === 'string' ? { label: translated } : translated) } : option }) } }