Files
llm/scripts/convert_1c_bsl_modules_to_rag.py
T

73 lines
2.7 KiB
Python

from __future__ import annotations
import argparse
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
DEFAULT_INPUT = ROOT / "plugins" / "1c" / "metadata" / "examples" / "bsl-modules.example.json"
DEFAULT_OUTPUT = ROOT / "plugins" / "1c" / "rag" / "sources" / "bsl-modules.generated.md"
def module_to_markdown(module: dict) -> str:
lines = [
f"## Модуль: {module.get('module_id')}",
"",
f"Объект: {module.get('object_name')}",
f"Тип объекта: {module.get('object_kind', 'не указан')}",
f"Тип модуля: {module.get('module_type')}",
"",
]
procedures = module.get("procedures") or []
functions = module.get("functions") or []
if procedures:
lines.extend(["### Процедуры", ""])
for proc in procedures:
export = " Экспорт" if proc.get("export") else ""
params = ", ".join(proc.get("params") or [])
lines.append(f"- {proc.get('name')}({params}){export}")
lines.append("")
if functions:
lines.extend(["### Функции", ""])
for func in functions:
export = " Экспорт" if func.get("export") else ""
params = ", ".join(func.get("params") or [])
lines.append(f"- {func.get('name')}({params}){export}")
lines.append("")
refs = module.get("references") or []
if refs:
lines.extend(["### Ссылки", ""])
for ref in refs:
lines.append(f"- {ref}")
lines.append("")
lines.extend(["### Код", "", "```bsl", module.get("content") or "", "```"])
return "\n".join(lines)
def main() -> int:
parser = argparse.ArgumentParser(description="Convert 1C BSL module snapshot to Markdown RAG source.")
parser.add_argument("--input", type=Path, default=DEFAULT_INPUT)
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
args = parser.parse_args()
with args.input.open("r", encoding="utf-8") as handle:
snapshot = json.load(handle)
sections = [
"# 1C BSL Module Snapshot",
"",
f"Источник: {(snapshot.get('source') or {}).get('name', 'unknown')}",
f"Дата снимка: {snapshot.get('created_at', 'unknown')}",
"",
]
for module in snapshot.get("modules") or []:
sections.append(module_to_markdown(module))
sections.append("")
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text("\n".join(sections).strip() + "\n", encoding="utf-8")
print(f"Wrote BSL RAG source to {args.output}")
return 0
if __name__ == "__main__":
raise SystemExit(main())