| import { createContext } from "react"; |
|
|
| let nextMessageId = 0; |
|
|
| export function createMessageId(): number { |
| return nextMessageId++; |
| } |
|
|
| export interface ChatMessage { |
| id: number; |
| role: "user" | "assistant" | "system"; |
| content: string; |
| reasoning?: string; |
| } |
|
|
| export type LoadingStatus = |
| | { state: "idle" } |
| | { state: "loading"; progress?: number; message?: string } |
| | { state: "ready" } |
| | { state: "error"; error: string }; |
|
|
| export type ReasoningEffort = "low" | "medium" | "high"; |
|
|
| export interface LLMContextValue { |
| status: LoadingStatus; |
| messages: ChatMessage[]; |
| isGenerating: boolean; |
| tps: number; |
| reasoningEffort: ReasoningEffort; |
| setReasoningEffort: (effort: ReasoningEffort) => void; |
| loadModel: () => void; |
| send: (text: string) => void; |
| stop: () => void; |
| clearChat: () => void; |
| editMessage: (index: number, newContent: string) => void; |
| retryMessage: (index: number) => void; |
| } |
|
|
| export const LLMContext = createContext<LLMContextValue | null>(null); |
|
|