added RaG
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""Build docxtpl extra_context from ESPD state / request."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from app.services.espd.html_util import html_to_plain
|
||||
from app.services.espd.models import CONTENT_CONTEXT_KEYS, DocContent, DocumentType, EspdState
|
||||
|
||||
|
||||
def resolve_doc_html_map(
|
||||
state: EspdState,
|
||||
doc_contents: dict[str, DocContent] | dict[str, Any] | None = None,
|
||||
) -> dict[str, str]:
|
||||
"""Return {doc_type: html} merging request override with state."""
|
||||
out: dict[str, str] = {}
|
||||
for dt in DocumentType:
|
||||
if dt == DocumentType.SPEC:
|
||||
continue
|
||||
key = dt.value
|
||||
html = ""
|
||||
if doc_contents and key in doc_contents:
|
||||
raw = doc_contents[key]
|
||||
if isinstance(raw, DocContent):
|
||||
html = raw.html or ""
|
||||
elif isinstance(raw, dict):
|
||||
html = str(raw.get("html") or "")
|
||||
else:
|
||||
html = str(raw or "")
|
||||
if not html:
|
||||
html = state.get_doc_html(key)
|
||||
if html:
|
||||
out[key] = html
|
||||
return out
|
||||
|
||||
|
||||
def content_extra_context(doc_type: DocumentType, html_or_plain: str) -> dict[str, str]:
|
||||
plain = html_or_plain or ""
|
||||
if "<" in plain:
|
||||
plain = html_to_plain(plain)
|
||||
extra = {"DOC_CONTENT": plain}
|
||||
key = CONTENT_CONTEXT_KEYS.get(doc_type)
|
||||
if key:
|
||||
extra[key] = plain
|
||||
return extra
|
||||
|
||||
|
||||
def plain_contents_map(html_map: dict[str, str]) -> dict[str, str]:
|
||||
return {k: html_to_plain(v) if v and "<" in v else (v or "") for k, v in html_map.items()}
|
||||
Reference in New Issue
Block a user