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.
Files changed (94) hide show
  1. carl_studio/__init__.py +99 -0
  2. carl_studio/align/__init__.py +34 -0
  3. carl_studio/align/pipeline.py +1233 -0
  4. carl_studio/bench/__init__.py +40 -0
  5. carl_studio/bench/probes.py +678 -0
  6. carl_studio/bench/suite.py +297 -0
  7. carl_studio/bundler.py +753 -0
  8. carl_studio/cli.py +2340 -0
  9. carl_studio/compute/__init__.py +55 -0
  10. carl_studio/compute/hf_jobs.py +648 -0
  11. carl_studio/compute/local.py +67 -0
  12. carl_studio/compute/prime.py +64 -0
  13. carl_studio/compute/protocol.py +37 -0
  14. carl_studio/compute/runpod.py +81 -0
  15. carl_studio/compute/ssh.py +76 -0
  16. carl_studio/compute/tinker.py +58 -0
  17. carl_studio/console.py +212 -0
  18. carl_studio/data/__init__.py +27 -0
  19. carl_studio/data/adapters/__init__.py +11 -0
  20. carl_studio/data/adapters/base.py +46 -0
  21. carl_studio/data/adapters/nemotron.py +65 -0
  22. carl_studio/data/adapters/tool_calling.py +38 -0
  23. carl_studio/data/curriculum.py +161 -0
  24. carl_studio/data/registry.py +106 -0
  25. carl_studio/data/sources.yaml +76 -0
  26. carl_studio/data/types.py +173 -0
  27. carl_studio/environments/__init__.py +46 -0
  28. carl_studio/environments/atropos.py +110 -0
  29. carl_studio/environments/builtins/__init__.py +4 -0
  30. carl_studio/environments/builtins/code_sandbox.py +241 -0
  31. carl_studio/environments/builtins/sql_sandbox.py +350 -0
  32. carl_studio/environments/prime_rl.py +37 -0
  33. carl_studio/environments/protocol.py +106 -0
  34. carl_studio/environments/registry.py +63 -0
  35. carl_studio/environments/validation.py +94 -0
  36. carl_studio/eval/__init__.py +23 -0
  37. carl_studio/eval/runner.py +1566 -0
  38. carl_studio/experiment/__init__.py +35 -0
  39. carl_studio/experiment/manager.py +210 -0
  40. carl_studio/experiment/types.py +224 -0
  41. carl_studio/hub/__init__.py +4 -0
  42. carl_studio/hub/models.py +104 -0
  43. carl_studio/learn/__init__.py +31 -0
  44. carl_studio/learn/ingest.py +303 -0
  45. carl_studio/learn/pipeline.py +243 -0
  46. carl_studio/learn/qa_gen.py +441 -0
  47. carl_studio/learn/quality.py +344 -0
  48. carl_studio/mcp/__init__.py +4 -0
  49. carl_studio/mcp/server.py +153 -0
  50. carl_studio/observe/__init__.py +12 -0
  51. carl_studio/observe/app.py +252 -0
  52. carl_studio/observe/data_source.py +243 -0
  53. carl_studio/paper/__init__.py +13 -0
  54. carl_studio/paper/experiments.py +170 -0
  55. carl_studio/paper/generator.py +434 -0
  56. carl_studio/primitives/__init__.py +21 -0
  57. carl_studio/primitives/coherence_observer.py +352 -0
  58. carl_studio/primitives/coherence_probe.py +173 -0
  59. carl_studio/primitives/coherence_trace.py +615 -0
  60. carl_studio/primitives/constants.py +19 -0
  61. carl_studio/primitives/frame_buffer.py +166 -0
  62. carl_studio/primitives/math.py +31 -0
  63. carl_studio/project.py +90 -0
  64. carl_studio/py.typed +0 -0
  65. carl_studio/settings.py +408 -0
  66. carl_studio/theme.py +273 -0
  67. carl_studio/tier.py +277 -0
  68. carl_studio/training/__init__.py +14 -0
  69. carl_studio/training/callbacks.py +127 -0
  70. carl_studio/training/cascade.py +182 -0
  71. carl_studio/training/lr_resonance.py +71 -0
  72. carl_studio/training/multi_env.py +150 -0
  73. carl_studio/training/pipeline.py +354 -0
  74. carl_studio/training/rewards/__init__.py +22 -0
  75. carl_studio/training/rewards/base.py +79 -0
  76. carl_studio/training/rewards/cloud.py +38 -0
  77. carl_studio/training/rewards/composite.py +224 -0
  78. carl_studio/training/rewards/discontinuity.py +54 -0
  79. carl_studio/training/rewards/multiscale.py +60 -0
  80. carl_studio/training/rewards/task.py +287 -0
  81. carl_studio/training/rewards/vlm.py +89 -0
  82. carl_studio/training/trace_callback.py +163 -0
  83. carl_studio/training/trainer.py +711 -0
  84. carl_studio/ttt/__init__.py +13 -0
  85. carl_studio/ttt/slot.py +87 -0
  86. carl_studio/types/__init__.py +23 -0
  87. carl_studio/types/config.py +214 -0
  88. carl_studio/types/reward.py +24 -0
  89. carl_studio/types/run.py +51 -0
  90. carl_studio-0.3.0.dist-info/METADATA +291 -0
  91. carl_studio-0.3.0.dist-info/RECORD +94 -0
  92. carl_studio-0.3.0.dist-info/WHEEL +4 -0
  93. carl_studio-0.3.0.dist-info/entry_points.txt +2 -0
  94. carl_studio-0.3.0.dist-info/licenses/LICENSE +21 -0
@@ -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
+ ]