carl-studio 0.3.0__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.
- carl_studio/__init__.py +99 -0
- carl_studio/align/__init__.py +34 -0
- carl_studio/align/pipeline.py +1233 -0
- carl_studio/bench/__init__.py +40 -0
- carl_studio/bench/probes.py +678 -0
- carl_studio/bench/suite.py +297 -0
- carl_studio/bundler.py +753 -0
- carl_studio/cli.py +2340 -0
- carl_studio/compute/__init__.py +55 -0
- carl_studio/compute/hf_jobs.py +648 -0
- carl_studio/compute/local.py +67 -0
- carl_studio/compute/prime.py +64 -0
- carl_studio/compute/protocol.py +37 -0
- carl_studio/compute/runpod.py +81 -0
- carl_studio/compute/ssh.py +76 -0
- carl_studio/compute/tinker.py +58 -0
- carl_studio/console.py +212 -0
- carl_studio/data/__init__.py +27 -0
- carl_studio/data/adapters/__init__.py +11 -0
- carl_studio/data/adapters/base.py +46 -0
- carl_studio/data/adapters/nemotron.py +65 -0
- carl_studio/data/adapters/tool_calling.py +38 -0
- carl_studio/data/curriculum.py +161 -0
- carl_studio/data/registry.py +106 -0
- carl_studio/data/sources.yaml +76 -0
- carl_studio/data/types.py +173 -0
- carl_studio/environments/__init__.py +46 -0
- carl_studio/environments/atropos.py +110 -0
- carl_studio/environments/builtins/__init__.py +4 -0
- carl_studio/environments/builtins/code_sandbox.py +241 -0
- carl_studio/environments/builtins/sql_sandbox.py +350 -0
- carl_studio/environments/prime_rl.py +37 -0
- carl_studio/environments/protocol.py +106 -0
- carl_studio/environments/registry.py +63 -0
- carl_studio/environments/validation.py +94 -0
- carl_studio/eval/__init__.py +23 -0
- carl_studio/eval/runner.py +1566 -0
- carl_studio/experiment/__init__.py +35 -0
- carl_studio/experiment/manager.py +210 -0
- carl_studio/experiment/types.py +224 -0
- carl_studio/hub/__init__.py +4 -0
- carl_studio/hub/models.py +104 -0
- carl_studio/learn/__init__.py +31 -0
- carl_studio/learn/ingest.py +303 -0
- carl_studio/learn/pipeline.py +243 -0
- carl_studio/learn/qa_gen.py +441 -0
- carl_studio/learn/quality.py +344 -0
- carl_studio/mcp/__init__.py +4 -0
- carl_studio/mcp/server.py +153 -0
- carl_studio/observe/__init__.py +12 -0
- carl_studio/observe/app.py +252 -0
- carl_studio/observe/data_source.py +243 -0
- carl_studio/paper/__init__.py +13 -0
- carl_studio/paper/experiments.py +170 -0
- carl_studio/paper/generator.py +434 -0
- carl_studio/primitives/__init__.py +21 -0
- carl_studio/primitives/coherence_observer.py +352 -0
- carl_studio/primitives/coherence_probe.py +173 -0
- carl_studio/primitives/coherence_trace.py +615 -0
- carl_studio/primitives/constants.py +19 -0
- carl_studio/primitives/frame_buffer.py +166 -0
- carl_studio/primitives/math.py +31 -0
- carl_studio/project.py +90 -0
- carl_studio/py.typed +0 -0
- carl_studio/settings.py +408 -0
- carl_studio/theme.py +273 -0
- carl_studio/tier.py +277 -0
- carl_studio/training/__init__.py +14 -0
- carl_studio/training/callbacks.py +127 -0
- carl_studio/training/cascade.py +182 -0
- carl_studio/training/lr_resonance.py +71 -0
- carl_studio/training/multi_env.py +150 -0
- carl_studio/training/pipeline.py +354 -0
- carl_studio/training/rewards/__init__.py +22 -0
- carl_studio/training/rewards/base.py +79 -0
- carl_studio/training/rewards/cloud.py +38 -0
- carl_studio/training/rewards/composite.py +224 -0
- carl_studio/training/rewards/discontinuity.py +54 -0
- carl_studio/training/rewards/multiscale.py +60 -0
- carl_studio/training/rewards/task.py +287 -0
- carl_studio/training/rewards/vlm.py +89 -0
- carl_studio/training/trace_callback.py +163 -0
- carl_studio/training/trainer.py +711 -0
- carl_studio/ttt/__init__.py +13 -0
- carl_studio/ttt/slot.py +87 -0
- carl_studio/types/__init__.py +23 -0
- carl_studio/types/config.py +214 -0
- carl_studio/types/reward.py +24 -0
- carl_studio/types/run.py +51 -0
- carl_studio-0.3.0.dist-info/METADATA +291 -0
- carl_studio-0.3.0.dist-info/RECORD +94 -0
- carl_studio-0.3.0.dist-info/WHEEL +4 -0
- carl_studio-0.3.0.dist-info/entry_points.txt +2 -0
- carl_studio-0.3.0.dist-info/licenses/LICENSE +21 -0
carl_studio/__init__.py
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""CARL Studio -- Coherence-Aware Reinforcement Learning.
|
|
2
|
+
|
|
3
|
+
The entire paradigm in one import::
|
|
4
|
+
|
|
5
|
+
from carl_studio import KAPPA, SIGMA, CoherenceProbe, PhaseTransitionGate
|
|
6
|
+
from carl_studio import CARLTrainer, TrainingConfig
|
|
7
|
+
|
|
8
|
+
See also: carl.py (300-line seed crystal at the repo root)
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
__version__ = "0.3.0"
|
|
12
|
+
|
|
13
|
+
from carl_studio.primitives.constants import KAPPA, SIGMA, DEFECT_THRESHOLD
|
|
14
|
+
from carl_studio.primitives import CoherenceProbe
|
|
15
|
+
from carl_studio.types.config import TrainingConfig
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"__version__",
|
|
19
|
+
"KAPPA",
|
|
20
|
+
"SIGMA",
|
|
21
|
+
"DEFECT_THRESHOLD",
|
|
22
|
+
"CoherenceProbe",
|
|
23
|
+
"TrainingConfig",
|
|
24
|
+
"PhaseTransitionGate",
|
|
25
|
+
# Lazy: CascadeRewardManager, CARLTrainer, Bundler, ComputeTarget, TrainingMethod
|
|
26
|
+
# Lazy: BenchConfig, BenchSuite, BenchReport, CTI
|
|
27
|
+
# Lazy: SLOTOptimizer, SLOTResult, LoRAMicroUpdate (torch/peft dep)
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# PhaseTransitionGate is lightweight (no torch dep) — import eagerly
|
|
32
|
+
# This is the core abstraction: the windowed gate that detects crystallization
|
|
33
|
+
def _get_gate():
|
|
34
|
+
"""Import from carl.py seed if available, otherwise inline."""
|
|
35
|
+
import importlib.util
|
|
36
|
+
import pathlib
|
|
37
|
+
seed = pathlib.Path(__file__).parent.parent.parent / "carl.py"
|
|
38
|
+
if seed.exists():
|
|
39
|
+
spec = importlib.util.spec_from_file_location("carl_seed", seed)
|
|
40
|
+
mod = importlib.util.module_from_spec(spec)
|
|
41
|
+
spec.loader.exec_module(mod)
|
|
42
|
+
return mod.PhaseTransitionGate
|
|
43
|
+
# Fallback: inline minimal gate (inherits TrainerCallback if available)
|
|
44
|
+
try:
|
|
45
|
+
from transformers import TrainerCallback as _Base
|
|
46
|
+
except ImportError:
|
|
47
|
+
_Base = object
|
|
48
|
+
|
|
49
|
+
class _Gate(_Base):
|
|
50
|
+
def __init__(self, threshold=0.99, window=5, min_above=3):
|
|
51
|
+
if _Base is not object:
|
|
52
|
+
super().__init__()
|
|
53
|
+
self.threshold, self.window, self.min_above = threshold, window, min_above
|
|
54
|
+
self._recent, self.triggered, self.trigger_step = [], False, -1
|
|
55
|
+
self.peak_entropy, self.peak_entropy_step = 0.0, -1
|
|
56
|
+
def check(self, value, entropy=0.0, step=0):
|
|
57
|
+
if entropy > self.peak_entropy:
|
|
58
|
+
self.peak_entropy, self.peak_entropy_step = entropy, step
|
|
59
|
+
self._recent.append(value)
|
|
60
|
+
if len(self._recent) > self.window:
|
|
61
|
+
self._recent.pop(0)
|
|
62
|
+
if len(self._recent) >= self.min_above and not self.triggered:
|
|
63
|
+
if sum(1 for v in self._recent if v >= self.threshold) >= self.min_above:
|
|
64
|
+
self.triggered, self.trigger_step = True, step
|
|
65
|
+
return True
|
|
66
|
+
return False
|
|
67
|
+
def on_log(self, args, state, control, logs=None, **kwargs):
|
|
68
|
+
if logs and self.check(logs.get("mean_token_accuracy", 0), logs.get("entropy", 0), state.global_step):
|
|
69
|
+
control.should_training_stop = True
|
|
70
|
+
return _Gate
|
|
71
|
+
|
|
72
|
+
PhaseTransitionGate = _get_gate()
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def __getattr__(name: str):
|
|
76
|
+
"""Lazy imports for objects that pull heavy deps (torch, transformers)."""
|
|
77
|
+
_lazy = {
|
|
78
|
+
"CascadeRewardManager": "carl_studio.training.cascade",
|
|
79
|
+
"ComputeTarget": "carl_studio.types.config",
|
|
80
|
+
"TrainingMethod": "carl_studio.types.config",
|
|
81
|
+
"CARLTrainer": "carl_studio.training.trainer",
|
|
82
|
+
"Bundler": "carl_studio.bundler",
|
|
83
|
+
"EvalConfig": "carl_studio.eval.runner",
|
|
84
|
+
"EvalRunner": "carl_studio.eval.runner",
|
|
85
|
+
"EvalReport": "carl_studio.eval.runner",
|
|
86
|
+
"EvalGate": "carl_studio.eval.runner",
|
|
87
|
+
"BenchConfig": "carl_studio.bench.suite",
|
|
88
|
+
"BenchSuite": "carl_studio.bench.suite",
|
|
89
|
+
"BenchReport": "carl_studio.bench.suite",
|
|
90
|
+
"CTI": "carl_studio.bench.suite",
|
|
91
|
+
"SLOTOptimizer": "carl_studio.ttt.slot",
|
|
92
|
+
"SLOTResult": "carl_studio.ttt.slot",
|
|
93
|
+
"LoRAMicroUpdate": "carl_studio.ttt.slot",
|
|
94
|
+
}
|
|
95
|
+
if name in _lazy:
|
|
96
|
+
import importlib
|
|
97
|
+
mod = importlib.import_module(_lazy[name])
|
|
98
|
+
return getattr(mod, name)
|
|
99
|
+
raise AttributeError(f"module 'carl_studio' has no attribute {name!r}")
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""carl_studio.align -- Targeted model realignment for three kinds of drift.
|
|
2
|
+
|
|
3
|
+
Three modes:
|
|
4
|
+
PATTERNS -- API migration, library changes (contrastive SFT)
|
|
5
|
+
TEMPORAL -- World knowledge refresh (calibration SFT)
|
|
6
|
+
FORMAT -- Output format correction (contrastive GRPO)
|
|
7
|
+
|
|
8
|
+
Usage::
|
|
9
|
+
|
|
10
|
+
from carl_studio.align import AlignConfig, AlignMode, AlignPipeline
|
|
11
|
+
|
|
12
|
+
config = AlignConfig(
|
|
13
|
+
mode=AlignMode.PATTERNS,
|
|
14
|
+
model="wheattoast11/OmniCoder-9B-Zero-Phase2",
|
|
15
|
+
source="./migration-notes.md",
|
|
16
|
+
)
|
|
17
|
+
result = AlignPipeline(config).run()
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from carl_studio.align.pipeline import (
|
|
21
|
+
AlignConfig,
|
|
22
|
+
AlignMode,
|
|
23
|
+
AlignPipeline,
|
|
24
|
+
DataGenerator,
|
|
25
|
+
DataPair,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"AlignConfig",
|
|
30
|
+
"AlignMode",
|
|
31
|
+
"AlignPipeline",
|
|
32
|
+
"DataGenerator",
|
|
33
|
+
"DataPair",
|
|
34
|
+
]
|