Thomas G. Lopes
fix slider bug
a379843
raw
history blame
3.17 kB
import { browser } from "$app/environment";
import { goto } from "$app/navigation";
import { defaultGenerationConfig } from "$lib/components/InferencePlayground/generationConfigSettings";
import { defaultSystemMessage } from "$lib/components/InferencePlayground/inferencePlaygroundUtils";
import { PipelineTag, type Conversation, type ConversationMessage, type Session } from "$lib/types";
import { models } from "$lib/stores/models";
import { get, writable } from "svelte/store";
import { getTrending } from "$lib/utils/model";
function createSessionStore() {
const store = writable<Session>(undefined, (set, update) => {
const searchParams = new URLSearchParams(browser ? window.location.search : undefined);
const modelIdsFromSearchParam = searchParams.getAll("modelId");
const modelsFromSearchParam = modelIdsFromSearchParam?.map(id => get(models).find(model => model.id === id));
const providersFromSearchParam = searchParams.getAll("provider");
const startMessageUser: ConversationMessage = { role: "user", content: "" };
const systemMessage: ConversationMessage = {
role: "system",
content: modelIdsFromSearchParam?.[0] ? (defaultSystemMessage?.[modelIdsFromSearchParam[0]] ?? "") : "",
};
const $models = get(models);
const featured = getTrending($models);
set({
conversations: [
{
model: featured[0] ??
$models[0] ?? {
_id: "",
inferenceProviderMapping: [],
pipeline_tag: PipelineTag.TextGeneration,
trendingScore: 0,
tags: ["text-generation"],
id: "",
tokenizerConfig: {},
config: {
architectures: [] as string[],
model_type: "",
tokenizer_config: {},
},
},
config: { ...defaultGenerationConfig },
messages: [{ ...startMessageUser }],
systemMessage,
streaming: true,
},
],
});
if (modelsFromSearchParam?.length) {
const conversations = modelsFromSearchParam.map((model, i) => {
return {
model,
config: { ...defaultGenerationConfig },
messages: [{ ...startMessageUser }],
systemMessage,
streaming: true,
provider: providersFromSearchParam?.[i],
};
}) as [Conversation] | [Conversation, Conversation];
update(s => ({ ...s, conversations }));
}
});
const update: typeof store.update = cb => {
const prevQuery = window.location.search;
const query = new URLSearchParams(window.location.search);
query.delete("modelId");
query.delete("provider");
store.update($s => {
const s = cb($s);
const modelIds = s.conversations.map(c => c.model.id);
modelIds.forEach(m => query.append("modelId", m));
const providers = s.conversations.map(c => c.provider ?? "hf-inference");
providers.forEach(p => query.append("provider", p));
const newQuery = query.toString();
// slice to remove the ? prefix
if (newQuery !== prevQuery.slice(1)) {
console.log(prevQuery, newQuery);
goto(`?${query}`, { replaceState: true });
}
return s;
});
};
const set: typeof store.set = (...args) => {
update(_ => args[0]);
};
return { ...store, set, update };
}
export const session = createSessionStore();