diff --git a/src/i18n/de/index.ts b/src/i18n/de/index.ts index 996441ef..9f87d94e 100644 --- a/src/i18n/de/index.ts +++ b/src/i18n/de/index.ts @@ -155,7 +155,8 @@ const de = { version: 'Version', vocabOnly: 'Nur Vokabular', writePromptToStart: 'Schreiben Sie eine Anweisung, um eine neue Sitzung zu starten', - you: 'Sie' + you: 'Sie', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default de; diff --git a/src/i18n/en/index.ts b/src/i18n/en/index.ts index dc0e7437..76081f9b 100644 --- a/src/i18n/en/index.ts +++ b/src/i18n/en/index.ts @@ -173,7 +173,8 @@ const en = { sessionsDescription: 'Entire session history, attachments and custom model settings', knowledgeDescription: 'Entire knowledge base', expandSidebar: 'Expand sidebar', - collapseSidebar: 'Collapse sidebar' + collapseSidebar: 'Collapse sidebar', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default en; diff --git a/src/i18n/es/index.ts b/src/i18n/es/index.ts index f60ec3bb..e86091b0 100644 --- a/src/i18n/es/index.ts +++ b/src/i18n/es/index.ts @@ -127,7 +127,8 @@ const es = { verify: 'Verificar', version: 'Versión', writePromptToStart: 'Escribe una indicación para comenzar una nueva sesión', - you: 'Tú' + you: 'Tú', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default es; diff --git a/src/i18n/fr/index.ts b/src/i18n/fr/index.ts index 4639f900..4d53123b 100644 --- a/src/i18n/fr/index.ts +++ b/src/i18n/fr/index.ts @@ -155,7 +155,8 @@ const fr = { writePromptToStart: 'Écrivez une invite pour démarrer une nouvelle session', you: 'Vous', copiedNotPrivate: 'Contenu copié, mais votre connexion n’est pas privée', - notCopiedNotPrivate: 'Impossible de copier le contenu. La connexion n’est pas privée' + notCopiedNotPrivate: 'Impossible de copier le contenu. La connexion n’est pas privée', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default fr; diff --git a/src/i18n/i18n-types.ts b/src/i18n/i18n-types.ts index 9193787f..fb78bd01 100644 --- a/src/i18n/i18n-types.ts +++ b/src/i18n/i18n-types.ts @@ -10,6 +10,7 @@ export type Locales = | 'en' | 'es' | 'fr' + | 'it' | 'ja' | 'pt-br' | 'tr' diff --git a/src/i18n/i18n-util.async.ts b/src/i18n/i18n-util.async.ts index 9ac13577..37fce938 100644 --- a/src/i18n/i18n-util.async.ts +++ b/src/i18n/i18n-util.async.ts @@ -15,6 +15,7 @@ const localeTranslationLoaders = { tr: () => import('./tr'), vi: () => import('./vi'), 'zh-cn': () => import('./zh-cn'), + it: () => import('./it'), } const updateDictionary = (locale: Locales, dictionary: Partial): Translations => diff --git a/src/i18n/i18n-util.sync.ts b/src/i18n/i18n-util.sync.ts index 9fab8dd7..30a7216f 100644 --- a/src/i18n/i18n-util.sync.ts +++ b/src/i18n/i18n-util.sync.ts @@ -14,6 +14,7 @@ import pt_br from './pt-br' import tr from './tr' import vi from './vi' import zh_cn from './zh-cn' +import it from './it' const localeTranslations = { de, @@ -25,6 +26,7 @@ const localeTranslations = { tr, vi, 'zh-cn': zh_cn, + it, } export const loadLocale = (locale: Locales): void => { diff --git a/src/i18n/i18n-util.ts b/src/i18n/i18n-util.ts index 4eed55b7..d7fe786f 100644 --- a/src/i18n/i18n-util.ts +++ b/src/i18n/i18n-util.ts @@ -15,6 +15,7 @@ export const locales: Locales[] = [ 'en', 'es', 'fr', + 'it', 'ja', 'pt-br', 'tr', diff --git a/src/i18n/it/index.ts b/src/i18n/it/index.ts new file mode 100644 index 00000000..553f4c3b --- /dev/null +++ b/src/i18n/it/index.ts @@ -0,0 +1,180 @@ +import type { BaseTranslation } from '../i18n-types'; + +const it = { + addConnection: 'Aggiungi Connessione', + allowConnections: 'Modifica le impostazioni del server per consentire le connessioni da', + allowMixedContent: 'Permetti contenuti misti', + apiKey: 'API key', + areYouSureYouWantToDeleteAllKnowledge: 'Sei sicuro di voler eliminare tutte le knowledge?', + areYouSureYouWantToDeleteAllSessions: 'Sei sicuro di voler eliminare tutte le sessioni?', + areYouSureYouWantToDeleteAllPreferences: 'Sei sicuro di voler eliminare tutte le preferenze?', + areYouSureYouWantToDeleteAllServers: 'Sei sicuro di voler eliminare tutti i server?', + areYouSureYouWantToImportData: + 'Sei sicuro di voler importare? Questo sovrascriverà ogni dato esistente', + areYouSureYouWantToLeave: 'Sei sicuro di voler uscire?\nI progressi completati verranno persi', + assistant: 'Assistente', + attachImage: 'Allega Immagine', + automatic: 'Auto', + automaticallyCheckForUpdates: 'Controlla aggiornamenti automaticamente', + availableModels: 'Modelli disponibili', + baseUrl: 'Base URL', + browseModels: 'Esplora i modelli disponibili', + cancel: 'Cancel', + cantConnectToOllamaServer: "Non riesco a connettermi al serve Ollama", + checkBrowserExtensions: 'Also check no browser extensions are blocking the connection', + checkingForUpdates: 'Controllo aggiornamenti...', + checkNow: 'Controlla adesso', + clear: 'Clear', + confirmDeletion: 'Conferma cancellazione', + confirmEdit: 'Conferma modifica', + connectionType: 'Tipo di connessione', + connectionLabelHelp: 'Identifica la connessione dalla lista dei modelli', + connecting: 'Connessione...', + connectionIsVerified: 'Connessione verificata e pronta all\'uso', + connectionFailedToVerify: + 'Verifica connessione fallita, controlla le impostazioni e riprova', + content: 'Contenuto', + controls: 'Controlli', + controlsOnlyAvailableForOllama: + 'Controlli avanzati sono al momento disponibili solo per modelli Ollama', + copy: 'Copia', + couldntCheckForUpdates: "Impossibile controllare gli aggiornamenti in modo automatico", + couldntConnectToOllamaServer: "Connessione al server Ollama non riuscita", + creatingTunnel: 'Creo un tunnel', + currentVersion: 'Versione corrente', + dangerZone: 'Zona pericolosa', + dark: 'Scuro', + delete: 'Cancella', + deleteKnowledge: 'Cancella knowledge', + deleteServer: 'Cancella server', + deleteSession: 'Cancella sessione', + disconnected: 'Disconnetti', + dismiss: 'Dismiss', + downloadModel: 'Download modello', + edit: 'Modifica', + editTitle: 'Modifica titolo', + emptyKnowledge: 'Nessuna knowledge', + emptySessions: 'Nessuna sessione', + error: 'Errore', + export: 'Esporta', + f16Kv: 'F16 KV', + frequencyPenalty: 'Frequency penalty', + genericError: 'Ci dispiace, qualcosa è andato storto', + goToDownloads: 'Vai a downloads', + goToKnowledge: 'Vai a knowledge', + goToReleases: 'Vai a releases', + howToObtainOpenAIKey: 'Come ottenere un\'API key da OpenAI?', + howToUpdateDocker: 'Come aggiornare un container Docker?', + import: 'Importa', + interface: 'Interfaccia', + internalServerError: 'Si è verificato un errore interno del server, perfavore riprova più tardi', + isCurrentVersionLatest: 'Stai usando l\'ultima versione', + isLatestVersion: 'Una versione più recente è disponibile', + knowledge: 'Knowledge', + knowledgeSaved: 'Knowledge salvata', + label: 'Etichetta', + language: 'Lingua', + lastUsedModels: 'Modelli usati di recente', + light: 'Chiaro', + lowVram: 'Low VRAM', + mainGpu: 'Main GPU', + messageOfTheDay: 'Message of the day', + messages: 'Messaggi', + minP: 'Min P', + mirostat: 'Mirostat', + mirostatEta: 'Mirostat ETA', + mirostatTau: 'Mirostat Tau', + modelNotFound: 'Modello non trovato', + modelOptions: 'Opzioni modello', + modelWasDownloaded: '{model:string} è stato scaricato', + modelsFilter: 'Filtro nome modello', + modelsFilterHelp: "Nasconde i nomi dei modelli che non cominciano per il filtro", + motd: 'Motd', + name: 'Nome', + newKnowledge: 'Nuova knowledge', + newSession: 'Nuova sessione', + noApiKey: 'No API key', + noKnowledgeChosen: 'Crea una nuova knowledge o scegline una dalla lista', + noRecentModels: 'Nessun modello usato di recente', + noServerConnections: 'Nessuna connessione verso il server, aggiungine una per cominciare', + noSessionChosen: 'Crea una sessione o scegline una esistente dalla lista', + notFound: 'La pagina che stai cercando non esiste', + numBatch: 'Num batch', + numCtx: 'Context size', + numGpu: 'Num GPU', + numKeep: 'Num keep', + numPredict: 'Num predict', + numThread: 'Number of threads', + numa: 'NUMA', + ollama: 'Ollama', + ollamaLibrary: "Libreria di Ollama", + openAIOfficialAPI: 'OpenAI: API ufficiale', + openAICompatible: 'OpenAI: Server compatibile (es. llama.cpp)', + otherModels: 'Altri modelli', + penalizeNewline: 'Penalizza newline', + preferences: 'Preferenze', + presencePenalty: 'Presence penalty', + prompt: 'Prompt', + promptPlaceholder: 'Scrivi qualsiasi cosa', + pullModel: 'Pull model', + pullModelPlaceholder: 'Tag modello (es. llama3.1)', + pullingModel: 'Pull modello', + random: 'Casuale', + reasoning: 'Ragionando', + refreshToUpdate: 'Ricarica per aggiornare', + releaseHistory: 'Cronologia release', + repeatLastN: 'Repeat last N', + repeatPenalty: 'Repeat penalty', + retry: 'Riprova', + run: 'Esegui', + reVerify: 'Ri-Verifica', + runtimeOptions: 'Opzioni runtime', + save: 'Salva', + search: 'Cerca', + searchEmpty: 'Nessun risultato', + seed: 'Seed', + seeDocs: 'Vedi documentazione', + servers: 'Server', + serverSettingsUpdated: + 'La configurazione del server è stata aggiornata e deve ri-verificata nuovamente in \"Impostazioni\"', + session: 'Sessione', + sessions: 'Sessioni', + settings: 'Impostazioni', + somethingWentWrong: 'Ci dispiace, qualcosa è andato storto', + stop: 'Stop sequence', + stopCompletion: 'Interrompi completamento', + stopResponse: 'Interrompi risposta', + success: 'Success', + system: 'Sistema', + systemPrompt: 'Prompt di sistema', + temperature: 'Temperatura', + tfsZ: 'TFS Z', + topK: 'Top K', + topP: 'Top P', + tryingToConnectNotLocalhost: + 'Se ti vuoi connettere a un server Ollama che non è disponibile su {hostname:string} oppure {ip:string} prova', + typicalP: 'Typical P', + unsavedChangesWillBeLost: 'Hai cambiamenti non salvati che potrebbero andare persi. Continuare?', + useMlock: 'Usa MLOCK', + useMmap: 'Usa MMAP', + useModelsFromThisServer: 'Usa modelli da questo server', + verify: 'Verifica', + version: 'Versione', + vocabOnly: 'Vocab only', + writePromptToStart: 'Scrivi un prompt per cominciare una nuova sessione', + you: 'Tu', + copiedNotPrivate: 'Contenuto copiato, ma la tua connessione non è privata', + notCopiedNotPrivate: "Non posso copiare il contenuto. La connessione non è privata", + importSuccess: 'Importato con successo', + importError: 'Importazione fallita', + deleteSuccess: 'Cancellato con successo', + serversDescription: 'Connessioni, filtri modelli ed etichette', + preferencesDescription: 'Lingua, tema, modelli usati di recente, etc', + sessionsDescription: 'Tutta la cronologia di sessione, allegati e impostazioni personalizzate dei modelli', + knowledgeDescription: 'Tutta la knowledge base', + expandSidebar: 'Espandi sidebar', + collapseSidebar: 'Comprimi sidebar', + thinkDescription: 'Abilita la thinking mode sul modello' +} satisfies BaseTranslation; + +export default it; diff --git a/src/i18n/ja/index.ts b/src/i18n/ja/index.ts index 09c260bb..d7714d0a 100644 --- a/src/i18n/ja/index.ts +++ b/src/i18n/ja/index.ts @@ -98,7 +98,8 @@ const ja = { 'もし {hostname:string} や {ip:string} から利用できないOllamaのサーバーに接続したい場合は、次を試してください', version: 'バージョン', writePromptToStart: '新しいセッションを開始するには、プロンプトを入力してください', - you: 'あなた' + you: 'あなた', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default ja; diff --git a/src/i18n/pt-br/index.ts b/src/i18n/pt-br/index.ts index 3db17d0e..f1d82c96 100644 --- a/src/i18n/pt-br/index.ts +++ b/src/i18n/pt-br/index.ts @@ -93,7 +93,8 @@ const pt_br = { 'Deseja conectar a um servidor do Ollama que não está disponível em {hostname:string} ou {ip:string} tente', version: 'Versão', writePromptToStart: 'Escreva um prompt para iniciar uma nova sessão', - you: 'Você' + you: 'Você', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default pt_br; diff --git a/src/i18n/tr/index.ts b/src/i18n/tr/index.ts index 4fb9dc10..9b12cf4a 100644 --- a/src/i18n/tr/index.ts +++ b/src/i18n/tr/index.ts @@ -92,7 +92,8 @@ const tr = { '{hostname:string} veya {ip:string} konumlarında bulunmayan bir Ollama sunucuna bağlanmak istiyorsanız şunu deneyin:', version: 'Sürüm', writePromptToStart: 'Bir komut yazarak yeni bir oturum başlat', - you: 'Sen' + you: 'Sen', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default tr; diff --git a/src/i18n/vi/index.ts b/src/i18n/vi/index.ts index 3e35e701..7fa38289 100644 --- a/src/i18n/vi/index.ts +++ b/src/i18n/vi/index.ts @@ -105,7 +105,8 @@ const vi = { version: 'Phiên bản', vocabOnly: 'Chỉ từ vựng', writePromptToStart: 'Viết một câu hỏi để bắt đầu phiên mới', - you: 'Bạn' + you: 'Bạn', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default vi; diff --git a/src/i18n/zh-cn/index.ts b/src/i18n/zh-cn/index.ts index 597b2b98..7e4a56ef 100644 --- a/src/i18n/zh-cn/index.ts +++ b/src/i18n/zh-cn/index.ts @@ -120,7 +120,8 @@ const zh_cn = { verify: '验证', version: '版本', writePromptToStart: '写一段提示词以开始新会话', - you: '你' + you: '你', + thinkDescription: 'Enable thinking on model' } satisfies BaseTranslation; export default zh_cn; diff --git a/src/lib/chat/index.ts b/src/lib/chat/index.ts index e6d9af2e..263051c7 100644 --- a/src/lib/chat/index.ts +++ b/src/lib/chat/index.ts @@ -15,6 +15,7 @@ export interface Message { export interface ChatRequest { model: string; messages: Message[]; + think?: boolean; stream?: boolean; options?: Partial; } diff --git a/src/lib/sessions.ts b/src/lib/sessions.ts index 9c48c605..c573595f 100644 --- a/src/lib/sessions.ts +++ b/src/lib/sessions.ts @@ -23,6 +23,7 @@ export interface Session { systemPrompt: Message; options: Partial; model?: Model; + think: boolean; updatedAt?: string; title?: string; } @@ -63,7 +64,8 @@ export const loadSession = (id: string): Session => { // created before this feature was implemented need to be set to the defaults. // Over time we can probably remove them. options: existingSession.options || {}, - systemPrompt: existingSession.systemPrompt || defaultSystemPrompt + systemPrompt: existingSession.systemPrompt || defaultSystemPrompt, + think: existingSession.think || false }; } } @@ -78,6 +80,7 @@ export const loadSession = (id: string): Session => { model, systemPrompt: defaultSystemPrompt, updatedAt: new Date().toISOString(), + think: false, messages: [], options: {} }; diff --git a/src/routes/sessions/[id]/+page.svelte b/src/routes/sessions/[id]/+page.svelte index edeaca84..fa61a6d7 100644 --- a/src/routes/sessions/[id]/+page.svelte +++ b/src/routes/sessions/[id]/+page.svelte @@ -182,6 +182,7 @@ let chatRequest: ChatRequest = { model: session.model.name, options: session.options, + think: session.think, messages: chatMessagesForRequest }; diff --git a/src/routes/sessions/[id]/Prompt.svelte b/src/routes/sessions/[id]/Prompt.svelte index d1debd3a..7f85ff73 100644 --- a/src/routes/sessions/[id]/Prompt.svelte +++ b/src/routes/sessions/[id]/Prompt.svelte @@ -1,5 +1,5 @@