File size: 1,928 Bytes
e8b5344
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import type { Conversation, Session } from "$lib/components/InferencePlayground/types";
import { defaultGenerationConfig } from "$lib/components/InferencePlayground/generationConfigSettings";
import {
	defaultSystemMessage,
	FEATURED_MODELS_IDS,
} from "$lib/components/InferencePlayground/inferencePlaygroundUtils";

import { models } from "$lib/stores/models";
import { get, writable } from "svelte/store";
import type { ChatCompletionInputMessage } from "@huggingface/tasks";
import { partialSet, safePage } from "$lib/utils/store";

export function createSessionStore() {
	const startMessageUser: ChatCompletionInputMessage = { role: "user", content: "" };
	const modelIdsFromQueryParam = get(safePage)?.url?.searchParams?.get("modelId")?.split(",");
	const modelsFromQueryParam = modelIdsFromQueryParam?.map(id => get(models).find(model => model.id === id));
	const systemMessage: ChatCompletionInputMessage = {
		role: "system",
		content: modelIdsFromQueryParam?.[0] ? (defaultSystemMessage?.[modelIdsFromQueryParam[0]] ?? "") : "",
	};

	const store = writable<Session>({
		conversations: [
			{
				model: get(models).find(m => FEATURED_MODELS_IDS.includes(m.id)) ??
					get(models)[0] ?? {
						id: "",
						downloads: 0,
						gated: false,
						likes: 0,
						name: "",
						private: false,
						tokenizerConfig: {},
						updatedAt: new Date(),
					},
				config: { ...defaultGenerationConfig },
				messages: [{ ...startMessageUser }],
				systemMessage,
				streaming: true,
			},
		],
	});

	if (modelsFromQueryParam?.length) {
		const conversations = modelsFromQueryParam.map(model => {
			return {
				model,
				config: { ...defaultGenerationConfig },
				messages: [{ ...startMessageUser }],
				systemMessage,
				streaming: true,
			};
		}) as [Conversation] | [Conversation, Conversation];
		partialSet(store, { conversations });
	}

	return store;
}

export const session = createSessionStore();