559 lines
26 KiB
JSON
559 lines
26 KiB
JSON
{
|
|
"_description": "Bilingual voice command instructions — single source of truth for the voice dispatch tables. Loaded by Voice/marcus_voice.py at module level. Adding a new motion command, a new accent variant, a new Arabic phrasing, or fixing a misheard wake-word transcription is a JSON-only edit; no Python change required. Arabic phrase tables cover MSA (Fusha) plus Gulf/Khaleeji, Egyptian (Masri), Levantine (Shami), Iraqi, and Maghrebi dialects.",
|
|
|
|
"_format": "wake_words = whole-word substrings the dispatch gate looks for in the user's transcript. Any match (English or Arabic) opens motion for the current turn. actions = per-motion phrase tables. Each action has a `canonical` string (what marcus_brain receives), `user_phrases` (what the user might SAY when asking for the motion — used for fuzzy-match + Arabic-to-English translation after wake-word strip), and `bot_phrases` (what Gemini might SPEAK when acknowledging — used by the bot-side dispatcher to fire motion off Gemini's own confirmation). All matching is substring-based; English entries are matched case-insensitively, Arabic entries match as-is. Keep the canonical string consistent with Brain/command_parser.py vocabulary.",
|
|
|
|
"wake_words": {
|
|
"_comment": "All variants of the robot's name 'Sanad' — the gate that authorises motion. Add new mishearings here when you see them in logs/transcript.log under HEARD lines that should have triggered motion but didn't.",
|
|
"english": [
|
|
"sanad", "sannad", "sennad", "sunnad", "sinnad", "sonnad",
|
|
"sanat", "sunnat", "sonnat", "sinnat", "sennat",
|
|
"sanid", "sanud", "saned", "sanod", "sanaad",
|
|
"senad", "sinad", "sonad", "sunad",
|
|
"sanah", "sanath", "sanadh", "sonadh",
|
|
"samad", "somad", "sumad",
|
|
"thanad", "zanad",
|
|
"sa nad", "san ad", "san odd", "san add"
|
|
],
|
|
"arabic": [
|
|
"سند", "سنّاد", "ساند", "سنود", "سنَد", "سنّد", "سَند", "سنّود", "ساندي", "سنادي",
|
|
"يا سند", "يا سنّاد", "يا ساند", "يا سَند", "يا سنود", "ياسند", "ياسنود",
|
|
"السند", "السنّاد"
|
|
]
|
|
},
|
|
|
|
"actions": {
|
|
"turn_right": {
|
|
"canonical": "turn right",
|
|
"user_phrases": {
|
|
"english": ["turn right", "rotate right", "spin right", "go right", "face right", "right"],
|
|
"arabic": [
|
|
"استدر يميناً", "استدر يمينا", "ادر يميناً", "ادر يمينا", "لف يمين", "لف يميناً", "يمين",
|
|
"دور يمين", "دور لليمين", "دور على اليمين", "دور ع اليمين",
|
|
"خش يمين", "خش ع اليمين", "حوّد يمين", "حود يمين", "حوّد لليمين",
|
|
"دير يمين", "دير لليمين", "دير على ليمن", "دير ع اليمين",
|
|
"لف لليمين", "لف على اليمين", "لف عاليمين", "لف ع اليمين",
|
|
"روح يمين", "اتجه يمين", "اتجه لليمين", "تجه يمين"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["turning right"],
|
|
"arabic": [
|
|
"أستدير يميناً", "أستدير يمينا", "استدير يميناً", "استدير يمينا", "ألف يميناً", "ألف يمينا",
|
|
"بلف يمين", "بدور يمين", "أدور يمين", "أحوّد يمين", "أخش يمين"
|
|
]
|
|
}
|
|
},
|
|
|
|
"turn_left": {
|
|
"canonical": "turn left",
|
|
"user_phrases": {
|
|
"english": ["turn left", "rotate left", "spin left", "go left", "face left", "left"],
|
|
"arabic": [
|
|
"استدر يساراً", "استدر يسارا", "ادر يساراً", "ادر يسارا", "لف يسار", "لف يساراً", "يسار", "شمال",
|
|
"دور يسار", "دور شمال", "دور لليسار", "دور على اليسار", "دور ع الشمال",
|
|
"خش يسار", "خش شمال", "خش ع الشمال", "حوّد شمال", "حود شمال", "حوّد يسار", "حوّد لليسار",
|
|
"دير يسار", "دير شمال", "دير لليسار", "دير على ليسار", "دير ع الشمال",
|
|
"لف لليسار", "لف على اليسار", "لف عاشمال", "لف ع الشمال",
|
|
"روح يسار", "روح شمال", "اتجه يسار", "اتجه شمال", "اتجه لليسار", "تجه شمال"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["turning left"],
|
|
"arabic": [
|
|
"أستدير يساراً", "أستدير يسارا", "استدير يساراً", "استدير يسارا", "ألف يساراً", "ألف يسارا",
|
|
"بلف شمال", "بدور شمال", "أدور شمال", "أحوّد شمال", "أخش شمال"
|
|
]
|
|
}
|
|
},
|
|
|
|
"turn_around": {
|
|
"canonical": "turn around",
|
|
"user_phrases": {
|
|
"english": ["turn around", "turn back", "spin around", "about face", "face the other way"],
|
|
"arabic": [
|
|
"استدر للخلف", "استدر إلى الوراء", "اتجه للخلف", "ادر للخلف", "ارجع وجهك",
|
|
"لف ورا", "لف للورا", "لف للخلف", "دور ورا", "دور للورا", "دور للخلف",
|
|
"اتلف", "اتلف ورا", "دير وراك", "دير للورا", "استدر ورا",
|
|
"اقلب وجهك", "اقلب", "اعكس اتجاهك", "غيّر اتجاهك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["turning around"],
|
|
"arabic": [
|
|
"أستدير للخلف", "أستدير إلى الوراء", "استدير للخلف",
|
|
"بلف ورا", "بدور للورا", "أدور للخلف"
|
|
]
|
|
}
|
|
},
|
|
|
|
"move_forward": {
|
|
"canonical": "move forward",
|
|
"user_phrases": {
|
|
"english": ["move forward", "go forward", "walk forward", "step forward", "forward", "keep going", "walk ahead", "move ahead"],
|
|
"arabic": [
|
|
"تحرك للأمام", "تحرك إلى الأمام", "اذهب للأمام", "امش للأمام", "تقدم", "للأمام", "أمام",
|
|
"روح قدام", "روح لقدام", "روح كدام",
|
|
"امشي قدام", "امشي لقدام", "امش قدام",
|
|
"اتقدم", "تقدم لقدام", "يلا قدام", "يالله قدام",
|
|
"فوت", "فوت لقدام", "فوت قدام",
|
|
"سير لقدام", "سير قدام", "اسير قدام",
|
|
"خش قدام", "تعال قدام", "للقدام", "قدام"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["moving forward", "walking forward", "stepping forward", "going forward", "going ahead"],
|
|
"arabic": [
|
|
"أتحرك للأمام", "أتحرك إلى الأمام", "أتقدم", "أمشي للأمام", "أذهب للأمام",
|
|
"بمشي قدام", "براح قدام", "أروح قدام", "بتقدم", "بفوت لقدام"
|
|
]
|
|
}
|
|
},
|
|
|
|
"move_backward": {
|
|
"canonical": "move backward",
|
|
"user_phrases": {
|
|
"english": ["move back", "move backward", "go back", "go backward", "walk back", "walk backward", "step back", "backward", "back", "reverse"],
|
|
"arabic": [
|
|
"تحرك للخلف", "تحرك إلى الخلف", "اذهب للخلف", "امش للخلف", "ارجع", "ارجع للخلف", "للخلف", "خلف",
|
|
"روح ورا", "روح للورا", "ارجع ورا", "ارجع للورا",
|
|
"امشي ورا", "امشي للورا", "امش ورا",
|
|
"تأخر", "تراجع", "ورا", "للورا",
|
|
"رجع للخلف", "ارجع لورا", "رجع لورا",
|
|
"سير للورا", "سير ورا"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["moving backward", "moving back", "walking backward", "walking back", "stepping back", "going back"],
|
|
"arabic": [
|
|
"أتحرك للخلف", "أتحرك إلى الخلف", "أرجع", "أمشي للخلف", "أعود للخلف",
|
|
"بمشي ورا", "براح ورا", "أرجع ورا", "بتراجع"
|
|
]
|
|
}
|
|
},
|
|
|
|
"move_right": {
|
|
"canonical": "move right",
|
|
"user_phrases": {
|
|
"english": ["step right", "move right", "slide right", "strafe right", "sidestep right"],
|
|
"arabic": [
|
|
"تحرك يميناً", "تحرك يمينا", "خطوة يمين", "اتجه يميناً",
|
|
"زحلق يمين", "زحلق لليمين", "اتزحلق يمين",
|
|
"خطوة لليمين", "خطوة ع اليمين", "خطوة على اليمين",
|
|
"حرك يمين", "حرّك يمين", "اخطو يمين", "اخطو لليمين",
|
|
"زح يمين", "زح لليمين"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["moving right", "stepping right", "sliding right"],
|
|
"arabic": [
|
|
"أتحرك يميناً", "أتحرك يمينا", "أخطو يميناً",
|
|
"بزحلق يمين", "أزحلق يمين", "بخطو يمين"
|
|
]
|
|
}
|
|
},
|
|
|
|
"move_left": {
|
|
"canonical": "move left",
|
|
"user_phrases": {
|
|
"english": ["step left", "move left", "slide left", "strafe left", "sidestep left"],
|
|
"arabic": [
|
|
"تحرك يساراً", "تحرك يسارا", "خطوة يسار", "اتجه يساراً",
|
|
"زحلق يسار", "زحلق شمال", "زحلق لليسار", "اتزحلق شمال",
|
|
"خطوة شمال", "خطوة لليسار", "خطوة ع الشمال", "خطوة على اليسار",
|
|
"حرك يسار", "حرك شمال", "حرّك شمال", "اخطو يسار", "اخطو شمال", "اخطو لليسار",
|
|
"زح يسار", "زح شمال"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["moving left", "stepping left", "sliding left"],
|
|
"arabic": [
|
|
"أتحرك يساراً", "أتحرك يسارا", "أخطو يساراً",
|
|
"بزحلق شمال", "أزحلق شمال", "بخطو شمال"
|
|
]
|
|
}
|
|
},
|
|
|
|
"stop": {
|
|
"canonical": "stop",
|
|
"user_phrases": {
|
|
"english": ["stop", "halt", "wait", "pause", "freeze", "hold", "stop moving", "stand still", "don't move"],
|
|
"arabic": [
|
|
"توقف", "قف مكانك", "اوقف", "انتظر", "اثبت", "لا تتحرك",
|
|
"وقّف", "وقف", "وگف", "بطّل", "بطل حركة", "بطل",
|
|
"خلاص", "كفاية", "يكفي",
|
|
"استنى", "استنى شوية", "اصبر", "صبر", "اصبر شوية",
|
|
"تو", "ثبات", "اثبت مكانك", "ما تتحرك", "ما تمشي",
|
|
"هدّي", "هدّى", "روّق"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["stopping", "halting", "holding"],
|
|
"arabic": [
|
|
"أتوقف", "توقفت", "أنتظر",
|
|
"بوقّف", "وقّفت", "بستنى", "أصبر", "بطّلت"
|
|
]
|
|
}
|
|
},
|
|
|
|
"sit_down": {
|
|
"canonical": "sit down",
|
|
"user_phrases": {
|
|
"english": ["sit down", "sit", "take a seat", "have a seat"],
|
|
"arabic": [
|
|
"اجلس", "ارتح", "اقعد",
|
|
"اقعد على الأرض", "اقعد ع الأرض", "اجلس على الأرض",
|
|
"اگعد", "گلس", "تفضل اقعد", "ارتاح",
|
|
"خد راحتك واقعد", "اقعد يا سند"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["sitting down", "sitting"],
|
|
"arabic": [
|
|
"أجلس", "أقعد", "جلست",
|
|
"بقعد", "قعدت", "بجلس", "أرتاح"
|
|
]
|
|
}
|
|
},
|
|
|
|
"stand_up": {
|
|
"canonical": "stand up",
|
|
"user_phrases": {
|
|
"english": ["stand up", "stand", "get up", "rise"],
|
|
"arabic": [
|
|
"قف", "انهض", "ارفع نفسك",
|
|
"قوم", "گوم", "نوض", "نض",
|
|
"قوم على رجلك", "قوم على رجليك", "انهض من مكانك",
|
|
"اوقف على رجلك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["standing up", "getting up", "rising"],
|
|
"arabic": [
|
|
"أقف", "أنهض", "وقفت",
|
|
"بقوم", "قمت", "نضت", "بنهض"
|
|
]
|
|
}
|
|
},
|
|
|
|
"wave_hello": {
|
|
"canonical": "wave hello",
|
|
"user_phrases": {
|
|
"english": ["wave hello", "wave", "say hi", "greet", "wave to me", "wave at me"],
|
|
"arabic": [
|
|
"لوّح", "لوح", "لوّح بيدك", "حيّ", "سلّم",
|
|
"لوّح لي", "لوّحلي", "لوّح بيدك لي",
|
|
"سلّم بيدك", "سلّم علي", "حيّيني", "حيي",
|
|
"هز يدك", "هز إيدك", "هزّ ايدك",
|
|
"قول هاي", "قول مرحبا", "قول السلام",
|
|
"حييني", "سلم علي"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["waving hello", "waving", "saying hi", "greeting"],
|
|
"arabic": [
|
|
"ألوّح", "ألوح", "ألوّح بيدي", "أحيّ", "أسلّم",
|
|
"بلوّح", "بسلّم", "بهز إيدي", "أهز يدي"
|
|
]
|
|
}
|
|
},
|
|
|
|
"raise_arm": {
|
|
"canonical": "raise arm",
|
|
"user_phrases": {
|
|
"english": ["raise arm", "raise your arm", "lift your arm", "arm up", "hand up"],
|
|
"arabic": [
|
|
"ارفع يدك", "ارفع ذراعك", "اليد للأعلى",
|
|
"ارفع إيدك", "ارفع ايدك", "ارفع يديك",
|
|
"طلّع يدك", "طلع يدك", "طلّع إيدك", "طلع إيدك",
|
|
"علّي يدك", "علّي إيدك", "علي يدك",
|
|
"يدك فوق", "إيدك فوق", "اليد فوق", "حط يدك فوق",
|
|
"ارفع اليد", "ارفع ايديك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["raising arm", "raising my arm", "lifting my arm", "arm up"],
|
|
"arabic": [
|
|
"أرفع يدي", "أرفع ذراعي",
|
|
"برفع إيدي", "بطلّع إيدي", "بعلّي إيدي", "رفعت يدي"
|
|
]
|
|
}
|
|
},
|
|
|
|
"lower_arm": {
|
|
"canonical": "lower arm",
|
|
"user_phrases": {
|
|
"english": ["lower arm", "lower your arm", "drop your arm", "arm down", "hand down", "rest your arm"],
|
|
"arabic": [
|
|
"اخفض يدك", "اخفض ذراعك", "اليد للأسفل", "نزل يدك",
|
|
"نزّل يدك", "نزّل إيدك", "نزل إيدك", "نزّل ايدك",
|
|
"حط يدك", "حط إيدك", "حط ايدك", "خلي يدك تحت",
|
|
"طيح يدك", "طيّح يدك", "طيح إيدك",
|
|
"يدك تحت", "إيدك تحت", "اليد تحت",
|
|
"ارح يدك", "ريّح يدك", "ريّح إيدك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["lowering arm", "lowering my arm", "dropping my arm", "arm down"],
|
|
"arabic": [
|
|
"أخفض يدي", "أخفض ذراعي", "أنزل يدي",
|
|
"بنزّل إيدي", "نزّلت إيدي", "بريّح إيدي"
|
|
]
|
|
}
|
|
},
|
|
|
|
"point": {
|
|
"canonical": "point",
|
|
"user_phrases": {
|
|
"english": ["point", "point at it", "point to it", "point there"],
|
|
"arabic": [
|
|
"اشر", "أشِر", "اشر إلى", "اشر هناك",
|
|
"أشّر", "اشّر", "أشر بأصبعك", "أشر بصبعك", "اشر بصبعك",
|
|
"شاور", "شاورلي", "أشاور", "شاور هناك",
|
|
"ورّيني", "وريني", "ورجيني",
|
|
"بصبعك", "حدد", "حدد بصبعك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["pointing"],
|
|
"arabic": [
|
|
"أشير",
|
|
"بشاور", "بأشر", "بشير", "أشّرت"
|
|
]
|
|
}
|
|
},
|
|
|
|
"come_here": {
|
|
"canonical": "come here",
|
|
"user_phrases": {
|
|
"english": ["come here", "come to me", "come closer", "approach", "get closer", "come over here", "come"],
|
|
"arabic": [
|
|
"تعال", "تعال هنا", "تعال إليّ", "اقترب", "تقرب",
|
|
"تعالى", "تعالى هنا", "تعالى لي", "تعالى عندي",
|
|
"تعا", "تعا لهون", "تعا عندي",
|
|
"أجي", "أرواح", "ارواحلي",
|
|
"قرّب", "قرب", "قرّب لي", "قرّب مني", "قرب مني",
|
|
"گرّب", "گرب لي",
|
|
"يلا تعال", "يا الله تعال", "تعال جنبي", "خش جنبي",
|
|
"تعال يا سند", "تعال بسرعة", "هلم"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["coming over", "coming to you", "approaching"],
|
|
"arabic": [
|
|
"آتي إليك", "أقترب", "أتقرّب",
|
|
"بجي", "جاي", "جاي لك", "بقرّب", "أقرّب منك"
|
|
]
|
|
}
|
|
},
|
|
|
|
"follow_me": {
|
|
"canonical": "follow me",
|
|
"user_phrases": {
|
|
"english": ["follow me", "come with me", "walk with me"],
|
|
"arabic": [
|
|
"اتبعني", "تعال معي", "امش معي",
|
|
"تعال ورايا", "تعال ورائي", "تعا ورايي",
|
|
"تعال ويايا", "تعال وياي",
|
|
"خش ورايا", "خليك ورايا",
|
|
"يلا معي", "يلا معاي", "يا الله معي",
|
|
"روح ويايا", "امشي معاي", "امشي معي",
|
|
"خليك معي", "ضل معي", "ضل ورايا",
|
|
"تعال خلفي", "خش خلفي", "اتبعني يا سند"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["following you", "following", "coming with you"],
|
|
"arabic": [
|
|
"أتبعك", "آتي معك", "أمشي معك",
|
|
"بتبعك", "جاي ورايك", "بمشي معاك", "ماشي معاك"
|
|
]
|
|
}
|
|
},
|
|
|
|
"stay_here": {
|
|
"canonical": "stay here",
|
|
"user_phrases": {
|
|
"english": ["stay here", "stay", "wait here", "hold position", "don't follow me"],
|
|
"arabic": [
|
|
"ابق هنا", "اثبت هنا", "انتظر هنا", "لا تتبعني",
|
|
"خليك هنا", "خليك هون", "خلك هنا", "خل هنا",
|
|
"فضل هنا", "ضل هنا", "ضل هون", "ابقى هنا",
|
|
"اصبر هنا", "استنى هنا", "تو هنا",
|
|
"ثبات هنا", "اثبت بمكانك", "ابق بمكانك",
|
|
"ما تتبعني", "ما تجي ورايا", "ما تمشي معي",
|
|
"خليك بمحلك", "ضل بمحلك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["staying here", "staying", "waiting here"],
|
|
"arabic": [
|
|
"أبقى هنا", "أنتظر هنا", "أثبت هنا",
|
|
"باقي هنا", "بضل هنا", "بستنى هنا", "بقعد هنا"
|
|
]
|
|
}
|
|
},
|
|
|
|
"go_home": {
|
|
"canonical": "go home",
|
|
"user_phrases": {
|
|
"english": ["go home", "return home", "head home", "go back home"],
|
|
"arabic": [
|
|
"اذهب للبيت", "اذهب إلى البيت", "ارجع للبيت", "عُد للبيت",
|
|
"روح البيت", "روح للبيت", "روح ع البيت", "روح عالبيت", "روح بيت",
|
|
"ارجع البيت", "ارجاع البيت", "ارجع عالبيت", "ارجع ع البيت",
|
|
"خش البيت", "اطلع البيت",
|
|
"ارجع للقاعدة", "روح للقاعدة", "اتجه للبيت", "اتجه للقاعدة",
|
|
"عد للبيت", "عود للبيت"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["going home", "heading home", "returning home"],
|
|
"arabic": [
|
|
"أعود للبيت", "أذهب للبيت", "أتجه للبيت",
|
|
"براح البيت", "راجع البيت", "بروح للبيت", "أرجع للبيت"
|
|
]
|
|
}
|
|
},
|
|
|
|
"patrol": {
|
|
"canonical": "patrol",
|
|
"user_phrases": {
|
|
"english": ["patrol", "start patrol", "begin patrol", "patrol the area", "walk the route"],
|
|
"arabic": [
|
|
"طوف", "ابدأ الدورية", "ابدأ التطواف",
|
|
"دور بالمكان", "دور حواليك", "دور حوالينا", "لف بالمكان", "لف في المكان",
|
|
"تجول", "ابدأ التجوال", "تجول بالمكان",
|
|
"حراسة", "ابدأ الحراسة", "احرس المكان",
|
|
"طوف بالمكان", "تطوّف", "روح طوف"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["patrolling", "starting patrol", "beginning patrol"],
|
|
"arabic": [
|
|
"أطوف", "أبدأ الدورية", "أبدأ التطواف",
|
|
"بطوف", "بدور بالمكان", "ببدأ الدورية", "أتجول"
|
|
]
|
|
}
|
|
},
|
|
|
|
"look_around": {
|
|
"canonical": "look around",
|
|
"user_phrases": {
|
|
"english": ["look around", "scan the room", "scan around", "survey the area", "have a look around"],
|
|
"arabic": [
|
|
"انظر حولك", "تفحص المكان", "افحص المكان", "تطلع حولك",
|
|
"شوف حولك", "شوف حواليك", "شوف الغرفة", "شوف اللي حواليك",
|
|
"بص حواليك", "بص حولك", "بص في الغرفة",
|
|
"طلّ حواليك", "طلّ حولك", "تطلّع حواليك", "تطلّع حولك",
|
|
"افحص الغرفة", "افحص الموقع", "افحص اللي حولك",
|
|
"اسكان المكان", "امسح المكان", "امسح بنظرك"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": ["looking around", "scanning around", "surveying the area"],
|
|
"arabic": [
|
|
"أنظر حولي", "أتفحص المكان", "أتطلع حولي",
|
|
"بشوف حواليّ", "بطلّ حواليّ", "بفحص المكان", "بمسح المكان"
|
|
]
|
|
}
|
|
},
|
|
|
|
"what_do_you_see": {
|
|
"canonical": "what do you see",
|
|
"user_phrases": {
|
|
"english": ["what do you see", "what can you see", "describe this", "describe what you see", "tell me what you see"],
|
|
"arabic": [
|
|
"ماذا ترى", "ماذا تشاهد", "صف ما تراه", "أخبرني ماذا ترى",
|
|
"شو شايف", "شو بتشوف", "شو عم تشوف", "شو تشوف",
|
|
"شنو تشوف", "شنو شايف", "شنو هذا",
|
|
"إيش تشوف", "ايش تشوف", "ايش شايف", "إيش شايف",
|
|
"وش تشوف", "وش شايف", "وش هذا",
|
|
"شايف إيه", "بتشوف إيه", "إيه اللي قدامك", "إيه اللي شايفه", "إيه ده",
|
|
"اشنو كاتشوف", "اشنو كاتشوف قدامك",
|
|
"صف لي اللي قدامك", "قول لي شو شايف", "وصف لي اللي قدامك", "وصفلي اللي قدامك",
|
|
"احكي لي اللي شايفه", "احكيلي شو شايف", "قولي شو شايف"
|
|
]
|
|
},
|
|
"bot_phrases": {
|
|
"english": [],
|
|
"arabic": []
|
|
}
|
|
}
|
|
},
|
|
|
|
"_parametric_description": "Motion confirmations from Gemini that carry a NUMBER (turn 90 degrees, walk 5 steps, walk 2 meters). Each entry is regex-matched against Gemini's spoken reply; the captured groups are substituted into command_template via $1, $2 placeholders, and the resulting command_template string is dispatched to the brain — Brain/command_parser.py already parses 'turn left 90 degrees' / 'walk forward 5 steps' / 'walk 2 meters' natively. Order matters: more-specific patterns (with direction) MUST come before less-specific (no direction) so they claim spans first.",
|
|
"parametric_actions": [
|
|
{
|
|
"_": "turn left/right N degrees — 'Turning right 90 degrees.'",
|
|
"regex": "(?:turn(?:ing)?|spin(?:ning)?|rotat(?:e|ing))\\s+(left|right)\\s+(\\d+)\\s*deg(?:ree(?:s)?)?",
|
|
"command_template": "turn $1 $2 degrees"
|
|
},
|
|
{
|
|
"_": "turn N degrees — 'Turning 360 degrees.'",
|
|
"regex": "(?:turn(?:ing)?|spin(?:ning)?|rotat(?:e|ing))\\s+(\\d+)\\s*deg(?:ree(?:s)?)?",
|
|
"command_template": "turn $1 degrees"
|
|
},
|
|
{
|
|
"_": "walk forward/back N steps — 'Walking forward 5 steps.'",
|
|
"regex": "(?:walk(?:ing)?|step(?:ping)?|mov(?:e|ing))\\s+(forward|back(?:ward)?)\\s+(\\d+)\\s+steps?",
|
|
"command_template": "walk $1 $2 steps"
|
|
},
|
|
{
|
|
"_": "walk N steps forward/back — 'Walking 5 steps forward.'",
|
|
"regex": "(?:walk(?:ing)?|step(?:ping)?|tak(?:e|ing))\\s+(\\d+)\\s+steps?\\s+(forward|back(?:ward)?)",
|
|
"command_template": "walk $2 $1 steps"
|
|
},
|
|
{
|
|
"_": "walk N steps (default forward) — 'Taking 5 steps.'",
|
|
"regex": "(?:walk(?:ing)?|step(?:ping)?|tak(?:e|ing))\\s+(\\d+)\\s+steps?",
|
|
"command_template": "walk $1 steps"
|
|
},
|
|
{
|
|
"_": "walk forward/back N meters — 'Walking forward 2 meters.'",
|
|
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(forward|back(?:ward)?)\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\b",
|
|
"command_template": "walk $1 $2 meters"
|
|
},
|
|
{
|
|
"_": "walk N meters forward/back — 'Walking 2 meters forward.'",
|
|
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\s+(forward|back(?:ward)?)",
|
|
"command_template": "walk $2 $1 meters"
|
|
},
|
|
{
|
|
"_": "walk N meters (default forward) — 'Walking 2 meters.'",
|
|
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\b",
|
|
"command_template": "walk $1 meters"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أستدير يميناً 90 درجة' / 'أستدير يمينا 90 درجة'",
|
|
"regex": "أستدير\\s+يمين[اًا]?ً?\\s+(\\d+)\\s*درجة",
|
|
"command_template": "turn right $1 degrees"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أستدير يساراً 90 درجة'",
|
|
"regex": "أستدير\\s+يسار[اًا]?ً?\\s+(\\d+)\\s*درجة",
|
|
"command_template": "turn left $1 degrees"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أستدير 360 درجة' (no direction)",
|
|
"regex": "أستدير\\s+(\\d+)\\s*درجة",
|
|
"command_template": "turn $1 degrees"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أمشي/أتحرك 5 خطوات'",
|
|
"regex": "(?:أمشي|أتحرك)\\s+(\\d+)\\s*خطو(?:ات|ة|تين)?",
|
|
"command_template": "walk $1 steps"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أتحرك للأمام مترين' / 'أمشي للأمام 2 متر'",
|
|
"regex": "(?:أمشي|أتحرك)\\s+للأمام\\s+(\\d+(?:\\.\\d+)?)\\s*متر",
|
|
"command_template": "walk forward $1 meters"
|
|
},
|
|
{
|
|
"_": "Arabic: 'أتحرك للخلف مترين'",
|
|
"regex": "(?:أمشي|أتحرك)\\s+للخلف\\s+(\\d+(?:\\.\\d+)?)\\s*متر",
|
|
"command_template": "walk backward $1 meters"
|
|
}
|
|
]
|
|
}
|