58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
DEFAULT_INDEX = ROOT / "plugins" / "1c" / "datasets" / "prepared" / "rag_index.json"
|
|
|
|
REQUIRED_PHRASES = [
|
|
"Не выдумывай метаданные 1С",
|
|
"запроси метаданные через инструмент",
|
|
"источники",
|
|
"Какие реквизиты есть у справочника Номенклатура?",
|
|
]
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Check that the 1C RAG prompt contains safety-critical instructions.")
|
|
parser.add_argument("--index", type=Path, default=DEFAULT_INDEX)
|
|
args = parser.parse_args()
|
|
|
|
command = [
|
|
sys.executable,
|
|
"scripts/ask_1c_rag.py",
|
|
"Какие реквизиты есть у справочника Номенклатура?",
|
|
"--index",
|
|
str(args.index),
|
|
"--print-prompt",
|
|
]
|
|
result = subprocess.run(
|
|
command,
|
|
cwd=ROOT,
|
|
check=False,
|
|
text=True,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
)
|
|
if result.returncode != 0:
|
|
print(result.stderr, file=sys.stderr)
|
|
return result.returncode
|
|
|
|
missing = [phrase for phrase in REQUIRED_PHRASES if phrase not in result.stdout]
|
|
if missing:
|
|
print("1C RAG prompt check failed. Missing phrases:", file=sys.stderr)
|
|
for phrase in missing:
|
|
print(f"- {phrase}", file=sys.stderr)
|
|
return 1
|
|
|
|
print("1C RAG prompt check passed.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|