fleet-python 0.2.28__py3-none-any.whl → 0.2.29__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fleet-python might be problematic. Click here for more details.

fleet/_async/client.py CHANGED
@@ -213,6 +213,9 @@ class AsyncFleet:
213
213
  await instance.instance.load()
214
214
  return instance
215
215
 
216
+ async def make_for_task(self, task: Task) -> AsyncEnv:
217
+ return self.make(env_key=f"{task.env_id}:{task.version}")
218
+
216
219
  async def instances(
217
220
  self, status: Optional[str] = None, region: Optional[str] = None
218
221
  ) -> List[AsyncEnv]:
@@ -247,6 +250,50 @@ class AsyncFleet:
247
250
  async def delete(self, instance_id: str) -> InstanceResponse:
248
251
  return await _delete_instance(self.client, instance_id)
249
252
 
253
+ async def load_tasks_from_file(self, filename: str) -> List[Task]:
254
+ with open(filename, 'r', encoding='utf-8') as f:
255
+ tasks_data = f.read()
256
+
257
+ return self.load_task_array_from_string(tasks_data)
258
+
259
+ async def load_task_array_from_string(self, serialized_tasks: List[Dict]) -> List[Task]:
260
+ tasks = []
261
+
262
+ json_tasks = json.loads(serialized_tasks)
263
+ for json_task in json_tasks:
264
+ parsed_task = self.load_task_from_json(json_task)
265
+ tasks.append(parsed_task)
266
+ return tasks
267
+
268
+ async def load_task_from_string(self, task_string: str) -> Task:
269
+ task_json = json.loads(task_string)
270
+ return self.load_task_from_json(task_json)
271
+
272
+ async def load_task_from_json(self, task_json: Dict) -> Task:
273
+ try:
274
+ if 'verifier_id' in task_json and task_json['verifier_id']:
275
+ verifier = self._create_verifier_from_data(
276
+ verifier_id=task_json['verifier_id'],
277
+ verifier_key=task_json['key'],
278
+ verifier_code=task_json['verifier_func'],
279
+ verifier_sha=task_json.get('verifier_sha', '')
280
+ )
281
+ except Exception as e:
282
+ logger.warning(f"Failed to create verifier {task_json['key']}: {e}")
283
+
284
+ task = Task(
285
+ key=task_json['key'],
286
+ prompt=task_json['prompt'],
287
+ env_id=task_json['env_id'], # Use env_id from the data
288
+ created_at=task_json['created_at'],
289
+ version=task_json.get('version'),
290
+ env_variables=task_json.get('env_variables', {}),
291
+ verifier_func=task_json.get('verifier_func'), # Set verifier code
292
+ verifier=verifier, # Use created verifier or None
293
+ metadata=task_json.get('metadata', {}) # Default empty metadata
294
+ )
295
+ return task
296
+
250
297
  async def load_tasks(self, env_key: Optional[str] = None) -> List[Task]:
