supportOpsEnv / app.py
dbatcode28's picture
fix
a1e0c1e
raw
history blame
2.5 kB
from __future__ import annotations
import json
import os
import gradio as gr
from server.app import app as api_app
from support_ops_env.models import Action
from support_ops_env.tasks import list_task_ids
def reset_env(task_id: str) -> str:
from server.app import _http_env
observation = _http_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]:
from server.app import _http_env
state = _http_env.state()
if state.task_id != task_id or (state.step_count == 0 and not state.done):
_http_env.reset(task_id=task_id)
action = Action(action_type=action_type, target=target or "T1", value=value or None)
observation, reward, done, info = _http_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],
)
app = gr.mount_gradio_app(api_app, demo, path="/ui")
def main(host: str = "0.0.0.0", port: int | None = None) -> None:
import uvicorn
resolved_port = port or int(os.getenv("PORT", os.getenv("GRADIO_SERVER_PORT", "7860")))
uvicorn.run(app, host=host, port=resolved_port)
if __name__ == "__main__":
main()