# คัดลอกไฟล์นี้เป็น .env แล้วใส่ค่าจริง: cp .env.example .env # ── จำเป็น ──────────────────────────────────────────────── # คีย์ของ TypeSafe (โมเดล Jev) ขอได้ที่ https://typesafe.ai TYPESAFE_API_KEY= # ── สมองส่วนคุย (ตอบคำถาม + ขับเบราว์เซอร์) ───────────────── # local = รันในเครื่องด้วย mlx_lm.server (ฟรี ไม่มีโควตา ข้อมูลไม่ออกนอกเครื่อง, ครั้งแรกดาวน์โหลด ~2.3 GB) # cloud = ใช้ OpenRouter หรือ Google Gemini ตามคีย์ด้านล่าง LLM_MODE=local LOCAL_LLM_MODEL=tawankri/typhoon2.5-qwen3-4b-mlx-4Bit LOCAL_LLM_PORT=18765 # ใช้เมื่อ LLM_MODE=cloud — ใส่อย่างใดอย่างหนึ่ง (มีทั้งคู่จะใช้ OpenRouter) OPENROUTER_API_KEY= # คีย์ Google AI Studio (Gemini) https://aistudio.google.com/apikey (รุ่นฟรีมีเพดานต่อนาทีต่ำ) GOOGLE_API_KEY= # โมเดล cloud เว้นว่าง = ค่าเริ่มต้น (OpenRouter: anthropic/claude-haiku-4.5, Google: gemini-3.5-flash-lite) LLM_MODEL= AGENT_MODEL= # โมเดลตัดสินใจของ TypeSafe JEV_MODEL=jev-latest # ความมั่นใจขั้นต่ำ (0-1) ต่ำกว่านี้จะขอให้พูดใหม่ CONF_MIN=0.65 # ความน่าจะเป็นขั้นต่ำว่าเป็นคำสั่งซ้อน ถึงจะถามรอบสอง (สเปก 0.5 · วัดแล้วแนะนำ 0.75 กันประโยคเดี่ยวถูกแยกผิด) COMPOUND_MIN=0.5 # ── เสียงพูด ────────────────────────────────────────────── # เสียง (ดูรายชื่อ: say -v '?') และความเร็ว (คำต่อนาที) TTS_VOICE=Kanya TTS_RATE=230 # ระดับเสียง: 28 ≈ ทุ้มแบบผู้ชาย, เว้นว่าง = เสียงปกติของ Kanya TTS_PITCH=28 # ── การฟังและการคุย ────────────────────────────────────── # คำปลุก: ต้องเรียกชื่อนี้ก่อนสั่ง (คั่นหลายคำด้วย ,) ใส่ off = ฟังทุกประโยคโดยไม่ต้องเรียกชื่อ WAKE_WORD=น้องจาง # หลังคุยกันแล้ว คุยต่อได้กี่วินาทีโดยไม่ต้องเรียกชื่อซ้ำ (นับจากตอนน้องจางพูดจบ) CONVO_SEC=30 # การพูดแทรกตอนน้องจางกำลังพูด: auto = เปิดเมื่อมีตัวตัดเสียงสะท้อน (AEC), on = เปิดเสมอ (ใส่หูฟัง), off = ปิด BARGE_IN=auto # ความเงียบกี่มิลลิวินาทีถึงถือว่าจบประโยค (น้อย = ตอบไว แต่อาจตัดกลางประโยค) SILENCE_MS=550 # เกณฑ์ความน่าจะเป็นว่าเป็นเสียงพูด (0-1) ห้องเสียงดังให้เพิ่มขึ้น VAD_THRESHOLD=0.5 # สั่งเปิด/ปิดได้ทุกแอปที่ติดตั้งในเครื่อง: auto / off EXTRA_APPS=auto # ── หน้าจอ ──────────────────────────────────────────────── # ไอคอนไมค์บนแถบเมนูด้านบน และหน้าจอ J.A.R.V.I.S ลอยบนจอ: on / off MENUBAR=on HUD=on # ── ถอดเสียง ─────────────────────────────────────────── # ตัวหลัก: auto = ตัวถอดเสียงไทยของ Apple ในเครื่อง (macOS 26+, ไม่ต้องขอสิทธิ์, แม่นกว่า Whisper มากกับเสียงจริง) # ถ้าใช้ไม่ได้จะใช้ Whisper · apple = บังคับใช้ของ Apple · whisper = ใช้ Whisper อย่างเดียว STT_ENGINE=auto # (ของ Apple ต้องมีภาษาไทยใน System Settings › Keyboard › Dictation และ Command Line Tools สำหรับคอมไพล์ครั้งแรก) # รุ่นหลัก (MLX) เปลี่ยนเป็น chayapats/typhoon-whisper-turbo-mlx ได้ (จูนภาษาไทย ขนาดเท่ากัน) MLX_WHISPER_REPO=mlx-community/whisper-large-v3-turbo # คำใบ้ชื่อแอป/คำปลุกให้ Whisper: auto (ปิดเองกับรุ่น Typhoon) / on / off WHISPER_PROMPT_MODE=auto # ความเห็นที่สอง: เรียกชื่อแล้วแต่ Jev ไม่มั่นใจ → ถอดซ้ำด้วยรุ่นที่จูนไทย # auto = ใช้ถ้าดาวน์โหลด Typhoon ไว้แล้ว, off = ปิด, หรือใส่ชื่อ repo MLX STT_SECOND_OPINION=auto # ใส่ชื่อโฟลเดอร์เพื่อเก็บเสียงแต่ละประโยคเป็น WAV ไว้ทดสอบ (เว้นว่าง = ไม่เก็บ) SAVE_UTTERANCES= # ข้อความที่ได้ยินแต่ไม่ได้เรียกน้องจาง (เช่น คนในบ้านคุยกัน): เว้นว่าง = log บอกแค่ความยาว · all = พิมพ์ข้อความด้วย LOG_HEARD= # เปิด Chrome ด้วยโปรไฟล์ไหน (ชื่อที่เห็นใน Chrome หรือชื่อโฟลเดอร์ เช่น Default) เว้นว่าง = โปรไฟล์ที่ใช้ล่าสุด CHROME_PROFILE=