vineetshukla.work@gmail.com commited on
Commit
5a87b28
Β·
1 Parent(s): db07239

fix: add mandatory /metadata and /schema endpoints for OpenEnv validation and update task metadata

Browse files
Files changed (3) hide show
  1. env/server/app.py +95 -2
  2. openenv.yaml +8 -0
  3. requirements.txt +2 -0
env/server/app.py CHANGED
@@ -18,7 +18,77 @@ from fastapi.middleware.cors import CORSMiddleware
18
  from pydantic import BaseModel
19
 
20
  from env.server.environment import CodeDebugEnvironment
21
- from env.models import CodeDebugAction
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
 
24
  # --- Pydantic request/response schemas ---
@@ -107,6 +177,27 @@ async def health():
107
  return {"status": "healthy", "service": "codesensei-env"}
108
 
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  @app.get("/")
111
  async def root():
112
  """Root endpoint with API info."""
@@ -116,7 +207,9 @@ async def root():
116
  "endpoints": {
117
  "POST /reset": "Start a new episode",
118
  "POST /step": "Submit a code fix",
119
- "GET /state?session_id=X": "Get episode state",
 
 
120
  "WS /ws": "WebSocket interface (recommended)",
121
  "GET /health": "Health check",
122
  },
 
18
  from pydantic import BaseModel
19
 
20
  from env.server.environment import CodeDebugEnvironment
21
+ from env.models import CodeDebugAction, CodeDebugObservation, CodeDebugState
22
+
23
+
24
+ # --- Metadata Definitions ---
25
+
26
+ TASKS_METADATA = [
27
+ {
28
+ "id": "debug-add_numbers",
29
+ "name": "debug-add_numbers",
30
+ "description": "Fix subtraction -> addition bug",
31
+ "max_steps": 6,
32
+ "reward_range": [0.01, 0.99],
33
+ "grader": "env.server.grader:grade",
34
+ },
35
+ {
36
+ "id": "debug-find_max",
37
+ "name": "debug-find_max",
38
+ "description": "Fix < -> > comparison bug",
39
+ "max_steps": 6,
40
+ "reward_range": [0.01, 0.99],
41
+ "grader": "env.server.grader:grade",
42
+ },
43
+ {
44
+ "id": "debug-reverse_string",
45
+ "name": "debug-reverse_string",
46
+ "description": "Fix slice -> reverse bug",
47
+ "max_steps": 6,
48
+ "reward_range": [0.01, 0.99],
49
+ "grader": "env.server.grader:grade",
50
+ },
51
+ {
52
+ "id": "debug-fibonacci",
53
+ "name": "debug-fibonacci",
54
+ "description": "Fix n-3 -> n-2 recursion bug",
55
+ "max_steps": 6,
56
+ "reward_range": [0.01, 0.99],
57
+ "grader": "env.server.grader:grade",
58
+ },
59
+ {
60
+ "id": "debug-count_vowels",
61
+ "name": "debug-count_vowels",
62
+ "description": "Fix missing case-insensitive bug",
63
+ "max_steps": 6,
64
+ "reward_range": [0.01, 0.99],
65
+ "grader": "env.server.grader:grade",
66
+ },
67
+ {
68
+ "id": "debug-flatten_list",
69
+ "name": "debug-flatten_list",
70
+ "description": "Fix append -> extend (recursive flatten) bug",
71
+ "max_steps": 6,
72
+ "reward_range": [0.01, 0.99],
73
+ "grader": "env.server.grader:grade",
74
+ },
75
+ {
76
+ "id": "debug-merge_sorted",
77
+ "name": "debug-merge_sorted",
78
+ "description": "Fix missing remaining elements bug",
79
+ "max_steps": 6,
80
+ "reward_range": [0.01, 0.99],
81
+ "grader": "env.server.grader:grade",
82
+ },
83
+ {
84
+ "id": "debug-remove_duplicates",
85
+ "name": "debug-remove_duplicates",
86
+ "description": "Fix inverted condition bug",
87
+ "max_steps": 6,
88
+ "reward_range": [0.01, 0.99],
89
+ "grader": "env.server.grader:grade",
90
+ },
91
+ ]
92
 
93
 
94
  # --- Pydantic request/response schemas ---
 
177
  return {"status": "healthy", "service": "codesensei-env"}
178
 
179
 
180
+ @app.get("/metadata")
181
+ async def get_metadata():
182
+ """Returns environment and task metadata for OpenEnv validation."""
183
+ return {
184
+ "name": "codesensei",
185
+ "version": "1.0.0",
186
+ "description": "GRPO-trained LLM code debugging environment",
187
+ "tasks": TASKS_METADATA,
188
+ }
189
+
190
+
191
+ @app.get("/schema")
192
+ async def get_schema():
193
+ """Returns the JSON schemas for project models."""
194
+ return {
195
+ "action": CodeDebugAction.model_json_schema(),
196
+ "observation": CodeDebugObservation.model_json_schema(),
197
+ "state": CodeDebugState.model_json_schema(),
198
+ }
199
+
200
+
201
  @app.get("/")
202
  async def root():
203
  """Root endpoint with API info."""
 
