evolve-sdk 0.0.52.dev711__tar.gz → 0.0.52.dev714__tar.gz

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.
Files changed (43) hide show
  1. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/PKG-INFO +1 -1
  2. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/__init__.py +5 -1
  3. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/hosted.py +92 -0
  4. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve_sdk.egg-info/PKG-INFO +1 -1
  5. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/pyproject.toml +1 -1
  6. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/LICENSE +0 -0
  7. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/MANIFEST.in +0 -0
  8. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/README.md +0 -0
  9. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/bridge/__init__.py +0 -0
  10. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/bridge/dist/bridge.bundle.cjs +0 -0
  11. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/_http.py +0 -0
  12. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/agent.py +0 -0
  13. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/bridge.py +0 -0
  14. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/browser_credentials.py +0 -0
  15. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/browser_profiles.py +0 -0
  16. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/config.py +0 -0
  17. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/integrations.py +0 -0
  18. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/managed_secrets.py +0 -0
  19. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/pipeline/__init__.py +0 -0
  20. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/pipeline/pipeline.py +0 -0
  21. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/pipeline/types.py +0 -0
  22. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/__init__.py +0 -0
  23. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/agent_md/judge.md +0 -0
  24. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/agent_md/reduce.md +0 -0
  25. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/agent_md/verify.md +0 -0
  26. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/user/judge.md +0 -0
  27. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/user/retry_feedback.md +0 -0
  28. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/prompts/user/verify.md +0 -0
  29. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/results.py +0 -0
  30. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/retry.py +0 -0
  31. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/schema.py +0 -0
  32. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/sessions_client.py +0 -0
  33. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/storage_client.py +0 -0
  34. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/swarm/__init__.py +0 -0
  35. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/swarm/results.py +0 -0
  36. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/swarm/swarm.py +0 -0
  37. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/swarm/types.py +0 -0
  38. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve/utils.py +0 -0
  39. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve_sdk.egg-info/SOURCES.txt +0 -0
  40. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve_sdk.egg-info/dependency_links.txt +0 -0
  41. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve_sdk.egg-info/requires.txt +0 -0
  42. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/evolve_sdk.egg-info/top_level.txt +0 -0
  43. {evolve_sdk-0.0.52.dev711 → evolve_sdk-0.0.52.dev714}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.52.dev711
