config.example.toml 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. [audio]
  2. backend = "parec"
  3. device = "VirtualMicSink.monitor"
  4. sample_rate = 16000
  5. channels = 1
  6. frame_ms = 30
  7. gain = 1.0
  8. [vad]
  9. aggressiveness = 2
  10. pre_roll_ms = 400
  11. speech_start_ms = 90
  12. silence_ms = 700
  13. min_utterance_ms = 300
  14. max_utterance_s = 30.0
  15. chunk_pause_ms = 350
  16. soft_max_s = 10.0
  17. rms_floor = 0.008
  18. trailing_trim_ms = 200
  19. [whisper]
  20. backend = "faster-whisper"
  21. model = "small"
  22. device = "cpu"
  23. compute_type = "int8"
  24. language = "auto"
  25. beam_size = 1
  26. vad_filter = false
  27. cpu_threads = 0
  28. no_speech_prob_max = 0.6
  29. avg_logprob_min = -1.0
  30. language_strategy = "static"
  31. sticky_redetect_logprob = -0.8
  32. [sink]
  33. sink_name = "VirtualMicSink"
  34. remap_source_name = "VirtualMic"
  35. loopback_latency_msec = 1
  36. monitor_output = false
  37. [output]
  38. stdout = true
  39. jsonl = false
  40. session_dir = "transcripts"
  41. save_audio = false
  42. session_gap_min = 5.0
  43. [daemon]
  44. queue_size = 50
  45. backlog_warn_at = 5
  46. [events]
  47. socket = ""
  48. heartbeat_ms = 1000
  49. ring_size = 200
  50. [assistant]
  51. control_socket = ""
  52. stall_timeout_ms = 3000
  53. worker_stall_ms = 15000
  54. command_arm_timeout_s = 10.0
  55. chat_idle_timeout_s = 300.0
  56. turn_gap_s = 1.5
  57. require_viewer = true
  58. chat_exit_phrases = ["end conversation", "that's all", "stop listening"]
  59. [audit]
  60. enabled = true
  61. dir = "troubleshoot/audit"
  62. [llm]
  63. enabled = true
  64. endpoint = "http://localhost:9931/v1/chat/completions"
  65. model = ""
  66. api_key_env = ""
  67. session_id = ""
  68. session_header = ""
  69. user_agent = ""
  70. reasoning_effort = ""
  71. extra_body = {}
  72. temperature = 0.7
  73. max_tokens = 1024
  74. timeout_s = 120.0
  75. cache_prompt = true
  76. chat_slot_id = ""
  77. command_slot_id = ""
  78. max_context_tokens = 131072
  79. compaction_safety_margin = 256
  80. compaction_enabled = true
  81. compaction_trigger_ratio = 0.8
  82. compaction_keep_turns = 6
  83. compaction_max_tokens = 512
  84. compaction_timeout_s = 30.0
  85. compaction_input_tokens = 8192
  86. compaction_system_prompt = "You compress a conversation. Preserve names, numbers, decisions, user preferences, and unresolved questions. Omit pleasantries. Output only the summary."
  87. 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."
  88. inference_queue_size = 8
  89. trim_block_turns = 4
  90. max_tool_iterations = 3
  91. system_prompt_chat = "You are a concise voice assistant. Reply in 1-3 sentences."
  92. system_prompt_command = "You translate a spoken request into a single tool call when one applies."
  93. triage_system_prompt = "You maintain a living brief of a business conversation. The caller sends CURRENT LEDGER plus CURRENT BRIEF plus NEW UTTERANCES. Reply with exactly two sections in this order: NEW FACTS: first, then BRIEF:. Facts go first so a truncated reply still preserves extraction (truncation safety). In NEW FACTS:, emit one fact per line as '- <fact>', or the single line 'none' when the new utterances add no new facts. Never repeat facts already listed in CURRENT LEDGER. In BRIEF:, 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 utterances contradict 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. Never emit a 'Prior Details:' section. Output the two sections directly; never emit tool calls, function-call syntax, or special wrapper tokens."
  94. [triage]
  95. enabled = false
  96. questions_file = "questions.json"
  97. window = 500
  98. state_char_budget = 3000
  99. periodic_s = 30.0
  100. predict_max_tokens = 1024
  101. confidence_field = "answer_confidence"
  102. escalate_threshold = 0.6
  103. choice_min_confidence = 0.85
  104. extract_enabled = true
  105. extract_max_tokens = 3072
  106. extract_timeout_s = 30.0
  107. extract_temperature = 0.2
  108. brief_slot_id = ""
  109. brief_gate_enabled = true
  110. brief_gate_threshold = 0.5
  111. brief_max_chars = 4000
  112. brief_pending_char_budget = 3000
  113. ledger_max_facts = 200
  114. fact_max_chars = 240
  115. device = ""
  116. preload = ["multilingual"]
  117. default_checkpoint = "multilingual"
  118. dump_io = false
  119. [speaker]
  120. enabled = false
  121. model_path = ""
  122. provider = "cpu"
  123. threshold_id = 0.60
  124. threshold_new = 0.45
  125. min_enroll_s = 2.0
  126. rms_floor = 0.0
  127. margin = 0.04
  128. mint_cooldown_s = 60.0
  129. confirm_s = 12.0
  130. max_prototypes = 8
  131. provisional_ttl_h = 24.0
  132. store_dir = "speakers"
  133. join_timeout_s = 2.0
  134. [brief]
  135. write = false
  136. [debug]
  137. enabled = false
  138. dir = "troubleshoot/debug"
  139. heartbeat = true
  140. max_bytes_per_day = 50000000