| import { APP_NAME } from '$lib/constants'; |
| import { type Writable, writable } from 'svelte/store'; |
| import type { ModelConfig } from '$lib/apis'; |
| import type { Banner } from '$lib/types'; |
| import type { Socket } from 'socket.io-client'; |
|
|
| import emojiShortCodes from '$lib/emoji-shortcodes.json'; |
|
|
| |
| export const WEBUI_NAME = writable(APP_NAME); |
| export const config: Writable<Config | undefined> = writable(undefined); |
| export const user: Writable<SessionUser | undefined> = writable(undefined); |
|
|
| |
| export const isApp = writable(false); |
| export const appInfo = writable(null); |
| export const appData = writable(null); |
|
|
| |
| export const MODEL_DOWNLOAD_POOL = writable({}); |
|
|
| export const mobile = writable(false); |
|
|
| export const socket: Writable<null | Socket> = writable(null); |
| export const activeUserIds: Writable<null | string[]> = writable(null); |
| export const USAGE_POOL: Writable<null | string[]> = writable(null); |
|
|
| export const theme = writable('system'); |
|
|
| export const shortCodesToEmojis = writable( |
| Object.entries(emojiShortCodes).reduce((acc, [key, value]) => { |
| if (typeof value === 'string') { |
| acc[value] = key; |
| } else { |
| for (const v of value) { |
| acc[v] = key; |
| } |
| } |
|
|
| return acc; |
| }, {}) |
| ); |
|
|
| export const chatId = writable(''); |
| export const chatTitle = writable(''); |
|
|
| export const channels = writable([]); |
| export const chats = writable([]); |
| export const pinnedChats = writable([]); |
| export const tags = writable([]); |
|
|
| export const models: Writable<Model[]> = writable([]); |
|
|
| export const prompts: Writable<null | Prompt[]> = writable(null); |
| export const knowledge: Writable<null | Document[]> = writable(null); |
| export const tools = writable(null); |
| export const functions = writable(null); |
|
|
| export const banners: Writable<Banner[]> = writable([]); |
|
|
| export const settings: Writable<Settings> = writable({}); |
|
|
| export const showSidebar = writable(false); |
| export const showSettings = writable(false); |
| export const showArchivedChats = writable(false); |
| export const showChangelog = writable(false); |
|
|
| export const showControls = writable(false); |
| export const showOverview = writable(false); |
| export const showArtifacts = writable(false); |
| export const showCallOverlay = writable(false); |
|
|
| export const temporaryChatEnabled = writable(false); |
| export const scrollPaginationEnabled = writable(false); |
| export const currentChatPage = writable(1); |
|
|
| export const isLastActiveTab = writable(true); |
| export const playingNotificationSound = writable(false); |
|
|
| export type Model = OpenAIModel | OllamaModel; |
|
|
| type BaseModel = { |
| id: string; |
| name: string; |
| info?: ModelConfig; |
| owned_by: 'ollama' | 'openai' | 'arena'; |
| }; |
|
|
| export interface OpenAIModel extends BaseModel { |
| owned_by: 'openai'; |
| external: boolean; |
| source?: string; |
| } |
|
|
| export interface OllamaModel extends BaseModel { |
| owned_by: 'ollama'; |
| details: OllamaModelDetails; |
| size: number; |
| description: string; |
| model: string; |
| modified_at: string; |
| digest: string; |
| ollama?: { |
| name?: string; |
| model?: string; |
| modified_at: string; |
| size?: number; |
| digest?: string; |
| details?: { |
| parent_model?: string; |
| format?: string; |
| family?: string; |
| families?: string[]; |
| parameter_size?: string; |
| quantization_level?: string; |
| }; |
| urls?: number[]; |
| }; |
| } |
|
|
| 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; |
| notificationEnabled?: boolean; |
| title?: TitleSettings; |
| splitLargeDeltas?: boolean; |
| chatDirection: 'LTR' | 'RTL'; |
|
|
| system?: string; |
| requestFormat?: string; |
| keepAlive?: string; |
| seed?: number; |
| temperature?: string; |
| repeat_penalty?: string; |
| top_k?: string; |
| top_p?: string; |
| num_ctx?: string; |
| num_batch?: string; |
| num_keep?: string; |
| options?: ModelOptions; |
| }; |
|
|
| type ModelOptions = { |
| stop?: boolean; |
| }; |
|
|
| type AudioSettings = { |
| STTEngine?: string; |
| TTSEngine?: string; |
| speaker?: string; |
| model?: string; |
| nonLocalVoices?: boolean; |
| }; |
|
|
| type TitleSettings = { |
| auto?: boolean; |
| model?: string; |
| modelExternal?: string; |
| prompt?: string; |
| }; |
|
|
| type Prompt = { |
| command: string; |
| user_id: string; |
| title: string; |
| content: string; |
| timestamp: number; |
| }; |
|
|
| type Document = { |
| collection_name: string; |
| filename: string; |
| name: string; |
| title: string; |
| }; |
|
|
| type Config = { |
| status: boolean; |
| name: string; |
| version: string; |
| default_locale: string; |
| default_models: string; |
| default_prompt_suggestions: PromptSuggestion[]; |
| features: { |
| auth: boolean; |
| auth_trusted_header: boolean; |
| enable_api_key: boolean; |
| enable_signup: boolean; |
| enable_login_form: boolean; |
| enable_web_search?: boolean; |
| enable_google_drive_integration: boolean; |
| enable_image_generation: boolean; |
| enable_admin_export: boolean; |
| enable_admin_chat_access: boolean; |
| enable_community_sharing: boolean; |
| }; |
| oauth: { |
| providers: { |
| [key: string]: string; |
| }; |
| }; |
| }; |
|
|
| type PromptSuggestion = { |
| content: string; |
| title: [string, string]; |
| }; |
|
|
| type SessionUser = { |
| id: string; |
| email: string; |
| name: string; |
| role: string; |
| profile_image_url: string; |
| }; |
|
|