ergo-agentic-langfuse-retest / scripts /test_vision_pass.py
1zero24's picture
Upload latest hosted langfuse retest snapshot
290ff9e verified
Raw
History Blame Contribute Delete
3.51 kB
"""Smoke test for the focused Vision Pass.
Runs the full pipeline so far: Image Analyzer → Parameter Planner → Vision
Passes (sequential for clarity, not parallel). Prints the observations
produced for each (image, model, focus_group) combination.
Usage:
uv run python scripts/test_vision_pass.py
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
from dotenv import load_dotenv
from ergo_agentic.datasources import DatasourceRegistry
REPORT_SAMPLE_FILE = (
Path(__file__).resolve().parents[1] / "docs" / "datasources" / "report-sample.json"
)
from ergo_agentic.domain.enums import FocusGroup
from ergo_agentic.models import DEFAULT_MODEL_CONFIG
from ergo_agentic.nodes.image_analyzer import analyze_image
from ergo_agentic.nodes.parameter_planner import plan_parameters
from ergo_agentic.nodes.vision_pass import _make_node
from ergo_agentic.state import ImageInput
def main() -> int:
load_dotenv()
registry = DatasourceRegistry.from_knowledge_base()
run_vision_pass = _make_node(registry)
with REPORT_SAMPLE_FILE.open() as f:
report = json.load(f)
urls = report.get("uploadedImages", [])
images: list[ImageInput] = [
{"image_id": f"img_{i}", "url": url, "label": None}
for i, url in enumerate(urls, start=1)
]
print(f"Step 1: Analyzing {len(images)} images...")
manifests = []
for img in images:
result = analyze_image(
{"image": img, "model_id": DEFAULT_MODEL_CONFIG.image_analyzer}
)
manifests.append(result["image_manifests"][0])
print("\nStep 2: Planning parameters...")
plan_result = plan_parameters(
{"image_manifests": manifests}, registry=registry
)
plan = plan_result["execution_plan"]
images_by_id = {img["image_id"]: img for img in images}
model_id = DEFAULT_MODEL_CONFIG.vision_passes[0]
print(f"\nStep 3: Running vision passes (model: {model_id})...\n")
all_observations = []
for fg_name, fg_plan in plan["focus_groups"].items():
if not fg_plan["parameter_ids"] or not fg_plan["image_ids"]:
continue
print(f"\n{'='*60}")
print(f"Focus group: {fg_name}")
print(f"{'='*60}")
for image_id in fg_plan["image_ids"]:
img = images_by_id[image_id]
print(f"\n--- {image_id} ---")
try:
result = run_vision_pass({
"image": img,
"model_id": model_id,
"focus_group": fg_name,
"parameter_ids": fg_plan["parameter_ids"],
})
for obs in result["observations"]:
p = registry.get_parameter(obs.parameter_id)
label = p.parameter_text if p else obs.parameter_id
outcomes = ", ".join(obs.selected_outcomes) or "(none)"
print(f" [{label}]")
print(f" visibility: {obs.visibility.value} | confidence: {obs.confidence.value}")
print(f" selected: {outcomes}")
print(f" note: {obs.evidence_note}")
all_observations.append(obs)
except Exception as e:
print(f" ERROR: {e}")
print(f"\n\nTotal observations: {len(all_observations)}")
return 0
if __name__ == "__main__":
sys.exit(main())