[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 session_dir = "transcripts" save_audio = false session_gap_min = 5.0 [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 chat_slot_id = "" command_slot_id = "" 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." brief_compaction_system_prompt = "You compress a triage briefing conversation. Preserve every opportunity, blocker, owner, responsibility, decision, deadline, and open question; drop 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 maintain a living brief of a business conversation. Given the current brief (your previous reply, if any) and a new transcript segment, return the UPDATED brief as plain text only, with no markdown fences and no JSON. Open with a Summary section: a rolling overview of the conversation so far, one to a few sentences for a short session and growing to a short paragraph or two as the session extends. Preserve prior content unless the new segment contradicts it; merge duplicates; prune stale items; keep owners, responsibilities, and deadlines explicit. Use short sections: Summary, Opportunities, Blockers/Risks, Responsibilities, Decisions, Action Items, Deadlines, Open Questions. Output the brief text directly; never emit tool calls, function-call syntax, or special wrapper tokens." [triage] enabled = false questions_file = "questions.json" window = 500 state_char_budget = 3000 predict_max_tokens = 1024 confidence_field = "answer_confidence" escalate_threshold = 0.6 choice_min_confidence = 0.85 extract_enabled = true extract_max_tokens = 1536 extract_timeout_s = 30.0 brief_slot_id = "" brief_gate_enabled = true brief_gate_threshold = 0.5 brief_max_chars = 4000 brief_pending_char_budget = 3000 device = "" preload = ["multilingual"] default_checkpoint = "multilingual" dump_io = false [speaker] enabled = false model_path = "" provider = "cpu" threshold_id = 0.60 threshold_new = 0.45 min_enroll_s = 2.0 rms_floor = 0.0 margin = 0.04 mint_cooldown_s = 60.0 confirm_s = 12.0 max_prototypes = 8 provisional_ttl_h = 24.0 store_dir = "speakers" join_timeout_s = 2.0 [brief] write = false [debug] enabled = false dir = "debug" heartbeat = true max_bytes_per_day = 50000000