"""Lance une inspection complète puis compare au fichier verite_terrain.json.
Usage : BUCKET=lab-inspection-qualite-xxx python lancer.py
"""
import asyncio
import json
from pathlib import Path
from google.adk.runners import InMemoryRunner
from google.genai import types
import agent
def evaluer(resultats: dict[str, dict], verite: dict[str, str]) -> dict:
"""Exactitude du défaut, et rejets manqués (le pire cas : une pièce défectueuse acceptée)."""
justes = sum(resultats.get(f"images/{nom}", {}).get("defaut") == d for nom, d in verite.items())
manques = [n for n, d in verite.items() if d != "aucun" and resultats.get(f"images/{n}", {}).get("conforme")]
return {"exactitude": justes / len(verite), "defectueuses_acceptees": manques}
async def main() -> None:
runner = InMemoryRunner(agent=agent.root_agent, app_name="inspection")
s = await runner.session_service.create_session(app_name="inspection", user_id="atelier")
msg = types.Content(role="user", parts=[types.Part(text="Lance l'inspection du lot du jour.")])
async for ev in runner.run_async(user_id="atelier", session_id=s.id, new_message=msg):
for p in (ev.content.parts if ev.content else []):
if p.function_call:
print("OUTIL ", p.function_call.name, dict(p.function_call.args or {}))
if p.text and ev.is_final_response():
print("\nSYNTHESE\n" + p.text.strip())
verite = json.loads(Path("verite_terrain.json").read_text(encoding="utf-8"))
print("\nEVALUATION", evaluer(agent._resultats, verite))
if __name__ == "__main__":
asyncio.run(main())