# Lyra V1 - Configuration Example # Copier vers config.yaml et remplir vos valeurs # Les secrets (mots de passe, tokens, cles API) vont dans secrets.yaml # ============================================================================= # MODES DE FONCTIONNEMENT # ============================================================================= modes: default: confirmation: true read_first: true tts_response: true verbose: true performance: confirmation: false read_first: false tts_response: false verbose: false preload_connections: true timeout: 5 active_mode: default # ============================================================================= # LLM Configuration (Ollama) # ============================================================================= llm: provider: ollama model: qwen2.5-coder:14b base_url: http://localhost:11434 timeout: 120 temperature: 0.3 max_tokens: 2048 # ============================================================================= # Speech-to-Text (faster-whisper) # ============================================================================= stt: engine: faster-whisper model: base language: fr device: cuda compute_type: float16 beam_size: 5 vad_filter: true # ============================================================================= # Text-to-Speech (Piper) # ============================================================================= tts: engine: piper # Voix par defaut. Surchargee par ~/.lyra/settings.json (commande /setting). # Voix installees dans models/ : upmc (jessica/pierre), siwis, tom, mls, gilles model: fr_FR-upmc-medium speaker_id: 0 length_scale: 1.0 # ============================================================================= # MCP Servers # ============================================================================= mcp: server_path: /chemin/vers/mcp-server/dist/index.js timeout: 60 servers: fedora: enabled: true command: node args: - mcp-servers/fedora-agents/dist/index.js # clone par l'installeur timeout: 120 tv: enabled: true command: python args: - /chemin/vers/lyra/mcp-servers/pylips-mcp/server.py timeout: 10 keep_alive: true hue: enabled: true command: python3 args: - /chemin/vers/hue-mcp/hue_server.py env: HUE_BRIDGE_IP: "203.0.113.X" timeout: 10 keep_alive: true denon: enabled: true command: python3 args: - /chemin/vers/lyra/mcp-servers/denon-mcp/server.py timeout: 10 keep_alive: true catt: enabled: true command: python3 args: - /chemin/vers/catt-mcp/server.py timeout: 15 keep_alive: true # ============================================================================= # TV Philips # ============================================================================= tv: host: "203.0.113.X" user: null # voir secrets.yaml -> tv.user pass: null # voir secrets.yaml -> tv.pass mac: "XX:XX:XX:XX:XX:XX" # pour Wake-on-LAN # ============================================================================= # Denon AVR # ============================================================================= denon: host: "203.0.113.X" port: 23 mac: "XXXXXXXXXXXX" # ============================================================================= # Philips Hue # ============================================================================= hue: bridge_ip: "203.0.113.X" username: null # voir secrets.yaml -> hue.username # Cles pour hue_beat (Entertainment API DTLS) — a placer dans secrets.yaml: # hue: # clientkey: "VOTRE_CLIENTKEY_32_CHARS_HEX" # Creee lors du pairing Entertainment # area_id: "VOTRE_AREA_UUID" # UUID de l'Entertainment Area Hue # # Pour obtenir ces valeurs: # 1. Activer l'API Entertainment dans l'app Hue # 2. Creer une Entertainment Area (regroupement de lumieres) # 3. Appuyer sur le bouton du bridge puis POST /api avec devicetype et generateclientkey=true # ============================================================================= # Home Assistant # ============================================================================= homeassistant: url: "http://localhost:8123" token: null # voir secrets.yaml -> homeassistant.token enabled: true # ============================================================================= # n8n Webhooks # ============================================================================= n8n: base_url: http://localhost:5678 api_key: null # voir secrets.yaml -> n8n.api_key webhooks: clone-vm: /webhook/lyra-clone-vm backup-create: /webhook/lyra-backup-create backup-restore: /webhook/lyra-backup-restore enabled: true # ============================================================================= # Discord Notifications # ============================================================================= discord: webhook_url: null # voir secrets.yaml -> discord.webhook_url enabled: true notify_on: - async_complete - errors # ============================================================================= # Securite # ============================================================================= security: require_snapshot_before_delete: true snapshot_max_age_minutes: 5 read_first_enabled: true # Les outils a confirmer sont dans lyra/core/constants.py (DANGEROUS_TOOLS). # ============================================================================= # Audio # ============================================================================= audio: sample_rate: 48000 channels: 1 silence_threshold: 0.005 silence_duration: 1.0 input_device: null output_device: null # ============================================================================= # Logging # ============================================================================= logging: level: INFO format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" file: null rich_console: true # ============================================================================= # Paths # ============================================================================= paths: prompts: prompts/ logs: logs/ cache: .cache/ # Scripts systeme (vm-controller, backup-manager, kvm) installes root:root # par l'installeur. Surcharge possible par LYRA_SCRIPTS_DIR. scripts: /usr/local/lib/lyra/scripts # ============================================================================= # RAG Configuration # ============================================================================= rag: enabled: true chromadb: persist_directory: ".chromadb" collection_name: "lyra_mcp_specs_v2" embedding_model: "paraphrase-multilingual-MiniLM-L12-v2" retrieval: semantic_top_k: 10 keyword_top_k: 10 fusion_top_k: 5 rrf_k: 60 # ============================================================================= # Dual Models # ============================================================================= models: # Maintien des modeles en VRAM apres le dernier appel : "30m", "2h", un # nombre de secondes, ou -1 pour illimite (reponse immediate, VRAM occupee). keep_alive: "30m" ephaistos: name: "qwen2.5-coder:0.5b" # experimental 3GB # name: "qwen2.5-coder:7b" # production 5GB temperature: 0.1 lyra: name: "llama3.2:1b" # experimental 1GB # name: "llama3.2:3b" # production 2.5GB temperature: 0.5 # ============================================================================= # Session # ============================================================================= session: max_turns: 10 # ============================================================================= # Notion Logging # ============================================================================= notion: enabled: false database_id: null token: null # ============================================================================= # Confidentialite # ============================================================================= # Purge de l'historique des echanges, du feedback et des journaux d'erreurs MCP # a l'arret du demon (fin de mission). Desactivee par defaut ; a la main : # `lyra --purge --dry-run` (liste) puis `lyra --purge` (efface et verifie). privacy: purge_on_stop: false # ============================================================================= # RAG Enhanced # ============================================================================= rag_enhanced: enabled: true slang_normalizer: enabled: true dict_path: "data/slang_dict.json" max_patterns: 200 log_normalizations: true synonym_expander: enabled: false dict_path: "data/synonym_dict.json" max_synonyms: 6 max_tokens_added: 15 context_injector: enabled: true db_path: "data/session_history.db" default_window: 5 max_window: 15 fifo_limit: 15 cache_ttl: 3600 rag_3tier: enabled: true collections: - "lyra_mcp_registry_v3" - "lyra_mcp_capabilities_v3" - "lyra_mcp_parameters_v3" cascade_strategy: "early_stop" feedback_loop: enabled: true confidence_high: 0.85 confidence_low: 0.60 suggestion_threshold: 3 auto_threshold: 5 metrics: enabled: true log_path: "logs/rag_enhanced_metrics.jsonl" # ============================================================================= # Tracking MCP # ============================================================================= tracking: api_url: "http://127.0.0.1:8765" server_script: "/chemin/vers/MCP/tracking/server.py" venv_python: "/chemin/vers/MCP/tracking/.venv/bin/python" # ============================================================================= # Scenes (Phase 6 - Iron Man) # ============================================================================= scenes: ironman: # Eteint les ecrans PC pendant le blackout (necessite Hyprland). # Sortie: n'importe quelle touche clavier (armee 1s apres extinction). pc_screens: false # Lance YouTube pendant le blackout via ADB deep-link: la musique # demarre au flash au lieu de 3-15s apres (necessite adb + TV Android). anticipate_music: false