File size: 2,199 Bytes
e8b5344 9662103 e8b5344 9662103 e8b5344 9662103 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 62 63 64 65 66 67 68 69 70 71 72 |
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() {
let hasStarted = false;
const store = writable<Session>();
function init() {
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]] ?? "") : "",
};
store.set({
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 });
}
}
const subscribe: (typeof store)["subscribe"] = (...args) => {
if (!hasStarted) init();
hasStarted = true;
return store.subscribe(...args);
};
return { ...store, subscribe };
}
export const session = createSessionStore();
|