/** * @module @sauravpanda/flare * * WASM-first LLM inference engine with WebGPU acceleration. * * @example * ```typescript * import { Flare } from '@sauravpanda/flare'; * * const flare = await Flare.init(); * console.log('WebGPU available:', flare.webgpuAvailable); * ``` */ // Re-export WASM bindings (generated by wasm-pack) export { webgpu_available, device_info, init } from '../pkg/flare_web'; export interface FlareConfig { /** URL to fetch the GGUF model from */ modelUrl?: string; /** Whether to cache model weights in browser Cache API */ cache?: boolean; /** Progress callback: (loaded bytes, total bytes) */ onProgress?: (loaded: number, total: number) => void; } export interface GenerateOptions { /** Input prompt text */ prompt: string; /** Maximum tokens to generate */ maxTokens?: number; /** Sampling temperature (0 = greedy, higher = more random) */ temperature?: number; /** Top-p (nucleus) sampling threshold */ topP?: number; /** Top-k sampling limit */ topK?: number; /** Repeat penalty for previously generated tokens */ repeatPenalty?: number; } export interface ChatMessage { role: 'system' | 'user' | 'assistant'; content: string; } export interface ChatOptions { messages: ChatMessage[]; maxTokens?: number; temperature?: number; topP?: number; stream?: boolean; } /** * High-level Flare engine interface. * Wraps the low-level WASM bindings with a friendly API. */ export class Flare { private constructor() {} /** * Initialize the Flare engine. * Detects WebGPU availability and sets up compute pipelines. */ static async init(): Promise { const { init } = await import('../pkg/flare_web'); await init(); return new Flare(); } /** Check if WebGPU is available in this browser. */ get webgpuAvailable(): boolean { try { const { webgpu_available } = require('../pkg/flare_web'); return webgpu_available(); } catch { return false; } } /** Get device capability info as JSON. */ get deviceInfo(): Record { try { const { device_info } = require('../pkg/flare_web'); return JSON.parse(device_info()); } catch { return { webgpu: false }; } } }