Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT / "scripts"))
|
||||
|
||||
from management_console_server import query_rag # noqa: E402
|
||||
|
||||
|
||||
def run_checks() -> dict:
|
||||
official = query_rag(
|
||||
{
|
||||
"question": "форма при открытии пример артикул",
|
||||
"source_type": "official_1c_docs",
|
||||
"limit": 8,
|
||||
}
|
||||
)
|
||||
official_bad = [
|
||||
row
|
||||
for row in official.get("results") or []
|
||||
if row.get("source_type") in {"metadata", "bsl_modules", "examples"}
|
||||
or "example" in str(row.get("source_path") or "").casefold()
|
||||
]
|
||||
|
||||
metadata = query_rag(
|
||||
{
|
||||
"question": "какие реквизиты у справочника Номенклатура",
|
||||
"source_type": "metadata",
|
||||
"limit": 5,
|
||||
}
|
||||
)
|
||||
metadata_answer = str(metadata.get("answer") or "").casefold()
|
||||
|
||||
checks = [
|
||||
{
|
||||
"id": "official_docs_exclude_examples",
|
||||
"status": "passed" if not official_bad else "failed",
|
||||
"details": official_bad,
|
||||
},
|
||||
{
|
||||
"id": "metadata_scope_warns",
|
||||
"status": "passed" if "примеры" in metadata_answer and "не подтверждают текущую базу" in metadata_answer else "failed",
|
||||
"answer": metadata.get("answer"),
|
||||
},
|
||||
]
|
||||
return {
|
||||
"schema": "onec_rag_source_governance_check.v1",
|
||||
"status": "ok" if all(item["status"] == "passed" for item in checks) else "failed",
|
||||
"checks": checks,
|
||||
"samples": {
|
||||
"official_1c_docs": {
|
||||
"source_scope": official.get("source_scope"),
|
||||
"result_count": official.get("result_count"),
|
||||
"source_types": sorted({row.get("source_type") for row in official.get("results") or [] if row.get("source_type")}),
|
||||
},
|
||||
"metadata": {
|
||||
"source_scope": metadata.get("source_scope"),
|
||||
"result_count": metadata.get("result_count"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Check 1C RAG source governance.")
|
||||
parser.add_argument("--output", type=Path)
|
||||
parser.add_argument("--print", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
report = run_checks()
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
if args.print or not args.output:
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
return 0 if report["status"] == "ok" else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user