synth-ai 0.2.12__py3-none-any.whl → 0.2.13.dev1__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/agora_ex/README_MoE.md +224 -0
- examples/agora_ex/__init__.py +7 -0
- examples/agora_ex/agora_ex.py +65 -0
- examples/agora_ex/agora_ex_task_app.py +590 -0
- examples/agora_ex/configs/rl_lora_qwen3_moe_2xh200.toml +121 -0
- examples/agora_ex/reward_fn_grpo-human.py +129 -0
- examples/agora_ex/system_prompt_CURRENT.md +63 -0
- examples/agora_ex/task_app/agora_ex_task_app.py +590 -0
- examples/agora_ex/task_app/reward_fn_grpo-human.py +129 -0
- examples/agora_ex/task_app/system_prompt_CURRENT.md +63 -0
- examples/multi_step/configs/crafter_rl_outcome.toml +74 -0
- examples/multi_step/configs/crafter_rl_stepwise_hosted_judge.toml +175 -0
- examples/multi_step/configs/crafter_rl_stepwise_shaped.toml +83 -0
- examples/multi_step/configs/crafter_rl_stepwise_simple.toml +78 -0
- examples/multi_step/crafter_rl_lora.md +51 -10
- examples/multi_step/sse_metrics_streaming_notes.md +357 -0
- examples/multi_step/task_app_config_notes.md +7 -1
- examples/warming_up_to_rl/configs/eval_stepwise_complex.toml +4 -2
- examples/warming_up_to_rl/configs/eval_stepwise_simple.toml +4 -2
- examples/warming_up_to_rl/run_eval.py +127 -18
- examples/warming_up_to_rl/task_app/grpo_crafter.py +3 -33
- examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py +109 -45
- examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py +42 -46
- examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +232 -193
- synth_ai/__init__.py +41 -1
- synth_ai/api/train/builders.py +49 -19
- synth_ai/api/train/configs/__init__.py +44 -0
- synth_ai/api/train/configs/rl.py +133 -0
- synth_ai/api/train/configs/sft.py +94 -0
- synth_ai/api/train/configs/shared.py +24 -0
- synth_ai/cli/demo.py +38 -39
- synth_ai/cli/rl_demo.py +81 -102
- synth_ai/cli/task_apps.py +3 -0
- synth_ai/demos/core/cli.py +121 -159
- synth_ai/environments/examples/crafter_classic/environment.py +16 -0
- synth_ai/evals/__init__.py +15 -0
- synth_ai/evals/client.py +85 -0
- synth_ai/evals/types.py +42 -0
- synth_ai/judge_schemas.py +127 -0
- synth_ai/rubrics/__init__.py +22 -0
- synth_ai/rubrics/validators.py +126 -0
- synth_ai/tracing_v3/serialization.py +130 -0
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/METADATA +1 -1
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/RECORD +48 -22
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/entry_points.txt +0 -1
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/licenses/LICENSE +0 -0
- {synth_ai-0.2.12.dist-info → synth_ai-0.2.13.dev1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Judge API Contract Schemas
|
|
3
|
+
|
|
4
|
+
These schemas define the expected structure for requests and responses
|
|
5
|
+
to the judge scoring endpoint at POST /api/judge/v1/score.
|
|
6
|
+
|
|
7
|
+
This is the canonical contract that the backend MUST conform to.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Any, Dict, List, Literal, Optional
|
|
13
|
+
|
|
14
|
+
from pydantic import BaseModel, Field
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CriterionScorePayload(BaseModel):
|
|
18
|
+
"""Per-criterion score returned by the judge."""
|
|
19
|
+
|
|
20
|
+
score: float = Field(..., description="Numeric score for this criterion")
|
|
21
|
+
reason: str = Field(default="", description="Explanation for the score")
|
|
22
|
+
weight: float = Field(default=1.0, description="Weight of this criterion")
|
|
23
|
+
description: str = Field(default="", description="Description of the criterion")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ReviewPayload(BaseModel):
|
|
27
|
+
"""Rubric review (event-level or outcome-level)."""
|
|
28
|
+
|
|
29
|
+
criteria: Dict[str, CriterionScorePayload] = Field(
|
|
30
|
+
default_factory=dict,
|
|
31
|
+
description="Map of criterion keys to their scores"
|
|
32
|
+
)
|
|
33
|
+
total: float = Field(default=0.0, description="Aggregated total score")
|
|
34
|
+
summary: Optional[str] = Field(None, description="Optional text summary")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class JudgeScoreResponse(BaseModel):
|
|
38
|
+
"""
|
|
39
|
+
Response body for POST /api/judge/v1/score.
|
|
40
|
+
|
|
41
|
+
This is the canonical contract that judge backends MUST return.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
status: Literal["ok", "failed"] = Field(default="ok", description="Request status")
|
|
45
|
+
event_reviews: List[ReviewPayload] = Field(
|
|
46
|
+
default_factory=list,
|
|
47
|
+
description="List of per-event rubric reviews (one per step)"
|
|
48
|
+
)
|
|
49
|
+
outcome_review: Optional[ReviewPayload] = Field(
|
|
50
|
+
None,
|
|
51
|
+
description="Optional outcome-level rubric review"
|
|
52
|
+
)
|
|
53
|
+
event_totals: List[float] = Field(
|
|
54
|
+
default_factory=list,
|
|
55
|
+
description="List of aggregated scores per event (matches event_reviews length)"
|
|
56
|
+
)
|
|
57
|
+
details: Dict[str, Any] = Field(
|
|
58
|
+
default_factory=dict,
|
|
59
|
+
description="Additional details (provider, latency, etc.)"
|
|
60
|
+
)
|
|
61
|
+
metadata: Dict[str, Any] = Field(
|
|
62
|
+
default_factory=dict,
|
|
63
|
+
description="Request metadata (provider, options, etc.)"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def aggregate_event_reward(self) -> float | None:
|
|
67
|
+
"""
|
|
68
|
+
Aggregate all event totals into a single reward.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Sum of all event_totals, or None if empty
|
|
72
|
+
"""
|
|
73
|
+
if not self.event_totals:
|
|
74
|
+
return None
|
|
75
|
+
return sum(self.event_totals)
|
|
76
|
+
|
|
77
|
+
def aggregate_outcome_reward(self) -> float | None:
|
|
78
|
+
"""
|
|
79
|
+
Extract outcome reward from outcome_review.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
outcome_review.total, or None if no outcome review
|
|
83
|
+
"""
|
|
84
|
+
if self.outcome_review is None:
|
|
85
|
+
return None
|
|
86
|
+
return self.outcome_review.total
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# Request schemas for completeness
|
|
90
|
+
|
|
91
|
+
class JudgeTaskApp(BaseModel):
|
|
92
|
+
"""Task application metadata."""
|
|
93
|
+
|
|
94
|
+
id: str = Field(..., description="Task app identifier")
|
|
95
|
+
base_url: Optional[str] = Field(None, description="Optional base URL for task app")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class JudgeOptions(BaseModel):
|
|
99
|
+
"""Judge provider and configuration options."""
|
|
100
|
+
|
|
101
|
+
provider: Optional[str] = Field(None, description="Judge provider (e.g., 'openai', 'groq')")
|
|
102
|
+
model: Optional[str] = Field(None, description="Model identifier")
|
|
103
|
+
rubric_id: Optional[str] = Field(None, description="Rubric identifier")
|
|
104
|
+
event: bool = Field(True, description="Enable event-level judging")
|
|
105
|
+
outcome: bool = Field(True, description="Enable outcome-level judging")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class JudgeTracePayload(BaseModel):
|
|
109
|
+
"""Trace payload containing trajectory context."""
|
|
110
|
+
|
|
111
|
+
event_history: List[Dict[str, Any]] = Field(..., description="List of events/steps")
|
|
112
|
+
markov_blanket_message_history: List[Dict[str, Any]] = Field(
|
|
113
|
+
default_factory=list,
|
|
114
|
+
description="Optional message history for context"
|
|
115
|
+
)
|
|
116
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Trace metadata")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class JudgeScoreRequest(BaseModel):
|
|
120
|
+
"""Request body for POST /api/judge/v1/score."""
|
|
121
|
+
|
|
122
|
+
policy_name: str = Field(..., description="Name of the policy being evaluated")
|
|
123
|
+
task_app: JudgeTaskApp = Field(..., description="Task application metadata")
|
|
124
|
+
trace: JudgeTracePayload = Field(..., description="Trajectory trace to evaluate")
|
|
125
|
+
options: JudgeOptions = Field(default_factory=lambda: JudgeOptions(), description="Judge options")
|
|
126
|
+
rubric: Optional[Dict[str, Any]] = Field(None, description="Optional explicit rubric criteria")
|
|
127
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Rubric utilities.
|
|
3
|
+
|
|
4
|
+
Exposes helpers for validating rubric specifications that are used across
|
|
5
|
+
Crafter-style judge configurations.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .validators import (
|
|
9
|
+
RubricCriterion,
|
|
10
|
+
RubricSpec,
|
|
11
|
+
ValidationError,
|
|
12
|
+
validate_rubric_dict,
|
|
13
|
+
validate_rubric_file,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"RubricCriterion",
|
|
18
|
+
"RubricSpec",
|
|
19
|
+
"ValidationError",
|
|
20
|
+
"validate_rubric_dict",
|
|
21
|
+
"validate_rubric_file",
|
|
22
|
+
]
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import math
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any, Iterable, Literal
|
|
7
|
+
|
|
8
|
+
import pydantic
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class RubricCriterion(pydantic.BaseModel):
|
|
12
|
+
"""Single scoring criterion within a rubric."""
|
|
13
|
+
|
|
14
|
+
id: str
|
|
15
|
+
description: str
|
|
16
|
+
weight: float
|
|
17
|
+
scale: str | None = None
|
|
18
|
+
|
|
19
|
+
@pydantic.field_validator("weight")
|
|
20
|
+
@classmethod
|
|
21
|
+
def _validate_weight(cls, value: float) -> float:
|
|
22
|
+
if not math.isfinite(value):
|
|
23
|
+
raise ValueError("weight must be a finite number")
|
|
24
|
+
if value <= 0.0:
|
|
25
|
+
raise ValueError("weight must be positive")
|
|
26
|
+
if value > 1.0:
|
|
27
|
+
raise ValueError("weight must be <= 1.0")
|
|
28
|
+
return value
|
|
29
|
+
|
|
30
|
+
@pydantic.field_validator("id", "description", mode="before")
|
|
31
|
+
@classmethod
|
|
32
|
+
def _strip_string(cls, value: Any) -> Any:
|
|
33
|
+
if isinstance(value, str):
|
|
34
|
+
return value.strip()
|
|
35
|
+
return value
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class RubricSpec(pydantic.BaseModel):
|
|
39
|
+
"""High-level rubric definition used by step-wise judges."""
|
|
40
|
+
|
|
41
|
+
version: str
|
|
42
|
+
goal_text: str
|
|
43
|
+
aggregation: Literal["weighted_sum"]
|
|
44
|
+
criteria: list[RubricCriterion]
|
|
45
|
+
|
|
46
|
+
@pydantic.model_validator(mode="after")
|
|
47
|
+
def _validate_weights(self) -> "RubricSpec":
|
|
48
|
+
if not self.criteria:
|
|
49
|
+
raise ValueError("rubric must declare at least one criterion")
|
|
50
|
+
total_weight = sum(criterion.weight for criterion in self.criteria)
|
|
51
|
+
if not math.isclose(total_weight, 1.0, abs_tol=1e-6, rel_tol=1e-6):
|
|
52
|
+
raise ValueError(
|
|
53
|
+
f"criterion weights must sum to 1 (got {total_weight:.6f})"
|
|
54
|
+
)
|
|
55
|
+
return self
|
|
56
|
+
|
|
57
|
+
@pydantic.field_validator("version")
|
|
58
|
+
@classmethod
|
|
59
|
+
def _non_empty_version(cls, value: str) -> str:
|
|
60
|
+
value = value.strip()
|
|
61
|
+
if not value:
|
|
62
|
+
raise ValueError("version string must not be empty")
|
|
63
|
+
return value
|
|
64
|
+
|
|
65
|
+
@pydantic.field_validator("goal_text")
|
|
66
|
+
@classmethod
|
|
67
|
+
def _non_empty_goal_text(cls, value: str) -> str:
|
|
68
|
+
value = value.strip()
|
|
69
|
+
if not value:
|
|
70
|
+
raise ValueError("goal_text must not be empty")
|
|
71
|
+
return value
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
ValidationError = pydantic.ValidationError
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def validate_rubric_dict(payload: dict[str, Any]) -> RubricSpec:
|
|
78
|
+
"""
|
|
79
|
+
Validate an in-memory rubric payload and return the parsed model.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
payload: Dictionary representing the rubric JSON.
|
|
83
|
+
Returns:
|
|
84
|
+
Validated RubricSpec instance.
|
|
85
|
+
Raises:
|
|
86
|
+
ValidationError: If the payload is missing required fields or contains
|
|
87
|
+
invalid weights.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
if not isinstance(payload, dict):
|
|
91
|
+
raise TypeError("rubric payload must be a dictionary")
|
|
92
|
+
return RubricSpec.model_validate(payload)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _load_payload_from_file(path: Path) -> dict[str, Any]:
|
|
96
|
+
if path.suffix.lower() != ".json":
|
|
97
|
+
raise ValueError(f"Unsupported rubric file type: {path}")
|
|
98
|
+
text = path.read_text(encoding="utf-8")
|
|
99
|
+
return json.loads(text)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def validate_rubric_file(path: Path) -> RubricSpec:
|
|
103
|
+
"""
|
|
104
|
+
Load and validate a rubric file.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
path: Path to a JSON rubric document.
|
|
108
|
+
Returns:
|
|
109
|
+
Validated RubricSpec instance.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
payload = _load_payload_from_file(path)
|
|
113
|
+
return validate_rubric_dict(payload)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def validate_rubric_files(paths: Iterable[Path]) -> list[RubricSpec]:
|
|
117
|
+
"""
|
|
118
|
+
Validate multiple rubric files and return their parsed models.
|
|
119
|
+
|
|
120
|
+
Useful for bulk validation inside tests or CI checks.
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
validated: list[RubricSpec] = []
|
|
124
|
+
for path in paths:
|
|
125
|
+
validated.append(validate_rubric_file(path))
|
|
126
|
+
return validated
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""HTTP-safe serialization helpers for tracing v3.
|
|
2
|
+
|
|
3
|
+
These utilities normalize tracing structures (including dataclasses) into
|
|
4
|
+
JSON-serializable forms and provide a compact JSON encoder suitable for
|
|
5
|
+
HTTP transmission to backend services.
|
|
6
|
+
|
|
7
|
+
Design goals:
|
|
8
|
+
- Preserve structure while ensuring standard-compliant JSON (no NaN/Infinity)
|
|
9
|
+
- Handle common non-JSON types: datetime, Decimal, bytes, set/tuple, numpy scalars
|
|
10
|
+
- Keep output compact (no unnecessary whitespace) while readable if needed
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import base64
|
|
16
|
+
import json
|
|
17
|
+
from dataclasses import asdict, is_dataclass
|
|
18
|
+
from datetime import date, datetime
|
|
19
|
+
from decimal import Decimal
|
|
20
|
+
from enum import Enum
|
|
21
|
+
from typing import Any
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
import numpy as _np # type: ignore
|
|
25
|
+
except Exception: # pragma: no cover - numpy optional at runtime
|
|
26
|
+
_np = None # type: ignore
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def normalize_for_json(value: Any) -> Any:
|
|
30
|
+
"""Return a JSON-serializable version of ``value``.
|
|
31
|
+
|
|
32
|
+
Rules:
|
|
33
|
+
- dataclass → dict (recursively normalized)
|
|
34
|
+
- datetime/date → ISO-8601 string (UTC-aware datetimes preserve tzinfo)
|
|
35
|
+
- Decimal → float (fallback to string if not finite)
|
|
36
|
+
- bytes/bytearray → base64 string (RFC 4648)
|
|
37
|
+
- set/tuple → list
|
|
38
|
+
- Enum → enum.value (normalized)
|
|
39
|
+
- numpy scalar → corresponding Python scalar
|
|
40
|
+
- float NaN/Inf/−Inf → None (to keep JSON standard compliant)
|
|
41
|
+
- dict / list → recursively normalized
|
|
42
|
+
- other primitives (str, int, bool, None, float) passed through
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
# Dataclasses
|
|
46
|
+
if is_dataclass(value) and not isinstance(value, type):
|
|
47
|
+
try:
|
|
48
|
+
return normalize_for_json(asdict(value))
|
|
49
|
+
except Exception:
|
|
50
|
+
# Fallback: best-effort conversion via __dict__
|
|
51
|
+
return normalize_for_json(getattr(value, "__dict__", {}))
|
|
52
|
+
|
|
53
|
+
# Mapping
|
|
54
|
+
if isinstance(value, dict):
|
|
55
|
+
return {str(k): normalize_for_json(v) for k, v in value.items()}
|
|
56
|
+
|
|
57
|
+
# Sequences
|
|
58
|
+
if isinstance(value, (list, tuple, set)):
|
|
59
|
+
return [normalize_for_json(v) for v in value]
|
|
60
|
+
|
|
61
|
+
# Datetime / Date
|
|
62
|
+
if isinstance(value, (datetime, date)):
|
|
63
|
+
return value.isoformat()
|
|
64
|
+
|
|
65
|
+
# Decimal
|
|
66
|
+
if isinstance(value, Decimal):
|
|
67
|
+
try:
|
|
68
|
+
f = float(value)
|
|
69
|
+
if f != f or f in (float("inf"), float("-inf")):
|
|
70
|
+
return str(value)
|
|
71
|
+
return f
|
|
72
|
+
except Exception:
|
|
73
|
+
return str(value)
|
|
74
|
+
|
|
75
|
+
# Bytes-like
|
|
76
|
+
if isinstance(value, (bytes, bytearray)):
|
|
77
|
+
return base64.b64encode(bytes(value)).decode("ascii")
|
|
78
|
+
|
|
79
|
+
# Enum
|
|
80
|
+
if isinstance(value, Enum):
|
|
81
|
+
return normalize_for_json(value.value)
|
|
82
|
+
|
|
83
|
+
# Numpy scalars / arrays
|
|
84
|
+
if _np is not None:
|
|
85
|
+
if isinstance(value, (_np.generic,)): # type: ignore[attr-defined]
|
|
86
|
+
return normalize_for_json(value.item())
|
|
87
|
+
if isinstance(value, (_np.ndarray,)):
|
|
88
|
+
return normalize_for_json(value.tolist())
|
|
89
|
+
|
|
90
|
+
# Floats: sanitize NaN / Infinity to None
|
|
91
|
+
if isinstance(value, float):
|
|
92
|
+
if value != value or value in (float("inf"), float("-inf")):
|
|
93
|
+
return None
|
|
94
|
+
return value
|
|
95
|
+
|
|
96
|
+
return value
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def dumps_http_json(payload: Any) -> str:
|
|
100
|
+
"""Dump ``payload`` into a compact, HTTP-safe JSON string.
|
|
101
|
+
|
|
102
|
+
- Recursively normalizes non-JSON types (see ``normalize_for_json``)
|
|
103
|
+
- Disallows NaN/Infinity per RFC 8259 (allow_nan=False)
|
|
104
|
+
- Uses compact separators and preserves Unicode (ensure_ascii=False)
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
normalized = normalize_for_json(payload)
|
|
108
|
+
return json.dumps(
|
|
109
|
+
normalized,
|
|
110
|
+
ensure_ascii=False,
|
|
111
|
+
allow_nan=False,
|
|
112
|
+
separators=(",", ":"),
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def serialize_trace_for_http(trace: Any) -> str:
|
|
117
|
+
"""Serialize a tracing v3 session (or dict-like) to HTTP-safe JSON.
|
|
118
|
+
|
|
119
|
+
Accepts either a dataclass (e.g., SessionTrace) or a dict/list and
|
|
120
|
+
applies normalization and compact JSON encoding.
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
if is_dataclass(trace) and not isinstance(trace, type):
|
|
124
|
+
try:
|
|
125
|
+
return dumps_http_json(asdict(trace))
|
|
126
|
+
except Exception:
|
|
127
|
+
return dumps_http_json(getattr(trace, "__dict__", {}))
|
|
128
|
+
return dumps_http_json(trace)
|
|
129
|
+
|
|
130
|
+
|
|
@@ -2,9 +2,24 @@ examples/__init__.py,sha256=S1h7WGBIgk2CmmSIqsE4nkhxv2XTniHSBUqKETgSNQI,543
|
|
|
2
2
|
examples/analyze_semantic_words.sh,sha256=z-3qJBAlQuMrfRzoszofle_2b3Fy79rymvEAcoBQGXU,652
|
|
3
3
|
examples/crafter_debug_render.py,sha256=McPkX8z6ffANOfoR0Xw26h81HNHtT0F5y4bzUhwYonQ,6261
|
|
4
4
|
examples/run_crafter_demo.sh,sha256=7FNvooSgq-ezccGy5j_h_uRXObiQtcnybPcTwaVGDpo,392
|
|
5
|
+
examples/agora_ex/README_MoE.md,sha256=EXM-tLE4WuqwmhdbgrRFf7lP0VhlszpDz4jO2j30klI,5770
|
|
6
|
+
examples/agora_ex/__init__.py,sha256=oZU7CCBKQRTlIC1WeYA7QgArSQ5b6Kn4KDEu5KbMYyU,171
|
|
7
|
+
examples/agora_ex/agora_ex.py,sha256=rjySIJVehB5lSYW_tV3fanq044uzzDo9o9EprQ5hpaM,2154
|
|
8
|
+
examples/agora_ex/agora_ex_task_app.py,sha256=Va_A00AWT7byzKAujqEiF1vNRYjmXzkw_nMsCe8n2SU,20987
|
|
9
|
+
examples/agora_ex/reward_fn_grpo-human.py,sha256=sgaUrWOt1malqX1GEN1fMpEvO1LPKWo30RO3fvO95OQ,4796
|
|
10
|
+
examples/agora_ex/system_prompt_CURRENT.md,sha256=sz9txJsFzqG1mljbJH01iIYOynfGf98DNuSQHBu9RQw,2640
|
|
11
|
+
examples/agora_ex/configs/rl_lora_qwen3_moe_2xh200.toml,sha256=VZBOahFd4aFj5SRl9_cfMqXn3sBRv8UQInQZ9LkNkD0,2922
|
|
12
|
+
examples/agora_ex/task_app/agora_ex_task_app.py,sha256=Va_A00AWT7byzKAujqEiF1vNRYjmXzkw_nMsCe8n2SU,20987
|
|
13
|
+
examples/agora_ex/task_app/reward_fn_grpo-human.py,sha256=sgaUrWOt1malqX1GEN1fMpEvO1LPKWo30RO3fvO95OQ,4796
|
|
14
|
+
examples/agora_ex/task_app/system_prompt_CURRENT.md,sha256=sz9txJsFzqG1mljbJH01iIYOynfGf98DNuSQHBu9RQw,2640
|
|
5
15
|
examples/dev/qwen3_32b_qlora_4xh100.toml,sha256=YXLo1I_eHamUHMjIvsD9Tx3_HXcLfjlasd6X2BF7i5g,766
|
|
6
|
-
examples/multi_step/crafter_rl_lora.md,sha256=
|
|
7
|
-
examples/multi_step/
|
|
16
|
+
examples/multi_step/crafter_rl_lora.md,sha256=sZHliCaYCq_T70JyTyK0jr-1yQ17zkZremj9GSeHG_I,2815
|
|
17
|
+
examples/multi_step/sse_metrics_streaming_notes.md,sha256=2k5nNOB4IgXrfC0czdup5KryMOwbHT_HbSpS53UNX2U,15630
|
|
18
|
+
examples/multi_step/task_app_config_notes.md,sha256=1ngz8aGCykA1iMCrVdc1yGbqXan530893Xzf4KK9xe4,22212
|
|
19
|
+
examples/multi_step/configs/crafter_rl_outcome.toml,sha256=gZwpQBqRoGLkQnYvOk98dTjKO8EMUd3lg8daxXNoD-8,1378
|
|
20
|
+
examples/multi_step/configs/crafter_rl_stepwise_hosted_judge.toml,sha256=4IorHrf9E8LcjDXVFWzh95AsFQabnruvhtSxplzUl1E,5047
|
|
21
|
+
examples/multi_step/configs/crafter_rl_stepwise_shaped.toml,sha256=MjNyqzbWmer1S6UtiWHvzFLaJl5JX3yfwGcvnU_F4r8,1864
|
|
22
|
+
examples/multi_step/configs/crafter_rl_stepwise_simple.toml,sha256=VUXFDFUMlni95Dtj1v9k52_LAl6Iq97ra4UTw6v2-60,1492
|
|
8
23
|
examples/qwen_coder/README.md,sha256=xhoGKdIlRt8fO3F6HTpq6rzw3bs4ezDsGcRBNCz90Fs,3145
|
|
9
24
|
examples/qwen_coder/_shared.py,sha256=oGUmx7gKkgkmToXHXAPocG72YKO9WGRjguVhmX3XE7s,3557
|
|
10
25
|
examples/qwen_coder/generate_dataset.py,sha256=bfa1LMvV7jd2GmNkFE5rn2K1SETNEzMjv7SXD0C24K0,4484
|
|
@@ -85,7 +100,7 @@ examples/warming_up_to_rl/export_trace_sft.py,sha256=qcVOgZduYYImDv2xs-h_CoyMpX_
|
|
|
85
100
|
examples/warming_up_to_rl/groq_test.py,sha256=vffVVTwQNypkqppxMLy17ySafoD2WKIK-Qf9w13lbyE,3138
|
|
86
101
|
examples/warming_up_to_rl/manage_secrets.py,sha256=qLe_zglOLCd0dxPPCyQQ9CnhGkvtLOkBrZ0Xd4mmnIw,4372
|
|
87
102
|
examples/warming_up_to_rl/readme.md,sha256=u2KX7grlDnOMRRrC3vzTej1K0OOmTdx5LHs2opTfLt4,6431
|
|
88
|
-
examples/warming_up_to_rl/run_eval.py,sha256
|
|
103
|
+
examples/warming_up_to_rl/run_eval.py,sha256=zN4hZLJILulQNUw_WiDwEZUA3xIAcG6ewl7X_iNP-n8,31390
|
|
89
104
|
examples/warming_up_to_rl/run_fft_and_save.py,sha256=RVbMuHUB0F7h_CO26hvAhEx5W3fqxVvokb4VlOiR6RQ,15095
|
|
90
105
|
examples/warming_up_to_rl/run_local_rollout.py,sha256=uRfCR1E066fF6cQTajllb0Dzv0sU4iT6QOitZ_jRVHw,8783
|
|
91
106
|
examples/warming_up_to_rl/run_local_rollout_modal.py,sha256=oGHqSCNUSAluJFlVkOKItONWh0wUu4UxRXmqnkD37E8,8948
|
|
@@ -98,16 +113,16 @@ examples/warming_up_to_rl/configs/crafter_fft_4b.toml,sha256=q_cnU3P-eGG_VFOepw9
|
|
|
98
113
|
examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml,sha256=YP4HLWDh6iIvw6McPXw5kK1RUFQF4dvKP4yH5bHT5nI,678
|
|
99
114
|
examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml,sha256=zQi31JYa83kW-ceEqDZi-7oajsCmEPrlJR57zN5ygO8,340
|
|
100
115
|
examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml,sha256=6eeU1GVvK1cYSEuGXk-AhOwJLgRcf74CTOI5XlqNYBc,817
|
|
101
|
-
examples/warming_up_to_rl/configs/eval_stepwise_complex.toml,sha256=
|
|
116
|
+
examples/warming_up_to_rl/configs/eval_stepwise_complex.toml,sha256=M1YGni8ng1RTJQR3xM65cv1jotNrJqseru47bd6omtY,1040
|
|
102
117
|
examples/warming_up_to_rl/configs/eval_stepwise_consistent.toml,sha256=N5xt_9_AaVvJX6up90bSuXpF8Yt-cGJfmTA-Au3NY_4,591
|
|
103
118
|
examples/warming_up_to_rl/configs/eval_stepwise_per_achievement.toml,sha256=ly42h8kIeSX8Y9mygC8mx7G_0KypUcPB9vqx8P-6QmQ,825
|
|
104
|
-
examples/warming_up_to_rl/configs/eval_stepwise_simple.toml,sha256=
|
|
119
|
+
examples/warming_up_to_rl/configs/eval_stepwise_simple.toml,sha256=g_Q8EsHOpatX0VfKKBHMGxX0T3yZv42_UzLhF5evGa8,882
|
|
105
120
|
examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml,sha256=MrcjPlR-5s7XayBXl087QcGuR6484HcdSgS9yYUE5uo,1868
|
|
106
121
|
examples/warming_up_to_rl/configs/rl_from_ft.toml,sha256=d1cIoLeC80NgOjn0Wohk0a5IXE_ImHVgMsxWPkyAFKQ,1381
|
|
107
122
|
examples/warming_up_to_rl/old/event_rewards.md,sha256=gHJd3ZeYOnj4xPXt-7sSJamgOaJQ-BpfdaF-CKJK3-0,13450
|
|
108
123
|
examples/warming_up_to_rl/old/notes.md,sha256=Y9Zs_tUb2Y6kv0MmGe-kAvGM9zCtEDY3Ccf5j7PoFGU,4468
|
|
109
124
|
examples/warming_up_to_rl/task_app/README.md,sha256=xjt_l7BGJmAMwanKoLAhoy2cCVav_Hh5Z4iKGLUNz3E,1664
|
|
110
|
-
examples/warming_up_to_rl/task_app/grpo_crafter.py,sha256=
|
|
125
|
+
examples/warming_up_to_rl/task_app/grpo_crafter.py,sha256=f9KxV2S90f90H6BH7MyuEayyq4-p2U00VRUv2WiqrXM,24328
|
|
111
126
|
examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py,sha256=dw0OCq1guI8rH6yA5twSRUmFztbgl2SNwMW_7sOxYUA,5405
|
|
112
127
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/README.md,sha256=kJaN1do8V4XM2_g51WMI3edCDpv5zEw_nrMFtEwO1SQ,4614
|
|
113
128
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py,sha256=KrGX5yedzYZQeKVt5FTSVzln52d1tsVGRtqFDId68zw,120
|
|
@@ -115,9 +130,9 @@ examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py,sha256=YpDgOaj
|
|
|
115
130
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py,sha256=Y0iaLQ1nUkxBCD4aY39J4XEt66J-N4_J0uPj492i75g,49640
|
|
116
131
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py,sha256=hr1jblOUsx0bakgy6zXoEHROeUDoVPY1I66aNyyRQDg,7547
|
|
117
132
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py,sha256=-GL__EH3Xr47vp3aD30XNXNrFPOj1bRLpOYQ-yvfwIU,2481
|
|
118
|
-
examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py,sha256=
|
|
133
|
+
examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py,sha256=WOs0XzyEAAs_tbjSP-A4K5hw--IyMsnk5fSgEMh1GX0,48503
|
|
119
134
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py,sha256=5dN2Z-qVU4T_UUflHC9XGiIdDqFUl03G7uejcrYRbTE,5480
|
|
120
|
-
examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py,sha256=
|
|
135
|
+
examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py,sha256=Uuxy4nbVPRdmUm1RhQ_2xE6H0vg8u9LwQ60utbHeh4g,84409
|
|
121
136
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py,sha256=-TDfCs-LSlRgyWHGvO_6YAmjauwi1x4618D8CA9d8aA,5600
|
|
122
137
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py,sha256=jFEtE3UqVCq552MSPliS2eO0pDbAS3tSDRJL0A-edTA,5111
|
|
123
138
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py,sha256=8Rnp0NTKTD_kPXg8zfpIy_we2hfk2agKPUVH_aqMsE0,1994
|
|
@@ -130,18 +145,19 @@ examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py
|
|
|
130
145
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py,sha256=NfhgJPkzjhA-bLDF6zYP57Cs1pnpqteJqzO3lsFOdMk,10074
|
|
131
146
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/tools.py,sha256=zmTxJ8IpTod7DRDCQhkLDw7KgFCeAVFbf4cQpuOgSgI,1788
|
|
132
147
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/__init__.py,sha256=TA47fqudhRMma0iANDvMotfC0U5YqJJQudeZFRGiPX4,179
|
|
133
|
-
examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py,sha256=
|
|
148
|
+
examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py,sha256=R3lsxp2T55Y3YY4S4NqG6IjN5KCLyB7iNt2Php5Z9Xk,31754
|
|
134
149
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/__init__.py,sha256=1nwfPuiIFXPjj6JnxoudYq6GE4tpg5tiPL0uIpGsIUc,134
|
|
135
150
|
examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py,sha256=1YJt5gpKhhJaFT8Cs7DdK_QDZCdUBAXQmpZfC5TX5Q4,6517
|
|
136
|
-
synth_ai/__init__.py,sha256=
|
|
151
|
+
synth_ai/__init__.py,sha256=36R8UX48aD2ybWdrt79puVFDRyrDYGIC7gjwU0enrPI,2565
|
|
137
152
|
synth_ai/__main__.py,sha256=Kh1xBKkTE5Vs2qNMtDuuOXerHUptMcOiF3YziOpC6DA,146
|
|
138
153
|
synth_ai/demo_registry.py,sha256=vqt_E7-YdjXc-Q4qcY36wfvwHPGyYBb7lw_sPjKiH3w,9949
|
|
139
154
|
synth_ai/handshake.py,sha256=Qxe0aLNcBVH5V02fNKq96GPF_2Z8GOAToDR_2HyaeaA,3739
|
|
140
155
|
synth_ai/http.py,sha256=ACzDOkwa7kIniZVOZngPc6Zfp05h6rQE1oNqsWG_FKo,1038
|
|
141
156
|
synth_ai/http_client.py,sha256=5AkwvGf7HpvYUpxr_IIM1xdsDjLYois7xTht5ueHYkk,5058
|
|
157
|
+
synth_ai/judge_schemas.py,sha256=IGM-8ZHKwNKISgWyxk9JhQySEAu0rn_07HlF2NkTs4c,4536
|
|
142
158
|
synth_ai/api/models/supported.py,sha256=vQu6Ahw1jn1X3-nL190pH_Z45tkQj8hdDyTTda8t5LQ,12671
|
|
143
159
|
synth_ai/api/train/__init__.py,sha256=aBwlmrj1HWVwDcvUrX4TqpS0BgvkE7Pv7npoIZmtTFU,118
|
|
144
|
-
synth_ai/api/train/builders.py,sha256=
|
|
160
|
+
synth_ai/api/train/builders.py,sha256=6vMMcFZSLlM5Xan2iUhsop7L51Su7j3PeK22mZcpQfE,12106
|
|
145
161
|
synth_ai/api/train/cli.py,sha256=YZc_Scx-ClE6aJjVMEIzfsiBOlX7caSdg4mPGC-xPm0,23167
|
|
146
162
|
synth_ai/api/train/config_finder.py,sha256=4touziSykzQ9YCYL2CjXUfojDcJdKO3vFnoWXQ1fOx8,7178
|
|
147
163
|
synth_ai/api/train/env_resolver.py,sha256=X6ILO46UebkFJo0CDhzfVCb9y3HC-pOPIwkNhbGgvOo,11854
|
|
@@ -149,20 +165,24 @@ synth_ai/api/train/pollers.py,sha256=-rcVrGMN7Rj2HrzJ1IAgphwcrsCzpwwTy0KDk76Sx2A
|
|
|
149
165
|
synth_ai/api/train/supported_algos.py,sha256=AqCtrfiJkocULlDtTPppKWuvOOzQ4tBbh-k3e9MEDZk,5156
|
|
150
166
|
synth_ai/api/train/task_app.py,sha256=MiJ0DLFjqdFNmgk-YHaHVQt31Kxl91Exh9IFfk7GSxM,6439
|
|
151
167
|
synth_ai/api/train/utils.py,sha256=_8C1uoXyXXuEmthquHH5XtowVQkf84Kde4jCdmfKnCk,6165
|
|
168
|
+
synth_ai/api/train/configs/__init__.py,sha256=cmf4jS2pyTZQXw35b4OCox1MBhuUwDXTa51M01BA7Ck,915
|
|
169
|
+
synth_ai/api/train/configs/rl.py,sha256=3WrgrNSQZ76zNPa9eyq0NQfgvlnHwF7S9qaz1ugUI34,3673
|
|
170
|
+
synth_ai/api/train/configs/sft.py,sha256=aIxS_xF3Zaq5dc1BaEFWwbwuavxXH2gsJXQq1HlwmlM,2656
|
|
171
|
+
synth_ai/api/train/configs/shared.py,sha256=EZ296HzlbOfp414ERbMdyO0s_9UvOKWs7PiQPlAEMjU,492
|
|
152
172
|
synth_ai/cli/__init__.py,sha256=WhaUb9_UNcQBM1c7W3VzeUKUaBBSV31C0cwvHI-9UFM,2423
|
|
153
173
|
synth_ai/cli/_modal_wrapper.py,sha256=DHVP-wQi_gdxWyeEiA_DO0nRiMv7XpaOJ3T3-R2pVoI,599
|
|
154
174
|
synth_ai/cli/_storage.py,sha256=ABfpzyVnCNWFdAgzxvG0_6CGvEEl91BYNTcrTw_V3dY,680
|
|
155
175
|
synth_ai/cli/_typer_patch.py,sha256=xBTshJadUQjtOr-PyGZUytpxyV28UvfU5DPWBCa_mTo,1562
|
|
156
176
|
synth_ai/cli/balance.py,sha256=VTeJJ98JTA6Z7FujwNzRZAlTzO2BNcFueSnXJYV5f50,8432
|
|
157
177
|
synth_ai/cli/calc.py,sha256=cAED6qRzc9g_eKjk7o_ZQsGKw6TA4Dib7NNze8e8L2s,2740
|
|
158
|
-
synth_ai/cli/demo.py,sha256=
|
|
178
|
+
synth_ai/cli/demo.py,sha256=iGp9OASFBPj4lBgdWaA-KBTnkrJoDGsL6CpRCgXRAug,5383
|
|
159
179
|
synth_ai/cli/legacy_root_backup.py,sha256=Ab3cVlOu3k3kLlrTc2SOtSTJTRxlwJ4JvZg9Ol2BbXg,15961
|
|
160
180
|
synth_ai/cli/man.py,sha256=JQDon73ZkuKP9xr1_vRh5fjV9_b5xiUb7zNjny7ArB8,3765
|
|
161
181
|
synth_ai/cli/recent.py,sha256=iY7vwVH8T6YwEOEC0QLenZSZXpyedrYc_epbP8WORzE,4415
|
|
162
|
-
synth_ai/cli/rl_demo.py,sha256=
|
|
182
|
+
synth_ai/cli/rl_demo.py,sha256=bSwjLATZWlpUjG9AShwTjVYEbgLv8qwMWK46YQStt4k,8118
|
|
163
183
|
synth_ai/cli/root.py,sha256=78oCkjtMaLSHEpHRbiaX-FEsdB3gieI7OrZcUMpqrSU,13740
|
|
164
184
|
synth_ai/cli/status.py,sha256=vjr4ifL48pitKojBhuJdY4oIB8NnJ0RZF44fOzKS4SI,4635
|
|
165
|
-
synth_ai/cli/task_apps.py,sha256=
|
|
185
|
+
synth_ai/cli/task_apps.py,sha256=0Y8KiLmaacD41RMqejMekPFM2BiXfSfCtMD98rQ9R34,105830
|
|
166
186
|
synth_ai/cli/traces.py,sha256=tyt2OUcREK82an9hc2Uq3H-xn0vWuTf_Pirt0CWkodg,6617
|
|
167
187
|
synth_ai/cli/turso.py,sha256=y9aHehGA1VvaWkoZyBhu5fLulWUT65powrpvvVp7gpA,2301
|
|
168
188
|
synth_ai/cli/watch.py,sha256=Wi5H2YdV3gsEVMd5YIte2LHMweWqLkGpsK3aopdjCQE,17481
|
|
@@ -171,7 +191,7 @@ synth_ai/config/base_url.py,sha256=c85LaABBrvsl8Fp8KH0LNtJJrpnUwlzA5Ywbuth8fHE,3
|
|
|
171
191
|
synth_ai/core/experiment.py,sha256=5ErxMLOMDHgBjWJjId-uViCyxwfx3Ns5NVrgMkPEpZk,234
|
|
172
192
|
synth_ai/core/system.py,sha256=s-Z7np2ISYmYc1r9YN-y2yb3cgRlOalrh0iaqnxeo84,206
|
|
173
193
|
synth_ai/demos/core/__init__.py,sha256=A2FjhY7KXGtyzdQXqeTPCkEhHfrH-eQg6bvP8HaYhZM,36
|
|
174
|
-
synth_ai/demos/core/cli.py,sha256=
|
|
194
|
+
synth_ai/demos/core/cli.py,sha256=QknHcnrMz2WYQLzVMvt6DOHRDyPjpcV3U6WMfOSRwgU,64723
|
|
175
195
|
synth_ai/demos/demo_task_apps/__init__.py,sha256=fj5IgEaCWLjYx-8DpfzmUdHIEE2TlpauEDvJRgAnLy0,267
|
|
176
196
|
synth_ai/demos/demo_task_apps/core.py,sha256=Pwh7Q9HV1njZWhb479nBXM9z57bXDveUV2ZapXaSuSU,15448
|
|
177
197
|
synth_ai/demos/demo_task_apps/crafter/__init__.py,sha256=3SnNZTzBjGR9eudStcww259vPmzoFBHJL-M0GDUD7Qo,24
|
|
@@ -211,7 +231,7 @@ synth_ai/environments/examples/crafter_classic/debug_translation.py,sha256=47DEQ
|
|
|
211
231
|
synth_ai/environments/examples/crafter_classic/engine.py,sha256=i13hDJe-6BXWFqXAsdjNCrfjU_HpwWLE5-4KNT-VSbs,25257
|
|
212
232
|
synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py,sha256=IMmqt0S9wh0sdP42G_Q6W_2j22gKX4YQZVvuIqLzLWc,2802
|
|
213
233
|
synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py,sha256=oC1y_CdnB_xit4FH72dMo8ljlZW_Mpa3cMpbDVCtqyU,11127
|
|
214
|
-
synth_ai/environments/examples/crafter_classic/environment.py,sha256=
|
|
234
|
+
synth_ai/environments/examples/crafter_classic/environment.py,sha256=Vw70KPCR_45S7Qewlk5vcSQrskOqFofn85PxoWskTzU,22287
|
|
215
235
|
synth_ai/environments/examples/crafter_classic/taskset.py,sha256=9uZpQOllUqMupIBwlz2Jv38hBYqY09czi1LOonCTk5c,9843
|
|
216
236
|
synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py,sha256=lka-3tNuYsvYQ6acEvJjvBPkylbqgCzuCd2QMOjNCRs,7194
|
|
217
237
|
synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py,sha256=wHT2pyOJ55Jlh9iq-UND4cd-GQdyKxQmo9ncCuQ_Jiw,10166
|
|
@@ -407,7 +427,10 @@ synth_ai/environments/tasks/filters.py,sha256=CJDXMUF4HDVQgdR3tIqHddUuvGmwwQG27O
|
|
|
407
427
|
synth_ai/environments/tasks/utils.py,sha256=2UfWqN5WE7blfpdd8GcPuT56sDAPXzlF0pGUyGO_M1g,2576
|
|
408
428
|
synth_ai/environments/v0_observability/history.py,sha256=gW0SozHmxeL6PFNaTAQ7em8BNUlObsRpP4_MJ3drMBE,54
|
|
409
429
|
synth_ai/environments/v0_observability/log.py,sha256=B4LvbPh0a1_E5dki2PlKAVHESB8oCQz0CmDBvC0GwdQ,38
|
|
430
|
+
synth_ai/evals/__init__.py,sha256=NBInP4HqnLUtI7USUwOqnar2c7JT4g8ngvm612CMuqA,306
|
|
410
431
|
synth_ai/evals/base.py,sha256=Pu_h3oJAAEqJxgj5eigqbVhrNjAGJnBtlxpacSbGXCI,353
|
|
432
|
+
synth_ai/evals/client.py,sha256=oTs0rNijPm5b5H4Ise7LsilXKiZJRMs4X_mCudGtGxA,2581
|
|
433
|
+
synth_ai/evals/types.py,sha256=vpg2u4vLi7EqXJYgMM44TPXKKQKDxkcK3_KzYeHU6l0,930
|
|
411
434
|
synth_ai/inference/__init__.py,sha256=5xwgFMKRfbLC7TX3lwMqGOZ8HHOEnXwlDqV_FLjsd5A,74
|
|
412
435
|
synth_ai/inference/client.py,sha256=FA1h4rcMu7M0qCCCJ4yQTqC9dM1weVhDWylry8znnCc,1262
|
|
413
436
|
synth_ai/jobs/client.py,sha256=_NtmBlm7LLZX22W6arfaa0DAq-0vsV-h_Ep2yHAiwnE,10125
|
|
@@ -435,6 +458,8 @@ synth_ai/learning/sft/client.py,sha256=9KxDcnwQl5FKZgXOUsEvsihFJUg2CHJA6sc791cyp
|
|
|
435
458
|
synth_ai/learning/sft/config.py,sha256=pdUvwmhYMSIrFTD7-a9MglPwHevP4OSed9TuOzdjkOc,9791
|
|
436
459
|
synth_ai/learning/sft/data.py,sha256=gM9ObMO7L3woKUVL2p-Pz6iTikS1Yr40vce5zRy2H84,9454
|
|
437
460
|
synth_ai/lm/__init__.py,sha256=uXZFG6zFox_oV6FM7cJQxmnCNUBBa50ZuhdXCNxx0Lo,875
|
|
461
|
+
synth_ai/rubrics/__init__.py,sha256=hymlNv1PezlMibEIzQWGBNy412lwE5dIPa98tiX6AiI,411
|
|
462
|
+
synth_ai/rubrics/validators.py,sha256=DrvQKcHQwbt8thAEFeqvlFZMdaApkwZOHda6hdm6Va8,3613
|
|
438
463
|
synth_ai/task/__init__.py,sha256=FyzWbFjQCXga_ZT1oWVLt2N58dHsLcM5sMu7kjoTpW0,2409
|
|
439
464
|
synth_ai/task/auth.py,sha256=IUD3DcU-43qczWV9sSccXsjDOkZe8sJHmcQtues1YWQ,5652
|
|
440
465
|
synth_ai/task/client.py,sha256=ccbcYRaZZ5MBMcfFdA8x2t7PjXEdvKuFmwRxrRl_8vk,5741
|
|
@@ -460,6 +485,7 @@ synth_ai/tracing_v3/llm_call_record_helpers.py,sha256=zZ0i6SB7l6WYud9mRLBTyZ4BJC
|
|
|
460
485
|
synth_ai/tracing_v3/lm_call_record_abstractions.py,sha256=j2RGuXVaV_EXmIosuXRDjptJSlrDXwb8x06k2fF6lqo,9195
|
|
461
486
|
synth_ai/tracing_v3/migration_helper.py,sha256=izm7SNHtG3VDv_5ZmMk_mmwKitmShxUK3joNFOArZIY,4177
|
|
462
487
|
synth_ai/tracing_v3/replica_sync.py,sha256=H3ReiULH3McnGxdrH9BWkSeIOFfUQ6enHk5SWeuRV6k,8843
|
|
488
|
+
synth_ai/tracing_v3/serialization.py,sha256=KiMkIeV5FyvOU6fgCV1F5hhOCY_0BsyQdNrfEDREmgY,4132
|
|
463
489
|
synth_ai/tracing_v3/session_tracer.py,sha256=z9-gt7SK68X_q0aOHwWOtGOaGClpoWkUkAxAOwTKpI8,18996
|
|
464
490
|
synth_ai/tracing_v3/utils.py,sha256=t-ZEyP03j8k7jNxtLsOSvzQnq8SXBaRPdK7jCgPdVdI,3450
|
|
465
491
|
synth_ai/tracing_v3/examples/basic_usage.py,sha256=gSIWxeCYNe5WL38FjCaOCv0RvmxZ8SDiPWhA1-8XAeg,7342
|
|
@@ -576,9 +602,9 @@ synth_ai/v0/tracing_v3/abstractions.py,sha256=7IHKkzicFEJ4UXJbodK11Pi8YYq7Vt8Ev_
|
|
|
576
602
|
synth_ai/v0/tracing_v3/decorators.py,sha256=fRyVBKEbxAPZoDsBH7t8OVLVixvgD_Lw_1ONF1TuZxU,108
|
|
577
603
|
synth_ai/v0/tracing_v3/llm_call_record_helpers.py,sha256=JYSpGtW-RC-DnhUIPdVADNF3rK5x8Tl8DOymbmRI99I,121
|
|
578
604
|
synth_ai/v0/tracing_v3/session_tracer.py,sha256=TSUzb_fUUlpwOqFE1X-Fs14nG2CNe7MZLKOvH7cV2kE,112
|
|
579
|
-
synth_ai-0.2.
|
|
580
|
-
synth_ai-0.2.
|
|
581
|
-
synth_ai-0.2.
|
|
582
|
-
synth_ai-0.2.
|
|
583
|
-
synth_ai-0.2.
|
|
584
|
-
synth_ai-0.2.
|
|
605
|
+
synth_ai-0.2.13.dev1.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
|
|
606
|
+
synth_ai-0.2.13.dev1.dist-info/METADATA,sha256=7RpJWL82aHYN-jx-yaaJ9WVozXidWUR4tWS2MkNXxNk,5429
|
|
607
|
+
synth_ai-0.2.13.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
608
|
+
synth_ai-0.2.13.dev1.dist-info/entry_points.txt,sha256=GSFXaJreq4PJXbixkUI0GHZwGh2dZDG5pYaoVmqr_KE,46
|
|
609
|
+
synth_ai-0.2.13.dev1.dist-info/top_level.txt,sha256=1moNHgctEUJ3F3eH3V-7FSMb2iTTze1V13dj1R04oUY,18
|
|
610
|
+
synth_ai-0.2.13.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|