paperhawk / subgraphs /llm_risk_subgraph.py
Nándorfi Vince
Initial paperhawk push to HF Space (LFS for binaries)
7ff7119
raw
history blame
2.69 kB
"""llm_risk_subgraph — per-doc LLM kockázat-elemző chain.
Topológia:
START
→ llm_risk_node (assess_risks_llm — LLM kontextuális elemzés)
→ filter_llm_risks_node (formai szűrő: ≥5 szó, ≥2 szakkifejezés, ≥1 konkrét adat)
→ drop_business_normal_node (szemantikai cross-check az extracted-tal)
→ drop_repeats_node (70% szó-overlap dedup a basic risks ellen)
END → "risks" key a parent state-be (merge_risks reducer)
A subgraph-ot a `risk_subgraph.py` Send-fan-out-olja per-doc:
Send("llm_risk_per_doc", {"doc_file_name", "extracted", "basic_risks"})
A kimenet a `risks` kulcsba kerül, a `merge_risks` reducer (merge_risks_with_dedup)
dedup-pal egyesít a parent `PipelineState.risks`-be.
A node-ok IDEIGLENES kulcsa a `llm_risks_raw` — ez a chain végén `risks`-szé
alakul a `drop_repeats_node`-ban.
A `prototype-agentic/pipeline/risk.py:166-220` `assess_risks_llm` 4-soros
sorozat-chain-jét reprodukálja LangGraph-ban, Send API-val skálázva.
"""
from __future__ import annotations
from typing import Annotated, TypedDict
from langgraph.graph import END, START, StateGraph
from graph.states.pipeline_state import Risk, merge_risks
from nodes.risk.drop_business_normal_node import drop_business_normal_node
from nodes.risk.drop_repeats_node import drop_repeats_node
from nodes.risk.filter_llm_risks_node import filter_llm_risks_node
from nodes.risk.llm_risk_node import build_llm_risk_node
class _LLMRiskState(TypedDict, total=False):
"""A per-doc LLM risk subgraph state-je.
A subgraph-ot Send-en keresztül hívják, payload: doc_file_name + extracted +
basic_risks. A `llm_risks_raw` egy ideiglenes lista a node-ok között.
"""
doc_file_name: str
extracted: dict
basic_risks: list[Risk]
llm_risks_raw: list[Risk]
risks: Annotated[list[Risk], merge_risks]
def build_llm_risk_subgraph(llm):
"""Compile-olt per-doc LLM risk subgraph.
Args:
llm: BaseChatModel-szerű Runnable a `with_structured_output()` API-val.
Returns:
Compile-olt LangGraph CompiledStateGraph.
"""
graph = StateGraph(_LLMRiskState)
graph.add_node("llm_risk", build_llm_risk_node(llm))
graph.add_node("filter_formal", filter_llm_risks_node)
graph.add_node("drop_business_normal", drop_business_normal_node)
graph.add_node("drop_repeats", drop_repeats_node)
graph.add_edge(START, "llm_risk")
graph.add_edge("llm_risk", "filter_formal")
graph.add_edge("filter_formal", "drop_business_normal")
graph.add_edge("drop_business_normal", "drop_repeats")
graph.add_edge("drop_repeats", END)
return graph.compile()