synth-ai 0.2.9.dev2__py3-none-any.whl → 0.2.9.dev4__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 synth-ai might be problematic. Click here for more details.

Files changed (112) hide show
  1. examples/analyze_semantic_words.sh +17 -0
  2. examples/common_old/backend.py +21 -0
  3. examples/crafter_debug_render.py +180 -0
  4. examples/evals_old/README.md +98 -0
  5. examples/evals_old/__init__.py +6 -0
  6. examples/evals_old/compare_models.py +1037 -0
  7. examples/evals_old/example_log.md +145 -0
  8. examples/evals_old/run_demo.sh +126 -0
  9. examples/evals_old/trace_analysis.py +270 -0
  10. examples/finetuning_old/_backup_synth_qwen/config.toml +29 -0
  11. examples/finetuning_old/_backup_synth_qwen/example_log.md +324 -0
  12. examples/finetuning_old/_backup_synth_qwen/filter_traces.py +60 -0
  13. examples/finetuning_old/_backup_synth_qwen/filter_traces_achievements.py +239 -0
  14. examples/finetuning_old/_backup_synth_qwen/purge_v3_traces.py +109 -0
  15. examples/finetuning_old/_backup_synth_qwen/react_agent_lm.py +1924 -0
  16. examples/finetuning_old/_backup_synth_qwen/readme.md +49 -0
  17. examples/finetuning_old/_backup_synth_qwen/run_crafter_qwen4b.py +114 -0
  18. examples/finetuning_old/_backup_synth_qwen/run_demo.sh +195 -0
  19. examples/finetuning_old/_backup_synth_qwen/sft_kickoff.py +118 -0
  20. examples/finetuning_old/synth_qwen_v1/README.md +68 -0
  21. examples/finetuning_old/synth_qwen_v1/filter_traces.py +60 -0
  22. examples/finetuning_old/synth_qwen_v1/filter_traces_achievements.py +239 -0
  23. examples/finetuning_old/synth_qwen_v1/finetune.py +46 -0
  24. examples/finetuning_old/synth_qwen_v1/hello_ft_model.py +71 -0
  25. examples/finetuning_old/synth_qwen_v1/infer.py +37 -0
  26. examples/finetuning_old/synth_qwen_v1/poll.py +44 -0
  27. examples/finetuning_old/synth_qwen_v1/prepare_data.py +35 -0
  28. examples/finetuning_old/synth_qwen_v1/purge_v3_traces.py +109 -0
  29. examples/finetuning_old/synth_qwen_v1/react_agent_lm.py +1932 -0
  30. examples/finetuning_old/synth_qwen_v1/run_crafter_sft_job.py +207 -0
  31. examples/finetuning_old/synth_qwen_v1/run_ft_job.py +232 -0
  32. examples/finetuning_old/synth_qwen_v1/upload_data.py +34 -0
  33. examples/finetuning_old/synth_qwen_v1/util.py +147 -0
  34. examples/rl/README.md +169 -0
  35. examples/rl/configs/eval_base_qwen.toml +15 -0
  36. examples/rl/configs/eval_rl_qwen.toml +11 -0
  37. examples/rl/configs/rl_from_base_qwen.toml +35 -0
  38. examples/rl/configs/rl_from_base_qwen17.toml +74 -0
  39. examples/rl/configs/rl_from_ft_qwen.toml +35 -0
  40. examples/rl/download_dataset.py +64 -0
  41. examples/rl/run_eval.py +435 -0
  42. examples/rl/run_rl_and_save.py +94 -0
  43. examples/rl/task_app/README.md +22 -0
  44. {synth_ai/task/apps → examples/rl/task_app}/math_single_step.py +8 -8
  45. examples/rl/task_app/math_task_app.py +107 -0
  46. examples/rl_old/task_app.py +962 -0
  47. examples/run_crafter_demo.sh +10 -0
  48. examples/warming_up_to_rl/analyze_trace_db.py +420 -0
  49. examples/warming_up_to_rl/configs/crafter_fft.toml +48 -0
  50. examples/warming_up_to_rl/configs/crafter_fft_4b.toml +54 -0
  51. examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml +20 -0
  52. examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml +13 -0
  53. examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml +23 -0
  54. examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml +73 -0
  55. examples/warming_up_to_rl/configs/rl_from_ft.toml +56 -0
  56. examples/warming_up_to_rl/export_trace_sft.py +541 -0
  57. examples/warming_up_to_rl/groq_test.py +88 -0
  58. examples/warming_up_to_rl/manage_secrets.py +127 -0
  59. examples/warming_up_to_rl/old/event_rewards.md +234 -0
  60. examples/warming_up_to_rl/old/notes.md +73 -0
  61. examples/warming_up_to_rl/readme.md +172 -0
  62. examples/warming_up_to_rl/run_eval.py +434 -0
  63. examples/warming_up_to_rl/run_fft_and_save.py +309 -0
  64. examples/warming_up_to_rl/run_local_rollout.py +188 -0
  65. examples/warming_up_to_rl/run_local_rollout_modal.py +160 -0
  66. examples/warming_up_to_rl/run_local_rollout_parallel.py +342 -0
  67. examples/warming_up_to_rl/run_local_rollout_traced.py +372 -0
  68. examples/warming_up_to_rl/run_rl_and_save.py +101 -0
  69. examples/warming_up_to_rl/run_rollout_remote.py +129 -0
  70. examples/warming_up_to_rl/task_app/README.md +38 -0
  71. {synth_ai/task/apps → examples/warming_up_to_rl/task_app}/grpo_crafter.py +7 -7
  72. examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py +165 -0
  73. examples/warming_up_to_rl/task_app/synth_envs_hosted/README.md +173 -0
  74. examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py +5 -0
  75. examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py +145 -0
  76. examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py +1271 -0
  77. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/__init__.py +1 -0
  78. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/__init__.py +6 -0
  79. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/app.py +1 -0
  80. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/environment.py +429 -0
  81. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/policy.py +442 -0
  82. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py +96 -0
  83. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py +302 -0
  84. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/tools.py +47 -0
  85. examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py +202 -0
  86. examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/__init__.py +5 -0
  87. examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py +512 -0
  88. examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py +102 -0
  89. examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py +985 -0
  90. examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py +197 -0
  91. examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +1749 -0
  92. examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/__init__.py +5 -0
  93. examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py +217 -0
  94. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py +160 -0
  95. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py +146 -0
  96. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_stepwise_rewards.py +58 -0
  97. examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py +61 -0
  98. synth_ai/api/train/config_finder.py +18 -18
  99. synth_ai/api/train/env_resolver.py +28 -1
  100. synth_ai/cli/task_apps.py +264 -55
  101. synth_ai/demo_registry.py +7 -7
  102. synth_ai/demos/demo_task_apps/crafter/__init__.py +1 -0
  103. synth_ai/demos/demo_task_apps/crafter/configs/crafter_fft_4b.toml +54 -0
  104. synth_ai/demos/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +73 -0
  105. synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +165 -0
  106. synth_ai/task/apps/__init__.py +54 -13
  107. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/METADATA +1 -1
  108. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/RECORD +112 -13
  109. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/top_level.txt +1 -0
  110. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/WHEEL +0 -0
  111. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/entry_points.txt +0 -0
  112. {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,54 @@
1
+ # FFT job config for Qwen/Qwen3-4B on Crafter SFT dataset
2
+
3
+ [algorithm]
4
+ type = "offline"
5
+ method = "supervised_finetune"
6
+ variety = "fft"
7
+
8
+
9
+ [job]
10
+ model = "Qwen/Qwen3-4B"
11
+ # Limit training to the first 100 conversations (export a 100-row JSONL and point to it here)
12
+ # data = "../ft_data/qwen3_32b_ach_ge3_raw_filtered.head100.jsonl"
13
+
14
+ [compute]
15
+ # Adjust as needed for your quota
16
+ gpu_type = "H100"
17
+ gpu_count = 1
18
+ nodes = 1
19
+
20
+ [data]
21
+ # Optional topology metadata (left empty for now)
22
+ topology = {}
23
+
24
+ # Optional local validation dataset path (JSONL). If set, the client will upload
25
+ # this file and wire up validation so the frontend can display val.loss.
26
+ validation_path = "../ft_data/qwen3_32b_ach_ge3_raw_filtered.tokens_1000000_seed_123.val_2000.jsonl"
27
+
28
+ [training]
29
+ mode = "sft_offline"
30
+ use_qlora = false
31
+
32
+ # Validation settings to emit val.loss on the frontend
33
+ [training.validation]
34
+ enabled = true
35
+ evaluation_strategy = "steps"
36
+ eval_steps = 20
37
+ save_best_model_at_end = true
38
+ metric_for_best_model = "val.loss"
39
+ greater_is_better = false
40
+
41
+ [hyperparameters]
42
+ # Minimal safe defaults; backend can override
43
+ n_epochs = 1
44
+ batch_size = 1
45
+ gradient_accumulation_steps = 64
46
+ sequence_length = 4096
47
+ learning_rate = 5e-6
48
+ warmup_ratio = 0.03
49
+ train_kind = "fft"
50
+
51
+ # Optional parallelism block example
52
+ #[hyperparameters.parallelism]
53
+ # tensor_parallel_size = 1
54
+ # pipeline_parallel_size = 1
@@ -0,0 +1,73 @@
1
+ # RL training starting from base Qwen/Qwen3-4B (TOML-only model selection)
2
+
3
+ [algorithm]
4
+ type = "online"
5
+ method = "policy_gradient"
6
+ variety = "gspo"
7
+
8
+
9
+ [services]
10
+ task_url = "https://synth-laboratories--grpo-crafter-task-app-final-warming--ceb5b2.modal.run"
11
+
12
+ [compute]
13
+ # Cluster shape for RL pipeline
14
+ gpu_type = "H100"
15
+ gpu_count = 8
16
+
17
+ [topology]
18
+ # Split GPUs across vLLM, training, and reference
19
+ # Must sum to compute.gpu_count
20
+ type = "single_node_split"
21
+ gpus_for_vllm = 4
22
+ gpus_for_training = 3
23
+ gpus_for_ref = 1
24
+ tensor_parallel = 4
25
+
26
+ [vllm]
27
+ # Serving tensor parallel size
28
+ tensor_parallel_size = 4
29
+ max_model_len = 8192
30
+
31
+ [reference]
32
+ # Required by trainer/runtime; ensures dedicated/scoped scoring server config exists
33
+ placement = "dedicated"
34
+ port = 8002
35
+ tp = 1
36
+ health_max_wait_s = 180
37
+ health_interval_ms = 300
38
+
39
+ [model]
40
+ # Base model start
41
+ base = "Qwen/Qwen3-4B"
42
+ label = "crafter-rl-from-base"
43
+
44
+ [rollout]
45
+ max_turns = 10
46
+ episodes_per_batch = 64
47
+ policy_name = "crafter"
48
+
49
+ [evaluation]
50
+ # Run baseline evaluation over the first 100 seeds every 20 training iterations
51
+ instances = 10
52
+ every_n_iters = 10
53
+ seeds = [
54
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
55
+ ]
56
+
57
+ [training]
58
+ log_interval = 1
59
+ weight_sync_interval = 1
60
+ # Additional RL hyperparameters can go here
61
+
62
+ # Stepwise rewards (Crafter decision-level)
63
+ step_rewards_enabled = true
64
+ step_rewards_mode = "decision_stepwise" # "off" | "decision_stepwise" | "env_sparse"
65
+ step_rewards_beta = 0.0
66
+ step_rewards_indicator_lambda = 1.0
67
+ # Optional selector for decision scalar: "unique" | "absolute" (default unique)
68
+ event_rewards_kind = "unique"
69
+
70
+ [training.weight_sync]
71
+ enable = true
72
+ targets = ["policy"]
73
+ weight_sync_interval = 1
@@ -0,0 +1,165 @@
1
+
2
+ """Compatibility wrapper for the GRPO Crafter task app.
3
+
4
+ This module now delegates to the shared TaskAppConfig defined in
5
+ `synth_ai.task.apps.grpo_crafter`. It is kept for legacy usage (running the
6
+ file directly or targeting `fastapi_app` from external tooling). Prefer using
7
+ `uvx synth-ai serve grpo-crafter` for local development and testing.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ from pathlib import Path
14
+
15
+ from fastapi.exceptions import RequestValidationError
16
+ from fastapi.responses import JSONResponse
17
+ from starlette.requests import Request
18
+
19
+ from synth_ai.task.apps import ModalDeploymentConfig, registry
20
+ from synth_ai.task.apps.grpo_crafter import build_config
21
+ from synth_ai.task.auth import is_api_key_header_authorized, normalize_environment_api_key
22
+ from synth_ai.task.server import TaskAppConfig, create_task_app, run_task_app
23
+
24
+
25
+ APP_ID = "grpo-crafter"
26
+
27
+
28
+ _BASE_CONFIG = build_config()
29
+ TASK_APP_CONFIG = TaskAppConfig(
30
+ app_id="grpo-crafter",
31
+ name=_BASE_CONFIG.name,
32
+ description=_BASE_CONFIG.description,
33
+ base_task_info=_BASE_CONFIG.base_task_info,
34
+ describe_taskset=_BASE_CONFIG.describe_taskset,
35
+ provide_task_instances=_BASE_CONFIG.provide_task_instances,
36
+ rollout=_BASE_CONFIG.rollout,
37
+ dataset_registry=_BASE_CONFIG.dataset_registry,
38
+ rubrics=_BASE_CONFIG.rubrics,
39
+ proxy=_BASE_CONFIG.proxy,
40
+ routers=_BASE_CONFIG.routers,
41
+ middleware=_BASE_CONFIG.middleware,
42
+ app_state=_BASE_CONFIG.app_state,
43
+ require_api_key=_BASE_CONFIG.require_api_key,
44
+ expose_debug_env=_BASE_CONFIG.expose_debug_env,
45
+ cors_origins=_BASE_CONFIG.cors_origins,
46
+ startup_hooks=_BASE_CONFIG.startup_hooks,
47
+ shutdown_hooks=_BASE_CONFIG.shutdown_hooks,
48
+ )
49
+
50
+ try:
51
+ _REGISTERED_ENTRY = registry.get(APP_ID)
52
+ except Exception: # pragma: no cover - registry unavailable in some contexts
53
+ MODAL_DEPLOYMENT: ModalDeploymentConfig | None = None
54
+ ENV_FILES: tuple[str, ...] = ()
55
+ else:
56
+ MODAL_DEPLOYMENT = _REGISTERED_ENTRY.modal
57
+ ENV_FILES = tuple(_REGISTERED_ENTRY.env_files)
58
+
59
+
60
+ def build_task_app_config() -> TaskAppConfig:
61
+ """Return a fresh TaskAppConfig for this wrapper."""
62
+
63
+ return TASK_APP_CONFIG.clone()
64
+
65
+
66
+ def fastapi_app():
67
+ """Return the FastAPI application for Modal or other ASGI hosts."""
68
+
69
+ app = create_task_app(build_task_app_config())
70
+
71
+ # Replace default health endpoints so we can permit soft auth failures and log 422s.
72
+ filtered_routes = []
73
+ for route in app.router.routes:
74
+ path = getattr(route, "path", None)
75
+ methods = getattr(route, "methods", set()) or set()
76
+ if path in {"/health", "/health/rollout"} and "GET" in methods:
77
+ continue
78
+ filtered_routes.append(route)
79
+ app.router.routes = filtered_routes
80
+
81
+ def _log_env_key_prefix(source: str, env_key: str | None) -> str | None:
82
+ if not env_key:
83
+ return None
84
+ prefix = env_key[: max(1, len(env_key) // 2)]
85
+ print(f"[{source}] expected ENVIRONMENT_API_KEY prefix: {prefix}")
86
+ return prefix
87
+
88
+ @app.get("/health")
89
+ async def health(request: Request):
90
+ env_key = normalize_environment_api_key()
91
+ if not env_key:
92
+ return JSONResponse(
93
+ status_code=503,
94
+ content={"status": "unhealthy", "detail": "Missing ENVIRONMENT_API_KEY"},
95
+ )
96
+ if not is_api_key_header_authorized(request):
97
+ prefix = _log_env_key_prefix("health", env_key)
98
+ content = {"status": "healthy", "authorized": False}
99
+ if prefix:
100
+ content["expected_api_key_prefix"] = prefix
101
+ return JSONResponse(status_code=200, content=content)
102
+ return {"status": "healthy", "authorized": True}
103
+
104
+ @app.get("/health/rollout")
105
+ async def health_rollout(request: Request):
106
+ env_key = normalize_environment_api_key()
107
+ if not env_key:
108
+ return JSONResponse(
109
+ status_code=503,
110
+ content={"status": "unhealthy", "detail": "Missing ENVIRONMENT_API_KEY"},
111
+ )
112
+ if not is_api_key_header_authorized(request):
113
+ prefix = _log_env_key_prefix("health/rollout", env_key)
114
+ content = {"status": "healthy", "authorized": False}
115
+ if prefix:
116
+ content["expected_api_key_prefix"] = prefix
117
+ return JSONResponse(status_code=200, content=content)
118
+ return {"ok": True, "authorized": True}
119
+
120
+ @app.exception_handler(RequestValidationError)
121
+ async def _on_validation_error(request: Request, exc: RequestValidationError):
122
+ try:
123
+ hdr = request.headers
124
+ snapshot = {
125
+ "path": str(getattr(request, "url").path),
126
+ "have_x_api_key": bool(hdr.get("x-api-key")),
127
+ "have_x_api_keys": bool(hdr.get("x-api-keys")),
128
+ "have_authorization": bool(hdr.get("authorization")),
129
+ "errors": exc.errors()[:5],
130
+ }
131
+ print("[422] validation", snapshot, flush=True)
132
+ except Exception:
133
+ pass
134
+ return JSONResponse(
135
+ status_code=422,
136
+ content={"status": "invalid", "detail": exc.errors()[:5]},
137
+ )
138
+
139
+ return app
140
+
141
+
142
+ if __name__ == "__main__":
143
+ parser = argparse.ArgumentParser(description="Run the Crafter task app locally")
144
+ parser.add_argument("--host", default="0.0.0.0")
145
+ parser.add_argument("--port", type=int, default=8001)
146
+ parser.add_argument("--reload", action="store_true", help="Enable uvicorn autoreload")
147
+ parser.add_argument(
148
+ "--env-file",
149
+ action="append",
150
+ default=[],
151
+ help="Additional .env files to load before startup",
152
+ )
153
+ args = parser.parse_args()
154
+
155
+ default_env = Path(__file__).resolve().parents[4] / "backend" / ".env.dev"
156
+ env_files = [str(default_env)] if default_env.exists() else []
157
+ env_files.extend(args.env_file or [])
158
+
159
+ run_task_app(
160
+ build_task_app_config,
161
+ host=args.host,
162
+ port=args.port,
163
+ reload=args.reload,
164
+ env_files=env_files,
165
+ )
@@ -2,7 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  """Registry for Task Apps exposed via the shared FastAPI harness."""
4
4
 
5
+ import importlib
6
+ import os
7
+ import sys
5
8
  from dataclasses import dataclass, field
9
+ from pathlib import Path
6
10
  from typing import Callable, Dict, Iterable, List, Sequence
7
11
 
8
12
  from ..server import TaskAppConfig
@@ -64,6 +68,11 @@ class TaskAppRegistry:
64
68
 
65
69
  def __iter__(self) -> Iterable[TaskAppEntry]:
66
70
  return iter(self.list())
71
+
72
+ def clear(self) -> None:
73
+ """Clear all registered task apps."""
74
+ self._entries.clear()
75
+ self._alias_to_id.clear()
67
76
 
68
77
 
69
78
  registry = TaskAppRegistry()
@@ -73,16 +82,48 @@ def register_task_app(*, entry: TaskAppEntry) -> None:
73
82
  registry.register(entry)
74
83
 
75
84
 
76
-
77
- # Register built-in task apps
78
- try:
79
- from . import grpo_crafter # noqa: F401
80
- except Exception:
81
- # Defer import errors so CLI can report missing deps gracefully
82
- pass
83
-
84
- try:
85
- from . import math_single_step # noqa: F401
86
- except Exception:
87
- # Defer import errors so CLI can report missing deps gracefully
88
- pass
85
+ def discover_task_apps_from_cwd() -> None:
86
+ """Discover and register task apps from the current working directory and subdirectories."""
87
+ cwd = Path.cwd()
88
+
89
+ # Look for task app files in common patterns
90
+ patterns = [
91
+ "**/task_app/*.py",
92
+ "**/task_apps/*.py",
93
+ "**/*_task_app.py",
94
+ "**/grpo_crafter.py",
95
+ "**/math_single_step.py",
96
+ ]
97
+
98
+ discovered_files = []
99
+ for pattern in patterns:
100
+ discovered_files.extend(cwd.glob(pattern))
101
+
102
+ # Add current directory to Python path temporarily
103
+ original_path = sys.path.copy()
104
+ try:
105
+ sys.path.insert(0, str(cwd))
106
+
107
+ for file_path in discovered_files:
108
+ if file_path.name.startswith('__'):
109
+ continue
110
+
111
+ # Convert file path to module name
112
+ relative_path = file_path.relative_to(cwd)
113
+ module_parts = list(relative_path.parts[:-1]) + [relative_path.stem]
114
+ module_name = '.'.join(module_parts)
115
+
116
+ try:
117
+ # Import the module to trigger registration
118
+ importlib.import_module(module_name)
119
+ except Exception as exc:
120
+ # Silently skip modules that can't be imported
121
+ # This allows for graceful handling of missing dependencies
122
+ continue
123
+
124
+ finally:
125
+ sys.path[:] = original_path
126
+
127
+
128
+ # Note: Task apps are now discovered dynamically by the CLI, not auto-registered
129
+ # This allows for better separation between SDK and example-specific implementations
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.2.9.dev2
3
+ Version: 0.2.9.dev4
4
4
  Summary: RL as a service SDK - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -1,6 +1,103 @@
1
+ examples/analyze_semantic_words.sh,sha256=z-3qJBAlQuMrfRzoszofle_2b3Fy79rymvEAcoBQGXU,652
2
+ examples/crafter_debug_render.py,sha256=6Zak0RQZPXYy88v5dcon-XEdt01_NI027o1v2Fx4nhk,6178
3
+ examples/run_crafter_demo.sh,sha256=7FNvooSgq-ezccGy5j_h_uRXObiQtcnybPcTwaVGDpo,392
4
+ examples/common_old/backend.py,sha256=ygPtZREi9W2JQI7xI0J1jz3VaWBgILTfgpgFLVGMEPY,538
5
+ examples/evals_old/README.md,sha256=Te1TsgcOyDBf-ICdHkA12XBd4ClQXGFj8uytbggto1s,3503
6
+ examples/evals_old/__init__.py,sha256=6E7OuWJsBiG7USgsR5uFGeU1JYZ6TFreUFMwgBxrJ6A,189
7
+ examples/evals_old/compare_models.py,sha256=bCqtIKkR06u5pJHY65496ImokYlIEOMrtWFT_T_b3dM,43883
8
+ examples/evals_old/example_log.md,sha256=DgdmUkU0N_g2WhobwCqkpw1Itjq8E7wS2CCcLsLSLJw,9470
9
+ examples/evals_old/run_demo.sh,sha256=UwygYAn-LDdq-XSjygrDSs30UykQX5EO9Q5atqspc0Q,4625
10
+ examples/evals_old/trace_analysis.py,sha256=uIImBarDqo81zJOcFxjCusZg9YHsARs09q0Y5l6-iXs,10686
11
+ examples/finetuning_old/_backup_synth_qwen/config.toml,sha256=7bs3-AS23Cu9nbTYYurlk1fMJPF5LuYPD1Vumyt3XK4,734
12
+ examples/finetuning_old/_backup_synth_qwen/example_log.md,sha256=1CG-1dZsIzdWDVLrTYBO3vld_b8o9sqG_-rDEpTcA_I,12246
13
+ examples/finetuning_old/_backup_synth_qwen/filter_traces.py,sha256=aFGy0-KoPQyIbk4cJBh4wnqzuqgCEVsrFbEor454ktY,2045
14
+ examples/finetuning_old/_backup_synth_qwen/filter_traces_achievements.py,sha256=bploSuwCeLelHytJcVoDKkRyldvrFfZMpTVfWrwEzcg,9359
15
+ examples/finetuning_old/_backup_synth_qwen/purge_v3_traces.py,sha256=qGHwWA0DKBCNs8rB39NHwpTFe8izNNYQjtyHVrzWYTk,3406
16
+ examples/finetuning_old/_backup_synth_qwen/react_agent_lm.py,sha256=sYTauRlPdsZeA17YNffjdWyHUZeojRUFHgQ4bu27TvQ,80387
17
+ examples/finetuning_old/_backup_synth_qwen/readme.md,sha256=2M7m1VqHNCEDOPmEWC0NsyXMFn0rB3bjMX4uNA5GOp0,1763
18
+ examples/finetuning_old/_backup_synth_qwen/run_crafter_qwen4b.py,sha256=gUrjpMtLRJCuM4UMY9k-8gKqDoY4nyK4aY5G4rC9exw,4353
19
+ examples/finetuning_old/_backup_synth_qwen/run_demo.sh,sha256=bN3TdD2Bowdu2yFrcKkN1rDqeSjivSNS63fO5tAjB6o,7239
20
+ examples/finetuning_old/_backup_synth_qwen/sft_kickoff.py,sha256=oFyK6LQDQ5SbsTJXJUzyUTPklWOZwdw_VyO3SR7IXSw,4223
21
+ examples/finetuning_old/synth_qwen_v1/README.md,sha256=ZWYfjax9iyrljAwUqiZwNHqtJAajz1G75rSiBNTveHo,4322
22
+ examples/finetuning_old/synth_qwen_v1/filter_traces.py,sha256=aFGy0-KoPQyIbk4cJBh4wnqzuqgCEVsrFbEor454ktY,2045
23
+ examples/finetuning_old/synth_qwen_v1/filter_traces_achievements.py,sha256=bploSuwCeLelHytJcVoDKkRyldvrFfZMpTVfWrwEzcg,9359
24
+ examples/finetuning_old/synth_qwen_v1/finetune.py,sha256=6dLJjR3T-QOCgyOwz9jiucKuCz-So_eN88Z8ZwChJiU,1204
25
+ examples/finetuning_old/synth_qwen_v1/hello_ft_model.py,sha256=G4JLMmqGYBsV2rEfguOU-ZZlryE2bVO7vGxoxFBi3Jg,2286
26
+ examples/finetuning_old/synth_qwen_v1/infer.py,sha256=q9ykYhlP7Rrtb8RSK0qn6y8Tm63hax6rBpsFwtTMocY,918
27
+ examples/finetuning_old/synth_qwen_v1/poll.py,sha256=AJx2StdxkZBLnZPNupBSoIc4BHCifEmybPt5pb57QqA,1228
28
+ examples/finetuning_old/synth_qwen_v1/prepare_data.py,sha256=1UMP23z-TkJOGYCEEJqC9980_k2l7x5cpPSpEUWykx0,832
29
+ examples/finetuning_old/synth_qwen_v1/purge_v3_traces.py,sha256=qGHwWA0DKBCNs8rB39NHwpTFe8izNNYQjtyHVrzWYTk,3406
30
+ examples/finetuning_old/synth_qwen_v1/react_agent_lm.py,sha256=NYjf5Vqyi2Ri_oC6etDYmCE4Am9kK4aF3d1wqDut6j8,80577
31
+ examples/finetuning_old/synth_qwen_v1/run_crafter_sft_job.py,sha256=-bpXjFPp00JCEE5T7TCeRARZjQzCTmcpd0nH4y-sDho,7878
32
+ examples/finetuning_old/synth_qwen_v1/run_ft_job.py,sha256=-OOt2dJNw5dwYq5lF7XXZkuY5Qsj1Qnl5dKulZvDoSA,8561
33
+ examples/finetuning_old/synth_qwen_v1/upload_data.py,sha256=bYEFbsaKGt6nZ6kQKNnx7AklFmE3Hxp9d6r6xsh8PeE,882
34
+ examples/finetuning_old/synth_qwen_v1/util.py,sha256=v_4c2JQNRG7oIHIKOkXLZXg42CMqs4-yav2MuId7MpY,5801
35
+ examples/rl/README.md,sha256=qzv-URBhEr3r4ipEyh-mP9CiCIz_KbckZWlfXdWbafA,6560
36
+ examples/rl/download_dataset.py,sha256=XZwRbASLN4rjvfwqvet-sdhOojcEjCAvXWFNOSUZhWc,2515
37
+ examples/rl/run_eval.py,sha256=TlUlTHJ9dNOxZuyTF4A6F6JpSghvQ6rqC3yk4271BKw,14973
38
+ examples/rl/run_rl_and_save.py,sha256=Pe-zQzLrdO6CbRTt3vMslRlACMmLXQSUTr5Ow_DVh6k,3160
39
+ examples/rl/configs/eval_base_qwen.toml,sha256=EntLk6oScfan4-CiK0MeqO9vu-ZFBTo97tjlNSQOhd8,323
40
+ examples/rl/configs/eval_rl_qwen.toml,sha256=o07ZvAxjj_ejj3zbjESmtpIOh6QqkwpTD2ZUL9Lzx5A,247
41
+ examples/rl/configs/rl_from_base_qwen.toml,sha256=KDDtpvVikHZCcyUKYtgWq9XAfAEY5vRADPpcxpkdVsg,605
42
+ examples/rl/configs/rl_from_base_qwen17.toml,sha256=CLfuzZaTvpqezPrpOy03ZKvR6D3tZ0vExOsyvdn4ETo,1346
43
+ examples/rl/configs/rl_from_ft_qwen.toml,sha256=7s5HK_YM7zVnvjJavvfai8Nc_eUx_70cgHeWN19vXXM,638
44
+ examples/rl/task_app/README.md,sha256=oHfcMF9V_CPLnGbrarTRRIQpQ1wqV1zL74KWUZtcKwI,802
45
+ examples/rl/task_app/math_single_step.py,sha256=DIucCB5MC_1doIxfJxH6qXVsSijqh78cz-vQaKjFDEk,30379
46
+ examples/rl/task_app/math_task_app.py,sha256=e8inAZsLJxcAMtjwDVzvgb9-x9DYds4OKugthtm_riw,4180
47
+ examples/rl_old/task_app.py,sha256=ctVxuMKPaEKuf46fmSi2tb2bXe55bvhpxA5xTAYxwh4,47078
48
+ examples/warming_up_to_rl/analyze_trace_db.py,sha256=ywtQj-p2vsGQ8ikr4zXQY18YDKsbEnCRcz1MkJZot68,14424
49
+ examples/warming_up_to_rl/export_trace_sft.py,sha256=dreS63IyvpEjm2wVOGfPKIsE67bX0sui4WVS8aq46yA,20278
50
+ examples/warming_up_to_rl/groq_test.py,sha256=McqwDlKc2YZXmJQ9sI27dpdUl5wqn8xEDNi7V58ltl4,3089
51
+ examples/warming_up_to_rl/manage_secrets.py,sha256=ySZ6V_AXOWpFzjVSpxA-TaBWkhpWeIiC5jM6K3FOrmQ,4372
52
+ examples/warming_up_to_rl/readme.md,sha256=viacw40ZG-u-duqBd2RN5mG63__h2x1w37DPnKqpYV8,6169
53
+ examples/warming_up_to_rl/run_eval.py,sha256=llgsyx7E8pi7egn0qcDONzldDXShP6_Ntp-qTjQuNQQ,19078
54
+ examples/warming_up_to_rl/run_fft_and_save.py,sha256=DPeFnGJ2U2lB0azJ9CcN1c5pn0lSOfb6qYgtSGi0cEw,13426
55
+ examples/warming_up_to_rl/run_local_rollout.py,sha256=V6uMFZkfnh6ndndNq-rPnTkzWr3gNVWLVNmQlWb6Oik,8164
56
+ examples/warming_up_to_rl/run_local_rollout_modal.py,sha256=XxKZv_zE9zWFrt99N1tP6X8TfB883pKWsvDUUsHW1oc,6798
57
+ examples/warming_up_to_rl/run_local_rollout_parallel.py,sha256=_p11RDzH6DVVzanML9VKQahDxuKRH5PwwGsBgzo7DSE,12951
58
+ examples/warming_up_to_rl/run_local_rollout_traced.py,sha256=_UL46Rdj_oo8gEnyBfPfVkvCj7VoU99eahn3_i_-pMI,13656
59
+ examples/warming_up_to_rl/run_rl_and_save.py,sha256=dpFr42Vk03jTlDPyOUcDbu8zGJwGsMW4PKKPuBciAJs,3649
60
+ examples/warming_up_to_rl/run_rollout_remote.py,sha256=iIW5FI5cFDcnt80Tjh-uqL_O4uVoIqdnqfIjjLjFGZg,4769
61
+ examples/warming_up_to_rl/configs/crafter_fft.toml,sha256=Hbp2tVhaGxRAip1vwhID73rCIO6bi_yI-gUen-oylcA,1137
62
+ examples/warming_up_to_rl/configs/crafter_fft_4b.toml,sha256=q_cnU3P-eGG_VFOepw9IA1U-m7L-uJH37EUFR3mNWBI,1358
63
+ examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml,sha256=YP4HLWDh6iIvw6McPXw5kK1RUFQF4dvKP4yH5bHT5nI,678
64
+ examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml,sha256=zQi31JYa83kW-ceEqDZi-7oajsCmEPrlJR57zN5ygO8,340
65
+ examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml,sha256=6eeU1GVvK1cYSEuGXk-AhOwJLgRcf74CTOI5XlqNYBc,817
66
+ examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml,sha256=qVSypYOMUd8g6pmiovi7nsgk4jgMBjJIORpIsrmNV4U,1644
67
+ examples/warming_up_to_rl/configs/rl_from_ft.toml,sha256=d1cIoLeC80NgOjn0Wohk0a5IXE_ImHVgMsxWPkyAFKQ,1381
68
+ examples/warming_up_to_rl/old/event_rewards.md,sha256=gHJd3ZeYOnj4xPXt-7sSJamgOaJQ-BpfdaF-CKJK3-0,13450
69
+ examples/warming_up_to_rl/old/notes.md,sha256=Y9Zs_tUb2Y6kv0MmGe-kAvGM9zCtEDY3Ccf5j7PoFGU,4468
70
+ examples/warming_up_to_rl/task_app/README.md,sha256=kqDPpv7f0Oh0CoH4qSXqZoKXNIh8guNpxHrELW0z6RY,1346
71
+ examples/warming_up_to_rl/task_app/grpo_crafter.py,sha256=Cx_uNlo1hXpN5VO72O5MdBSz0Z8CZNfhlhbm868lTmg,15898
72
+ examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py,sha256=lMfIcWpJdXMdQyozLAaCeK9dx2D1LPNSav2I2zG7Z9I,6046
73
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/README.md,sha256=kJaN1do8V4XM2_g51WMI3edCDpv5zEw_nrMFtEwO1SQ,4614
74
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py,sha256=_zdnpK5Dl26o0-CTcljBBRfdwTy4o60aOLhex59VE6U,120
75
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py,sha256=SlCgKMg8_quH8bIJSMKlkommz36XvngVvgzrjRR1SBs,5393
76
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py,sha256=W8MWFhRor65u0lp6FhOXJjc-j5W5ooEwWwF2UnCg1KE,50069
77
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py,sha256=QMQHxi6glj9cnTJc6F8H7ivv2x8Mer5WQrR5Vs-xv94,7776
78
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py,sha256=0g7OZl6CnrddETD1DOAQZxz_P1fZR0F7kuCeZb4BRHg,2510
79
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py,sha256=qP3E9XAhHihKyz1l44FD4Zb5zoZt8v6m5HNhOLe4fxk,43685
80
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py,sha256=pMVwiutZe5DcPXdNmIhRJGwxIz3Xn3FtdkKKqrOEdOM,5613
81
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py,sha256=506KV0x0oOajTuNVVWLUxeIXG2YaZjWwfgbVg2EorcA,71477
82
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py,sha256=PRkQlVKGfn2-w4EOTTHc8T-tqFW6m21mS7BII6TUUd4,5599
83
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py,sha256=PAYPP0tWU0cQUUxJuAYbDwvWeGjAcPFRHsW2vG3vOpg,5228
84
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/test_stepwise_rewards.py,sha256=OfzZ18_bykLll6-4-2-OZI4a2wFx68hnTxufZeFE5t4,1836
85
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py,sha256=Qcxfa_WASxbUCbAKejiZB6QIl8eJeeIrFPt5GU-Zb6E,2013
86
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/__init__.py,sha256=5e-BmaXi_5EGcqF2hEGsnbtkHsNvPNMTX9wJ3yiz3XQ,34
87
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/__init__.py,sha256=nTmSVzOfRUnjxEN1-IHjxuvPHij-AdRu_NZoH6Ozv2M,197
88
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/app.py,sha256=MnaRrqkxxeOaHLD-ulH5P1BauDs3tWKdxM0n85jfp6g,19
89
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/environment.py,sha256=9OzSAPO5HMhMLQ2cfJMs6TO8-r4uGSw_JQgztu1MXGM,20112
90
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/policy.py,sha256=Bf7ypw2VqPUtiIycAP_irglYtf7sGvAWIvvIZsok-qI,19373
91
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py,sha256=dHASD8zbinK32mE4dEMQqmQpGjaomFbJQ_yIw8vYOrY,6157
92
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py,sha256=2ampoR9RVrh7T05nq-z4hg2KnSGVBo5A1ESYMae780s,10180
93
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/tools.py,sha256=-jVxok4pkDm3t9VwuUivm0y4xmYBq16wqOrSpAHoT6Q,1787
94
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/__init__.py,sha256=6O23CobxVe8fkuGmWDPhg4Kzf1Q6pmtQZIad8DHubjI,178
95
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py,sha256=3lIubZOcCslZTu1dK8qt76yB68l9RAx9WFKy6_9BaVk,23807
96
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/__init__.py,sha256=55vZdcz3qI1wt4qfNyC1LSFTPm6wKM7oF5iyNnR6Lvg,133
97
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py,sha256=dxAHrHnOa-_pnbHrtLYdD1EwYX8la8LwR5B6kOmt_n8,6953
1
98
  synth_ai/__init__.py,sha256=NixuXddy4lS2Wmj0F8eMt0HS_oYCTnq3iVVq5VYwWIc,1341
2
99
  synth_ai/__main__.py,sha256=Kh1xBKkTE5Vs2qNMtDuuOXerHUptMcOiF3YziOpC6DA,146
3
- synth_ai/demo_registry.py,sha256=PhBV3oQpNDTPdPqnUcRchOyYB4BZlQkbhPZfIneLskk,8485
100
+ synth_ai/demo_registry.py,sha256=pH-Pyrocp2vNBcw7J80Nu_525nBtI5G_dC4d4mQDYl8,8531
4
101
  synth_ai/handshake.py,sha256=uzoTOpkf9JQgsyKWrlx8gjfQmK3HpqFQAZY1gZDtiIo,3735
5
102
  synth_ai/http.py,sha256=lqjFXDmAP_xgfywK_rDSOVxuMy4rDH9S3Rtu9k1tLmk,1028
6
103
  synth_ai/http_client.py,sha256=_9J8rUGoItUMnJLGZw7r0uXiJeLWR939kByRkvtP1XM,4429
@@ -8,8 +105,8 @@ synth_ai/install_sqld.sh,sha256=AMBhlfq661PxeTTc6D4K_Nei_qwMvA84ei4NhQzmUUk,928
8
105
  synth_ai/api/train/__init__.py,sha256=aBwlmrj1HWVwDcvUrX4TqpS0BgvkE7Pv7npoIZmtTFU,118
9
106
  synth_ai/api/train/builders.py,sha256=Fe684cGh-CQGPXydESCOjTkQpxbTJb47rVYKT8uONTs,6045
10
107
  synth_ai/api/train/cli.py,sha256=OyS6-NU1BUVitjUYYCtQenLXmprU9dDqYOR6tfeW7B0,17897
11
- synth_ai/api/train/config_finder.py,sha256=iH4a-_6rtGvhxBNINag5WivEX2W-Jb1_YysjN-ooOYM,5311
12
- synth_ai/api/train/env_resolver.py,sha256=PLvuorBg3ugxZUsfDeZAMrqmqEt56aGRInmhuHD6z8g,10715
108
+ synth_ai/api/train/config_finder.py,sha256=8HwyVRZ3WuXU2c7MdJgQVT29C-53zOWGcaucbkMso6c,5194
109
+ synth_ai/api/train/env_resolver.py,sha256=PoXGD-Gpifs8FuSGF_xKNIA90QrUnLW8S5zMaUGm_yg,11451
13
110
  synth_ai/api/train/pollers.py,sha256=EbkoV601aXEpqgfjNuugivtDooiRgOxBXSYZZ0Muj24,2114
14
111
  synth_ai/api/train/task_app.py,sha256=Pk-bCqBEkjgbf9tzFeRik5uC0No_2Y536TSiLcJ47h0,6419
15
112
  synth_ai/api/train/utils.py,sha256=rkouZjOFvY9WKXIuG-rlJhH9eyLLxi_ID6dj0JMNSmI,7213
@@ -23,7 +120,7 @@ synth_ai/cli/recent.py,sha256=mHhM-QrR_MfjfKSzBvvPUEC-lkXTWUZrQwqYTmb2x0Y,4173
23
120
  synth_ai/cli/rl_demo.py,sha256=P09_atVrSTfGUhAs0Obe63erniJ3EDHtm51yL2xBouM,8796
24
121
  synth_ai/cli/root.py,sha256=0fuWNO5NeWTSCANzPBfoQsZKe3iUxnJ9hsSWS-SK2UM,11370
25
122
  synth_ai/cli/status.py,sha256=M_bt7U58Ubi-q-ZlrIpgCASKq9_k6uMjpx926f6kLLA,4591
26
- synth_ai/cli/task_apps.py,sha256=gJDoW4aH2HFZK1fLPkCQ4EpVaBq_3lL8DmHzwObtdDo,40070
123
+ synth_ai/cli/task_apps.py,sha256=bpknAGET9vUP6iRHTJcQcA_r4TCkqsP-QMIXayc7VIo,50723
27
124
  synth_ai/cli/traces.py,sha256=_QBdCR92u0Gv51U4DH0Ws1d5yCrbJRpaYKe7pmcHrHs,6484
28
125
  synth_ai/cli/watch.py,sha256=HBKbAcpUkkPhGvsPRofckbu8oILiVqp35NXHkIEpTTc,17808
29
126
  synth_ai/compound/cais.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,6 +131,10 @@ synth_ai/demos/core/__init__.py,sha256=A2FjhY7KXGtyzdQXqeTPCkEhHfrH-eQg6bvP8HaYh
34
131
  synth_ai/demos/core/cli.py,sha256=5z89ykvJAP-MipT-RYx7BXwTwi8nIAyUb-RcPDpXL5w,57520
35
132
  synth_ai/demos/demo_task_apps/__init__.py,sha256=LmNLB5oHncmVmavbLb6_1fsFYoNxijMd3ksLScBMxiw,243
36
133
  synth_ai/demos/demo_task_apps/core.py,sha256=Eu7gp0VtZ9tE1HPLG14-pkjC1cD_7brsdl2IRbdSBts,14764
134
+ synth_ai/demos/demo_task_apps/crafter/__init__.py,sha256=3SnNZTzBjGR9eudStcww259vPmzoFBHJL-M0GDUD7Qo,24
135
+ synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py,sha256=SfP7YbGyYDpoY4ZWyMiUSeQAjintKPAkJRZz3U2951U,6064
136
+ synth_ai/demos/demo_task_apps/crafter/configs/crafter_fft_4b.toml,sha256=q_cnU3P-eGG_VFOepw9IA1U-m7L-uJH37EUFR3mNWBI,1358
137
+ synth_ai/demos/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml,sha256=qVSypYOMUd8g6pmiovi7nsgk4jgMBjJIORpIsrmNV4U,1644
37
138
  synth_ai/demos/demo_task_apps/math/__init__.py,sha256=WBzpZwSn7pRarBmhopQi34i9bEm05-71eM3siboOavY,43
38
139
  synth_ai/demos/demo_task_apps/math/_common.py,sha256=SgtVW1pne4pgwGS2gYYQWkmG9BvU2sQTYzlncmUJ0NM,533
39
140
  synth_ai/demos/demo_task_apps/math/app.py,sha256=gNopoAhwM0vzdKuCa7AwQqSwiV2xagrjMxMH9YIniv4,1160
@@ -370,9 +471,7 @@ synth_ai/task/server.py,sha256=bYrqnwtbGEdI_lieBMslgh-sUwdyzEbbHnmjovrRef8,15187
370
471
  synth_ai/task/tracing_utils.py,sha256=kro--A6BTCVReLMNRX4_v2arLVXYIQNKtn3RDMMrOmE,2400
371
472
  synth_ai/task/validators.py,sha256=IGE9zTjHYXOehwakMkcOAaDLSaHw_0Tp8uzL2ydCZ9U,361
372
473
  synth_ai/task/vendors.py,sha256=zG-qeP2OC1s5kJECZdf02QBvn-v_qHcz-rG0C8Ws0wA,1664
373
- synth_ai/task/apps/__init__.py,sha256=M0DeEhvUhyXh1A_AnVSBXTeJY75c7BVsW0A_1vxL_08,2677
374
- synth_ai/task/apps/grpo_crafter.py,sha256=eCxD9eHYLIkvo4mFhlIY14u-Ipp_zmHj6wvg08Vu58Y,15809
375
- synth_ai/task/apps/math_single_step.py,sha256=jhoArV52jlWxN6HO2XYTnrLC3aWF23G1B9PRVx5LkVM,30278
474
+ synth_ai/task/apps/__init__.py,sha256=yLY31OII4Hbt9ibTj1vmxVCd9JBluCGh6Xgy6biKEIs,4151
376
475
  synth_ai/tracing/__init__.py,sha256=0Yy1YDMe_Duw976yu0HL1cbqPWdZEvtgEdtjDguNvcc,781
377
476
  synth_ai/tracing_v1/__init__.py,sha256=uV6qf8_rJTxRx6tCsXvqnjHhA1mR0im2rANuh0McrHA,930
378
477
  synth_ai/tracing_v3/__init__.py,sha256=9lKM-blbXo6Sk1oBpyYayjMVU43f9Y_35M1OvRynWoU,3251
@@ -436,9 +535,9 @@ synth_ai/v0/tracing_v1/events/manage.py,sha256=ZDXXP-ZwLH9LCsmw7Ru9o55d7bl_diPtJ
436
535
  synth_ai/v0/tracing_v1/events/scope.py,sha256=BuBkhSpVHUJt8iGT9HJZF82rbb88mQcd2vM2shg-w2I,2550
437
536
  synth_ai/v0/tracing_v1/events/store.py,sha256=0342lvAcalyJbVEIzQFaPuMQGgwiFm7M5rE6gr-G0E8,9041
438
537
  synth_ai/zyk/__init__.py,sha256=htVLnzTYQ5rxzYpzSYBm7_o6uNKZ3pB_PrqkBrgTRS4,771
439
- synth_ai-0.2.9.dev2.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
440
- synth_ai-0.2.9.dev2.dist-info/METADATA,sha256=THCYAnIiKaYkPjSZDpNfSvkWdGO11WRUT2pT3fbOcS8,5200
441
- synth_ai-0.2.9.dev2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
442
- synth_ai-0.2.9.dev2.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
443
- synth_ai-0.2.9.dev2.dist-info/top_level.txt,sha256=fBmtZyVHuKaGa29oHBaaUkrUIWTqSpoVMPiVdCDP3k8,9
444
- synth_ai-0.2.9.dev2.dist-info/RECORD,,
538
+ synth_ai-0.2.9.dev4.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
539
+ synth_ai-0.2.9.dev4.dist-info/METADATA,sha256=BH5A-8mU_wP4Sid2eqWcFQu6cGs198X5_DcmFFKON8o,5200
540
+ synth_ai-0.2.9.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
541
+ synth_ai-0.2.9.dev4.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
542
+ synth_ai-0.2.9.dev4.dist-info/top_level.txt,sha256=1moNHgctEUJ3F3eH3V-7FSMb2iTTze1V13dj1R04oUY,18
543
+ synth_ai-0.2.9.dev4.dist-info/RECORD,,