Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -71,17 +71,22 @@ class LLMInterface:
|
|
71 |
def query_llm(prompt: str) -> str:
|
72 |
"""Query a free LLM through Hugging Face's inference API"""
|
73 |
try:
|
74 |
-
# Using
|
75 |
-
API_URL = "https://api-inference.huggingface.co/models/
|
|
|
|
|
|
|
|
|
|
|
76 |
headers = {"Content-Type": "application/json"}
|
77 |
|
78 |
# Use a well-formatted prompt
|
79 |
payload = {
|
80 |
"inputs": prompt,
|
81 |
-
"parameters": {"max_length":
|
82 |
}
|
83 |
|
84 |
-
response = requests.post(API_URL, headers=headers, json=payload, timeout=
|
85 |
|
86 |
if response.status_code == 200:
|
87 |
result = response.json()
|
@@ -92,12 +97,32 @@ class LLMInterface:
|
|
92 |
return result.get("generated_text", "").strip()
|
93 |
else:
|
94 |
return str(result).strip()
|
|
|
|
|
|
|
95 |
else:
|
96 |
-
# Fallback for
|
97 |
-
return "
|
98 |
|
|
|
|
|
99 |
except Exception as e:
|
100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
# --- Advanced Agent Implementation ---
|
103 |
class BasicAgent:
|
@@ -218,39 +243,60 @@ class BasicAgent:
|
|
218 |
return search_result
|
219 |
|
220 |
def _get_answer_from_llm(self, question: str) -> str:
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
return answer
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
|
255 |
def run_and_submit_all(profile: gr.OAuthProfile | None):
|
256 |
"""
|
|
|
71 |
def query_llm(prompt: str) -> str:
|
72 |
"""Query a free LLM through Hugging Face's inference API"""
|
73 |
try:
|
74 |
+
# Using a smaller, more reliable free model
|
75 |
+
API_URL = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"
|
76 |
+
# Alternative models you can try if this one doesn't work:
|
77 |
+
# - "distilbert-base-uncased-finetuned-sst-2-english"
|
78 |
+
# - "gpt2"
|
79 |
+
# - "microsoft/DialoGPT-medium"
|
80 |
+
|
81 |
headers = {"Content-Type": "application/json"}
|
82 |
|
83 |
# Use a well-formatted prompt
|
84 |
payload = {
|
85 |
"inputs": prompt,
|
86 |
+
"parameters": {"max_length": 100, "do_sample": False}
|
87 |
}
|
88 |
|
89 |
+
response = requests.post(API_URL, headers=headers, json=payload, timeout=30)
|
90 |
|
91 |
if response.status_code == 200:
|
92 |
result = response.json()
|
|
|
97 |
return result.get("generated_text", "").strip()
|
98 |
else:
|
99 |
return str(result).strip()
|
100 |
+
elif response.status_code == 503:
|
101 |
+
# Model is loading
|
102 |
+
return "I need more time to think about this. The model is currently loading."
|
103 |
else:
|
104 |
+
# Fallback for other API issues
|
105 |
+
return "I don't have enough information to answer that question precisely."
|
106 |
|
107 |
+
except requests.exceptions.Timeout:
|
108 |
+
return "The model is taking too long to respond. Let me give a simpler answer instead."
|
109 |
except Exception as e:
|
110 |
+
# More robust fallback system with common answers
|
111 |
+
common_answers = {
|
112 |
+
"population": "The current world population is approximately 8 billion people.",
|
113 |
+
"capital": "I can tell you about many capitals. For example, Paris is the capital of France.",
|
114 |
+
"math": "I can help with mathematical calculations.",
|
115 |
+
"weather": "I don't have access to current weather information.",
|
116 |
+
"date": "I can tell you that a day has 24 hours.",
|
117 |
+
"time": "I can't check the current time."
|
118 |
+
}
|
119 |
+
|
120 |
+
# Check if any keywords match
|
121 |
+
for keyword, answer in common_answers.items():
|
122 |
+
if keyword in prompt.lower():
|
123 |
+
return answer
|
124 |
+
|
125 |
+
return "I'm sorry, I couldn't process that request properly. Please try asking in a simpler way."
|
126 |
|
127 |
# --- Advanced Agent Implementation ---
|
128 |
class BasicAgent:
|
|
|
243 |
return search_result
|
244 |
|
245 |
def _get_answer_from_llm(self, question: str) -> str:
|
246 |
+
"""Get an answer from the LLM with appropriate prompting"""
|
247 |
+
prompt = f"""
|
248 |
+
Answer the following question with a very concise, direct response:
|
249 |
+
|
250 |
+
Question: {question}
|
251 |
+
|
252 |
+
Answer in 1-2 sentences maximum, focusing only on the specific information requested.
|
253 |
+
"""
|
254 |
+
|
255 |
+
# Expanded common answers to reduce LLM API dependence
|
256 |
+
common_answers = {
|
257 |
+
"what color is the sky": "Blue.",
|
258 |
+
"how many days in a week": "7 days.",
|
259 |
+
"how many months in a year": "12 months.",
|
260 |
+
"what is the capital of france": "Paris.",
|
261 |
+
"what is the capital of japan": "Tokyo.",
|
262 |
+
"what is the capital of italy": "Rome.",
|
263 |
+
"what is the capital of germany": "Berlin.",
|
264 |
+
"what is the capital of spain": "Madrid.",
|
265 |
+
"what is the capital of united states": "Washington, D.C.",
|
266 |
+
"what is the capital of china": "Beijing.",
|
267 |
+
"what is the capital of russia": "Moscow.",
|
268 |
+
"what is the capital of canada": "Ottawa.",
|
269 |
+
"what is the capital of australia": "Canberra.",
|
270 |
+
"what is the capital of brazil": "Brasília.",
|
271 |
+
"what is water made of": "H2O (hydrogen and oxygen).",
|
272 |
+
"who wrote romeo and juliet": "William Shakespeare.",
|
273 |
+
"who painted the mona lisa": "Leonardo da Vinci.",
|
274 |
+
"what is the largest ocean": "The Pacific Ocean.",
|
275 |
+
"what is the smallest planet": "Mercury.",
|
276 |
+
"what is the largest planet": "Jupiter.",
|
277 |
+
"who invented electricity": "Electricity wasn't invented but discovered through contributions from many scientists including Benjamin Franklin, Michael Faraday, and Thomas Edison.",
|
278 |
+
"how many continents are there": "There are 7 continents: Africa, Antarctica, Asia, Europe, North America, Australia/Oceania, and South America.",
|
279 |
+
"what is the largest country": "Russia is the largest country by land area.",
|
280 |
+
"what is the most spoken language": "Mandarin Chinese is the most spoken native language in the world.",
|
281 |
+
"what is the tallest mountain": "Mount Everest is the tallest mountain above sea level at 8,848.86 meters."
|
282 |
+
}
|
283 |
+
|
284 |
+
# Clean up the question for better matching
|
285 |
+
clean_question = question.lower().strip('?').strip()
|
286 |
+
|
287 |
+
# Check if we have a hardcoded answer
|
288 |
+
if clean_question in common_answers:
|
289 |
+
return common_answers[clean_question]
|
290 |
+
|
291 |
+
# Try partial matching for more flexibility
|
292 |
+
for key, answer in common_answers.items():
|
293 |
+
if clean_question in key or key in clean_question:
|
294 |
+
# Only return if it's a close match
|
295 |
+
if len(clean_question) > len(key) * 0.7 or len(key) > len(clean_question) * 0.7:
|
296 |
return answer
|
297 |
+
|
298 |
+
# If no hardcoded answer, use the LLM
|
299 |
+
return self.llm.query_llm(prompt)
|
300 |
|
301 |
def run_and_submit_all(profile: gr.OAuthProfile | None):
|
302 |
"""
|