1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//! Model registry — known models with their canonical names, system prompts,
//! and default parameters.
//!
//! # Adding a model
//!
//! 1. Add a `const` for the model name below.
//! 2. Add the model to the [`known_models`] slice.
//! 3. The model's system prompt is auto-selected by
//! `LlmClient::from_config` when the
//! configured `--llm-model` matches a known model name (and the user hasn't
//! explicitly overridden `--system-prompt`).
//!
//! Unknown models fall back to the generic [`crate::config::DEFAULT_SYSTEM_PROMPT`].
// ---------------------------------------------------------------------------
// Canonical model names
// ---------------------------------------------------------------------------
/// StealthyLM-Emotive — the default local voice-optimised model.
///
/// Qwen2.5-1.5B-Instruct fine-tuned for Skadoosh: zero markdown, short clauses,
/// emotion-aware tone, and grounded tool-calling. Ships as a Q4_K_M GGUF.
///
/// Download and setup:
/// ```bash
/// wget https://huggingface.co/StealthyML/StealthyLM-Emotive/resolve/main/StealthyLM_Q4KM.gguf
/// echo 'FROM ./StealthyLM_Q4KM.gguf' > Modelfile
/// ollama create stealthylm -f Modelfile
/// ```
///
/// Context: 32 KiB tokens. Pairs with `--tts-emotion` for expressive speech.
pub const STEALTHYLM: &str = "stealthylm";
/// Raw GGUF filename recognised as an alias for the StealthyLM model
/// (Ollama loads GGUF files by name when the file is in the models directory).
pub const STEALTHYLM_GGUF: &str = "StealthyLM_Q4KM.gguf";
// ---------------------------------------------------------------------------
// Model configurations
// ---------------------------------------------------------------------------
/// Metadata for one known model.
/// System prompt tailored for StealthyLM-Emotive.
///
/// StealthyLM is fine-tuned for voice: it avoids markdown, produces short
/// clauses that match Skadoosh's streaming TTS, and varies its emotional tone
/// to fit the context. The prompt reinforces these strengths without wasting
/// tokens on instructions the model already internalises from training.
const STEALTHYLM_SYSTEM_PROMPT: &str = "You are Skadoosh, an expressive voice \
assistant. Speak in short, natural clauses — one to two sentences per \
thought. Vary your tone to match the context: warm and empathetic for \
personal topics, crisp and factual for information. Never use markdown, \
lists, or formatting — plain speech only. If you don't know something, \
say so honestly.";
/// Slice of all known models (add new models here).
/// Looks up a known model by its canonical name (case-sensitive).
/// Returns `true` when the model is optimised for emotion-aware TTS
/// (pairs well with `--tts-emotion`).