Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import { type ChatCompletionInputMessage } from '@huggingface/tasks'; | |
| import { HfInference } from '@huggingface/inference'; | |
| import type { Conversation, ModelEntryWithTokenizer } from '$lib/types'; | |
| export function createHfInference(token: string): HfInference { | |
| return new HfInference(token); | |
| } | |
| export async function handleStreamingResponse( | |
| hf: HfInference, | |
| conversation: Conversation, | |
| onChunk: (content: string) => void, | |
| abortController: AbortController, | |
| systemMessage?: ChatCompletionInputMessage | |
| ): Promise<void> { | |
| const messages = [ | |
| ...(isSystemPromptSupported(conversation.model) && systemMessage?.content?.length | |
| ? [systemMessage] | |
| : []), | |
| ...conversation.messages | |
| ]; | |
| let out = ''; | |
| for await (const chunk of hf.chatCompletionStream( | |
| { | |
| model: conversation.model.id, | |
| messages, | |
| temperature: conversation.config.temperature, | |
| max_tokens: conversation.config.maxTokens | |
| }, | |
| { signal: abortController.signal } | |
| )) { | |
| if (chunk.choices && chunk.choices.length > 0 && chunk.choices[0]?.delta?.content) { | |
| out += chunk.choices[0].delta.content; | |
| onChunk(out); | |
| } | |
| } | |
| } | |
| export async function handleNonStreamingResponse( | |
| hf: HfInference, | |
| conversation: Conversation, | |
| systemMessage?: ChatCompletionInputMessage | |
| ): Promise<ChatCompletionInputMessage> { | |
| const messages = [ | |
| ...(isSystemPromptSupported(conversation.model) && systemMessage?.content?.length | |
| ? [systemMessage] | |
| : []), | |
| ...conversation.messages | |
| ]; | |
| const response = await hf.chatCompletion({ | |
| model: conversation.model, | |
| messages, | |
| temperature: conversation.config.temperature, | |
| max_tokens: conversation.config.maxTokens | |
| }); | |
| if (response.choices && response.choices.length > 0) { | |
| return response.choices[0].message; | |
| } | |
| throw new Error('No response from the model'); | |
| } | |
| export function isSystemPromptSupported(model: ModelEntryWithTokenizer) { | |
| return model.tokenizerConfig?.chat_template?.includes('system'); | |
| } | |