62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Run requirement-code consistency comparison.")
|
|
parser.add_argument("--srs-extraction-id", type=int, required=True)
|
|
parser.add_argument("--vector-path", required=True)
|
|
parser.add_argument("--metadata-path", required=True)
|
|
parser.add_argument("--graph-path", required=True)
|
|
parser.add_argument("--output", required=True)
|
|
parser.add_argument("--output-excel", default=None)
|
|
parser.add_argument("--output-markdown", default=None)
|
|
parser.add_argument("--top-k", type=int, default=8)
|
|
parser.add_argument("--max-call-hops", type=int, default=2)
|
|
parser.add_argument("--min-similarity", type=float, default=0.55)
|
|
parser.add_argument("--no-llm", action="store_true")
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
from app.db.session import SessionLocal
|
|
from app.models.tooling import SRSRequirement
|
|
from app.services.code_kb.adapter import CodeKnowledgeBaseAdapter
|
|
from app.services.consistency.comparator import ConsistencyComparator
|
|
from app.services.consistency.exporter import export_excel, export_json, export_markdown
|
|
|
|
adapter = CodeKnowledgeBaseAdapter()
|
|
adapter.load(args.vector_path, args.metadata_path, args.graph_path)
|
|
comparator = ConsistencyComparator(adapter, use_llm=not args.no_llm)
|
|
|
|
db = SessionLocal()
|
|
try:
|
|
requirements = (
|
|
db.query(SRSRequirement)
|
|
.filter(SRSRequirement.extraction_id == args.srs_extraction_id)
|
|
.order_by(SRSRequirement.sort_order)
|
|
.all()
|
|
)
|
|
results = comparator.compare_requirements(
|
|
requirements,
|
|
top_k=args.top_k,
|
|
max_call_hops=args.max_call_hops,
|
|
min_similarity=args.min_similarity,
|
|
)
|
|
finally:
|
|
db.close()
|
|
|
|
Path(args.output).write_bytes(export_json(results))
|
|
if args.output_markdown:
|
|
Path(args.output_markdown).write_text(export_markdown(results), encoding="utf-8")
|
|
if args.output_excel:
|
|
Path(args.output_excel).write_bytes(export_excel(results))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|