207
  "endpoints": {
208
  "POST /reset": "Start a new episode",
209
  "POST /step": "Submit a code fix",
210
+ "GET /state": "Get episode state",
211
+ "GET /metadata": "Environment & task metadata",
212
+ "GET /schema": "JSON schemas for models",
213
  "WS /ws": "WebSocket interface (recommended)",
214
  "GET /health": "Health check",
215
  },
openenv.yaml CHANGED
@@ -89,47 +89,55 @@ tasks:
89
  name: debug-add_numbers
90
  description: "Fix subtraction β†’ addition bug"
91
  max_steps: 6
 
92
  reward_range: [0.01, 0.99]
93
  grader: "env.server.grader:grade"
94
  - id: debug-find_max
95
  name: debug-find_max
96
  description: "Fix < β†’ > comparison bug"
97
  max_steps: 6
 
98
  reward_range: [0.01, 0.99]
99
  grader: "env.server.grader:grade"
100
  - id: debug-reverse_string
101
  name: debug-reverse_string
102
  description: "Fix slice β†’ reverse bug"
103
  max_steps: 6
 
104
  reward_range: [0.01, 0.99]
105
  grader: "env.server.grader:grade"
106
  - id: debug-fibonacci
107
  name: debug-fibonacci
108
  description: "Fix n-3 β†’ n-2 recursion bug"
109
  max_steps: 6
 
110
  reward_range: [0.01, 0.99]
111
  grader: "env.server.grader:grade"
112
  - id: debug-count_vowels
113
  name: debug-count_vowels
114
  description: "Fix missing case-insensitive bug"
115
  max_steps: 6
 
116
  reward_range: [0.01, 0.99]
117
  grader: "env.server.grader:grade"
118
  - id: debug-flatten_list
119
  name: debug-flatten_list
120
  description: "Fix append β†’ extend (recursive flatten) bug"
121
  max_steps: 6
 
122
  reward_range: [0.01, 0.99]
123
  grader: "env.server.grader:grade"
124
  - id: debug-merge_sorted
125
  name: debug-merge_sorted
126
  description: "Fix missing remaining elements bug"
127
  max_steps: 6
 
128
  reward_range: [0.01, 0.99]
129
  grader: "env.server.grader:grade"
130
  - id: debug-remove_duplicates
131
  name: debug-remove_duplicates
132
  description: "Fix inverted condition bug"
133
  max_steps: 6
 
134
  reward_range: [0.01, 0.99]
135
  grader: "env.server.grader:grade"
 
89
  name: debug-add_numbers
90
  description: "Fix subtraction β†’ addition bug"
91
  max_steps: 6
92
+ difficulty: "easy"
93
  reward_range: [0.01, 0.99]
94
  grader: "env.server.grader:grade"
95
  - id: debug-find_max
96
  name: debug-find_max
97
  description: "Fix < β†’ > comparison bug"
98
  max_steps: 6
99
+ difficulty: "easy"
100
  reward_range: [0.01, 0.99]
101
  grader: "env.server.grader:grade"
102
  - id: debug-reverse_string
103
  name: debug-reverse_string
104
  description: "Fix slice β†’ reverse bug"
105
  max_steps: 6
106
+ difficulty: "easy"
107
  reward_range: [0.01, 0.99]
108
  grader: "env.server.grader:grade"
109
  - id: debug-fibonacci
110
  name: debug-fibonacci
111
  description: "Fix n-3 β†’ n-2 recursion bug"
112
  max_steps: 6
113
+ difficulty: "easy"
114
  reward_range: [0.01, 0.99]
115
  grader: "env.server.grader:grade"
116
  - id: debug-count_vowels
117
  name: debug-count_vowels
118
  description: "Fix missing case-insensitive bug"
119
  max_steps: 6
120
+ difficulty: "easy"
121
  reward_range: [0.01, 0.99]
122
  grader: "env.server.grader:grade"
123
  - id: debug-flatten_list
124
  name: debug-flatten_list
125
  description: "Fix append β†’ extend (recursive flatten) bug"
126
  max_steps: 6
127
+ difficulty: "easy"
128
  reward_range: [0.01, 0.99]
129
  grader: "env.server.grader:grade"
130
  - id: debug-merge_sorted
131
  name: debug-merge_sorted
132
  description: "Fix missing remaining elements bug"
133
  max_steps: 6
134
+ difficulty: "easy"
135
  reward_range: [0.01, 0.99]
136
  grader: "env.server.grader:grade"
137
  - id: debug-remove_duplicates
138
  name: debug-remove_duplicates
139
  description: "Fix inverted condition bug"
140
  max_steps: 6
141
+ difficulty: "easy"
142
  reward_range: [0.01, 0.99]
143
  grader: "env.server.grader:grade"
requirements.txt CHANGED
@@ -3,3 +3,5 @@ uvicorn[standard]>=0.24.0
3
  websockets>=12.0
4
  pydantic>=2.0.0
5
  openai>=1.0.0
 
 
 
3
  websockets>=12.0
4
  pydantic>=2.0.0
5
  openai>=1.0.0
6
+
7
+ openenv-core>=0.2.0