[audio] backend = "parec" device = "VirtualMicSink.monitor" sample_rate = 16000 channels = 1 frame_ms = 30 gain = 1.0 [vad] aggressiveness = 2 pre_roll_ms = 400 speech_start_ms = 90 silence_ms = 700 min_utterance_ms = 300 max_utterance_s = 30.0 chunk_pause_ms = 350 soft_max_s = 10.0 rms_floor = 0.008 trailing_trim_ms = 200 [whisper] backend = "faster-whisper" model = "small" device = "cpu" compute_type = "int8" language = "auto" beam_size = 1 vad_filter = false cpu_threads = 0 no_speech_prob_max = 0.6 avg_logprob_min = -1.0 language_strategy = "static" sticky_redetect_logprob = -0.8 [sink] sink_name = "VirtualMicSink" remap_source_name = "VirtualMic" loopback_latency_msec = 1 monitor_output = false [output] stdout = true jsonl = false jsonl_dir = "transcripts" save_audio = false audio_dir = "audio" [daemon] queue_size = 50 backlog_warn_at = 5 [events] socket = "" heartbeat_ms = 1000 ring_size = 200 [assistant] control_socket = "" stall_timeout_ms = 3000 worker_stall_ms = 15000 command_arm_timeout_s = 10.0 chat_idle_timeout_s = 300.0 turn_gap_s = 1.5 require_viewer = true chat_exit_phrases = ["end conversation", "that's all", "stop listening"] [audit] enabled = true dir = "audit" [llm] enabled = true endpoint = "http://localhost:9931/v1/chat/completions" temperature = 0.7 max_tokens = 1024 timeout_s = 120.0 cache_prompt = true max_context_tokens = 131072 compaction_safety_margin = 256 compaction_enabled = true compaction_trigger_ratio = 0.8 compaction_keep_turns = 6 compaction_max_tokens = 512 compaction_timeout_s = 30.0 compaction_input_tokens = 8192 compaction_system_prompt = "You compress a conversation. Preserve names, numbers, decisions, user preferences, and unresolved questions. Omit pleasantries. Output only the summary." inference_queue_size = 8 trim_block_turns = 4 max_tool_iterations = 3 system_prompt_chat = "You are a concise voice assistant. Reply in 1-3 sentences." system_prompt_command = "You translate a spoken request into a single tool call when one applies." triage_system_prompt = "You extract structured signals from a spoken conversation. Output only a JSON object with exactly these keys: {\"summary\": str, \"opportunities\": [str], \"doubts\": [str], \"action_items\": [{\"what\": str, \"why\": str}], \"risks\": [str]}. Output no prose and no markdown fences. Use empty lists when a category is empty." [triage] enabled = false questions_file = "questions.json" window = 8 state_char_budget = 1200 confidence_field = "answer_confidence" escalate_threshold = 0.6 choice_min_confidence = 0.85 extract_enabled = true extract_max_tokens = 512 extract_timeout_s = 30.0 device = "" preload = ["multilingual"] default_checkpoint = "multilingual"