44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""Post one consolidated Langfuse trace per project (ingestion API).
|
|
|
|
Reads the LANGFUSE_* env vars that create_pod_langflow.sh already sets on
|
|
the Langflow container. Never raises — tracing must not fail a run."""
|
|
from __future__ import annotations
|
|
|
|
import datetime as dt
|
|
import os
|
|
import uuid
|
|
|
|
import requests
|
|
|
|
|
|
def post_trace(ctx: dict) -> None:
|
|
host = os.environ.get("LANGFUSE_HOST")
|
|
pk = os.environ.get("LANGFUSE_PUBLIC_KEY")
|
|
sk = os.environ.get("LANGFUSE_SECRET_KEY")
|
|
if not (host and pk and sk):
|
|
return
|
|
now = dt.datetime.now(dt.timezone.utc).isoformat()
|
|
body = {
|
|
"id": str(uuid.uuid4()),
|
|
"timestamp": now,
|
|
"name": "projekt-match",
|
|
"input": {"canonical": ctx.get("canonical"), "title": ctx.get("title")},
|
|
"output": {"decision": ctx.get("decision"),
|
|
"status": ctx.get("status"),
|
|
"mustMatch": ctx.get("mustMatch"),
|
|
"niceMatch": ctx.get("niceMatch"),
|
|
"description": ctx.get("description")},
|
|
"metadata": {"opportunityId": ctx.get("opportunityId"),
|
|
"crmUrl": ctx.get("crmUrl"),
|
|
"error": ctx.get("error"),
|
|
"projectName": ctx.get("projectName")},
|
|
"tags": [ctx.get("status") or "unknown"],
|
|
}
|
|
event = {"batch": [{"id": str(uuid.uuid4()), "type": "trace-create",
|
|
"timestamp": now, "body": body}]}
|
|
try:
|
|
requests.post(f"{host.rstrip('/')}/api/public/ingestion", json=event,
|
|
auth=(pk, sk), timeout=15)
|
|
except Exception:
|
|
pass
|