HimanshuSardana2 commited on
Commit
5e73079
·
1 Parent(s): 1d68a07

fix: handle async client and None reward values

Browse files
.env.example ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OpenEnv Environment Variables
2
+ # Copy this to .env and fill in your values
3
+
4
+ # Required - Hugging Face API Key
5
+ HF_TOKEN=your_huggingface_token_here
6
+
7
+ # Required - LLM Configuration
8
+ API_BASE_URL=https://router.huggingface.co/v1
9
+ MODEL_NAME=Qwen/Qwen2.5-72B-Instruct
10
+
11
+ # Optional - Environment URL (defaults to localhost)
12
+ ENV_URL=http://localhost:8000
13
+
14
+ # Optional - For local testing without Docker
15
+ OPENAI_API_KEY=your_openai_key_if_using_openai
data_analysis_env/.dockerignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ __pycache__
2
+ *.pyc
3
+ .venv
4
+ .git
5
+ *.egg-info
data_analysis_env/Dockerfile ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+
5
+ RUN pip install --no-cache-dir uv
6
+
7
+ COPY server/requirements.txt /tmp/requirements.txt
8
+ RUN pip install --no-cache-dir -r /tmp/requirements.txt
9
+
10
+ COPY . /app/
11
+
12
+ ENV PYTHONPATH=/app/server:/app
13
+ ENV DATA_DIR=/app/server/data
14
+
15
+ EXPOSE 8000
16
+
17
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
data_analysis_env/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (630 Bytes). View file
 
data_analysis_env/__pycache__/client.cpython-311.pyc ADDED
Binary file (2.73 kB). View file
 
data_analysis_env/__pycache__/models.cpython-311.pyc ADDED
Binary file (4.31 kB). View file
 
