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.
- examples/analyze_semantic_words.sh +17 -0
- examples/common_old/backend.py +21 -0
- examples/crafter_debug_render.py +180 -0
- examples/evals_old/README.md +98 -0
- examples/evals_old/__init__.py +6 -0
- examples/evals_old/compare_models.py +1037 -0
- examples/evals_old/example_log.md +145 -0
- examples/evals_old/run_demo.sh +126 -0
- examples/evals_old/trace_analysis.py +270 -0
- examples/finetuning_old/_backup_synth_qwen/config.toml +29 -0
- examples/finetuning_old/_backup_synth_qwen/example_log.md +324 -0
- examples/finetuning_old/_backup_synth_qwen/filter_traces.py +60 -0
- examples/finetuning_old/_backup_synth_qwen/filter_traces_achievements.py +239 -0
- examples/finetuning_old/_backup_synth_qwen/purge_v3_traces.py +109 -0
- examples/finetuning_old/_backup_synth_qwen/react_agent_lm.py +1924 -0
- examples/finetuning_old/_backup_synth_qwen/readme.md +49 -0
- examples/finetuning_old/_backup_synth_qwen/run_crafter_qwen4b.py +114 -0
- examples/finetuning_old/_backup_synth_qwen/run_demo.sh +195 -0
- examples/finetuning_old/_backup_synth_qwen/sft_kickoff.py +118 -0
- examples/finetuning_old/synth_qwen_v1/README.md +68 -0
- examples/finetuning_old/synth_qwen_v1/filter_traces.py +60 -0
- examples/finetuning_old/synth_qwen_v1/filter_traces_achievements.py +239 -0
- examples/finetuning_old/synth_qwen_v1/finetune.py +46 -0
- examples/finetuning_old/synth_qwen_v1/hello_ft_model.py +71 -0
- examples/finetuning_old/synth_qwen_v1/infer.py +37 -0
- examples/finetuning_old/synth_qwen_v1/poll.py +44 -0
- examples/finetuning_old/synth_qwen_v1/prepare_data.py +35 -0
- examples/finetuning_old/synth_qwen_v1/purge_v3_traces.py +109 -0
- examples/finetuning_old/synth_qwen_v1/react_agent_lm.py +1932 -0
- examples/finetuning_old/synth_qwen_v1/run_crafter_sft_job.py +207 -0
- examples/finetuning_old/synth_qwen_v1/run_ft_job.py +232 -0
- examples/finetuning_old/synth_qwen_v1/upload_data.py +34 -0
- examples/finetuning_old/synth_qwen_v1/util.py +147 -0
- examples/rl/README.md +169 -0
- examples/rl/configs/eval_base_qwen.toml +15 -0
- examples/rl/configs/eval_rl_qwen.toml +11 -0
- examples/rl/configs/rl_from_base_qwen.toml +35 -0
- examples/rl/configs/rl_from_base_qwen17.toml +74 -0
- examples/rl/configs/rl_from_ft_qwen.toml +35 -0
- examples/rl/download_dataset.py +64 -0
- examples/rl/run_eval.py +435 -0
- examples/rl/run_rl_and_save.py +94 -0
- examples/rl/task_app/README.md +22 -0
- {synth_ai/task/apps → examples/rl/task_app}/math_single_step.py +8 -8
- examples/rl/task_app/math_task_app.py +107 -0
- examples/rl_old/task_app.py +962 -0
- examples/run_crafter_demo.sh +10 -0
- examples/warming_up_to_rl/analyze_trace_db.py +420 -0
- examples/warming_up_to_rl/configs/crafter_fft.toml +48 -0
- examples/warming_up_to_rl/configs/crafter_fft_4b.toml +54 -0
- examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml +20 -0
- examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml +13 -0
- examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml +23 -0
- examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml +73 -0
- examples/warming_up_to_rl/configs/rl_from_ft.toml +56 -0
- examples/warming_up_to_rl/export_trace_sft.py +541 -0
- examples/warming_up_to_rl/groq_test.py +88 -0
- examples/warming_up_to_rl/manage_secrets.py +127 -0
- examples/warming_up_to_rl/old/event_rewards.md +234 -0
- examples/warming_up_to_rl/old/notes.md +73 -0
- examples/warming_up_to_rl/readme.md +172 -0
- examples/warming_up_to_rl/run_eval.py +434 -0
- examples/warming_up_to_rl/run_fft_and_save.py +309 -0
- examples/warming_up_to_rl/run_local_rollout.py +188 -0
- examples/warming_up_to_rl/run_local_rollout_modal.py +160 -0
- examples/warming_up_to_rl/run_local_rollout_parallel.py +342 -0
- examples/warming_up_to_rl/run_local_rollout_traced.py +372 -0
- examples/warming_up_to_rl/run_rl_and_save.py +101 -0
- examples/warming_up_to_rl/run_rollout_remote.py +129 -0
- examples/warming_up_to_rl/task_app/README.md +38 -0
- {synth_ai/task/apps → examples/warming_up_to_rl/task_app}/grpo_crafter.py +7 -7
- examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py +165 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/README.md +173 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py +5 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py +145 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py +1271 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/__init__.py +1 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/__init__.py +6 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/app.py +1 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/environment.py +429 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/policy.py +442 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py +96 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py +302 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/tools.py +47 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py +202 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/__init__.py +5 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py +512 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py +102 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py +985 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py +197 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +1749 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/__init__.py +5 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py +217 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py +160 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py +146 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/test_stepwise_rewards.py +58 -0
- examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py +61 -0
- synth_ai/api/train/config_finder.py +18 -18
- synth_ai/api/train/env_resolver.py +28 -1
- synth_ai/cli/task_apps.py +264 -55
- synth_ai/demo_registry.py +7 -7
- synth_ai/demos/demo_task_apps/crafter/__init__.py +1 -0
- synth_ai/demos/demo_task_apps/crafter/configs/crafter_fft_4b.toml +54 -0
- synth_ai/demos/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +73 -0
- synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +165 -0
- synth_ai/task/apps/__init__.py +54 -13
- {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/METADATA +1 -1
- {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/RECORD +112 -13
- {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/top_level.txt +1 -0
- {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.9.dev2.dist-info → synth_ai-0.2.9.dev4.dist-info}/entry_points.txt +0 -0
- {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
|
+
)
|
synth_ai/task/apps/__init__.py
CHANGED
|
@@ -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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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,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=
|
|
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=
|
|
12
|
-
synth_ai/api/train/env_resolver.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
440
|
-
synth_ai-0.2.9.
|
|
441
|
-
synth_ai-0.2.9.
|
|
442
|
-
synth_ai-0.2.9.
|
|
443
|
-
synth_ai-0.2.9.
|
|
444
|
-
synth_ai-0.2.9.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|