File size: 2,033 Bytes
7e3f910 5c1d1c7 7e3f910 ad1f162 5c1d1c7 ad1f162 7e3f910 5c1d1c7 7e3f910 5c1d1c7 7e3f910 5c1d1c7 7e3f910 5c1d1c7 7e3f910 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | """Pipeline complet : texte → claims → verdicts → Report."""
from __future__ import annotations
from typing import Any, Iterable, List, Optional
from jdm_agent.client import JDMClient
from jdm_agent.factcheck.extractor import extract_claims
from jdm_agent.factcheck.models import Claim, Report
from jdm_agent.factcheck.verifier import verify_claim
def factcheck(
text: str,
*,
client: Optional[JDMClient] = None,
llm: Optional[Any] = None,
claims: Optional[Iterable[Claim]] = None,
effort: int = 1,
) -> Report:
"""Vérifie les claims (extraites ou fournies) d'un texte contre JDM.
Phase 9b : aucun seuil de filtrage exposé — JDM décide.
Phase 11 : `effort=1` par défaut — le fact-checking d'un texte cherche
d'abord si l'info est dans JDM, et si elle n'y est pas, l'infère.
Args:
text: le texte source (pour traçabilité dans le rapport).
client: JDMClient. Créé par défaut.
llm: LangChain ChatModel pour l'extraction. Inutile si `claims` est fourni.
claims: claims pré-extraites (skip extraction). Si None, on appelle `llm`.
effort: 0 = contenance pure ; 1 = + inférence noyau ; 2 = inférence complète.
Returns:
`Report` avec un Verdict par claim.
"""
if client is None:
client = JDMClient()
if claims is None:
if llm is None:
raise ValueError("Fournis soit `claims` (claims pré-extraites), soit `llm` (extraction LLM).")
claims = extract_claims(text, llm)
verdicts = [verify_claim(client, c, effort=effort) for c in claims]
return Report(text=text, verdicts=verdicts)
def factcheck_claims(
claims: Iterable[Claim],
*,
client: Optional[JDMClient] = None,
effort: int = 1,
) -> Report:
"""Variante directe sans extraction : tu fournis déjà les claims."""
if client is None:
client = JDMClient()
verdicts = [verify_claim(client, c, effort=effort) for c in claims]
return Report(text="", verdicts=verdicts)
|