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 ModelConfig { id: string; label: string; thinking: boolean; } export const AVAILABLE_MODELS: ModelConfig[] = [ { id: "onnx-community/Olmo-Hybrid-Instruct-SFT-7B-ONNX", label: "Instruct SFT", thinking: false, }, { id: "onnx-community/Olmo-Hybrid-Instruct-DPO-7B-ONNX", label: "Instruct DPO", thinking: false, }, { id: "onnx-community/Olmo-Hybrid-Think-SFT-7B-ONNX", label: "Think SFT", thinking: true, }, ]; export interface LLMContextValue { status: LoadingStatus; messages: ChatMessage[]; isGenerating: boolean; tps: number; reasoningEffort: ReasoningEffort; setReasoningEffort: (effort: ReasoningEffort) => void; selectedModel: ModelConfig; setSelectedModel: (model: ModelConfig) => void; loadedModelId: string | null; loadModel: () => void; send: (text: string) => void; stop: () => void; clearChat: () => void; editMessage: (index: number, newContent: string) => void; retryMessage: (index: number) => void; } export const LLMContext = createContext(null);