data_analysis_env/client.py CHANGED
@@ -16,9 +16,8 @@ class DataAnalysisEnv(
16
  def __init__(
17
  self,
18
  base_url: str = "http://localhost:8000",
19
- timeout: float = 30.0,
20
  ):
21
- super().__init__(base_url=base_url, timeout=timeout)
22
 
23
  def _step_payload(self, action: DataAnalysisAction) -> dict:
24
  return {
 
16
  def __init__(
17
  self,
18
  base_url: str = "http://localhost:8000",
 
19
  ):
20
+ super().__init__(base_url=base_url)
21
 
22
  def _step_payload(self, action: DataAnalysisAction) -> dict:
23
  return {
data_analysis_env/server/Dockerfile CHANGED
@@ -4,14 +4,14 @@ WORKDIR /app
4
 
5
  RUN pip install --no-cache-dir uv
6
 
7
- COPY data_analysis_env/server/requirements.txt /tmp/requirements.txt
8
  RUN pip install --no-cache-dir -r /tmp/requirements.txt
9
 
10
- COPY data_analysis_env/ /app/
11
 
12
- ENV PYTHONPATH=/app:$PYTHONPATH
13
- ENV DATA_DIR=/app/server/data
14
 
15
  EXPOSE 8000
16
 
17
- CMD ["uvicorn", "server.app:app", "--host", "0.0.0.0", "--port", "8000"]
 
4
 
5
  RUN pip install --no-cache-dir uv
6
 
7
+ COPY server/requirements.txt /tmp/requirements.txt
8
  RUN pip install --no-cache-dir -r /tmp/requirements.txt
9
 
10
+ COPY . /app/data_analysis_env/
11
 
12
+ ENV PYTHONPATH=/app
13
+ ENV DATA_DIR=/app/data_analysis_env/data
14
 
15
  EXPOSE 8000
16
 
17
+ CMD ["uvicorn", "data_analysis_env.server.app:app", "--host", "0.0.0.0", "--port", "8000"]
data_analysis_env/server/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (193 Bytes). View file
 
data_analysis_env/server/__pycache__/app.cpython-311.pyc ADDED
Binary file (773 Bytes). View file
 
data_analysis_env/server/__pycache__/data_analysis_environment.cpython-311.pyc ADDED
Binary file (25.4 kB). View file
 
data_analysis_env/server/app.py CHANGED
@@ -1,11 +1,16 @@
 
1
  from openenv.core.env_server import create_app
2
 
3
- from .data_analysis_environment import DataAnalysisEnvironment
4
- from ..models import DataAnalysisAction, DataAnalysisObservation
 
 
 
 
5
 
6
 
7
  def create_data_analysis_environment():
8
- data_dir = "/app/data"
9
  return DataAnalysisEnvironment(data_dir=data_dir)
10
 
11
 
 
1
+ import os
2
  from openenv.core.env_server import create_app
3
 
4
+ try:
5
+ from server.data_analysis_environment import DataAnalysisEnvironment
6
+ from data_analysis_env.models import DataAnalysisAction, DataAnalysisObservation
7
+ except ModuleNotFoundError:
8
+ from data_analysis_environment import DataAnalysisEnvironment
9
+ from models import DataAnalysisAction, DataAnalysisObservation
10
 
11
 
12
  def create_data_analysis_environment():
13
+ data_dir = os.getenv("DATA_DIR", "/app/server/data")
14
  return DataAnalysisEnvironment(data_dir=data_dir)
15
 
16
 
data_analysis_env/server/data_analysis_environment.py CHANGED
@@ -8,12 +8,20 @@ import uuid
8
 
9
  from openenv.core.env_server import Environment
10
 
11
- from ..models import (
12
- DataAnalysisAction,
13
- DataAnalysisObservation,
14
- DataAnalysisState,
15
- AVAILABLE_TOOLS,
16
- )
 
 
 
 
 
 
 
 
17
 
18
 
19
  TASKS = {
 
8
 
9
  from openenv.core.env_server import Environment
10
 
11
+ try:
12
+ from data_analysis_env.models import (
13
+ DataAnalysisAction,
14
+ DataAnalysisObservation,
15
+ DataAnalysisState,
16
+ AVAILABLE_TOOLS,
17
+ )
18
+ except ModuleNotFoundError:
19
+ from models import (
20
+ DataAnalysisAction,
21
+ DataAnalysisObservation,
22
+ DataAnalysisState,
23
+ AVAILABLE_TOOLS,
24
+ )
25
 
26
 
27
  TASKS = {
inference.py CHANGED
@@ -128,11 +128,12 @@ async def run_task(client: OpenAI, env: DataAnalysisEnv, task_name: str) -> dict
128
  rewards = []
129
  last_error = None
130
 
131
- result = env.reset(task=task_name)
132
  obs = result.observation
 
133
 
134
  print(
135
- f"[STEP] step={step} action=reset task={task_name} reward={obs.reward:.2f} done={result.done} error=null"
136
  )
137
 
138
  while not result.done and step < MAX_STEPS:
@@ -165,13 +166,14 @@ async def run_task(client: OpenAI, env: DataAnalysisEnv, task_name: str) -> dict
165
  )
166
  continue
167
 
168
- result = env.step(action)
169
  obs = result.observation
170
- rewards.append(obs.reward)
 
171
 
172
  error_str = obs.error if obs.error else "null"
173
  print(
174
- f"[STEP] step={step} action={action.tool}({action.parameters}) reward={obs.reward:.2f} done={result.done} error={error_str}"
175
  )
176
 
177
  if obs.error:
 
128
  rewards = []
129
  last_error = None
130
 
131
+ result = await env.reset(task=task_name)
132
  obs = result.observation
133
+ reward_val = obs.reward if obs.reward is not None else 0.0
134
 
135
  print(
136
+ f"[STEP] step={step} action=reset task={task_name} reward={reward_val:.2f} done={result.done} error=null"
137
  )
138
 
139
  while not result.done and step < MAX_STEPS:
 
166
  )
167
  continue
168
 
169
+ result = await env.step(action)
170
  obs = result.observation
171
+ reward_val = obs.reward if obs.reward is not None else 0.0
172
+ rewards.append(reward_val)
173
 
174
  error_str = obs.error if obs.error else "null"
175
  print(
176
+ f"[STEP] step={step} action={action.tool}({action.parameters}) reward={reward_val:.2f} done={result.done} error={error_str}"
177
  )
178
 
179
  if obs.error: