File size: 3,237 Bytes
e0b6f12 1a943f1 e0b6f12 27f4250 1a943f1 27f4250 e0b6f12 27f4250 5b7f342 1a943f1 5b7f342 631e1ee 5b7f342 631e1ee 5b7f342 791be58 5b7f342 631e1ee 5b7f342 791be58 631e1ee 791be58 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import openai
import os
import json
def analyze_code(code: str) -> str:
"""
Uses OpenAI's GPT-4.1 mini model to analyze the given code.
Returns the analysis as a string.
"""
from openai import OpenAI
client = OpenAI()
system_prompt = (
"You are a helpful assistant. Analyze the code given to you. "
"Return your response strictly in JSON format with the following keys: "
"'strength', 'weaknesses', 'speciality', 'relevance rating'. "
"Do not include any other text outside the JSON."
)
response = client.chat.completions.create(
model="gpt-4-1106-preview", # GPT-4.1 mini
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": code}
],
max_tokens=512,
temperature=0.7
)
return response.choices[0].message.content
def parse_llm_json_response(response: str):
try:
return json.loads(response)
except Exception as e:
return {"error": f"Failed to parse JSON: {e}", "raw": response}
def combine_repo_files_for_llm(repo_dir="repo_files", output_file="combined_repo.txt"):
"""
Combines all .py and .md files in the given directory (recursively) into a single text file.
Returns the path to the combined file.
"""
combined_content = []
seen_files = set()
# Priority files
priority_files = ["app.py", "README.md"]
for pf in priority_files:
pf_path = os.path.join(repo_dir, pf)
if os.path.isfile(pf_path):
try:
with open(pf_path, "r", encoding="utf-8") as f:
combined_content.append(f"\n# ===== File: {pf} =====\n")
combined_content.append(f.read())
seen_files.add(os.path.abspath(pf_path))
except Exception as e:
combined_content.append(f"\n# Could not read {pf_path}: {e}\n")
# All other .py and .md files
for root, _, files in os.walk(repo_dir):
for file in files:
if file.endswith(".py") or file.endswith(".md"):
file_path = os.path.join(root, file)
abs_path = os.path.abspath(file_path)
if abs_path in seen_files:
continue
try:
with open(file_path, "r", encoding="utf-8") as f:
combined_content.append(f"\n# ===== File: {file} =====\n")
combined_content.append(f.read())
seen_files.add(abs_path)
except Exception as e:
combined_content.append(f"\n# Could not read {file_path}: {e}\n")
with open(output_file, "w", encoding="utf-8") as out_f:
out_f.write("\n".join(combined_content))
return output_file
def analyze_combined_file(output_file="combined_repo.txt"):
"""
Reads the combined file and passes its contents to analyze_code, returning the LLM's output.
"""
try:
with open(output_file, "r", encoding="utf-8") as f:
lines = f.readlines()
code = "".join(lines[:500])
return analyze_code(code)
except Exception as e:
return f"Error analyzing combined file: {e}"
|