Memory-Quilt / scripts /headless_smoke.py
Abhishek
Initialize project files and updated hackathon tags
485459a
Raw
History Blame Contribute Delete
7.27 kB
#!/usr/bin/env python3
from __future__ import annotations
from datetime import date, datetime, timezone
from pathlib import Path
import argparse
import json
import os
import socket
import sys
import urllib.request
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "src"
if str(SRC) not in sys.path:
sys.path.insert(0, str(SRC))
from app_kit.tracing import write_trace_artifact
from apps.p5_memory_quilt.demo_pack_loader import load_demo_pack
from apps.p5_memory_quilt.pipeline import add_memory_to_state, render_artifacts, seed_state_from_pack, state_summary
TRACE_ARTIFACT_ROOT = ROOT / "data" / "artifacts" / "p5_memory_quilt"
class NetworkBlockedError(RuntimeError):
pass
class GuardedSocket(socket.socket):
def connect(self, *args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def connect_ex(self, *args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def send(self, *args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def sendall(self, *args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def sendto(self, *args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def _blocked(*args: object, **kwargs: object):
raise NetworkBlockedError("outbound network disabled for offline smoke")
def install_network_guard() -> None:
socket.create_connection = _blocked # type: ignore[assignment]
socket.socket = GuardedSocket # type: ignore[assignment]
urllib.request.urlopen = _blocked # type: ignore[assignment]
try:
import requests.sessions as requests_sessions
except Exception:
requests_sessions = None
if requests_sessions is not None:
requests_sessions.Session.request = _blocked # type: ignore[assignment]
try:
import httpx
except Exception:
httpx = None
if httpx is not None:
httpx.Client.request = _blocked # type: ignore[assignment]
httpx.AsyncClient.request = _blocked # type: ignore[assignment]
def _prepare_env() -> None:
os.environ.setdefault("HF_HUB_OFFLINE", "1")
os.environ.setdefault("TRANSFORMERS_OFFLINE", "1")
os.environ.setdefault("HF_DATASETS_OFFLINE", "1")
os.environ.setdefault("HF_HUB_DISABLE_TELEMETRY", "1")
os.environ.setdefault("GRADIO_ANALYTICS_ENABLED", "False")
os.environ.setdefault("DO_NOT_TRACK", "1")
def _default_output_dir() -> Path:
return ROOT / "artifacts" / "verification" / date.today().isoformat()
def run_smoke(pack_path: Path, output_dir: Path, count: int) -> dict[str, object]:
_prepare_env()
install_network_guard()
pack = load_demo_pack(pack_path)
state = seed_state_from_pack(pack, count=min(count, len(pack.memories)))
smoke_memory = "Every Friday the tamale cart parked outside the blue house, and we waved from the porch."
state, added = add_memory_to_state(state, smoke_memory, "corner store", pack.style)
render = render_artifacts(state, output_dir, stem="p5_smoke")
trace_inputs = {
"memory_count": len(state.cards),
}
trace_outputs = {
"tile_count": len(render.cards),
"quilt_path": str(render.quilt_path),
"tile_path": str(render.tile_path),
"log_path": str(render.log_path),
}
trace_path = write_trace_artifact(
TRACE_ARTIFACT_ROOT,
{
"kind": "smoke",
"project": "p5",
"pack_id": pack.pack_id,
"pack_path": str(pack.path),
"timestamp": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
"inputs": trace_inputs,
"parsed_outputs": trace_outputs,
"model_name": added.selected_model_id,
"model_id": str(added.inference_meta.get("model_id", added.selected_model_id)),
"adapter_name": str(added.inference_meta.get("adapter_name", added.prompt_source)),
"checkpoint_path": str(added.inference_meta.get("checkpoint_path", added.checkpoint_path)),
"checkpoint_source": str(added.inference_meta.get("checkpoint_source", "unknown")),
"generation_stats": added.inference_meta.get("generation_stats", {}),
},
)
payload = {
"repo": "all4-p5-memory-quilt",
"project": "p5",
"kind": "smoke",
"pack_id": pack.pack_id,
"pack_path": str(pack.path),
"card_count": len(state.cards),
"summary": state_summary(state),
"inputs": trace_inputs,
"parsed_outputs": trace_outputs,
"added_caption": added.caption,
"selected_model": added.selected_model_id,
"model_name": added.selected_model_id,
"model_id": str(added.inference_meta.get("model_id", added.selected_model_id)),
"adapter_name": str(added.inference_meta.get("adapter_name", added.prompt_source)),
"checkpoint_path": str(added.inference_meta.get("checkpoint_path", added.checkpoint_path)),
"checkpoint_source": str(added.inference_meta.get("checkpoint_source", "unknown")),
"generation_stats": added.inference_meta.get("generation_stats", {}),
"prompt_source": added.prompt_source,
"trace_path": str(trace_path),
"trace_root": str(TRACE_ARTIFACT_ROOT),
"tile_path": str(render.tile_path),
"quilt_path": str(render.quilt_path),
"log_path": str(render.log_path),
"network": "blocked",
"sample_photos": [str(photo) for photo in pack.photos],
}
(output_dir / "p5_smoke.log").write_text(json.dumps(payload, indent=2, ensure_ascii=False), encoding="utf-8")
return payload
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(description="Run an offline demo-pack smoke check for P5 memory quilt")
parser.add_argument("--pack", type=Path, default=None, help="Optional demo-pack path override")
parser.add_argument("--output-dir", type=Path, default=None, help="Directory for smoke artifacts")
parser.add_argument("--count", type=int, default=6, help="Number of sample pack cards to seed before the smoke contribution")
args = parser.parse_args(argv)
output_dir = args.output_dir or _default_output_dir()
output_dir.mkdir(parents=True, exist_ok=True)
pack_path = args.pack if args.pack is not None else ROOT / "data" / "demo_packs" / "p5_memory_quilt"
try:
payload = run_smoke(pack_path, output_dir, args.count)
except Exception as exc:
error_payload = {
"repo": "all4-p5-memory-quilt",
"project": "p5",
"kind": "smoke",
"pack_path": str(pack_path),
"output_dir": str(output_dir),
"network": "blocked",
"passed": False,
"error": f"{type(exc).__name__}: {exc}",
}
print(json.dumps(error_payload, indent=2, ensure_ascii=False))
return 1
print(json.dumps({**payload, "passed": True}, indent=2, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())