File size: 1,498 Bytes
12d1907
cb79b00
 
12d1907
 
 
 
 
bca2b27
12d1907
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191af87
7c8585e
191af87
7c8585e
 
 
 
191af87
12d1907
 
 
 
 
 
 
191af87
 
 
 
d157d6a
 
 
 
935242f
 
 
bca2b27
 
 
 
 
 
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
73
74
75
76
77
78
79
80


# server/app.py

from fastapi import FastAPI
from pydantic import BaseModel
from app.env import CustomerSupportEnv

import uvicorn
import json

app = FastAPI()

env = CustomerSupportEnv()


class StepRequest(BaseModel):
    action: str  # OpenEnv sends STRING


def parse_action(action_str: str):
    """
    Convert string action → dict
    Supports both:
    - JSON string
    - simple commands
    """

    try:
        return json.loads(action_str)
    except:
        # fallback parsing
        if action_str == "classify":
            return {"type": "classify"}
        elif action_str.startswith("ask_"):
            return {
                "type": "ask_info",
                "field": action_str.replace("ask_", "")
            }
        elif action_str == "resolve":
            return {"type": "resolve"}
        else:
            return {"type": "invalid"}


@app.post("/reset")
def reset():
    obs = env.reset()
    return {
        "observation": obs,
        "reward": 0,
        "done": False,
        "info": {}
    }


@app.post("/step")
def step(req: StepRequest):
    action_dict = parse_action(req.action)
    obs, reward, done, info = env.step(action_dict)

    return {
        "observation": obs,   # ✅ NOT "state"
        "reward": reward,
        "done": done,
        "info": info or {}
    }

@app.get("/")
def root():
    return {"status": "ok"}


def main():
    uvicorn.run("server.app:app", host="0.0.0.0", port=7860)


if __name__ == "__main__":
    main()