Merge branch 'master' of github.com:Mintplex-Labs/anything-llm into render

This commit is contained in:
timothycarambat 2024-08-02 13:30:48 -07:00
commit 0938850435
13 changed files with 614 additions and 38 deletions

View File

@ -76,7 +76,7 @@
] ]
} }
}, },
"updateContentCommand": "yarn setup", "updateContentCommand": "cd server && yarn && cd ../collector && PUPPETEER_DOWNLOAD_BASE_URL=https://storage.googleapis.com/chrome-for-testing-public yarn && cd ../frontend && yarn && cd .. && yarn setup:envs && yarn prisma:setup && echo \"Please run yarn dev:server, yarn dev:collector, and yarn dev:frontend in separate terminal tabs.\"",
// Use 'postCreateCommand' to run commands after the container is created. // Use 'postCreateCommand' to run commands after the container is created.
// This configures VITE for github codespaces // This configures VITE for github codespaces
"postCreateCommand": "if [ \"${CODESPACES}\" = \"true\" ]; then echo 'VITE_API_BASE=\"https://$CODESPACE_NAME-3001.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN/api\"' > ./frontend/.env; fi", "postCreateCommand": "if [ \"${CODESPACES}\" = \"true\" ]; then echo 'VITE_API_BASE=\"https://$CODESPACE_NAME-3001.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN/api\"' > ./frontend/.env; fi",

View File

@ -20,6 +20,7 @@ on:
- '.vscode/**/*' - '.vscode/**/*'
- '**/.env.example' - '**/.env.example'
- '.github/ISSUE_TEMPLATE/**/*' - '.github/ISSUE_TEMPLATE/**/*'
- '.devcontainer/**/*'
- 'embed/**/*' # Embed should be published to frontend (yarn build:publish) if any changes are introduced - 'embed/**/*' # Embed should be published to frontend (yarn build:publish) if any changes are introduced
- 'server/utils/agents/aibitat/example/**/*' # Do not push new image for local dev testing of new aibitat images. - 'server/utils/agents/aibitat/example/**/*' # Do not push new image for local dev testing of new aibitat images.

View File

