scripts/comment_resolver_runner.py (114 lines of code) (raw):

import argparse import logging import sys from dotenv import load_dotenv import bugbug.db as db import bugbug.phabricator as phabricator from bugbug.generative_model_tool import create_llm_from_args from bugbug.tools.comment_resolver import ( CodeGeneratorTool, FixCommentDB, LocalQdrantVectorDB, generate_fixes, generate_individual_fix, ) def run(args) -> None: load_dotenv() logging.basicConfig(level=logging.INFO) db = FixCommentDB(LocalQdrantVectorDB(collection_name="fix_comments")) if args.create_db: db.db.delete_collection() db.db.setup() db.upload_dataset(args.dataset_file) llm = create_llm_from_args(args) llm_tool = CodeGeneratorTool(llm=llm, db=db) if args.revision_id and args.diff_id and args.comment_id: pass # TODO: Create this function generate_individual_fix( llm_tool=llm_tool, db=db, revision_id=args.revision_id, diff_id=args.diff_id, comment_id=args.comment_id, ) else: generate_fixes( llm_tool=llm_tool, db=db, generation_limit=args.generation_limit, prompt_types=args.prompt_types, hunk_sizes=args.hunk_sizes, diff_length_limits=args.diff_length_limits, output_csv=args.output_csv, ) def parse_args(args): parser = argparse.ArgumentParser() parser.add_argument( "--llm", help="LLM", choices=["openai"], default="openai", ) parser.add_argument( "--create-db", action="store_true", help="If set, the local Qdrant database will be created and populated.", ) parser.add_argument( "--dataset-file", type=str, default="data/fixed_comments.json", help="Dataset file to upload as Qdrant database.", ) parser.add_argument( "--output-csv", type=str, default="metrics_results.csv", help="Output CSV file for results.", ) parser.add_argument( "--prompt-types", nargs="+", default=["zero-shot"], help="Types of prompts to use.", ) parser.add_argument( "--diff-length-limits", nargs="+", type=int, default=[1000], help="Diff length limits to enforce when searching for examples.", ) parser.add_argument( "--hunk-sizes", nargs="+", type=int, default=[20], help="Hunk sizes to enforce when searching for examples.", ) parser.add_argument( "--generation-limit", type=int, default=100, help="Maximum number of generations.", ) parser.add_argument( "--revision-id", type=int, help="Revision ID for individual fix generation.", ) parser.add_argument( "--diff-id", type=int, help="Diff ID for individual fix generation.", ) parser.add_argument( "--comment-id", type=int, help="Comment ID for individual fix generation.", ) return parser.parse_args(args) if __name__ == "__main__": db.download(phabricator.FIXED_COMMENTS_DB) args = parse_args(sys.argv[1:]) run(args)