index.ts 3.23 KB
Newer Older
1
import { APP_NAME } from '$lib/constants';
2
import { type Writable, writable } from 'svelte/store';
3

4
// Backend
5
export const WEBUI_NAME = writable(APP_NAME);
6
7
export const config: Writable<Config | undefined> = writable(undefined);
export const user: Writable<SessionUser | undefined> = writable(undefined);
8
9

// Frontend
10
export const MODEL_DOWNLOAD_POOL = writable({});
Timothy J. Baek's avatar
Timothy J. Baek committed
11

12
export const theme = writable('system');
13
export const chatId = writable('');
Timothy J. Baek's avatar
Timothy J. Baek committed
14

15
export const chats = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
16
export const tags = writable([]);
17
export const models: Writable<Model[]> = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
18

19
export const modelfiles = writable([]);
20
export const prompts: Writable<Prompt[]> = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
export const documents = writable([
	{
		collection_name: 'collection_name',
		filename: 'filename',
		name: 'name',
		title: 'title'
	},
	{
		collection_name: 'collection_name1',
		filename: 'filename1',
		name: 'name1',
		title: 'title1'
	}
]);
Timothy J. Baek's avatar
Timothy J. Baek committed
35

36
export const settings: Writable<Settings> = writable({});
Timothy J. Baek's avatar
Timothy J. Baek committed
37
38

export const showSidebar = writable(false);
39
export const showSettings = writable(false);
40
export const showChangelog = writable(false);
41

42
export type Model = OpenAIModel | OllamaModel;
43

44
45
46
47
48
type ModelCustomInfo = {
	name?: string;
	displayName?: string;
	description?: string;
	vision_capable?: boolean;
49
};
50

51
type BaseModel = {
52
53
	id: string;
	name: string;
54
55
	custom_info?: ModelCustomInfo;
};
56

57
58
59
60
61
62
interface OpenAIModel extends BaseModel {
	external: boolean;
	source?: string;
}

interface OllamaModel extends BaseModel {
63
64
65
66
67
68
	details: OllamaModelDetails;
	size: number;
	description: string;
	model: string;
	modified_at: string;
	digest: string;
69
}
70
71

type OllamaModelDetails = {
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
	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;
90
	splitLargeDeltas?: boolean;
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

	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;
Yanyutin753's avatar
Yanyutin753 committed
112
	model?: string;
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
};

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;
139
140
141
142
143
144
145
146
147
148
149
150
151
152
	model_config?: GlobalModelConfig;
};

type GlobalModelConfig = {
	ollama?: ModelConfig[];
	litellm?: ModelConfig[];
	openai?: ModelConfig[];
};

type ModelConfig = {
	id?: string;
	name?: string;
	description?: string;
	vision_capable?: boolean;
153
154
155
156
157
158
159
160
161
162
163
164
165
};

type PromptSuggestion = {
	content: string;
	title: [string, string];
};

type SessionUser = {
	id: string;
	email: string;
	name: string;
	role: string;
	profile_image_url: string;
166
};