#!/usr/bin/env python3 import os import sys import json import time from typing import Dict, Any from openai import OpenAI import requests def main(): print("[START]") api_base = os.getenv("API_BASE_URL", "https://api.openai.com/v1") model_name = os.getenv("MODEL_NAME", "gpt-3.5-turbo") env_url = os.getenv("ENV_URL", "http://localhost:8000") task = os.getenv("TASK_NAME", "email_triage") client = OpenAI(base_url=api_base, api_key=os.getenv("OPENAI_API_KEY")) # Reset environment resp = requests.post(f"{env_url}/env/{task}/reset") resp.raise_for_status() data = resp.json() episode_id = data["episode_id"] observation = data["observation"] step = 0 while not observation.get("done", False): step += 1 print(f"[STEP] {step}") try: # Call LLM response = client.chat.completions.create( model=model_name, messages=[ {"role": "system", "content": "You are an operations assistant. Respond ONLY with valid JSON action."}, {"role": "user", "content": json.dumps(observation["observation"])} ], temperature=0.0, max_tokens=256 ) action_text = response.choices[0].message.content.strip() action = json.loads(action_text) # Execute step resp = requests.post(f"{env_url}/env/step", json={ "episode_id": episode_id, "action": action }) resp.raise_for_status() observation = resp.json() except Exception as e: print(f"[ERROR] {str(e)}", file=sys.stderr) # Fallback action resp = requests.post(f"{env_url}/env/step", json={ "episode_id": episode_id, "action": {} }) observation = resp.json() time.sleep(0.1) print(f"[FINAL SCORE] {observation.get('reward', 0.0)}") print("[END]") if __name__ == "__main__": main()