251
298
  """Load tasks for the authenticated team, optionally filtered by environment.
252
299
 
@@ -1,4 +1,4 @@
1
- from ..client import AsyncFleet, AsyncEnv
1
+ from ..client import AsyncFleet, AsyncEnv, Task
2
2
  from ...models import Environment as EnvironmentModel, AccountResponse
3
3
  from typing import List, Optional
4
4
 
@@ -6,6 +6,8 @@ from typing import List, Optional
6
6
  async def make_async(env_key: str, region: Optional[str] = None) -> AsyncEnv:
7
7
  return await AsyncFleet().make(env_key, region=region)
8
8
 
9
+ async def make_for_task_async(task: Task) -> AsyncEnv:
10
+ return await AsyncFleet().make_for_task(task)
9
11
 
10
12
  async def list_envs_async() -> List[EnvironmentModel]:
11
13
  return await AsyncFleet().list_envs()
fleet/_async/tasks.py CHANGED
@@ -24,6 +24,8 @@ class Task(BaseModel):
24
24
  version: Optional[str] = Field(None, description="Task version")
25
25
  verifier_func: Optional[str] = Field(None, description="Verifier function code")
26
26
  verifier: Optional[Any] = Field(None, description="Verifier function with decorator (async or sync)")
27
+ verifier_id: Optional[str] = Field(None, description="Verifier identifier")
28
+ verifier_sha: Optional[str] = Field(None, description="Verifier SHA256 hash")
27
29
  metadata: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Additional task metadata")
28
30
 
29
31
  @validator('key')
fleet/client.py CHANGED
@@ -213,6 +213,9 @@ class Fleet:
213
213
  instance.instance.load()
214
214
  return instance
215
215
 
216
+ def make_for_task(self, task: Task) -> SyncEnv:
217
+ return self.make(env_key=f"{task.env_id}:{task.version}")
218
+
216
219
  def instances(
217
220
  self, status: Optional[str] = None, region: Optional[str] = None
218
221
  ) -> List[SyncEnv]:
@@ -246,8 +249,54 @@ class Fleet:
246
249
 
247
250
  def delete(self, instance_id: str) -> InstanceResponse:
248
251
  return _delete_instance(self.client, instance_id)
252
+
253
+ def load_tasks_from_file(self, filename: str) -> List[Task]:
254
+ with open(filename, 'r', encoding='utf-8') as f:
255
+ tasks_data = f.read()
256
+
257
+ return self.load_task_array_from_string(tasks_data)
258
+
259
+ def load_task_array_from_string(self, serialized_tasks: List[Dict]) -> List[Task]:
260
+ tasks = []
261
+
262
+ json_tasks = json.loads(serialized_tasks)
263
+ for json_task in json_tasks:
264
+ parsed_task = self.load_task_from_json(json_task)
265
+ tasks.append(parsed_task)
266
+ return tasks
267
+
268
+ def load_task_from_string(self, task_string: str) -> Task:
269
+ task_json = json.loads(task_string)
270
+ return self.load_task_from_json(task_json)
271
+
272
+ def load_task_from_json(self, task_json: Dict) -> Task:
273
+ verifier = None
274
+ try:
275
+ if 'verifier_id' in task_json and task_json['verifier_id']:
276
+ verifier = self._create_verifier_from_data(
277
+ verifier_id=task_json['verifier_id'],
278
+ verifier_key=task_json['key'],
279
+ verifier_code=task_json['verifier_func'],
280
+ verifier_sha=task_json.get('verifier_sha', '')
281
+ )
282
+ except Exception as e:
283
+ logger.warning(f"Failed to create verifier {task_json['key']}: {e}")
284
+
285
+ task = Task(
286
+ key=task_json['key'],
287
+ prompt=task_json['prompt'],
288
+ env_id=task_json['env_id'], # Use env_id from the data
289
+ created_at=task_json['created_at'],
290
+ version=task_json.get('version'),
291
+ env_variables=task_json.get('env_variables', {}),
292
+ verifier_func=task_json.get('verifier_func'), # Set verifier code
293
+ verifier=verifier, # Use created verifier or None
294
+ metadata=task_json.get('metadata', {}) # Default empty metadata
295
+ )
296
+ return task
249
297
 
250
- def load_tasks(self, env_key: Optional[str] = None) -> List[Task]:
298
+
299
+ def load_tasks(self, env_key: Optional[str] = None, task_keys: Optional[List[str]] = None) -> List[Task]:
251
300
  """Load tasks for the authenticated team, optionally filtered by environment.
252
301
 
253
302
  Args:
@@ -259,6 +308,9 @@ class Fleet:
259
308
  params = {}
260
309
  if env_key is not None:
261
310
  params["env_key"] = env_key
311
+
312
+ if task_keys is not None:
313
+ params["task_keys"] = task_keys
262
314
 
263
315
  response = self.client.request("GET", "/v1/tasks", params=params)
264
316
  task_list_response = TaskListResponse(**response.json())
@@ -294,6 +346,8 @@ class Fleet:
294
346
  env_variables=task_response.env_variables or {},
295
347
  verifier_func=verifier_func, # Set verifier code
296
348
  verifier=verifier, # Use created verifier or None
349
+ verifier_id=task_response.verifier.verifier_id,
350
+ verifier_sha=task_response.verifier.sha256,
297
351
  metadata={} # Default empty metadata
298
352
  )
299
353
  tasks.append(task)
@@ -371,7 +425,6 @@ class Fleet:
371
425
  logger.error(f"Failed to import task {task.key}: {e}")
372
426
  continue
373
427
 
374
-
375
428
  def account(self) -> AccountResponse:
376
429
  """Get account information including instance limits and usage.
377
430
 
fleet/env/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Fleet env module - convenience functions for environment management."""
2
2
 
3
- from .client import make, list_envs, list_regions, get, list_instances, account
3
+ from .client import make, make_for_task, list_envs, list_regions, get, list_instances, account
4
4
 
5
5
  # Import async versions from _async
