MCPcopy Create free account
hub / github.com/Roy3838/Observer / generateWithLocalModel

Method generateWithLocalModel

app/src/utils/ModelManager.ts:567–607  ·  view source on GitHub ↗

* Generate a response using a local model. * Routes to the appropriate underlying manager based on the server sentinel.

(
    server: string,
    messages: LocalLlmMessage[],
    onToken?: (token: string) => void,
    onReasoningToken?: (token: string) => void,
  )

Source from the content-addressed store, hash-verified

565 * Routes to the appropriate underlying manager based on the server sentinel.
566 */
567 public async generateWithLocalModel(
568 server: string,
569 messages: LocalLlmMessage[],
570 onToken?: (token: string) => void,
571 onReasoningToken?: (token: string) => void,
572 ): Promise<string> {
573 if (server === ModelManager.SKIP_MODEL) {
574 return '';
575 }
576
577 if (server === ModelManager.BROWSER_LOCAL) {
578 const manager = GemmaModelManager.getInstance();
579 if (!manager.isReady()) {
580 throw new Error('Transformers.js model not loaded');
581 }
582 const enableThinking = manager.getState().loadSettings?.enableThinking ?? false;
583 return manager.generate(messages, onToken, enableThinking, onReasoningToken);
584 }
585
586 if (server === ModelManager.LLAMA_CPP_LOCAL && isTauri()) {
587 const manager = NativeLlmManager.getInstance();
588 if (!manager.isReady()) {
589 throw new Error('llama.cpp model not loaded');
590 }
591 const enableThinking = manager.getState().enableThinking;
592 if (!enableThinking || !onReasoningToken) {
593 return manager.generate(messages, onToken);
594 }
595 // Route thinking tokens to onReasoningToken, answer tokens to onToken.
596 // Accumulate answer tokens — manager.generate returns the raw backend string which
597 // still contains the thinking delimiters, so we can't use it directly.
598 let answer = '';
599 const collectAndForward = (t: string) => { answer += t; onToken?.(t); };
600 const router = makeLlamaCppThinkingRouter(collectAndForward, onReasoningToken);
601 await manager.generate(messages, router);
602 router.flush();
603 return answer;
604 }
605
606 throw new Error(`Cannot generate: unsupported server type "${server}"`);
607 }
608
609 // ===========================================================================
610 // Per-Model Inference Params (remote models only — local models use their own settings)

Callers 2

sendPromptMethod · 0.95
sendMessagesMethod · 0.95

Calls 7

isTauriFunction · 0.90
flushMethod · 0.80
isReadyMethod · 0.65
getStateMethod · 0.65
generateMethod · 0.65
getInstanceMethod · 0.45

Tested by

no test coverage detected