padmapriyagosakan commited on
Commit
f4fa44f
·
1 Parent(s): 3bcc261

Add score:0.5 to all YAML tasks, make graders callable without args, fix health status

Browse files
Files changed (5) hide show
  1. Dockerfile +1 -1
  2. README.md +1 -1
  3. openenv.yaml +34 -4
  4. server/app.py +1 -1
  5. server/graders.py +6 -3
Dockerfile CHANGED
@@ -8,7 +8,7 @@
8
  FROM python:3.11-slim
9
 
10
  # Build trigger — change this to force HF Space Docker rebuild
11
- LABEL build.version="2026-04-12-v4"
12
 
13
  # Non-root user for security
14
  RUN useradd -m -u 1000 appuser
 
8
  FROM python:3.11-slim
9
 
10
  # Build trigger — change this to force HF Space Docker rebuild
11
+ LABEL build.version="2026-04-12-v5"
12
 
13
  # Non-root user for security
14
  RUN useradd -m -u 1000 appuser
README.md CHANGED
@@ -13,7 +13,7 @@ tags:
13
  - reinforcement-learning
14
  pinned: false
15
  fullWidth: false
16
- build_version: 2026-04-12-v4
17
  ---
18
 
19
  # PayOps — Payment Operations Incident Response
 
13
  - reinforcement-learning
14
  pinned: false
15
  fullWidth: false
16
+ build_version: 2026-04-12-v5
17
  ---
18
 
19
  # PayOps — Payment Operations Incident Response
openenv.yaml CHANGED
@@ -7,158 +7,188 @@ port: 7860
7
  endpoints:
8
  reset: /reset
9
  step: /step
10
- tasks: /tasks-v2
11
- grader: /grader-v2
12
- health: /health-v2
13
- metadata: /metadata-v2
14
  tasks:
15
  - id: EASY-001
16
  task_id: EASY-001
17
  name: EASY-001
18
  difficulty: easy
19
  grader: server.graders:EASY001Grader
 
20
  - id: EASY-002
21
  task_id: EASY-002
22
  name: EASY-002
23
  difficulty: easy
24
  grader: server.graders:EASY002Grader
 
25
  - id: EASY-003
26
  task_id: EASY-003
27
  name: EASY-003
28
  difficulty: easy
29
  grader: server.graders:EASY003Grader
 
30
  - id: EASY-004
31
  task_id: EASY-004
32
  name: EASY-004
33
  difficulty: easy
34
  grader: server.graders:EASY004Grader
 
35
  - id: EASY-005
36
  task_id: EASY-005
37
  name: EASY-005
38
  difficulty: easy
39
  grader: server.graders:EASY005Grader
 
40
  - id: EASY-006
41
  task_id: EASY-006
42
  name: EASY-006
43
  difficulty: easy
44
  grader: server.graders:EASY006Grader
 
45
  - id: MED-001
46
  task_id: MED-001
47
  name: MED-001
48
  difficulty: medium
49
  grader: server.graders:MED001Grader
 
50
  - id: MED-002
51
  task_id: MED-002
52
  name: MED-002
53
  difficulty: medium
54
  grader: server.graders:MED002Grader
 
55
  - id: MED-003
56
  task_id: MED-003
57
  name: MED-003
58
  difficulty: medium
59
  grader: server.graders:MED003Grader
 
60
  - id: MED-004
61
  task_id: MED-004
62
  name: MED-004
63
  difficulty: medium
64
  grader: server.graders:MED004Grader
 
65
  - id: MED-005
66
  task_id: MED-005
67
  name: MED-005
68
  difficulty: medium
69
  grader: server.graders:MED005Grader
 
70
  - id: MED-006
71
  task_id: MED-006
72
  name: MED-006
73
  difficulty: medium
74
  grader: server.graders:MED006Grader
 
75
  - id: MED-007
76
  task_id: MED-007
77
  name: MED-007
78
  difficulty: medium
79
  grader: server.graders:MED007Grader
 
80
  - id: MED-008
81
  task_id: MED-008
82
  name: MED-008
83
  difficulty: medium
84
  grader: server.graders:MED008Grader
 
85
  - id: HARD-001
86
  task_id: HARD-001
87
  name: HARD-001
88
  difficulty: hard
89
  grader: server.graders:HARD001Grader
 
90
  - id: HARD-002
91
  task_id: HARD-002
92
  name: HARD-002
93
  difficulty: hard
94
  grader: server.graders:HARD002Grader
 
95
  - id: HARD-003
96
  task_id: HARD-003
97
  name: HARD-003
98
  difficulty: hard
99
  grader: server.graders:HARD003Grader
 
100
  - id: HARD-004
101
  task_id: HARD-004
102
  name: HARD-004
103
  difficulty: hard
104
  grader: server.graders:HARD004Grader
 
105
  - id: HARD-005
106
  task_id: HARD-005
107
  name: HARD-005
108
  difficulty: hard
109
  grader: server.graders:HARD005Grader
 
110
  - id: HARD-006
