Spaces:
Runtime error
Runtime error
File size: 4,669 Bytes
fc63ff9 | 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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | import os
import time
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.schema import HumanMessage, SystemMessage
from database import init_db, save_log
load_dotenv()
init_db()
# ββ ALL Models βββββββββββββββββββββββββββββββββββββββββββββββββββ
ALL_MODELS = [
{"provider": "groq", "model": "gemma2-9b-it"},
{"provider": "groq", "model": "llama-3.1-8b-instant"},
{"provider": "groq", "model": "mixtral-8x7b-32768"},
{"provider": "groq", "model": "llama3-8b-8192"},
{"provider": "groq", "model": "llama-3.3-70b-versatile"},
{"provider": "gemini", "model": "gemini-2.0-flash"},
{"provider": "gemini", "model": "gemini-1.5-flash"},
]
def get_working_llm():
for entry in ALL_MODELS:
provider = entry["provider"]
model = entry["model"]
try:
print(f"π Trying [{provider}] {model}...")
if provider == "groq":
llm = ChatGroq(
model=model,
groq_api_key=os.getenv("GROQ_API_KEY"),
temperature=0
)
else:
llm = ChatGoogleGenerativeAI(
model=model,
google_api_key=os.getenv("GEMINI_API_KEY"),
temperature=0
)
# Quick test
llm.invoke("Say OK")
print(f"β
Working: [{provider}] {model}")
return llm, provider, model
except Exception as e:
err = str(e)
if any(x in err for x in ["429", "rate_limit", "quota", "decommission"]):
print(f"β οΈ [{provider}] {model} rate limited, trying next...")
time.sleep(0.3)
continue
else:
print(f"β [{provider}] {model} error: {err[:80]}")
continue
return None, None, None
def debug_code(broken_code: str, error_message: str, language: str = "Python"):
"""
Direct LLM call β no agent, no tools, no iteration limit.
Fast, reliable, works on ALL free models.
"""
start = time.time()
# Get working model
llm, provider, model_name = get_working_llm()
if llm is None:
return (
"β³ All models rate limited.\n\nWait 10-60 mins and try again.",
"_All providers exhausted._"
)
# Build messages
system_msg = SystemMessage(content="""You are an expert Python debugging assistant.
When given broken code and an error message:
1. Identify exactly what is wrong
2. Fix the code
3. Explain the fix clearly
Always respond in this format:
FIXED CODE:
```python
[the complete fixed code here]
```
EXPLANATION:
[clear explanation of what was wrong and how you fixed it]""")
user_msg = HumanMessage(content=f"""Please fix this broken {language} code.
BROKEN CODE:
```{language.lower()}
{broken_code}
```
ERROR MESSAGE:
{error_message}
Give me the fixed code and explain what was wrong.""")
# Thinking log
thinking = f"""### π§ Agent Thinking Process
**Step 1 β π Model Selected**
- Provider: `{provider}`
- Model: `{model_name}`
**Step 2 β π Analyzing Error**
- Error: `{error_message}`
- Language: `{language}`
**Step 3 β π§ Generating Fix**
- Sending to LLM for direct analysis...
**Step 4 β β
Response Received**
- Fix generated successfully!
"""
try:
print(f"π§ Debugging with [{provider}] {model_name}...")
response = llm.invoke([system_msg, user_msg])
fixed_code = response.content
time_taken = time.time() - start
print(f"β
Fixed in {round(time_taken, 2)}s")
save_log(
broken_code=broken_code,
error_msg=error_message,
fixed_code=fixed_code,
status="success",
time_taken=round(time_taken, 2)
)
return fixed_code, thinking
except Exception as e:
time_taken = time.time() - start
err_msg = str(e)
save_log(
broken_code=broken_code,
error_msg=error_message,
fixed_code=None,
status="failed",
time_taken=round(time_taken, 2)
)
if "429" in err_msg or "rate_limit" in err_msg or "quota" in err_msg:
return (
"β³ Rate limit reached.\nWait 10-60 minutes and try again.",
"_Rate limit hit during generation._"
)
return f"β Error:\n{err_msg}", thinking
|