diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index fc58db6bd..1d1826e3f 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -1,10 +1,10 @@ import { APP_NAME } from '$lib/constants'; -import { writable } from 'svelte/store'; +import { type Writable, writable } from 'svelte/store'; // Backend export const WEBUI_NAME = writable(APP_NAME); -export const config = writable(undefined); -export const user = writable(undefined); +export const config: Writable = writable(undefined); +export const user: Writable = writable(undefined); // Frontend export const MODEL_DOWNLOAD_POOL = writable({}); @@ -14,10 +14,10 @@ export const chatId = writable(''); export const chats = writable([]); export const tags = writable([]); -export const models = writable([]); +export const models: Writable = writable([]); export const modelfiles = writable([]); -export const prompts = writable([]); +export const prompts: Writable = writable([]); export const documents = writable([ { collection_name: 'collection_name', @@ -33,6 +33,109 @@ export const documents = writable([ } ]); -export const settings = writable({}); +export const settings: Writable = writable({}); export const showSettings = writable(false); export const showChangelog = writable(false); + +type Model = OpenAIModel | OllamaModel; + +type OpenAIModel = { + id: string; + name: string; + external: boolean; + source?: string; +}; + +type OllamaModel = { + id: string; + name: string; + + // Ollama specific fields + details: OllamaModelDetails; + size: number; + description: string; + model: string; + modified_at: string; + digest: string; +}; + +type OllamaModelDetails = { + parent_model: string; + format: string; + family: string; + families: string[] | null; + parameter_size: string; + quantization_level: string; +}; + +type Settings = { + models?: string[]; + conversationMode?: boolean; + speechAutoSend?: boolean; + responseAutoPlayback?: boolean; + audio?: AudioSettings; + showUsername?: boolean; + saveChatHistory?: boolean; + notificationEnabled?: boolean; + title?: TitleSettings; + + system?: string; + requestFormat?: string; + keepAlive?: string; + seed?: number; + temperature?: string; + repeat_penalty?: string; + top_k?: string; + top_p?: string; + num_ctx?: string; + options?: ModelOptions; +}; + +type ModelOptions = { + stop?: boolean; +}; + +type AudioSettings = { + STTEngine?: string; + TTSEngine?: string; + speaker?: string; +}; + +type TitleSettings = { + auto?: boolean; + model?: string; + modelExternal?: string; + prompt?: string; +}; + +type Prompt = { + command: string; + user_id: string; + title: string; + content: string; + timestamp: number; +}; + +type Config = { + status?: boolean; + name?: string; + version?: string; + default_locale?: string; + images?: boolean; + default_models?: string[]; + default_prompt_suggestions?: PromptSuggestion[]; + trusted_header_auth?: boolean; +}; + +type PromptSuggestion = { + content: string; + title: [string, string]; +}; + +type SessionUser = { + id: string; + email: string; + name: string; + role: string; + profile_image_url: string; +};