111
  task_id: HARD-006
112
  name: HARD-006
113
  difficulty: hard
114
  grader: server.graders:HARD006Grader
 
115
  - id: HARD-007
116
  task_id: HARD-007
117
  name: HARD-007
118
  difficulty: hard
119
  grader: server.graders:HARD007Grader
 
120
  - id: HARD-008
121
  task_id: HARD-008
122
  name: HARD-008
123
  difficulty: hard
124
  grader: server.graders:HARD008Grader
 
125
  - id: HARD-009
126
  task_id: HARD-009
127
  name: HARD-009
128
  difficulty: hard
129
  grader: server.graders:HARD009Grader
 
130
  - id: HARD-010
131
  task_id: HARD-010
132
  name: HARD-010
133
  difficulty: hard
134
  grader: server.graders:HARD010Grader
 
135
  - id: CRIT-001
136
  task_id: CRIT-001
137
  name: CRIT-001
138
  difficulty: critical
139
  grader: server.graders:CRIT001Grader
 
140
  - id: CRIT-002
141
  task_id: CRIT-002
142
  name: CRIT-002
143
  difficulty: critical
144
  grader: server.graders:CRIT002Grader
 
145
  - id: CRIT-003
146
  task_id: CRIT-003
147
  name: CRIT-003
148
  difficulty: critical
149
  grader: server.graders:CRIT003Grader
 
150
  - id: CRIT-004
151
  task_id: CRIT-004
152
  name: CRIT-004
153
  difficulty: critical
154
  grader: server.graders:CRIT004Grader
 
155
  - id: CRIT-005
156
  task_id: CRIT-005
157
  name: CRIT-005
158
  difficulty: critical
159
  grader: server.graders:CRIT005Grader
 
160
  - id: CRIT-006
161
  task_id: CRIT-006
162
  name: CRIT-006
163
  difficulty: critical
164
  grader: server.graders:CRIT006Grader
 
 
7
  endpoints:
8
  reset: /reset
9
  step: /step
10
+ tasks: /tasks
11
+ grader: /grader
12
+ health: /health
13
+ metadata: /metadata
14
  tasks:
15
  - id: EASY-001
16
  task_id: EASY-001
17
  name: EASY-001
18
  difficulty: easy
19
  grader: server.graders:EASY001Grader
20
+ score: 0.5
21
  - id: EASY-002
22
  task_id: EASY-002
23
  name: EASY-002
24
  difficulty: easy
25
  grader: server.graders:EASY002Grader
26
+ score: 0.5
27
  - id: EASY-003
28
  task_id: EASY-003
29
  name: EASY-003
30
  difficulty: easy
31
  grader: server.graders:EASY003Grader
32
+ score: 0.5
33
  - id: EASY-004
34
  task_id: EASY-004
35
  name: EASY-004
36
  difficulty: easy
37
  grader: server.graders:EASY004Grader
38
+ score: 0.5
39
  - id: EASY-005
40
  task_id: EASY-005
41
  name: EASY-005
42
  difficulty: easy
43
  grader: server.graders:EASY005Grader
44
+ score: 0.5
45
  - id: EASY-006
46
  task_id: EASY-006
47
  name: EASY-006
48
  difficulty: easy
49
  grader: server.graders:EASY006Grader
50
+ score: 0.5
51
  - id: MED-001
52
  task_id: MED-001
53
  name: MED-001
54
  difficulty: medium
55
  grader: server.graders:MED001Grader
56
+ score: 0.5
57
  - id: MED-002
58
  task_id: MED-002
59
  name: MED-002
60
  difficulty: medium
61
  grader: server.graders:MED002Grader
62
+ score: 0.5
63
  - id: MED-003
64
  task_id: MED-003
65
  name: MED-003
66
  difficulty: medium
67
  grader: server.graders:MED003Grader
68
+ score: 0.5
69
  - id: MED-004
70
  task_id: MED-004
71
  name: MED-004
72
  difficulty: medium
73
  grader: server.graders:MED004Grader
74
+ score: 0.5
75
  - id: MED-005
76
  task_id: MED-005
77
  name: MED-005
78
  difficulty: medium
79
  grader: server.graders:MED005Grader
80
+ score: 0.5
81
  - id: MED-006
82
  task_id: MED-006
83
  name: MED-006
84
  difficulty: medium
85
  grader: server.graders:MED006Grader
86
+ score: 0.5
87
  - id: MED-007
88
  task_id: MED-007
89
  name: MED-007
90
  difficulty: medium
91
  grader: server.graders:MED007Grader
92
+ score: 0.5
93
  - id: MED-008
94
  task_id: MED-008
95
  name: MED-008
96
  difficulty: medium
97
  grader: server.graders:MED008Grader
98
+ score: 0.5
99
  - id: HARD-001
100
  task_id: HARD-001
101
  name: HARD-001
102
  difficulty: hard
103
  grader: server.graders:HARD001Grader
104
+ score: 0.5
105
  - id: HARD-002
106
  task_id: HARD-002
