"""Explicit integration fixture: BrainService -> Coordinator -> C++ simulation.""" from robot_bt_coordinator.backends import DemoBackend from robot_bt_coordinator.plan import canonical from robot_bt_coordinator.plan_v2 import make_plan from .backends import FixtureBackend from .service import BrainService class BrainDemoBackend(DemoBackend): def __init__(self,executable,state_dir,site): super().__init__(executable,state_dir);self.site=site def fixture(request): g=request['input'];known=g['known_info'] if 'items' not in known: missing=[k for k in ('target_name','source_location','destination') if not known.get(k)] if missing:return canonical({'missing_information':missing}) known={'items':[{'target_name':known['target_name'],'source_location':known['source_location'],'quantity':known.get('quantity',1)}],'destination':known['destination']} if 'destination' not in known:return canonical({'missing_information':['destination']}) return canonical(make_plan(g['instruction'],known,site['execution_route'])) self.brain=BrainService(FixtureBackend(fixture),self.state_dir/'planning_records') def start_planning(self,t): self.plans.append(t) result=self.brain.plan(dict(task_id=t['task_id'],task_revision=t['task_revision'],planning_generation=t['planning_generation'],instruction=t['request']['instruction'],known_info=t['request']['known_info'],context=self.site,constraints={'schema_version':2,'route':self.site['execution_route'],'clarification_confirmed':t.get('clarification_confirmed') is True},timeout=10)) event=dict(type='plan',task_id=t['task_id'],task_revision=t['task_revision'],planning_generation=t['planning_generation'],status=result['status'],error_code=result.get('error_code',''),planning_record_ref=result['record_ref']) if result['status']=='NEEDS_CLARIFICATION':event['questions']=result['plan']['missing_information'] else:event['plan']=result.get('plan') self.emit(event)