import os import json from dotenv import load_dotenv from openai import OpenAI from client import RevOpsEnvClient load_dotenv() api_key = os.getenv("OPENAI_API_KEY", "") is_nvidia = api_key.startswith("nvapi-") base_url = "https://integrate.api.nvidia.com/v1" if is_nvidia else None model_name = "meta/llama-3.3-70b-instruct" if is_nvidia else "gpt-4o-mini" client = OpenAI(api_key=api_key, base_url=base_url) env = RevOpsEnvClient("http://localhost:8000") def act_on_task(task_id: str): print(f"--- Running Baseline for {task_id} ---") st = env.reset(task_id) SYSTEM_PROMPT = """You are a RevOps specialist AI. You process incoming leads based on rules. Available action formats (JSON only): - {"action_type": "enrich_lead"} - {"action_type": "check_crm"} - {"action_type": "update_lead_score", "score": 85} - {"action_type": "route_to_rep", "rep_id": "rep_amer_mm"} - {"action_type": "merge_with_account", "account_id": "acc_major_fin"} - {"action_type": "flag_reengagement", "opportunity_id": "opp_101"} - {"action_type": "disqualify", "disqualification_reason": "student"} Constraints: 1. Always enrich emails without full context. 2. Read the observation to see available reps, ICP criteria, and CRM data. 3. If a lead belongs to a closed-lost opportunity or existing account, merge and check first! 4. Only route to exactly one rep. 5. Emit ONLY valid JSON corresponding to the chosen action type. """ done = False step_count = 0 messages = [ {"role": "system", "content": SYSTEM_PROMPT} ] while not done and step_count < 15: step_count += 1 obs = st.get("observation", {}) if not isinstance(obs, str): obs = json.dumps(obs) messages.append({"role": "user", "content": f"OBSERVATION:\n{obs}"}) response = client.chat.completions.create( model=model_name, messages=messages, response_format={ "type": "json_object" } ) action_payload_str = response.choices[0].message.content action_payload = json.loads(action_payload_str) print("ACTION:", action_payload) st = env.step(action_payload) done = st.get("done", True) messages.append({ "role": "assistant", "content": f"Took action: {action_payload_str}. Result feedback: {st.get('metadata', {}).get('message', '')}" }) final_score = env.grader() print(f"Task {task_id} Final Grader Score: {final_score}\n") return final_score if __name__ == "__main__": tasks = ["task_easy", "task_medium", "task_hard"] scores = {} for t in tasks: scores[t] = act_on_task(t) print("All Baseline Scores:", scores)