6
6
  from .._async.env.client import (
@@ -14,6 +14,7 @@ from .._async.env.client import (
14
14
 
15
15
  __all__ = [
16
16
  "make",
17
+ "make_for_task",
17
18
  "list_envs",
18
19
  "list_regions",
19
20
  "list_instances",
fleet/env/client.py CHANGED
@@ -1,4 +1,4 @@
1
- from ..client import Fleet, SyncEnv
1
+ from ..client import Fleet, SyncEnv, Task
2
2
  from ..models import Environment as EnvironmentModel, AccountResponse
3
3
  from typing import List, Optional
4
4
 
@@ -6,11 +6,12 @@ from typing import List, Optional
6
6
  def make(env_key: str, region: Optional[str] = None) -> SyncEnv:
7
7
  return Fleet().make(env_key, region=region)
8
8
 
9
+ def make_for_task(task: Task) -> SyncEnv:
10
+ return Fleet().make_for_task(task)
9
11
 
10
12
  def list_envs() -> List[EnvironmentModel]:
11
13
  return Fleet().list_envs()
12
14
 
13
-
14
15
  def list_regions() -> List[str]:
15
16
  return Fleet().list_regions()
16
17
 
fleet/tasks.py CHANGED
@@ -24,6 +24,8 @@ class Task(BaseModel):
24
24
  version: Optional[str] = Field(None, description="Task version")
25
25
  verifier_func: Optional[str] = Field(None, description="Verifier function code")
26
26
  verifier: Optional[Any] = Field(None, description="Verifier function with decorator (async or sync)")
27
+ verifier_id: Optional[str] = Field(None, description="Verifier identifier")
28
+ verifier_sha: Optional[str] = Field(None, description="Verifier SHA256 hash")
27
29
  metadata: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Additional task metadata")
28
30
 
29
31
  @validator('key')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.28
3
+ Version: 0.2.29
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -18,20 +18,20 @@ examples/query_builder_example.py,sha256=Q3lUBETHpu1aS2FXAO79ADYqCxOjMMMZNgCcFVa
18
18
  examples/quickstart.py,sha256=1VT39IRRhemsJgxi0O0gprdpcw7HB4pYO97GAYagIcg,3788
19
19
  fleet/__init__.py,sha256=2WHAk_ZRIxDs1uxrWf-sSeokiK4f_nDVHJJ1_VUFSPA,2306
20
20
  fleet/base.py,sha256=0yYuMN0lBkrfTTZBt5NQp5112xWgziuWEk4GuHJB1wE,9189
21
- fleet/client.py,sha256=Nb4m6AX7uG6k0hdNqyBzAcEdYu1kJLicUnzvTAE_u8Y,20242
21
+ fleet/client.py,sha256=GxpQufucXEJedb0MWE1wZL1G40CLV1c-GzUsUYNSxmU,22475
22
22
  fleet/config.py,sha256=rqR-y2TbZS-VYACaqrg-PUe0y0UDbR1ZNU1KGJZBwNQ,272
23
23
  fleet/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
24
24
  fleet/models.py,sha256=6SqoWdTIygF3jriZW53a-jQ1JZoPatuWZ4JQ1qIY5MY,12453
25
- fleet/tasks.py,sha256=1tOE_13PtaxBTrFit4NgLGN8vqtvU4lroSODxERAAi0,3238
25
+ fleet/tasks.py,sha256=koyaRk-ytn4yM5oOpGLHrY73KxtJyyJHsdhUFpTjPkk,3400
26
26
  fleet/types.py,sha256=eXeI8BFmiU5hln0PVvJbUZs7BSjl6wSqAtN9zaJT6yY,652
27
27
  fleet/_async/__init__.py,sha256=AJWCnuo7XKja4yBb8fK2wX7ntciLXQrpzdRHwjTRP6M,62
28
28
  fleet/_async/base.py,sha256=s0rYOtXsMJeitOvpa-Oh8ciLV226p_TIPp3fplzWvV4,9209
29
- fleet/_async/client.py,sha256=O2LB8FyJ4rGzAuE8nAeycYZAACQGPPENMKS7YDhTOmA,20388
29
+ fleet/_async/client.py,sha256=DMLjGtLpeDzl2bJ8VO753IzzvLaR0l9TeP5C8fmlfio,22382
30
30
  fleet/_async/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
31
31
  fleet/_async/models.py,sha256=6SqoWdTIygF3jriZW53a-jQ1JZoPatuWZ4JQ1qIY5MY,12453
32
- fleet/_async/tasks.py,sha256=CJDt3dhg_88bHUYVqp2WcVenh6Y41wvp_iMaRiJeFDs,4069
32
+ fleet/_async/tasks.py,sha256=WXZNGHYzNBeG5QF6EjOMNFpR5x3XZMdAwuwxZRTwFJI,4231
33
33
  fleet/_async/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- fleet/_async/env/client.py,sha256=MR2Ju7AudGWmztTVUPPut-ys3yqD7D00D_jsxZaRybA,858
34
+ fleet/_async/env/client.py,sha256=LJ0P9Dn06RhmzVCC9hnTTqd9k0LcWOaQ5nm4G7y1sOY,969
35
35
  fleet/_async/instance/__init__.py,sha256=PtmJq8J8bh0SOQ2V55QURz5GJfobozwtQoqhaOk3_tI,515
36
36
  fleet/_async/instance/base.py,sha256=3qUBuUR8OVS36LzdP6KyZzngtwPKYO09HoY6Ekxp-KA,1625
37
37
  fleet/_async/instance/client.py,sha256=2ZNoBxRJXDQc8fohCLy_RNo-wmuUKXzJo5RZQeCQnkQ,6069
@@ -42,8 +42,8 @@ fleet/_async/resources/sqlite.py,sha256=DvDLRI5dJ7_v4WkHw-Zday1M_FQUdzAqUCy9FtfO
42
42
  fleet/_async/verifiers/__init__.py,sha256=7dtLOFgirYQmEIiDMcx02-ZqR7yqrfjOiqBBuXBz914,466
43
43
  fleet/_async/verifiers/bundler.py,sha256=A4yR3wBOcVZYFAv87CD58QlJn6L4QXeilrasnVm8n74,26185
44
44
  fleet/_async/verifiers/verifier.py,sha256=vS2Nv-tLgDa_1xhMHdkw0297uNMzzSlRPsXe4zIJsqw,14528
45
- fleet/env/__init__.py,sha256=Wt6mO2dQnOdzdjOCvtiIP49wpSrmS7OaZ_OeHNrzqsY,595
46
- fleet/env/client.py,sha256=2FzA7qfR-B7tVdCNa4uQk10g8zXV-9MNjAqx2D5vQ7c,710
45
+ fleet/env/__init__.py,sha256=w88In82IhmuGpRMW-bPlWGLTqdSWH2ic9eU6-8L8Rps,631
46
+ fleet/env/client.py,sha256=WbjtYME1N4_Z88HDoLtsrNHRw8N5XNuXvRK8w48K-So,796
47
47
  fleet/instance/__init__.py,sha256=-Anms7Vw_FO8VBIvwnAnq4rQjwl_XNfAS-i7bypHMow,478
48
48
  fleet/instance/base.py,sha256=OYqzBwZFfTX9wlBGSG5gljqj98NbiJeKIfFJ3uj5I4s,1587
49
49
  fleet/instance/client.py,sha256=0gNXWRKNSXUqVTf6E5VUFO2gEZrBTF87QnvpLr5xaD8,5895
@@ -61,10 +61,10 @@ fleet/verifiers/decorator.py,sha256=Q-KHhicnIYFwX7FX_VZguzNfu8ZslqNUeWxcS2CwNVY,
61
61
  fleet/verifiers/parse.py,sha256=W4cBnto-XfPNrRwsYs7PFR3QJoI5UfWyB-QWsm1jUEg,7844
62
62
  fleet/verifiers/sql_differ.py,sha256=dmiGCFXVMEMbAX519OjhVqgA8ZvhnvdmC1BVpL7QCF0,6490
63
63
  fleet/verifiers/verifier.py,sha256=7yiqko332lX0pgjbyAQ6KbaGm_V8TX864ceH-4fvvW0,14470
64
- fleet_python-0.2.28.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
64
+ fleet_python-0.2.29.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
65
65
  scripts/fix_sync_imports.py,sha256=m2OHz1lCAdDVIRhPvn8grNXpRaPo1b99dRMYI7TiEes,7117
66
66
  scripts/unasync.py,sha256=--Fmaae47o-dZ1HYgX1c3Nvi-rMjcFymTRlJcWWnmpw,725
67
- fleet_python-0.2.28.dist-info/METADATA,sha256=zShPvypnbRfyrVpHn6a27TuP9dFy3uvaWB5DFmgXN4o,3347
68
- fleet_python-0.2.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
- fleet_python-0.2.28.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
70
- fleet_python-0.2.28.dist-info/RECORD,,
67
+ fleet_python-0.2.29.dist-info/METADATA,sha256=jEanmSO_HJs7L4Xhw0a_iWu5SPqVH9F3ieqV94BmVBA,3347
68
+ fleet_python-0.2.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
+ fleet_python-0.2.29.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
70
+ fleet_python-0.2.29.dist-info/RECORD,,