@khaveeai/providers-mock
v0.3.0
Published
Mock providers for KhaveeAI development
Readme
@khaveeai/providers-mock
Canned, randomized MockLLM/MockTTS classes for exercising chat/animation-trigger logic locally — no API keys, no network calls, no cost.
Install
npm install @khaveeai/providers-mockWhat this is
MockLLMimplementsLegacyLLMProvider'sstreamChat({messages}) => AsyncIterable<{type, delta}>. It matches the last message against a fixed set of keywords (hello,dance,sad,happy,angry,think,yes,no, ...) or falls back to one of 8 canned responses, then yields it character-by-character with a randomized 20–80ms delay to simulate typing.MockTTSimplementsLegacyTTSProvider'sspeak({text, voice?}) => Promise<void>. It does not play audio — it logs to console andawaits a fake duration (capped at 8s) computed from word count.
⚠️ This does not plug into the avatar/voice pipeline.
LegacyLLMProvider/LegacyTTSProviderare an older interface pair, separate fromRealtimeProvider— the interfaceKhaveeProvider/useRealtimeactually consume to drive the avatar.KhaveeConfigdoes have optionalllm/ttsfields typed for these, so<KhaveeProvider config={{ llm: new MockLLM(), tts: new MockTTS() }}>compiles — but nothing readsconfig.llm/config.ttsanywhere in@khaveeai/react. No chat status, no lip-sync, no avatar reaction.
What it's actually useful for
Standalone testing of chat/animation-trigger logic, independent of the avatar:
- Unit-test that
streamChatyields the expected*trigger_animation: name*marker for a given keyword. - Sanity-check your own trigger-parsing logic before wiring a real LLM.
- Preview what a "typing" delta stream looks like, with zero LLM cost.
Triggers like *trigger_animation: wave_small* are plain text in the canned responses — parse them yourself (e.g. text.match(/\*trigger_animation:\s*(\w+)\*/)); MockLLM/MockTTS don't act on them.
Usage
import { MockLLM, MockTTS } from "@khaveeai/providers-mock";
const llm = new MockLLM();
let response = "";
for await (const chunk of llm.streamChat({ messages: [{ role: "user", content: "hello there" }] })) {
if (chunk.type === "text") response += chunk.delta;
}
console.log(response);
// => "Hello there! Nice to meet you! *trigger_animation: wave_small* 👋"
const tts = new MockTTS();
await tts.speak({ text: response, voice: "mock-voice" }); // logs + waits, plays nothingWant the real avatar + lip-sync pipeline without API keys?
MockLLM/MockTTS aren't the path for that. Either write a minimal class implementing RealtimeProvider directly, or use @khaveeai/providers-generic-stt-tts's GenericPipelineProvider with your own stub VAD/STT/LLM/TTS adapters — either gives KhaveeProvider a real RealtimeProvider to drive the avatar end-to-end.
License
MIT
