AI_BUSINESS_PROCESS_AUTOMATION / agents /reporting_agent.py
parthib07's picture
Upload 52 files
61411b5 verified
from __future__ import annotations
import json
import logging
from typing import Any, Dict
from langchain_core.messages import HumanMessage
from ai_business_automation_agent.prompts.reporting_prompt import REPORTING_PROMPT
from ai_business_automation_agent.utils import append_agent_log, parse_llm_json
logger = logging.getLogger(__name__)
def run_reporting_agent(state: Dict[str, Any], llm) -> Dict[str, Any]:
prompt = REPORTING_PROMPT.format(
email_content=state.get("email_content", ""),
extracted_json=json.dumps(state.get("extracted_data") or {}, ensure_ascii=False),
vendor_verification_json=json.dumps(state.get("vendor_verification") or {}, ensure_ascii=False),
validation_json=json.dumps(state.get("validation_status") or {}, ensure_ascii=False),
decision_json=json.dumps(state.get("decision") or {}, ensure_ascii=False),
erp_json=json.dumps(state.get("erp_update_status") or {}, ensure_ascii=False),
)
resp = llm.invoke([HumanMessage(content=prompt)])
text = getattr(resp, "content", str(resp))
parsed, err = parse_llm_json(text)
updates: Dict[str, Any] = {}
if err:
logger.warning("Reporting JSON parse error: %s", err)
updates["report"] = (
"REPORT GENERATION FAILED\n\n"
f"Error: {err}\n\n"
"Raw model output:\n"
f"{text}"
)
updates.update(append_agent_log(state, agent="reporting", event="error", payload={"error": err}))
else:
updates["report"] = parsed.get("report", "")
updates.update(append_agent_log(state, agent="reporting", event="ok", payload=parsed))
updates.update(append_agent_log(state, agent="reporting", event="prompt", payload={"prompt": prompt}))
updates.update(append_agent_log(state, agent="reporting", event="raw_response", payload={"text": text}))
return updates