File size: 2,252 Bytes
bd67155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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)