3
+ Version: 0.0.52.dev714
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -59,6 +59,8 @@ from .hosted import (
59
59
  DatasetRef,
60
60
  DatasetSelector,
61
61
  DatasetVersion,
62
+ DatasetVersionGate,
63
+ DatasetVersionGateFailedTask,
62
64
  DatasetsClient,
63
65
  EvalSandboxProvider,
64
66
  EvolveAPIError,
@@ -361,7 +363,7 @@ async def list_checkpoints(
361
363
  await store.close()
362
364
 
363
365
 
364
- __version__ = '0.0.52.dev711'
366
+ __version__ = '0.0.52.dev714'
365
367
 
366
368
  __all__ = [
367
369
  # Main classes
@@ -442,6 +444,8 @@ __all__ = [
442
444
  'Dataset',
443
445
  'ActiveDataset',
444
446
  'DatasetVersion',
447
+ 'DatasetVersionGate',
448
+ 'DatasetVersionGateFailedTask',
445
449
  'DatasetRef',
446
450
  'DatasetSelector',
447
451
  'DatasetImport',
@@ -301,6 +301,40 @@ AttemptPhase = Literal[
301
301
  ]
302
302
 
303
303
 
304
+ @dataclass
305
+ class DatasetVersionGateFailedTask:
306
+ """One task the activation gate found ineligible.
307
+
308
+ ``outcome`` is the gate's verdict word (``FAIL``, or ``ERROR`` when the
309
+ run produced no usable score; ``None`` when the server omits it) and
310
+ ``reasons`` are the gate's own sentences for this task — empty when the
311
+ server names none.
312
+ """
313
+ task_name: str
314
+ outcome: Optional[str] = None
315
+ reasons: List[str] = field(default_factory=list)
316
+
317
+
318
+ @dataclass
319
+ class DatasetVersionGate:
320
+ """The activation gate's progress for one dataset version.
321
+
322
+ ``status`` is the gate's own lifecycle (``PENDING`` → ``RUNNING`` →
323
+ ``PASSED``/``FAILED`` as wire values). ``code`` and ``message`` are set on
324
+ failure — one machine word and one human sentence — and are ``None`` while
325
+ the gate is healthy. ``attempts`` counts gate runs so far.
326
+ ``failed_tasks`` names each ineligible task with the gate's own reasons
327
+ (the server sends the first 25); it is empty while the gate is healthy and
328
+ empty on servers that predate the field — absence is "nothing to report",
329
+ never a crash.
330
+ """
331
+ status: str
332
+ attempts: int
333
+ code: Optional[str] = None
334
+ message: Optional[str] = None
335
+ failed_tasks: List[DatasetVersionGateFailedTask] = field(default_factory=list)
336
+
337
+
304
338
  @dataclass
305
339
  class DatasetVersion:
306
340
  """One immutable version of a dataset — one shape on every surface."""
@@ -308,6 +342,10 @@ class DatasetVersion:
308
342
  state: str
309
343
  created_at: str
310
344
  task_count: int
345
+ #: Activation-gate progress. ``None`` when no gate was scheduled for this
346
+ #: version, and also ``None`` when the server predates the gate field — a
347
+ #: missing gate never means "passed", only "nothing to report".
348
+ gate: Optional[DatasetVersionGate] = None
311
349
 
312
350
 
313
351
  @dataclass
@@ -1160,12 +1198,66 @@ def _map_capability_document(raw: Dict[str, Any]) -> CapabilityDocument:
1160
1198
  )
1161
1199
 
1162
1200
 
1201
+ def _map_version_gate(data: Any) -> Optional[DatasetVersionGate]:
1202
+ """Map a version's activation-gate field, tolerating every server generation.
1203
+
1204
+ An older server has no ``gate`` field at all; the current server sends the
1205
+ nested form (``{status, attempts, failure: {code, message}}``); the flat
1206
+ form carries ``code``/``message`` directly. Anything unreadable becomes
1207
+ ``None`` — a missing gate is "nothing to report", never a crash and never
1208
+ "passed".
1209
+ """
1210
+ if not isinstance(data, dict) or not isinstance(data.get('status'), str):
1211
+ return None
1212
+ failure = data.get('failure')
1213
+ failure = failure if isinstance(failure, dict) else {}
1214
+ code = data.get('code') if isinstance(data.get('code'), str) else failure.get('code')
1215
+ message = (
1216
+ data.get('message') if isinstance(data.get('message'), str) else failure.get('message')
1217
+ )
1218
+ attempts = data.get('attempts')
1219
+ raw_failed = data.get('failed_tasks')
1220
+ if not isinstance(raw_failed, list):
1221
+ raw_failed = failure.get('failed_tasks')
1222
+ return DatasetVersionGate(
1223
+ status=data['status'],
1224
+ attempts=attempts if isinstance(attempts, int) and not isinstance(attempts, bool) else 0,
1225
+ code=code if isinstance(code, str) else None,
1226
+ message=message if isinstance(message, str) else None,
1227
+ failed_tasks=_map_gate_failed_tasks(raw_failed),
1228
+ )
1229
+
1230
+
1231
+ def _map_gate_failed_tasks(data: Any) -> List[DatasetVersionGateFailedTask]:
1232
+ """The per-task cause list behind a FAILED gate, with the gate's tolerance.
1233
+
1234
+ Absent or unreadable input is an empty list, an entry without a task name
1235
+ is dropped, and non-string reasons are filtered — an older or misbehaving
1236
+ server must never crash the client here.
1237
+ """
1238
+ if not isinstance(data, list):
1239
+ return []
1240
+ tasks: List[DatasetVersionGateFailedTask] = []
1241
+ for item in data:
1242
+ if not isinstance(item, dict) or not isinstance(item.get('task_name'), str):
1243
+ continue
1244
+ outcome = item.get('outcome')
1245
+ reasons = item.get('reasons')
1246
+ tasks.append(DatasetVersionGateFailedTask(
1247
+ task_name=item['task_name'],
1248
+ outcome=outcome if isinstance(outcome, str) else None,
1249
+ reasons=[r for r in reasons if isinstance(r, str)] if isinstance(reasons, list) else [],
1250
+ ))
1251
+ return tasks
1252
+
1253
+
1163
1254
  def _map_dataset_version(data: Dict[str, Any]) -> DatasetVersion:
1164
1255
  return DatasetVersion(
1165
1256
  version=data['version'],
1166
1257
  state=data.get('state', ''),
1167
1258
  created_at=data.get('created_at', ''),
1168
1259
  task_count=int(data.get('task_count', 0)),
1260
+ gate=_map_version_gate(data.get('gate')),
1169
1261
  )
1170
1262
 
1171
1263
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.52.dev711
3
+ Version: 0.0.52.dev714
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolve-sdk"
7
- version = "0.0.52.dev711"
7
+ version = "0.0.52.dev714"
8
8
  description = "Pythonic SDK for multi-agent orchestration in E2B sandboxes"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"