from runners.inference import run_inference from core.models import ChargebackOpsAction from server.app import baseline, grader, root, tasks from server.chargeback_ops_environment import ChargebackOpsEnvironment def test_tasks_endpoint_payload(): payload = tasks() assert len(payload.tasks) >= 3 assert "properties" in payload.action_schema def test_root_endpoint_payload(): response = root() assert response.status_code == 200 assert b"ChargebackOps" in response.body assert b"tasks_url" in response.body assert b"demo_url" in response.body assert b"huggingface.co/spaces" in response.body assert b"interactive_demo_url" in response.body def test_baseline_endpoint_works_without_api_key(monkeypatch): monkeypatch.delenv("HF_TOKEN", raising=False) monkeypatch.delenv("API_BASE_URL", raising=False) monkeypatch.delenv("MODEL_NAME", raising=False) monkeypatch.delenv("OPENROUTER_API_KEY", raising=False) monkeypatch.delenv("OPENAI_API_KEY", raising=False) monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False) monkeypatch.delenv("GROQ_API_KEY", raising=False) payload = baseline() assert payload.mode == "heuristic_fallback" assert len(payload.task_results) >= 3 def test_inference_script_falls_back_without_hf_token(monkeypatch): monkeypatch.delenv("HF_TOKEN", raising=False) monkeypatch.delenv("API_BASE_URL", raising=False) monkeypatch.delenv("MODEL_NAME", raising=False) payload = run_inference() assert payload.mode == "heuristic_fallback" assert len(payload.task_results) >= 3 def test_grader_endpoint_after_completed_episode(): env = ChargebackOpsEnvironment() env.reset(task_id="goods_not_received_easy") env.step(ChargebackOpsAction(action_type="select_case", case_id="CB-E1")) env.step(ChargebackOpsAction(action_type="inspect_case", case_id="CB-E1")) env.step( ChargebackOpsAction( action_type="query_system", case_id="CB-E1", system_name="orders", ) ) env.step( ChargebackOpsAction( action_type="query_system", case_id="CB-E1", system_name="shipping", ) ) env.step( ChargebackOpsAction( action_type="query_system", case_id="CB-E1", system_name="support", ) ) env.step( ChargebackOpsAction( action_type="add_evidence", case_id="CB-E1", evidence_ids=[ "E1-ORDER-CONF", "E1-DELIVERY-SCAN", "E1-SIGNATURE", "E1-SUPPORT-ACK", ], ) ) env.step( ChargebackOpsAction( action_type="set_strategy", case_id="CB-E1", strategy="contest", ) ) final_obs = env.step( ChargebackOpsAction( action_type="submit_representment", case_id="CB-E1", ) ) assert final_obs.grader_report is not None payload = grader(final_obs.grader_report.episode_id) assert payload["episode_id"] == final_obs.grader_report.episode_id assert 0.0 <= payload["normalized_score"] <= 1.0