|
import { APP_NAME } from '$lib/constants'; |
|
import { type Writable, writable } from 'svelte/store'; |
|
import type { GlobalModelConfig, ModelConfig } from '$lib/apis'; |
|
import type { Banner } from '$lib/types'; |
|
import type { Socket } from 'socket.io-client'; |
|
|
|
|
|
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 MODEL_DOWNLOAD_POOL = writable({}); |
|
|
|
export const mobile = writable(false); |
|
|
|
export const socket: Writable<null | Socket> = writable(null); |
|
export const activeUserCount: Writable<null | number> = writable(null); |
|
export const USAGE_POOL: Writable<null | string[]> = writable(null); |
|
|
|
export const theme = writable('system'); |
|
export const chatId = writable(''); |
|
|
|
export const chats = writable([]); |
|
export const pinnedChats = writable([]); |
|
export const tags = writable([]); |
|
|
|
export const models: Writable<Model[]> = writable([]); |
|
export const prompts: Writable<Prompt[]> = writable([]); |
|
export const documents: Writable<Document[]> = writable([]); |
|
|
|
export const tools = writable([]); |
|
export const functions = writable([]); |
|
|
|
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 showCallOverlay = writable(false); |
|
|
|
export type Model = OpenAIModel | OllamaModel; |
|
|
|
type BaseModel = { |
|
id: string; |
|
name: string; |
|
info?: ModelConfig; |
|
}; |
|
|
|
export interface OpenAIModel extends BaseModel { |
|
external: boolean; |
|
source?: string; |
|
} |
|
|
|
export interface OllamaModel extends BaseModel { |
|
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; |
|
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_signup: boolean; |
|
enable_login_form: boolean; |
|
enable_web_search?: boolean; |
|
enable_image_generation: boolean; |
|
enable_admin_export: 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; |
|
}; |
|
|