index.ts 3.92 KB
Newer Older
1
import { APP_NAME } from '$lib/constants';
2
import { type Writable, writable } from 'svelte/store';
3
import type { GlobalModelConfig, ModelConfig } from '$lib/apis';
Timothy J. Baek's avatar
Timothy J. Baek committed
4
import type { Banner } from '$lib/types';
Timothy J. Baek's avatar
Timothy J. Baek committed
5
import type { Socket } from 'socket.io-client';
6

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

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

15
16
export const mobile = writable(false);

Timothy J. Baek's avatar
Timothy J. Baek committed
17
export const socket: Writable<null | Socket> = writable(null);
Timothy J. Baek's avatar
Timothy J. Baek committed
18
export const activeUserCount: Writable<null | number> = writable(null);
19
export const USAGE_POOL: Writable<null | string[]> = writable(null);
Timothy J. Baek's avatar
Timothy J. Baek committed
20

21
export const theme = writable('system');
22
export const chatId = writable('');
Timothy J. Baek's avatar
Timothy J. Baek committed
23

24
export const chats = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
25
export const pinnedChats = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
26
export const tags = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
27

Timothy J. Baek's avatar
Timothy J. Baek committed
28
export const models: Writable<Model[]> = writable([]);
29
export const prompts: Writable<Prompt[]> = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
30
export const documents: Writable<Document[]> = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
31

Timothy J. Baek's avatar
Timothy J. Baek committed
32
export const tools = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
33
export const functions = writable([]);
Timothy J. Baek's avatar
Timothy J. Baek committed
34

Timothy J. Baek's avatar
Timothy J. Baek committed
35
36
export const banners: Writable<Banner[]> = writable([]);

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

export const showSidebar = writable(false);
40
export const showSettings = writable(false);
Timothy J. Baek's avatar
Timothy J. Baek committed
41
export const showArchivedChats = writable(false);
42
export const showChangelog = writable(false);
Timothy J. Baek's avatar
Timothy J. Baek committed
43
export const showCallOverlay = writable(false);
44

45
46
47
export const scrollPaginationEnabled = writable(true);
export const pageSkip = writable(0);
export const pageLimit = writable(-1);
48
export const tagView = writable(false);
49

50
export type Model = OpenAIModel | OllamaModel;
51

52
type BaseModel = {
53
54
	id: string;
	name: string;
Timothy J. Baek's avatar
Timothy J. Baek committed
55
	info?: ModelConfig;
56
};
57

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

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

type OllamaModelDetails = {
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
	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;
91
	splitLargeDeltas?: boolean;
92
	chatDirection: 'LTR' | 'RTL';
93
94
95
96
97
98
99
100
101
102

	system?: string;
	requestFormat?: string;
	keepAlive?: string;
	seed?: number;
	temperature?: string;
	repeat_penalty?: string;
	top_k?: string;
	top_p?: string;
	num_ctx?: string;
Sam McLeod's avatar
Sam McLeod committed
103
104
	num_batch?: string;
	num_keep?: string;
105
106
107
108
109
110
111
112
113
114
115
	options?: ModelOptions;
};

type ModelOptions = {
	stop?: boolean;
};

type AudioSettings = {
	STTEngine?: string;
	TTSEngine?: string;
	speaker?: string;
Yanyutin753's avatar
Yanyutin753 committed
116
	model?: string;
117
	nonLocalVoices?: boolean;
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
};

type TitleSettings = {
	auto?: boolean;
	model?: string;
	modelExternal?: string;
	prompt?: string;
};

type Prompt = {
	command: string;
	user_id: string;
	title: string;
	content: string;
	timestamp: number;
};

Timothy J. Baek's avatar
Timothy J. Baek committed
135
136
137
138
139
140
141
type Document = {
	collection_name: string;
	filename: string;
	name: string;
	title: string;
};

142
type Config = {
143
144
145
146
	status: boolean;
	name: string;
	version: string;
	default_locale: string;
147
	default_models: string;
148
	default_prompt_suggestions: PromptSuggestion[];
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
149
	features: {
150
151
		auth: boolean;
		auth_trusted_header: boolean;
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
152
		enable_signup: boolean;
153
		enable_login_form: boolean;
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
154
		enable_web_search?: boolean;
155
156
157
		enable_image_generation: boolean;
		enable_admin_export: boolean;
		enable_community_sharing: boolean;
158
	};
159
160
161
162
163
	oauth: {
		providers: {
			[key: string]: string;
		};
	};
164
165
};

166
167
168
169
170
171
172
173
174
175
176
type PromptSuggestion = {
	content: string;
	title: [string, string];
};

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