102 lines
3.4 KiB
JSON
102 lines
3.4 KiB
JSON
{
|
|
"_description": "Tunables for core/* modules. Loaded via core.config_loader.load('core').",
|
|
|
|
"brain": {
|
|
"allowed_callback_prefixes": [
|
|
"Project.Sanad.motion.",
|
|
"Project.Sanad.voice.",
|
|
"motion.",
|
|
"voice."
|
|
],
|
|
"gestural_speaking_default": false
|
|
},
|
|
|
|
"logger": {
|
|
"log_level": "INFO",
|
|
"format": "%(asctime)s [%(name)s] %(levelname)-7s %(message)s",
|
|
"datefmt": "%Y-%m-%d %H:%M:%S",
|
|
"file_max_bytes": 10485760,
|
|
"file_backup_count": 7
|
|
},
|
|
|
|
"event_bus": {
|
|
"emit_timeout_sec": 0.5
|
|
},
|
|
|
|
"paths": {
|
|
"_comment": "Path roots — resolved against BASE_DIR in core/config.py",
|
|
"data": "data",
|
|
"logs": "logs",
|
|
"scripts": "scripts",
|
|
"model": "model",
|
|
"audio_recordings": "data/audio",
|
|
"motion_recordings": "data/recordings/motion",
|
|
"motions": "data/motions"
|
|
},
|
|
|
|
"gemini_defaults": {
|
|
"_comment": "Baseline Gemini API config — SINGLE SOURCE OF TRUTH. All voice modules read from here.",
|
|
"api_key": "",
|
|
"model_live": "gemini-2.5-flash-native-audio-preview-12-2025",
|
|
"model_ws_uri": "wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent",
|
|
"voice_name": "Charon",
|
|
"ws_timeout_sec": 30,
|
|
"default_system_prompt": "You are Bousandah, a wise and friendly Emirati assistant. Speak strictly in the UAE dialect (Khaleeji). Be helpful, concise, and use local greetings like 'Marhaba' and 'Ya Khoy'."
|
|
},
|
|
|
|
"g1_hardware": {
|
|
"_comment": "G1 humanoid hardware constants — shared by every motion/voice module that talks to the arm.",
|
|
"num_motor": 29,
|
|
"enable_arm_sdk_index": 29,
|
|
"replay_hz": 60.0
|
|
},
|
|
|
|
"script_files": {
|
|
"_comment": "Filenames (under scripts/) used across voice + dashboard",
|
|
"persona": "sanad_script.txt",
|
|
"rules": "sanad_rule.txt",
|
|
"arm_phrases": "sanad_arm.txt"
|
|
},
|
|
|
|
"dashboard_defaults": {
|
|
"host": null,
|
|
"port": 8000,
|
|
"interface": "wlan0"
|
|
},
|
|
|
|
"audio_defaults": {
|
|
"_comment": "Host PulseAudio fallback only — the G1 deployment uses UDP multicast mic + AudioClient.PlayStream speaker (see SANAD_USE_G1_MIC in config.py LIVE_TUNE). Default here is the Jetson/G1 built-in platform-sound chip.",
|
|
"send_sample_rate": 16000,
|
|
"receive_sample_rate": 24000,
|
|
"chunk_size": 512,
|
|
"channels": 1,
|
|
"sink": "alsa_output.platform-sound.analog-stereo",
|
|
"source": "alsa_input.platform-sound.analog-stereo"
|
|
},
|
|
|
|
"dds": {
|
|
"network_interface_default": "eth0"
|
|
},
|
|
|
|
"camera": {
|
|
"_comment": "Recognition tab camera daemon (parent process reads this). width/height/fps/jpeg_quality + the reconnect knobs configure CameraDaemon. Frames are cached in memory and pushed to the Gemini child over its stdin (no file drop). send_hz/stale_ms are read by the Gemini child via SANAD_VISION_SEND_HZ / SANAD_VISION_STALE_MS env vars (LIVE_TUNE).",
|
|
"width": 424,
|
|
"height": 240,
|
|
"fps": 15,
|
|
"jpeg_quality": 70,
|
|
"send_hz": 2,
|
|
"stale_ms": 1500,
|
|
"stale_threshold_s": 10.0,
|
|
"reconnect_min_s": 2.0,
|
|
"reconnect_max_s": 10.0,
|
|
"capture_timeout_ms": 5000
|
|
},
|
|
|
|
"faces": {
|
|
"_comment": "Face gallery for Gemini-side recognition. Folder layout: data/faces/face_{id}/{face_1.jpg, ...} + optional meta.json {\"name\": \"...\"}. Gemini does the matching — no local ML model.",
|
|
"dir_rel": "data/faces",
|
|
"max_samples_per_face": 3,
|
|
"primer_resize_long_side": 256
|
|
}
|
|
}
|