CoolFace
Apppublic

Meta-Hackathon1/Customer_Support_Env

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
inference.py122 linesDownload Raw Back to root
1import asyncio2import os3import requests4import time5from openai import OpenAI6 7# REQUIRED ENV VARIABLES8API_BASE_URL = os.getenv("API_BASE_URL", "https://api.openai.com/v1")9MODEL_NAME   = os.getenv("MODEL_NAME", "gpt-4o-mini")10HF_TOKEN     = os.getenv("HF_TOKEN")11 12if HF_TOKEN is None:13    raise ValueError("HF_TOKEN environment variable is required")14 15API_KEY = os.getenv("API_KEY", HF_TOKEN)16 17SPACE_URL  = "https://meta-hackathon1-customer-support-env.hf.space"18BENCHMARK  = "openenv"19MAX_STEPS  = 2020 21TASK_NAMES = ["easy", "medium", "hard"]22 23 24# LLM AGENT25def get_model_message(client, state):26    prompt = f"""27You are a customer support agent.28 29State:30{state}31 32Choose ONLY ONE word:33refund / replace / reject / ask_proof34"""35    try:36        response = client.chat.completions.create(37            model=MODEL_NAME,38            messages=[{"role": "user", "content": prompt}]39        )40        return response.choices[0].message.content.strip().lower()41    except Exception as e:42        print(f"[ERROR] LLM failed: {e}", flush=True)43        return "reject"44 45 46# SAFE REQUEST47def safe_post(url, json=None, retries=3):48    for i in range(retries):49        try:50            return requests.post(url, json=json, timeout=10)51        except Exception as e:52            print(f"[DEBUG] retry {i+1} due to {e}", flush=True)53            time.sleep(2)54    raise Exception("Failed after retries")55 56def log_start(task, env, model):57    print(f"[START] task={task} env={env} model={model}", flush=True)58 59def log_step(step, action, reward, done, error=None):60    error_str = "null" if error is None else str(error)61    done_str  = "true" if done else "false"62    print(63        f"[STEP] step={step} action={action} reward={reward:.2f} "64        f"done={done_str} error={error_str}",65        flush=True66    )67 68def log_end(success, steps, score, rewards):69    success_str = "true" if success else "false"70    rewards_str = ",".join(f"{r:.2f}" for r in rewards)71    print(f"[END] success={success_str} steps={steps} score={score:.4f} rewards={rewards_str}", flush=True)72 73 74# MAIN75async def main():76    client = OpenAI(base_url=API_BASE_URL, api_key=API_KEY)77 78    for task_name in TASK_NAMES:79        step_rewards = []80        score        = 0.581        success      = False82 83        log_start(task=task_name, env=BENCHMARK, model=MODEL_NAME)84 85        try:86            res    = safe_post(f"{SPACE_URL}/reset", json={"task": task_name})87            result = res.json()88 89            state = result["observation"]["echoed_message"]90            done  = result["done"]91 92            for step in range(1, MAX_STEPS + 1):93                if done:94                    break95 96                action = get_model_message(client, state)97 98                res    = safe_post(f"{SPACE_URL}/step", json={"message": action})99                result = res.json()100 101                state  = result["observation"]["echoed_message"]102                done   = result["done"]103                reward = float(result.get("reward", 0.0))104 105                step_rewards.append(reward)106 107                log_step(step=step, action=action, reward=reward, done=done, error=None)108 109            raw_score = float(result.get("info", {}).get("score", 0.5))110            score     = max(0.05, min(0.95, raw_score))111            success   = True112 113        except Exception as e:114            print(f"[ERROR] task={task_name} {e}", flush=True)115            score = 0.1116 117        finally:118            log_end(success=success, steps=len(step_rewards), score=score, rewards=step_rewards)119 120 121if __name__ == "__main__":122    asyncio.run(main())