@ -35,6 +35,7 @@ export default function GeminiLLMOptions({ settings }) {
"gemini-1.0-pro", "gemini-1.0-pro",
"gemini-1.5-pro-latest", "gemini-1.5-pro-latest",
"gemini-1.5-flash-latest", "gemini-1.5-flash-latest",
"gemini-1.5-pro-exp-0801",
].map((model) => { ].map((model) => {
return ( return (
<option key={model} value={model}> <option key={model} value={model}>

View File

@ -2,8 +2,9 @@ import React, { useEffect, useState } from "react";
import System from "@/models/system"; import System from "@/models/system";
import PreLoader from "@/components/Preloader"; import PreLoader from "@/components/Preloader";
import { OLLAMA_COMMON_URLS } from "@/utils/constants"; import { OLLAMA_COMMON_URLS } from "@/utils/constants";
import { CaretDown, CaretUp } from "@phosphor-icons/react"; import { CaretDown, CaretUp, Info } from "@phosphor-icons/react";
import useProviderEndpointAutoDiscovery from "@/hooks/useProviderEndpointAutoDiscovery"; import useProviderEndpointAutoDiscovery from "@/hooks/useProviderEndpointAutoDiscovery";
import { Tooltip } from "react-tooltip";
export default function OllamaLLMOptions({ settings }) { export default function OllamaLLMOptions({ settings }) {
const { const {
@ -18,15 +19,13 @@ export default function OllamaLLMOptions({ settings }) {
initialBasePath: settings?.OllamaLLMBasePath, initialBasePath: settings?.OllamaLLMBasePath,
ENDPOINTS: OLLAMA_COMMON_URLS, ENDPOINTS: OLLAMA_COMMON_URLS,
}); });
const [performanceMode, setPerformanceMode] = useState(
settings?.OllamaLLMPerformanceMode || "base"
);
const [maxTokens, setMaxTokens] = useState( const [maxTokens, setMaxTokens] = useState(
settings?.OllamaLLMTokenLimit || 4096 settings?.OllamaLLMTokenLimit || 4096
); );
const handleMaxTokensChange = (e) => {
setMaxTokens(Number(e.target.value));
};
return ( return (
<div className="w-full flex flex-col gap-y-7"> <div className="w-full flex flex-col gap-y-7">
<div className="w-full flex items-start gap-[36px] mt-1.5"> <div className="w-full flex items-start gap-[36px] mt-1.5">
@ -46,7 +45,7 @@ export default function OllamaLLMOptions({ settings }) {
defaultChecked="4096" defaultChecked="4096"
min={1} min={1}
value={maxTokens} value={maxTokens}
onChange={handleMaxTokensChange} onChange={(e) => setMaxTokens(Number(e.target.value))}
onScroll={(e) => e.target.blur()} onScroll={(e) => e.target.blur()}
required={true} required={true}
autoComplete="off" autoComplete="off"
@ -64,7 +63,7 @@ export default function OllamaLLMOptions({ settings }) {
}} }}
className="text-white hover:text-white/70 flex items-center text-sm" className="text-white hover:text-white/70 flex items-center text-sm"
> >
{showAdvancedControls ? "Hide" : "Show"} Manual Endpoint Input {showAdvancedControls ? "Hide" : "Show"} advanced settings
{showAdvancedControls ? ( {showAdvancedControls ? (
<CaretUp size={14} className="ml-1" /> <CaretUp size={14} className="ml-1" />
) : ( ) : (
@ -134,12 +133,57 @@ export default function OllamaLLMOptions({ settings }) {
className="underline text-blue-300" className="underline text-blue-300"
href="https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-keep-a-model-loaded-in-memory-or-make-it-unload-immediately" href="https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-keep-a-model-loaded-in-memory-or-make-it-unload-immediately"
target="_blank" target="_blank"
rel="noreferrer"
> >
{" "} {" "}
Learn more &rarr; Learn more &rarr;
</a> </a>
</p> </p>
</div> </div>
<div className="flex flex-col w-60">
<label className="text-white text-sm font-semibold mb-2 flex items-center">
Performance Mode
<Info
size={16}
className="ml-2 text-white"
data-tooltip-id="performance-mode-tooltip"
/>
</label>
<select
name="OllamaLLMPerformanceMode"
required={true}
className="bg-zinc-900 border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
value={performanceMode}
onChange={(e) => setPerformanceMode(e.target.value)}
>
<option value="base">Base (Default)</option>
<option value="maximum">Maximum</option>
</select>
<p className="text-xs leading-[18px] font-base text-white text-opacity-60 mt-2">
Choose the performance mode for the Ollama model.
</p>
<Tooltip
id="performance-mode-tooltip"
place="bottom"
className="tooltip !text-xs max-w-xs"
>
<p className="text-red-500">
<strong>Note:</strong> Only change this setting if you
understand its implications on performance and resource usage.
</p>
<br />
<p>
<strong>Base:</strong> Ollama automatically limits the context
to 2048 tokens, reducing VRAM usage. Suitable for most users.
</p>
<br />
<p>
<strong>Maximum:</strong> Uses the full context window (up to
Max Tokens). May increase VRAM usage significantly.
</p>
</Tooltip>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -16,6 +16,7 @@ const PROVIDER_DEFAULT_MODELS = {
"gemini-1.0-pro", "gemini-1.0-pro",
"gemini-1.5-pro-latest", "gemini-1.5-pro-latest",
"gemini-1.5-flash-latest", "gemini-1.5-flash-latest",
"gemini-1.5-pro-exp-0801",
], ],
anthropic: [ anthropic: [
"claude-instant-1.2", "claude-instant-1.2",

View File

@ -0,0 +1,498 @@
const TRANSLATIONS = {
common: {
"workspaces-name": "Nome delle aree di lavoro",
error: "errore",
success: "successo",
user: "Utente",
selection: "Selezione del modello",
saving: "Salvo...",
save: "Salva modifiche",
previous: "Pagina precedente",
next: "Pagina successiva",
},
// Setting Sidebar menu items.
settings: {
title: "Impostazioni istanza",
system: "Impostazioni generali",
invites: "Inviti",
users: "Utenti",
workspaces: "Aree di lavoro",
"workspace-chats": "Chat dell'area di lavoro",
customization: "Personalizzazione",
"api-keys": "API Sviluppatore",
llm: "LLM",
transcription: "Trascrizione",
embedder: "Embedder",
"text-splitting": "Suddivisione di testo & Chunking",
"voice-speech": "Voce & discorso",
"vector-database": "Database Vettoriale",
embeds: "Chat incorporata",
"embed-chats": "Storico chat incorporata",
security: "Sicurezza",
"event-logs": "Log degli eventi",
privacy: "Privacy & Dati",
"ai-providers": "AI Providers",
"agent-skills": "Abilità dell'agente",
admin: "Admin",
tools: "Strumenti",
"experimental-features": "Caratteristiche sperimentali",
contact: "Contatta il Supporto",
},
// Page Definitions
login: {
"multi-user": {
welcome: "Benvenuto in",
"placeholder-username": "Username",
"placeholder-password": "Password",
login: "Login",
validating: "Verifica in corso...",
"forgot-pass": "Password dimenticata",
reset: "Reset",
},
"sign-in": {
start: "Accedi al tuo",
end: "account.",
},
"password-reset": {
title: "Password Reset",
description:
"Fornisci le informazioni necessarie qui sotto per reimpostare la tua password.",
"recovery-codes": "Codici di recupero",
"recovery-code": "Codice di recupero {{index}}",
"back-to-login": "Torna al Login",
},
},
welcomeMessage: {
part1:
"Benvenuti in AnythingLLM, AnythingLLM è uno strumento di intelligenza artificiale open source di Mintplex Labs che trasforma qualsiasi cosa in un chatbot addestrato con cui puoi effettuare query e chattare. AnythingLLM è un software BYOK (bring-your-own-keys), quindi non ci sono abbonamenti, commissioni o costi per questo software al di fuori dei servizi che vuoi utilizzare.",
part2:
"AnythingLLM è il modo più semplice per mettere insieme potenti prodotti di intelligenza artificiale come OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB e altri servizi in un pacchetto ordinato e senza problemi per aumentare la tua produttività di 100 volte.",
part3:
"AnythingLLM può essere eseguito completamente in locale sulla tua macchina con un overhead minimo, non ti accorgerai nemmeno che c'è! Non serve GPU. Sono disponibili anche installazioni cloud e on-premise.\nL'ecosistema degli strumenti di intelligenza artificiale diventa ogni giorno più potente. AnythingLLM lo rende facile da usare.",
githubIssue: "Apri una issue su Github",
user1: "Come posso iniziare?!",
part4:
'È semplice. Tutte le raccolte sono organizzate in contenitori che chiamiamo "Aree di lavoro". Le aree di lavoro sono contenitori di file, documenti, immagini, PDF e altri file che verranno trasformati in qualcosa che gli LLM possono comprendere e utilizzare nella conversazione.\n\nPuoi aggiungere e rimuovere file in qualsiasi momento.',
createWorkspace: "Crea la tua prima area di lavoro",
user2:
"È come Dropbox AI o qualcosa del genere? E le chat? È un chatbot, non è vero?",
part5:
"AnythingLLM è migliore di un Dropbox più smart.\n\nAnythingLLM offre due modi di comunicare con i tuoi dati:\n\n<i>Query:</i> Le tue chat restituiranno dati o inferenze trovate con i documenti nella tua area di lavoro a cui ha accesso. Aggiungere più documenti all'area di lavoro lo rende più intelligente! \n\n<i>Conversazionale:</i> i tuoi documenti + la cronologia delle chat in corso contribuiscono entrambi alla conoscenza dell'LLM allo stesso tempo. Ottimo per aggiungere informazioni basate su testo in tempo reale o correzioni e incomprensioni che l'LLM potrebbe avere. \n\nPuoi passare da una modalità all'altra \n<i>nel mezzo della chat!</i>",
user3: "Wow, sembra fantastico, fammi provare!",
part6: "Divertiti!",
starOnGithub: "Metti una stella su GitHub",
contact: "Contatta Mintplex Labs",
},
"new-workspace": {
title: "Nuova area di lavoro",
placeholder: "La mia area di lavoro",
},
// Workspace Settings menu items
"workspaces—settings": {
general: "Impostazioni generali",
chat: "Impostazioni Chat",
vector: "Database vettoriale",
members: "Membri",
agent: "Configurazione dell'agente",
},
// General Appearance
general: {
vector: {
title: "Contatore dei vettori",
description: "Numero totale di vettori nel tuo database vettoriale.",
},
names: {
description:
"Questo cambierà solo il nome visualizzato della tua area di lavoro.",
},
message: {
title: "Messaggi Chat suggeriti",
description:
"Personalizza i messaggi che verranno suggeriti agli utenti della tua area di lavoro.",
add: "Aggiungi un nuovo messaggio",
save: "Salva messaggi",
heading: "Spiegami",
body: "i vantaggi di AnythingLLM",
},
pfp: {
title: "Immagine del profilo dell'assistente",
description:
"Personalizza l'immagine del profilo dell'assistente per quest'area di lavoro.",
image: "Immagine dell'area di lavoro",
remove: "Rimuovi immagine dell'area di lavoro",
},
delete: {
title: "Elimina area di lavoro",
description:
"Elimina quest'area di lavoro e tutti i suoi dati. Ciò eliminerà l'area di lavoro per tutti gli utenti.",
delete: "Elimina area di lavoro",
deleting: "Eliminazione dell'area di lavoro...",
"confirm-start": "Stai per eliminare l'intera",
"confirm-end":
"area di lavoro. Verranno rimossi tutti gli embeddings vettoriali nel tuo database vettoriale.\n\nI file sorgente originali rimarranno intatti. Questa azione è irreversibile.",
},
},
// Chat Settings
chat: {
llm: {
title: "LLM Provider dell'area di lavoro",
description:
"Il provider LLM e il modello specifici che verranno utilizzati per quest'area di lavoro. Per impostazione predefinita, utilizza il provider LLM e le impostazioni di sistema.",
search: "Cerca tutti i provider LLM",
},
model: {
title: "Modello di chat dell'area di lavoro",
description:
"Il modello di chat specifico che verrà utilizzato per quest'area di lavoro. Se vuoto, utilizzerà l'LLM di sistema.",
wait: "-- in attesa dei modelli --",
},
mode: {
title: "Modalità chat",
chat: {
title: "Chat",
"desc-start": "fornirà risposte con la conoscenza generale dell'LLM",
and: "e",
"desc-end": "contesto documentale associato.",
},
query: {
title: "Query",
"desc-start": "fornirà risposte",
only: "solo",
"desc-end": "se sarà presente un contesto documentale",
},
},
history: {
title: "Chat History",
"desc-start":
"Numero di chat precedenti che verranno incluse nella memoria a breve termine della risposta.",
recommend: "Recommend 20. ",
"desc-end":
"Un numero superiore a 45 potrebbe causare continui errori nella chat, a seconda delle dimensioni del messaggio.",
},
prompt: {
title: "Prompt",
description:
"Il prompt che verrà utilizzato in quest'area di lavoro. Definisci il contesto e le istruzioni affinché l'IA generi una risposta. Dovresti fornire un prompt elaborato con cura in modo che l'IA possa generare una risposta pertinente e accurata.",
},
refusal: {
title: "Risposta al rifiuto nella modalità di query",
"desc-start": "Quando la modalità",
query: "query",
"desc-end":
"è attiva, potresti voler restituire una risposta di rifiuto personalizzata quando non viene trovato alcun contesto.",
},
temperature: {
title: "Temperatura LLM",
"desc-start":
'Questa impostazione controlla il livello di "creatività" delle risposte dell\'LLM.',
"desc-end":
"Più alto è il numero, più è creativo. Per alcuni modelli questo può portare a risposte incoerenti se troppo elevato.",
hint: "La maggior parte degli LLM ha vari intervalli accettabili di valori validi. Consulta il tuo fornitore LLM per queste informazioni.",
},
},
// Vector Database
"vector-workspace": {
identifier: "Identificatore del database vettoriale",
snippets: {
title: "Numero massimo di frammenti di contesto",
description:
"Questa impostazione controlla la quantità massima di frammenti di contesto che verranno inviati all'LLM per ogni chat o query.",
recommend: "Raccomandato: 4",
},
doc: {
title: "Soglia di similarità del documento",
description:
"Punteggio di similarità minimo richiesto affinché una fonte sia considerata correlata alla chat. Più alto è il numero, più la fonte deve essere simile alla chat.",
zero: "Nessuna restrizione",
low: "Basso (punteggio di similarità ≥ .25)",
medium: "Medio (punteggio di similarità ≥ .50)",
high: "Alto (punteggio di similarità ≥ .75)",
},
reset: {
reset: "Reimposta database vettoriale",
resetting: "Cancellazione vettori...",
confirm:
"Stai per reimpostare il database vettoriale di quest'area di lavoro. Questa operazione rimuoverà tutti gli embedding vettoriali attualmente incorporati.\n\nI file sorgente originali rimarranno intatti. Questa azione è irreversibile.",
error:
"Impossibile reimpostare il database vettoriale dell'area di lavoro!",
success:
"Il database vettoriale dell'area di lavoro è stato reimpostato!",
},
},
// Agent Configuration
agent: {
"performance-warning":
"Le prestazioni degli LLM che non supportano esplicitamente la chiamata degli strumenti dipendono in larga misura dalle capacità e dalla precisione del modello. Alcune capacità potrebbero essere limitate o non funzionali.",
provider: {
title: "Provider LLM dell'agente dell'area di lavoro",
description:
"Il provider e il modello LLM specifici che verranno utilizzati per l'agente @agent di quest'area di lavoro.",
},
mode: {
chat: {
title: "Modello di chat dell'agente dell'area di lavoro",
description:
"Il modello di chat specifico che verrà utilizzato per l'agente @agent di quest'area di lavoro.",
},
title: "Modello dell'agente dell'area di lavoro",
description:
"Il modello LLM specifico che verrà utilizzato per l'agente @agent di quest'area di lavoro.",
wait: "-- in attesa dei modelli --",
},
skill: {
title: "Abilità predefinite dell'agente",
description:
"Migliora le capacità naturali dell'agente predefinito con queste abilità predefinite. Questa configurazione si applica a tutte le aree di lavoro.",
rag: {
title: "RAG e memoria a lungo termine",
description:
"Consenti all'agente di sfruttare i tuoi documenti locali per rispondere a una query o chiedi all'agente di \"ricordare\" parti di contenuto per il recupero della memoria a lungo termine.",
},
view: {
title: "Visualizza e riepiloga i documenti",
description:
"Consenti all'agente di elencare e riepilogare il contenuto dei file dell'area di lavoro attualmente incorporati.",
},
scrape: {
title: "Esplora siti Web",
description:
"Consenti all'agente di visitare ed eseguire lo scraping del contenuto dei siti Web.",
},
generate: {
title: "Genera grafici",
description:
"Consenti all'agente predefinito di generare vari tipi di grafici dai dati forniti o forniti nella chat.",
},
save: {
title: "Genera e salva file nel browser",
description:
"Abilita l'agente predefinito per generare e scrivere su file che possono essere salvati e scaricati nel tuo browser.",
},
web: {
title: "Ricerca e navigazione web in tempo reale",
"desc-start":
"Abilita il tuo agente a cercare sul web per rispondere alle tue domande connettendosi a un provider di ricerca web (SERP).",
"desc-end":
"La ricerca web durante le sessioni dell'agente non funzionerà finché non verrà impostata.",
},
},
},
// Workspace Chats
recorded: {
title: "Chat dell'area di lavoro",
description:
"Queste sono tutte le chat e i messaggi registrati che sono stati inviati dagli utenti ordinati in base alla data di creazione.",
export: "Esporta",
table: {
id: "Id",
by: "Inviato da",
workspace: "Area di lavoro",
prompt: "Prompt",
response: "Risposta",
at: "Inviato a",
},
},
// Appearance
appearance: {
title: "Aspetto",
description:
"Personalizza le impostazioni di aspetto della tua piattaforma.",
logo: {
title: "Personalizza logo",
description:
"Carica il tuo logo personalizzato per rendere tuo il chatbot.",
add: "Aggiungi un logo personalizzato",
recommended: "Dimensioni consigliate: 800 x 200",
remove: "Rimuovi",
replace: "Sostituisci",
},
message: {
title: "Personalizza messaggi",
description:
"Personalizza i messaggi automatici visualizzati dai tuoi utenti.",
new: "Nuovo",
system: "sistema",
user: "utente",
message: "messaggio",
assistant: "Assistente chat AnythingLLM",
"double-click": "Fai doppio clic per modificare...",
save: "Salva messaggi",
},
icons: {
title: "Icone a piè di pagina personalizzate",
description:
"Personalizza le icone a piè di pagina visualizzate nella parte inferiore della barra laterale.",
icon: "Icona",
link: "Collegamento",
},
},
// API Keys
api: {
title: "Chiavi API",
description:
"Le chiavi API consentono al titolare di accedere e gestire in modo programmatico questa istanza AnythingLLM.",
link: "Leggi la documentazione API",
generate: "Genera nuova chiave API",
table: {
key: "Chiave API",
by: "Creato da",
created: "Creato",
},
},
llm: {
title: "Preferenza LLM",
description:
"Queste sono le credenziali e le impostazioni per il tuo provider di chat e embedding LLM preferito. È importante che queste chiavi siano aggiornate e corrette, altrimenti AnythingLLM non funzionerà correttamente.",
provider: "Provider LLM",
},
transcription: {
title: "Preferenza del modello di trascrizione",
description:
"Queste sono le credenziali e le impostazioni per il tuo fornitore di modelli di trascrizione preferito. È importante che queste chiavi siano aggiornate e corrette, altrimenti i file multimediali e l'audio non verranno trascritti.",
provider: "Provider di trascrizione",
"warn-start":
"L'utilizzo del modello whisper locale su macchine con RAM o CPU limitate può bloccare AnythingLLM durante l'elaborazione di file multimediali.",
"warn-recommend":
"Si consigliano almeno 2 GB di RAM e caricare file <10 Mb.",
"warn-end":
"Il modello integrato verrà scaricato automaticamente al primo utilizzo.",
},
embedding: {
title: "Preferenza di embedding",
"desc-start":
"Quando si utilizza un LLM che non supporta nativamente un motore di embedding, potrebbe essere necessario specificare credenziali aggiuntive per l'embedding del testo.",
"desc-end":
"L'embedding è il processo di trasformazione del testo in vettori. Queste credenziali sono necessarie per trasformare i file e i prompt in un formato che AnythingLLM può utilizzare per l'elaborazione.",
provider: {
title: "Provider di embedding",
description:
"Non è richiesta alcuna configurazione quando si utilizza il motore di embedding nativo di AnythingLLM.",
},
},
text: {
title: "Preferenze di suddivisione e suddivisione in blocchi del testo",
"desc-start":
"A volte, potresti voler cambiare il modo predefinito in cui i nuovi documenti vengono suddivisi e spezzettati in blocchi prima di essere inseriti nel tuo database vettoriale.",
"desc-end":
"Dovresti modificare questa impostazione solo se capisci come funziona la suddivisione del testo e i suoi effetti collaterali.",
"warn-start": "Le modifiche qui si applicheranno solo a",
"warn-center": "nuovi documenti incorporati",
"warn-end": ", non documenti esistenti.",
size: {
title: "Dimensioni blocco di testo",
description:
"Questa è la lunghezza massima di caratteri che possono essere presenti in un singolo vettore.",
recommend: "La lunghezza massima del modello di embedding è",
},
overlap: {
title: "Sovrapposizione blocco di testo",
description:
"Questa è la sovrapposizione massima di caratteri che si verifica durante la suddivisione in blocchi tra due porzioni di testo adiacenti.",
},
},
// Vector Database
vector: {
title: "Database vettoriale",
description:
"Queste sono le credenziali e le impostazioni per il funzionamento della tua istanza AnythingLLM. È importante che queste chiavi siano aggiornate e corrette.",
provider: {
title: "Provider del database vettoriale",
description: "Non è richiesta alcuna configurazione per LanceDB.",
},
},
// Embeddable Chat Widgets
embeddable: {
title: "Widget di chat incorporabili",
description:
"I widget di chat incorporabili sono interfacce di chat pubbliche che sono collegate a una singola area di lavoro. Queste ti consentono di creare aree di lavoro che puoi poi pubblicare ovunque.",
create: "Crea embedding",
table: {
workspace: "Area di lavoro",
chats: "Chat inviate",
Active: "Domini attivi",
},
},
"embed-chats": {
title: "Chat incorporate",
description:
"Queste sono tutte le chat e i messaggi registrati da qualsiasi embedding che hai pubblicato.",
table: {
embed: "Incorpora",
sender: "Mittente",
message: "Messaggio",
response: "Risposta",
at: "Inviato a",
},
},
multi: {
title: "Modalità multi-utente",
description:
"Imposta la tua istanza per supportare il tuo team attivando la modalità multi-utente.",
enable: {
"is-enable": "La modalità multi-utente è abilitata",
enable: "Abilita la modalità multi-utente",
description:
"Per impostazione predefinita, sarai l'unico amministratore. Come amministratore dovrai creare account per tutti i nuovi utenti o amministratori. Non perdere la tua password poiché solo un utente amministratore può reimpostare le password.",
username: "Nome utente account amministratore",
password: "Password account amministratore",
},
password: {
title: "Protezione password",
description:
"Proteggi la tua istanza AnythingLLM con una password. Se la dimentichi, non esiste un metodo di recupero, quindi assicurati di salvare questa password.",
},
instance: {
title: "Protezione password istanza",
description:
"Per impostazione predefinita, sarai l'unico amministratore. Come amministratore dovrai creare account per tutti i nuovi utenti o amministratori. Non perdere la tua password poiché solo un utente amministratore può reimpostare le password.",
password: "Password istanza",
},
},
// Event Logs
event: {
title: "Registro eventi",
description:
"Visualizza tutte le azioni e gli eventi che si verificano su questa istanza per il monitoraggio.",
clear: "Cancella registri eventi",
table: {
type: "Tipo di evento",
user: "Utente",
occurred: "Si è verificato alle",
},
},
// Privacy & Data-Handling
privacy: {
title: "Privacy e gestione dei dati",
description:
"Questa è la tua configurazione per il modo in cui i provider terzi connessi e AnythingLLM gestiscono i tuoi dati.",
llm: "Selezione LLM",
embedding: "Preferenza di embedding",
vector: "Database vettoriale",
anonymous: "Telemetria anonima abilitata",
},
};
export default TRANSLATIONS;

View File

@ -20,6 +20,7 @@ import Spanish from "./es/common.js";
import French from "./fr/common.js"; import French from "./fr/common.js";
import Mandarin from "./zh/common.js"; import Mandarin from "./zh/common.js";
import Russian from "./ru/common.js"; import Russian from "./ru/common.js";
import Italian from "./it/common.js";
export const defaultNS = "common"; export const defaultNS = "common";
export const resources = { export const resources = {
@ -41,4 +42,7 @@ export const resources = {
ru: { ru: {
common: Russian, common: Russian,
}, },
it: {
common: Italian,
},
}; };

View File

@ -417,6 +417,7 @@ const SystemSettings = {
OllamaLLMModelPref: process.env.OLLAMA_MODEL_PREF, OllamaLLMModelPref: process.env.OLLAMA_MODEL_PREF,
OllamaLLMTokenLimit: process.env.OLLAMA_MODEL_TOKEN_LIMIT, OllamaLLMTokenLimit: process.env.OLLAMA_MODEL_TOKEN_LIMIT,
OllamaLLMKeepAliveSeconds: process.env.OLLAMA_KEEP_ALIVE_TIMEOUT ?? 300, OllamaLLMKeepAliveSeconds: process.env.OLLAMA_KEEP_ALIVE_TIMEOUT ?? 300,
OllamaLLMPerformanceMode: process.env.OLLAMA_PERFORMANCE_MODE ?? "base",
// TogetherAI Keys // TogetherAI Keys
TogetherAiApiKey: !!process.env.TOGETHER_AI_API_KEY, TogetherAiApiKey: !!process.env.TOGETHER_AI_API_KEY,

View File

@ -96,7 +96,9 @@ class GeminiLLM {
case "gemini-1.5-flash-latest": case "gemini-1.5-flash-latest":
return 1_048_576; return 1_048_576;
case "gemini-1.5-pro-latest": case "gemini-1.5-pro-latest":
return 1_048_576; return 2_097_152;
case "gemini-1.5-pro-exp-0801":
return 2_097_152;
default: default:
return 30_720; // assume a gemini-pro model return 30_720; // assume a gemini-pro model
} }
@ -108,6 +110,7 @@ class GeminiLLM {
"gemini-1.0-pro", "gemini-1.0-pro",
"gemini-1.5-pro-latest", "gemini-1.5-pro-latest",
"gemini-1.5-flash-latest", "gemini-1.5-flash-latest",
"gemini-1.5-pro-exp-0801",
]; ];
return validModels.includes(modelName); return validModels.includes(modelName);
} }

View File

@ -49,7 +49,7 @@ class GroqLLM {
return 8192; return 8192;
case "llama-3.1-70b-versatile": case "llama-3.1-70b-versatile":
case "llama-3.1-8b-instant": case "llama-3.1-8b-instant":
return 131072; return 8000;
case "mixtral-8x7b-32768": case "mixtral-8x7b-32768":
return 32768; return 32768;
default: default:

View File

@ -13,6 +13,7 @@ class OllamaAILLM {
this.basePath = process.env.OLLAMA_BASE_PATH; this.basePath = process.env.OLLAMA_BASE_PATH;
this.model = modelPreference || process.env.OLLAMA_MODEL_PREF; this.model = modelPreference || process.env.OLLAMA_MODEL_PREF;
this.performanceMode = process.env.OLLAMA_PERFORMANCE_MODE || "base";
this.keepAlive = process.env.OLLAMA_KEEP_ALIVE_TIMEOUT this.keepAlive = process.env.OLLAMA_KEEP_ALIVE_TIMEOUT
? Number(process.env.OLLAMA_KEEP_ALIVE_TIMEOUT) ? Number(process.env.OLLAMA_KEEP_ALIVE_TIMEOUT)
: 300; // Default 5-minute timeout for Ollama model loading. : 300; // Default 5-minute timeout for Ollama model loading.
@ -33,6 +34,10 @@ class OllamaAILLM {
model: this.model, model: this.model,
keepAlive: this.keepAlive, keepAlive: this.keepAlive,
useMLock: true, useMLock: true,
// There are currently only two performance settings so if its not "base" - its max context.
...(this.performanceMode === "base"
? {}
: { numCtx: this.promptWindowLimit() }),
temperature, temperature,
}); });
} }

View File

@ -254,6 +254,7 @@ class OpenRouterLLM {
} }
}, 500); }, 500);
try {
for await (const chunk of stream) { for await (const chunk of stream) {
const message = chunk?.choices?.[0]; const message = chunk?.choices?.[0];
const token = message?.delta?.content; const token = message?.delta?.content;
@ -284,6 +285,18 @@ class OpenRouterLLM {
resolve(fullText); resolve(fullText);
} }
} }
} catch (e) {
writeResponseChunk(response, {
uuid,
sources,
type: "abort",
textResponse: null,
close: true,
error: e.message,
});
response.removeListener("close", handleAbort);
resolve(fullText);
}
}); });
} }

View File

@ -101,6 +101,10 @@ const KEY_MAPPING = {
envKey: "OLLAMA_MODEL_TOKEN_LIMIT", envKey: "OLLAMA_MODEL_TOKEN_LIMIT",
checks: [nonZero], checks: [nonZero],
}, },
OllamaLLMPerformanceMode: {
envKey: "OLLAMA_PERFORMANCE_MODE",
checks: [],
},
OllamaLLMKeepAliveSeconds: { OllamaLLMKeepAliveSeconds: {
envKey: "OLLAMA_KEEP_ALIVE_TIMEOUT", envKey: "OLLAMA_KEEP_ALIVE_TIMEOUT",
checks: [isInteger], checks: [isInteger],
@ -585,6 +589,7 @@ function validGeminiModel(input = "") {
"gemini-1.0-pro", "gemini-1.0-pro",
"gemini-1.5-pro-latest", "gemini-1.5-pro-latest",
"gemini-1.5-flash-latest", "gemini-1.5-flash-latest",
"gemini-1.5-pro-exp-0801",
]; ];
return validModels.includes(input) return validModels.includes(input)
? null ? null