| from __future__ import annotations |
|
|
| import json |
| import os |
|
|
| import gradio as gr |
|
|
| from support_ops_env.env import SupportOpsEnv |
| from support_ops_env.models import Action |
| from support_ops_env.tasks import list_task_ids |
|
|
|
|
| ENV = SupportOpsEnv() |
|
|
|
|
| def reset_env(task_id: str) -> str: |
| observation = ENV.reset(task_id=task_id) |
| return json.dumps(observation.model_dump(), indent=2) |
|
|
|
|
| def step_env(task_id: str, action_type: str, target: str, value: str) -> tuple[str, str]: |
| if ENV.state().task_id != task_id or ENV.state().step_count == 0 and not ENV.state().done: |
| ENV.reset(task_id=task_id) |
| action = Action(action_type=action_type, target=target or "T1", value=value or None) |
| observation, reward, done, info = ENV.step(action) |
| payload = { |
| "reward": reward.model_dump(), |
| "done": done, |
| "info": info, |
| } |
| return json.dumps(observation.model_dump(), indent=2), json.dumps(payload, indent=2) |
|
|
|
|
| with gr.Blocks(title="SupportOpsEnv") as demo: |
| gr.Markdown("# SupportOpsEnv") |
| gr.Markdown("Multi-step support triage benchmark with deterministic graders.") |
|
|
| task_id = gr.Dropdown(choices=list_task_ids(), value=list_task_ids()[0], label="Task") |
| action_type = gr.Dropdown( |
| choices=[ |
| "inspect_ticket", |
| "request_context", |
| "set_priority", |
| "set_route", |
| "set_resolution", |
| "escalate", |
| "rank_queue", |
| "finalize", |
| ], |
| value="inspect_ticket", |
| label="Action Type", |
| ) |
| target = gr.Textbox(value="T1", label="Target Ticket") |
| value = gr.Textbox(label="Value") |
| observation_output = gr.Code(label="Observation", language="json") |
| result_output = gr.Code(label="Step Result", language="json") |
|
|
| reset_button = gr.Button("Reset") |
| step_button = gr.Button("Step") |
|
|
| reset_button.click(reset_env, inputs=[task_id], outputs=[observation_output]) |
| step_button.click( |
| step_env, |
| inputs=[task_id, action_type, target, value], |
| outputs=[observation_output, result_output], |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| port = int(os.getenv("PORT", os.getenv("GRADIO_SERVER_PORT", "7860"))) |
| demo.launch(server_name="0.0.0.0", server_port=port) |
|
|