lancer.pyBrutTélécharger
"""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())