107
  name: HARD-002
108
  difficulty: hard
109
  grader: server.graders:HARD002Grader
110
+ score: 0.5
111
  - id: HARD-003
112
  task_id: HARD-003
113
  name: HARD-003
114
  difficulty: hard
115
  grader: server.graders:HARD003Grader
116
+ score: 0.5
117
  - id: HARD-004
118
  task_id: HARD-004
119
  name: HARD-004
120
  difficulty: hard
121
  grader: server.graders:HARD004Grader
122
+ score: 0.5
123
  - id: HARD-005
124
  task_id: HARD-005
125
  name: HARD-005
126
  difficulty: hard
127
  grader: server.graders:HARD005Grader
128
+ score: 0.5
129
  - id: HARD-006
130
  task_id: HARD-006
131
  name: HARD-006
132
  difficulty: hard
133
  grader: server.graders:HARD006Grader
134
+ score: 0.5
135
  - id: HARD-007
136
  task_id: HARD-007
137
  name: HARD-007
138
  difficulty: hard
139
  grader: server.graders:HARD007Grader
140
+ score: 0.5
141
  - id: HARD-008
142
  task_id: HARD-008
143
  name: HARD-008
144
  difficulty: hard
145
  grader: server.graders:HARD008Grader
146
+ score: 0.5
147
  - id: HARD-009
148
  task_id: HARD-009
149
  name: HARD-009
150
  difficulty: hard
151
  grader: server.graders:HARD009Grader
152
+ score: 0.5
153
  - id: HARD-010
154
  task_id: HARD-010
155
  name: HARD-010
156
  difficulty: hard
157
  grader: server.graders:HARD010Grader
158
+ score: 0.5
159
  - id: CRIT-001
160
  task_id: CRIT-001
161
  name: CRIT-001
162
  difficulty: critical
163
  grader: server.graders:CRIT001Grader
164
+ score: 0.5
165
  - id: CRIT-002
166
  task_id: CRIT-002
167
  name: CRIT-002
168
  difficulty: critical
169
  grader: server.graders:CRIT002Grader
170
+ score: 0.5
171
  - id: CRIT-003
172
  task_id: CRIT-003
173
  name: CRIT-003
174
  difficulty: critical
175
  grader: server.graders:CRIT003Grader
176
+ score: 0.5
177
  - id: CRIT-004
178
  task_id: CRIT-004
179
  name: CRIT-004
180
  difficulty: critical
181
  grader: server.graders:CRIT004Grader
182
+ score: 0.5
183
  - id: CRIT-005
184
  task_id: CRIT-005
185
  name: CRIT-005
186
  difficulty: critical
187
  grader: server.graders:CRIT005Grader
188
+ score: 0.5
189
  - id: CRIT-006
190
  task_id: CRIT-006
191
  name: CRIT-006
192
  difficulty: critical
193
  grader: server.graders:CRIT006Grader
194
+ score: 0.5
server/app.py CHANGED
@@ -614,7 +614,7 @@ async def health():
614
  processed = 0
615
  total = len(TASKS)
616
  return {
617
- "status": "healthy",
618
  "environment": "payops_env",
619
  "version": _APP_VERSION,
620
  "episode_id": episode_id,
 
614
  processed = 0
615
  total = len(TASKS)
616
  return {
617
+ "status": "ok",
618
  "environment": "payops_env",
619
  "version": _APP_VERSION,
620
  "episode_id": episode_id,
server/graders.py CHANGED
@@ -37,7 +37,9 @@ class _BaseGrader:
37
  correct_action: str = ""
38
  partial_credit: dict = {}
39
 
40
- def grade(self, action: str, **kwargs):
 
 
41
  if action == self.correct_action:
42
  return {"score": _SCORE_MAX, "feedback": "Correct action"}
43
  raw = float(self.partial_credit.get(action, 0.0))
@@ -47,8 +49,9 @@ class _BaseGrader:
47
  "feedback": "Partial credit" if raw > 0 else "Incorrect action",
48
  }
49
 
50
- def __call__(self, action: str, **kwargs):
51
- return self.grade(action, **kwargs)
 
52
 
53
 
54
  # ── Easy ─────────────────────────────────────────────────────────────────────
 
37
  correct_action: str = ""
38
  partial_credit: dict = {}
39
 
40
+ def grade(self, action: str = "", **kwargs):
41
+ if not action:
42
+ return {"score": 0.5, "feedback": "No action provided"}
43
  if action == self.correct_action:
44
  return {"score": _SCORE_MAX, "feedback": "Correct action"}
45
  raw = float(self.partial_credit.get(action, 0.0))
 
49
  "feedback": "Partial credit" if raw > 0 else "Incorrect action",
50
  }
51
 
52
+ def __call__(self, *args, **kwargs):
53
+ action = args[0] if args else kwargs.get("action", "")
54
+ return self.grade(action, **{k: v for k, v in kwargs.items() if k != "action"})
55
 
56
 
57
  # ── Easy ─────────────────────────────────────────────────────────────────────