Files
OBLITERATUS/obliteratus/__init__.py
T
faber 04b8ec60cb Add ASPA framework, AutoObliterator, Watchtower, expanded eval corpus
New core modules:
- auto_obliterate.py: Automated multi-iteration obliteration pipeline
- watchtower.py: HF Hub model discovery and tracking
- ui_watchtower.py: Gradio tabs for Watchtower (ready for app.py wiring)
- hard_negative.py: Residue mining from refusal audits
- model_profile.py: Parameter profiling from safetensors/config
- bestiary_sync.py: Sync models from PlinyOS BESTIARY registry
- models_client.py: Lightweight HF model list client

Framework enhancements:
- abliterate.py: ASPA source-tethering, step gradient blending, hard-negative residue support
- cli.py: self-improve command, model profiling, hard-negative flags
- prompts.py: Expanded 842-prompt refusal eval corpus across 10 categories
- __init__.py: New exports (Watchtower, AutoObliterator)

Reference implementations (14 scripts):
- ASPA sweep, gradient search, coherence eval, MMLU benchmarks
- Pareto controller, refusal sniper, stock comparisons

Documentation:
- README: Research framing, responsible use section, comprehensive disclaimer
- docs/beyond_sota_roadmap.md, docs/recursive_self_improvement.md

Tests: 4 new test files (354 lines)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-09 03:54:38 -04:00

84 lines
2.9 KiB
Python

"""Obliteratus — Master Ablation Suite for HuggingFace transformers."""
__version__ = "0.1.2"
# Lazy imports for the main pipeline classes
__all__ = [
"AbliterationPipeline",
"InformedAbliterationPipeline",
"set_seed",
"run_sweep",
"SweepConfig",
"SweepResult",
"save_contribution",
"load_contributions",
"aggregate_results",
"TourneyRunner",
"TourneyResult",
"get_adaptive_recommendation",
"AdaptiveRecommendation",
"RemoteRunner",
"RemoteConfig",
"Watchtower",
"get_watchtower",
"AutoObliterator",
]
def __getattr__(name):
if name == "AbliterationPipeline":
from obliteratus.abliterate import AbliterationPipeline
return AbliterationPipeline
if name == "InformedAbliterationPipeline":
from obliteratus.informed_pipeline import InformedAbliterationPipeline
return InformedAbliterationPipeline
if name == "set_seed":
from obliteratus.reproducibility import set_seed
return set_seed
if name == "run_sweep":
from obliteratus.sweep import run_sweep
return run_sweep
if name == "SweepConfig":
from obliteratus.sweep import SweepConfig
return SweepConfig
if name == "SweepResult":
from obliteratus.sweep import SweepResult
return SweepResult
if name == "save_contribution":
from obliteratus.community import save_contribution
return save_contribution
if name == "load_contributions":
from obliteratus.community import load_contributions
return load_contributions
if name == "aggregate_results":
from obliteratus.community import aggregate_results
return aggregate_results
if name == "TourneyRunner":
from obliteratus.tourney import TourneyRunner
return TourneyRunner
if name == "TourneyResult":
from obliteratus.tourney import TourneyResult
return TourneyResult
if name == "get_adaptive_recommendation":
from obliteratus.adaptive_defaults import get_adaptive_recommendation
return get_adaptive_recommendation
if name == "AdaptiveRecommendation":
from obliteratus.adaptive_defaults import AdaptiveRecommendation
return AdaptiveRecommendation
if name == "RemoteRunner":
from obliteratus.remote import RemoteRunner
return RemoteRunner
if name == "RemoteConfig":
from obliteratus.remote import RemoteConfig
return RemoteConfig
if name == "Watchtower":
from obliteratus.watchtower import Watchtower
return Watchtower
if name == "get_watchtower":
from obliteratus.watchtower import get_watchtower
return get_watchtower
if name == "AutoObliterator":
from obliteratus.auto_obliterate import AutoObliterator
return AutoObliterator
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")