Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import argparse | |
| import json | |
| from glass_bridge.client import OpenEnvGlassBridgeClient | |
| from glass_bridge.models import AgentAction, ResetRequest, StepRequest | |
| from glass_bridge.policies import build_tournament_glass_bridge_population | |
| def main() -> None: | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--base-url", default="http://127.0.0.1:8000") | |
| parser.add_argument("--seed", type=int, default=7) | |
| parser.add_argument("--initial-players", type=int, default=16) | |
| parser.add_argument("--first-round-steps", type=int, default=18) | |
| parser.add_argument("--max-rounds", type=int, default=25) | |
| parser.add_argument("--max-turns", type=int, default=9600) | |
| parser.add_argument( | |
| "--adaptation-kind", | |
| choices=["none", "truth_scaled_by_reputation"], | |
| default="truth_scaled_by_reputation", | |
| ) | |
| args = parser.parse_args() | |
| client = OpenEnvGlassBridgeClient(base_url=args.base_url) | |
| try: | |
| reset_response = client.reset( | |
| ResetRequest( | |
| seed=args.seed, | |
| initial_players=args.initial_players, | |
| first_round_num_steps=args.first_round_steps, | |
| max_rounds=args.max_rounds, | |
| share_rates=[0.0, 0.25, 0.5, 0.75, 1.0], | |
| truth_rates=[0.0, 0.25, 0.5, 0.75, 1.0], | |
| llm_model_pool=["qwen3.5"], | |
| ) | |
| ) | |
| result = reset_response.result | |
| policies = build_tournament_glass_bridge_population( | |
| result.info.strategy_profiles, | |
| seed=args.seed, | |
| adaptation_config={"kind": args.adaptation_kind}, | |
| ) | |
| turn_idx = 0 | |
| while not result.done and turn_idx < args.max_turns: | |
| actions = {} | |
| for agent_name, observation in result.observations.items(): | |
| policy_action = policies[agent_name].select_action(observation.model_dump(mode="python")) | |
| actions[agent_name] = AgentAction.from_policy_output(policy_action) | |
| step_response = client.step(StepRequest(session_id=reset_response.session_id, actions=actions)) | |
| result = step_response.result | |
| turn_idx += 1 | |
| if not result.done: | |
| raise RuntimeError(f"Environment did not terminate within {args.max_turns} turns") | |
| payload = { | |
| "session_id": reset_response.session_id, | |
| "turns": turn_idx, | |
| "winner": result.info.winner, | |
| "winner_strategy": result.info.winner_strategy, | |
| "rounds_played": result.info.round_idx, | |
| "events": result.info.events, | |
| "final_phase": result.info.phase, | |
| "active_agents": result.info.active_agents, | |
| } | |
| print(json.dumps(payload, indent=2)) | |
| finally: | |
| client.close() | |
| if __name__ == "__main__": | |
| main() | |