ingest.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. """入库:调 KnowHub ingest API。开发期默认关闭,只组装+存库(见 技术文档/技术架构.md)。"""
  2. from __future__ import annotations
  3. from typing import Any, Callable, Optional
  4. import httpx
  5. from creation_knowledge.config import Settings
  6. from creation_knowledge.models import IngestPayload
  7. INGEST_PATH = "/api/v1/knowledge/ingest"
  8. class IngestError(RuntimeError):
  9. pass
  10. def ingest(
  11. payload: IngestPayload,
  12. *,
  13. settings: Optional[Settings] = None,
  14. env_file: str = ".env",
  15. http_post: Callable[..., Any] = httpx.post,
  16. timeout: float = 30.0,
  17. ) -> dict:
  18. """真实发送一条知识到 KnowHub。仅在 INGEST_ENABLED=true 时允许调用。"""
  19. settings = settings or Settings.from_env(env_file)
  20. if not settings.ingest_enabled:
  21. raise IngestError("INGEST_ENABLED=false:开发期拒绝真实入库")
  22. url = settings.knowhub_api.rstrip("/") + INGEST_PATH
  23. try:
  24. resp = http_post(
  25. url,
  26. json=payload.model_dump(),
  27. headers={"Content-Type": "application/json"},
  28. timeout=timeout,
  29. )
  30. resp.raise_for_status()
  31. return resp.json()
  32. except httpx.HTTPError as exc:
  33. raise IngestError(f"ingest_http_error: {exc}") from exc