mirror of
https://github.com/hoshikawa2/first_contas.git
synced 2026-07-09 10:14:20 +00:00
82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
def _normalize_rag_queries(params: dict[str, Any]) -> list[str]:
|
|
raw_queries = params.get("queries")
|
|
queries: list[str] = []
|
|
if isinstance(raw_queries, (list, tuple)):
|
|
for item in raw_queries:
|
|
text = str(item or "").strip()
|
|
if text:
|
|
queries.append(text)
|
|
elif isinstance(raw_queries, str) and raw_queries.strip():
|
|
queries.append(raw_queries.strip())
|
|
|
|
if not queries:
|
|
query = str(params.get("query", "")).strip()
|
|
if query:
|
|
queries.append(query)
|
|
return queries
|
|
|
|
|
|
def _extract_rag_documents(payload: Any) -> list[dict[str, Any]]:
|
|
documents: list[dict[str, Any]] = []
|
|
if not isinstance(payload, dict):
|
|
return documents
|
|
raw_documents = payload.get("documents")
|
|
if isinstance(raw_documents, (list, tuple)):
|
|
for item in raw_documents:
|
|
if isinstance(item, dict):
|
|
documents.append(dict(item))
|
|
return documents
|
|
|
|
|
|
def _rag_document_title(doc: dict[str, Any]) -> str:
|
|
return str(
|
|
doc.get("title_proc")
|
|
or doc.get("title")
|
|
or doc.get("chunk_texto")
|
|
or ""
|
|
).strip()
|
|
|
|
|
|
def _rag_document_text(doc: dict[str, Any]) -> str:
|
|
return str(
|
|
doc.get("chunk_texto")
|
|
or doc.get("text")
|
|
or doc.get("title_proc")
|
|
or doc.get("title")
|
|
or ""
|
|
).strip()
|
|
|
|
|
|
def _is_selected_rag_document(doc: dict[str, Any]) -> bool:
|
|
try:
|
|
return float(doc.get("distance", 1.0)) <= 0.6
|
|
except (TypeError, ValueError):
|
|
return False
|
|
|
|
|
|
def _build_rag_answer_item(query: str, documents: list[dict[str, Any]]) -> str:
|
|
if not documents:
|
|
return f"{query}: Nao encontrei trechos relevantes para essa busca."
|
|
snippets = []
|
|
for doc in documents:
|
|
text = _rag_document_text(doc)
|
|
if text:
|
|
snippets.append(text)
|
|
if not snippets:
|
|
return f"{query}: Encontrei trecho(s), mas sem texto disponivel."
|
|
return f"{query}: {' '.join(snippets)}"
|
|
|
|
|
|
__all__ = [
|
|
'_normalize_rag_queries',
|
|
'_extract_rag_documents',
|
|
'_rag_document_title',
|
|
'_rag_document_text',
|
|
'_is_selected_rag_document',
|
|
'_build_rag_answer_item',
|
|
]
|