import full eventflow project

This commit is contained in:
2026-03-13 17:18:19 +08:00
parent 0edc8f7477
commit bbae58e4fe
21 changed files with 1023 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
import json
from fastapi import APIRouter, HTTPException
from ..services.llm_extract import extract_event
from ..services.store import ensure_schema, get_store, insert_event_result, insert_raw_item
router = APIRouter()
@router.post("/event")
def analyze_event(payload: dict):
"""Analyze one ad-hoc item and persist it.
This powers the UI while we build full ingesters.
"""
title = (payload.get("title") or "").strip()
content = (payload.get("content") or "").strip()
if not title and not content:
raise HTTPException(status_code=400, detail="missing title/content")
st = get_store()
conn = st.connect()
ensure_schema(conn)
raw_item_id = insert_raw_item(
conn,
source=str(payload.get("source") or "manual"),
item_date=str(payload.get("date") or "") or "manual",
title=title[:500],
content=content[:20_000],
url=payload.get("url"),
published_at=payload.get("published_at"),
lang=payload.get("lang"),
)
res = extract_event(title=title, content=content, lang_hint=payload.get("lang"))
if res.get("ok") is True:
insert_event_result(
conn,
raw_item_id=raw_item_id,
model=str(res.get("model") or ""),
ok=True,
event_json=json.dumps(res.get("event"), ensure_ascii=True),
error=None,
)
else:
insert_event_result(
conn,
raw_item_id=raw_item_id,
model=str(res.get("model") or ""),
ok=False,
event_json=None,
error=str(res.get("error") or "unknown"),
)
return {"raw_item_id": raw_item_id, **res}