Ely-Eye — local multimodal context operating system on Qwen3.5-9B
Real-models implementation: multimodal ingestion, Context Cartridge memory, sparse + Qwen embedding retrieval, Cache Fabric, Qwen runtime adapters, verifier contracts, Visual HashHop proofs, BF16 LoRA fine-tuning, and a local dashboard. Verified by a 15-check PRD proof suite on the live model.
This commit is contained in:
commit
0ee99e271d
64 files changed
+14890
No files matched your search
@@ -0,0 +1,334 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import typer
|
||||
import uvicorn
|
||||
|
||||
from .api import create_app
|
||||
from .benchmarks import (
|
||||
benchmark_prediction_report,
|
||||
benchmark_registry_report,
|
||||
benchmark_sample_report,
|
||||
benchmark_source_report,
|
||||
run_prediction_benchmark,
|
||||
)
|
||||
from .cartridge import CartridgeService
|
||||
from .cartridge_assets import CartridgeAssetService
|
||||
from .config import get_settings
|
||||
from .db import Database
|
||||
from .embeddings import EmbeddingService
|
||||
from .evals import HashHopEvaluator, PRDProofSuite
|
||||
from .ingestion import IngestionService
|
||||
from .profiles import runtime_profile_report
|
||||
from .research_modules import ResearchModuleService
|
||||
from .runtime import QwenRuntime
|
||||
from .schemas import TrainingAdapterKind
|
||||
from .training import TrainingService
|
||||
|
||||
app = typer.Typer(no_args_is_help=True)
|
||||
|
||||
|
||||
def json_dump(value: object) -> str:
|
||||
import json
|
||||
|
||||
return json.dumps(value, ensure_ascii=False, indent=2)
|
||||
|
||||
|
||||
@app.command()
|
||||
def serve(host: str = "127.0.0.1", port: int = 8765) -> None:
|
||||
uvicorn.run(create_app(), host=host, port=port)
|
||||
|
||||
|
||||
@app.command()
|
||||
def status() -> None:
|
||||
settings = get_settings()
|
||||
runtime = QwenRuntime(settings).status()
|
||||
db = Database(settings)
|
||||
typer.echo(
|
||||
{
|
||||
"runtime": runtime.model_dump(mode="json"),
|
||||
"atoms": db.atom_count(),
|
||||
"token_equivalent": db.token_equivalent_sum(),
|
||||
"library_token_equivalent": max(
|
||||
db.token_equivalent_sum(),
|
||||
db.cartridge_token_equivalent_sum(),
|
||||
),
|
||||
"cartridges": db.cartridge_count(),
|
||||
"data_home": str(settings.home),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@app.command()
|
||||
def ingest(path: Path, cartridge_name: str | None = None) -> None:
|
||||
result = IngestionService(get_settings()).ingest_path(path, cartridge_name)
|
||||
typer.echo(result.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("build-dense-index")
|
||||
def build_dense_index() -> None:
|
||||
index = EmbeddingService(get_settings()).build_index()
|
||||
dimensions = int(index.vectors.shape[1]) if index.vectors.size else 0
|
||||
typer.echo({"atoms": len(index.atom_ids), "dimensions": dimensions})
|
||||
|
||||
|
||||
@app.command("list-cartridges")
|
||||
def list_cartridges() -> None:
|
||||
for manifest in CartridgeService(get_settings()).list_manifests():
|
||||
typer.echo(manifest.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("hashhop")
|
||||
def hashhop(kind: str = "visual", hops: int = 2, token_equivalent: int = 262_144) -> None:
|
||||
evaluator = HashHopEvaluator(get_settings())
|
||||
if kind == "text":
|
||||
proof = evaluator.generate_text_proof(hops, token_equivalent)
|
||||
elif kind == "visual":
|
||||
proof = evaluator.generate_visual_proof(hops, token_equivalent)
|
||||
else:
|
||||
raise typer.BadParameter("kind must be text or visual")
|
||||
typer.echo(proof.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("proof-suite")
|
||||
def proof_suite(cartridge_id: str | None = None) -> None:
|
||||
report = PRDProofSuite(get_settings()).run(cartridge_id)
|
||||
typer.echo(report.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("latest-proof-suite")
|
||||
def latest_proof_suite() -> None:
|
||||
report = PRDProofSuite(get_settings()).latest()
|
||||
if report is None:
|
||||
raise typer.Exit(code=1)
|
||||
typer.echo(report.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("runtime-generation-proof")
|
||||
def runtime_generation_proof() -> None:
|
||||
check = PRDProofSuite(get_settings()).runtime_generation_proof()
|
||||
typer.echo(check.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("visual-contradiction-proof")
|
||||
def visual_contradiction_proof() -> None:
|
||||
check = PRDProofSuite(get_settings()).visual_contradiction_proof()
|
||||
typer.echo(check.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("finalize-cartridge")
|
||||
def finalize_cartridge(cartridge_id: str) -> None:
|
||||
report = CartridgeAssetService(get_settings()).finalize(cartridge_id)
|
||||
typer.echo(report.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("refresh-cartridge")
|
||||
def refresh_cartridge(cartridge_id: str) -> None:
|
||||
settings = get_settings()
|
||||
db = Database(settings)
|
||||
manifest = CartridgeService(settings, db).rebuild(
|
||||
cartridge_id=cartridge_id,
|
||||
atoms=db.list_atoms(),
|
||||
sources=db.list_sources(),
|
||||
)
|
||||
typer.echo(manifest.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("benchmark-registry")
|
||||
def benchmark_registry() -> None:
|
||||
typer.echo(benchmark_registry_report().model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("benchmark-sources")
|
||||
def benchmark_sources() -> None:
|
||||
typer.echo(benchmark_source_report().model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("benchmark-samples")
|
||||
def benchmark_samples() -> None:
|
||||
settings = get_settings()
|
||||
output_dir = settings.data_dir / "benchmark_samples"
|
||||
typer.echo(benchmark_sample_report(output_dir).model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("benchmark-predictions")
|
||||
def benchmark_predictions() -> None:
|
||||
settings = get_settings()
|
||||
output_dir = settings.data_dir / "benchmark_predictions"
|
||||
typer.echo(benchmark_prediction_report(settings, output_dir).model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("run-benchmark")
|
||||
def run_benchmark(
|
||||
benchmark: str,
|
||||
dataset_path: Path,
|
||||
prediction_field: str = "prediction",
|
||||
answer_field: str = "answer",
|
||||
limit: int | None = None,
|
||||
) -> None:
|
||||
report = run_prediction_benchmark(
|
||||
benchmark=benchmark,
|
||||
dataset_path=dataset_path,
|
||||
prediction_field=prediction_field,
|
||||
answer_field=answer_field,
|
||||
limit=limit,
|
||||
)
|
||||
typer.echo(report)
|
||||
|
||||
|
||||
@app.command("runtime-profiles")
|
||||
def runtime_profiles() -> None:
|
||||
typer.echo(runtime_profile_report().model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("research-modules")
|
||||
def research_modules(query: str = "Ely-Eye V-NSA DVKV x-modal KV speculative prefetch evidence graph") -> None:
|
||||
settings = get_settings()
|
||||
db = Database(settings)
|
||||
from .compiler import ContextCompiler
|
||||
from .schemas import RuntimeProfile
|
||||
|
||||
context = ContextCompiler(settings, db).compile(query, RuntimeProfile.research_theater)
|
||||
report = ResearchModuleService(settings, db).build_report(query, context.hits)
|
||||
typer.echo(json_dump(report))
|
||||
|
||||
|
||||
@app.command("validate-training-data")
|
||||
def validate_training_data(path: Path) -> None:
|
||||
samples = TrainingService(get_settings()).validate_dataset(path)
|
||||
typer.echo({"samples": len(samples)})
|
||||
|
||||
|
||||
@app.command("build-prd-training-data")
|
||||
def build_prd_training_data(
|
||||
prd_path: Path = Path("PRD.md"),
|
||||
output_path: Path | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
max_sections: int = 48,
|
||||
) -> None:
|
||||
path = TrainingService(get_settings()).build_prd_dataset(
|
||||
prd_path=prd_path,
|
||||
output_path=output_path,
|
||||
cartridge_id=cartridge_id,
|
||||
max_sections=max_sections,
|
||||
)
|
||||
samples = TrainingService(get_settings()).validate_dataset(path)
|
||||
typer.echo({"dataset": str(path), "samples": len(samples)})
|
||||
|
||||
|
||||
@app.command("build-visual-training-data")
|
||||
def build_visual_training_data(
|
||||
prd_path: Path = Path("PRD.md"),
|
||||
output_path: Path | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
image_path: list[Path] | None = typer.Option(None, "--image-path"),
|
||||
) -> None:
|
||||
path = TrainingService(get_settings()).build_visual_dataset(
|
||||
prd_path=prd_path,
|
||||
output_path=output_path,
|
||||
image_paths=image_path,
|
||||
cartridge_id=cartridge_id,
|
||||
)
|
||||
samples = TrainingService(get_settings()).validate_dataset(path)
|
||||
typer.echo({"dataset": str(path), "samples": len(samples)})
|
||||
|
||||
|
||||
@app.command("build-router-training-data")
|
||||
def build_router_training_data(
|
||||
prd_path: Path = Path("PRD.md"),
|
||||
output_path: Path | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
) -> None:
|
||||
path = TrainingService(get_settings()).build_router_dataset(
|
||||
prd_path=prd_path,
|
||||
output_path=output_path,
|
||||
cartridge_id=cartridge_id,
|
||||
)
|
||||
samples = TrainingService(get_settings()).validate_dataset(path)
|
||||
typer.echo({"dataset": str(path), "samples": len(samples)})
|
||||
|
||||
|
||||
@app.command("build-retrieval-training-data")
|
||||
def build_retrieval_training_data(
|
||||
prd_path: Path = Path("PRD.md"),
|
||||
output_path: Path | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
max_sections: int = 32,
|
||||
) -> None:
|
||||
path = TrainingService(get_settings()).build_retrieval_dataset(
|
||||
prd_path=prd_path,
|
||||
output_path=output_path,
|
||||
cartridge_id=cartridge_id,
|
||||
max_sections=max_sections,
|
||||
)
|
||||
samples = TrainingService(get_settings()).validate_dataset(path)
|
||||
typer.echo({"dataset": str(path), "samples": len(samples)})
|
||||
|
||||
|
||||
@app.command("train-lora")
|
||||
def train_lora(
|
||||
dataset_path: Path,
|
||||
output_dir: Path,
|
||||
max_steps: int = 8,
|
||||
kind: TrainingAdapterKind = TrainingAdapterKind.hme_core_lora,
|
||||
model_id: str | None = None,
|
||||
rank: int = 16,
|
||||
alpha: int = 32,
|
||||
max_length: int | None = None,
|
||||
gradient_accumulation_steps: int | None = None,
|
||||
learning_rate: float | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
) -> None:
|
||||
manifest = TrainingService(get_settings()).train_lora(
|
||||
dataset_path=dataset_path,
|
||||
output_dir=output_dir,
|
||||
max_steps=max_steps,
|
||||
kind=kind,
|
||||
model_id=model_id,
|
||||
rank=rank,
|
||||
alpha=alpha,
|
||||
max_length=max_length,
|
||||
gradient_accumulation_steps=gradient_accumulation_steps,
|
||||
learning_rate=learning_rate,
|
||||
cartridge_id=cartridge_id,
|
||||
)
|
||||
if cartridge_id:
|
||||
CartridgeService(get_settings()).attach_adapter(cartridge_id, output_dir)
|
||||
typer.echo(manifest.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("train-retrieval-lora")
|
||||
def train_retrieval_lora(
|
||||
dataset_path: Path,
|
||||
output_dir: Path,
|
||||
max_steps: int = 8,
|
||||
rank: int = 8,
|
||||
alpha: int = 16,
|
||||
max_length: int | None = None,
|
||||
learning_rate: float | None = None,
|
||||
cartridge_id: str | None = None,
|
||||
) -> None:
|
||||
manifest = TrainingService(get_settings()).train_retrieval_lora(
|
||||
dataset_path=dataset_path,
|
||||
output_dir=output_dir,
|
||||
max_steps=max_steps,
|
||||
rank=rank,
|
||||
alpha=alpha,
|
||||
max_length=max_length,
|
||||
learning_rate=learning_rate,
|
||||
cartridge_id=cartridge_id,
|
||||
)
|
||||
if cartridge_id:
|
||||
CartridgeService(get_settings()).attach_adapter(cartridge_id, output_dir)
|
||||
typer.echo(manifest.model_dump_json(indent=2))
|
||||
|
||||
|
||||
@app.command("attach-adapter")
|
||||
def attach_adapter(cartridge_id: str, adapter_dir: Path) -> None:
|
||||
manifest = CartridgeService(get_settings()).attach_adapter(cartridge_id, adapter_dir)
|
||||
typer.echo(manifest.model_dump_json(indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app()
|
||||
Reference in new issue
Block a user