-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.example.yaml
More file actions
148 lines (146 loc) · 5.22 KB
/
Copy pathconfig.example.yaml
File metadata and controls
148 lines (146 loc) · 5.22 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
app:
name: SAM
version: 0.4.9
hotkey:
trigger: ctrl+space # hold to speak
text_input: ctrl+shift+space # open the typed-input box
ui:
overlay:
style: orb # orb (always-visible circle) | bar (legacy bottom bar)
orb:
size: 120 # core disc diameter in px
glow_padding: 28 # window margin reserved for the outer glow
ring_width: 3
opacity: 0.95
label: SAM
idle_fps: 12 # breathing framerate — SAM runs 24/7, keep this low
active_fps: 60
idle_animation: true # false = orb stops painting entirely when idle (0% CPU)
breathe_period_ms: 4000
spike_count: 36 # radial spikes drawn while listening/speaking
layer: auto # auto (bottom of z-order until called, then on top) | topmost | normal
hide_on_fullscreen: true
click_through: true # mouse passes through everything except the circle
caption_width: 560
caption_gap: 18
caption_max_lines: 6
position:
anchor: bottom-right # bottom-right | bottom-center | custom (set by Ctrl+drag)
x: null
y: null
screen: null
margin: 48
bar:
width: 800
height: 80
border_radius: 16
margin_bottom: 40
opacity: 0.68
animation:
slide_duration_ms: 220
fade_duration_ms: 180
text_stream_interval_ms: 45
auto_hide:
delay_seconds: 4
colors:
background: rgba(10, 10, 15, 0.92)
accent: '#00D4AA'
accent_thinking: '#38F2D8'
accent_speaking: '#00D4AA'
accent_listening: '#00BFFF'
text_primary: '#E8E8E8'
text_secondary: '#888888'
border: rgba(0, 212, 170, 0.15)
fonts:
primary: Segoe UI
monospace: Cascadia Code
fallback: Consolas
size_transcript: 15
size_status: 11
waveform:
bar_count: 35
fps: 60
min_height: 3
max_height: 32
bar_width: 3
bar_gap: 2
color: '#00D4AA'
mock:
listening_duration_ms: 2500
thinking_duration_ms: 1200
user_transcript: What's the weather like today?
assistant_response: It's 24°C and sunny in Istanbul right now. Perfect day to go outside.
logging:
level: DEBUG
file: logs/sam.log
audio:
sample_rate: 16000
channels: 1
dtype: int16
silence_threshold: 300
silence_duration_ms: 900 # tunable — lower feels snappier, too low cuts users off mid-sentence
max_record_seconds: 30
wake_word:
engine: openwakeword
model: assets/models/hey_sam.onnx
threshold: 0.4 # lower = easier to trigger (more false positives)
chunk_size: 1280
stt:
engine: faster-whisper
model: small
language: null # null = auto-detect spoken language (required for bilingual TTS)
beam_size: 1
device: cpu
compute_type: int8
partial_model: base # small model used for live transcription while you speak ("" = same as `model`, "off" = disable)
partial_interval_ms: 400 # minimum gap between two live decodes
instant:
enabled: true # answer predefined phrases instantly — never reaches the LLM
file: knowledge/instant_responses.yaml
tts:
engine: edge-tts
voice: en-US-GuyNeural # fallback voice — used when auto_language is off or the detected language isn't in `voices`
rate: +0%
volume: +0%
auto_language: true # switch voice automatically to match the language you spoke in
voices:
tr: tr-TR-EmelNeural
en: en-US-JennyNeural
llm:
context_window: 8
persona: >
You are SAM (Smart Assistant Module), a witty and self-aware AI voice assistant
for Windows. You were built by Samet 'Sabalax' Gürtuna — a solo developer who
coded you on a humble gaming laptop in a 6-square-meter room. You have dry humor
and you're genuinely helpful. When asked about yourself, be authentic and fun.
# system_prompt: ... # Set this to fully override persona + rules
intent:
enabled: true # intent classification (NORMAL/FENERBAHCE/COMPLEX)
rag:
enabled: true # Fenerbahce knowledge base retrieval
embedding_model: paraphrase-multilingual-MiniLM-L12-v2 # TR/EN cross-lingual
top_k: 5 # number of knowledge chunks to retrieve
memory:
enabled: true # long-term user memory — learns facts (name, job, school) as you talk
backend: json # json | null — writes memory.json + a human-readable memory.md, both local-only
ollama:
base_url: http://127.0.0.1:11434
model: qwen2.5:3b
vision_model: llava
temperature: 0.7
max_tokens: 256
keep_alive: 30m # keep the model resident in RAM/VRAM between requests
num_ctx: 4096 # increased for RAG context + longer history
autostart: true # start "ollama serve" in the background when SAM launches
executable: "" # blank = auto-discover (PATH, %LOCALAPPDATA%, Program Files)
startup_timeout_seconds: 45
existing_server_grace_seconds: 8 # wait this long for Ollama's own autostart before starting a server ourselves
stop_on_exit: false # never kill a server the user already had running
availability_ttl_seconds: 30
claude:
model: claude-sonnet-4-20250514
max_tokens: 512
spotify:
client_id: ""
client_secret: ""
redirect_uri: "http://127.0.0.1:8080"