Spaces:
Sleeping
Sleeping
File size: 4,096 Bytes
4cded81 | 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 | """
LLM Module - Llama 3.1 70B via HuggingFace Router
Uses router.huggingface.co OpenAI-compatible endpoint.
Same pattern as verified working production code.
Includes retry logic for model cold starts.
"""
import requests
import time
import os
HF_TOKEN = (
os.environ.get("HF_TOKEN") or
os.environ.get("HF_API_TOKEN") or
os.environ.get("HUGGINGFACE_TOKEN") or
""
)
print(f"DEBUG LLM: HF_TOKEN loaded = {bool(HF_TOKEN)}")
LLM_ROUTER_URL = "https://router.huggingface.co/v1/chat/completions"
LLM_MODEL = "meta-llama/Llama-3.1-70B-Instruct"
SYSTEM_PROMPT = """आप एक भारतीय बैंकिंग सहायक हैं।
आपका काम है ग्रामीण और शहरी भारतीय उपयोगकर्ताओं को
बैंकिंग और वित्तीय जानकारी सरल हिंदी में देना।
सख्त नियम:
1. केवल हिंदी में उत्तर दें — अंग्रेजी बिल्कुल नहीं
2. केवल दिए गए संदर्भ से उत्तर दें
3. यदि संदर्भ में जानकारी नहीं है तो कहें:
यह जानकारी मेरे पास नहीं है। कृपया अपने बैंक से संपर्क करें।
4. ब्याज दर, EMI, या कोई भी राशि केवल संदर्भ से बताएं
5. उत्तर 3-4 वाक्यों में दें — TTS के लिए छोटा रखें
6. सरल भाषा — जैसे किसी गांव के व्यक्ति को समझाना हो"""
def llm_generate(prompt: str) -> str:
"""
Generate Hindi answer using Llama 3.1 70B.
Keeps same function signature as existing llm_generate() in app.py.
"""
if not HF_TOKEN:
return ("HF_TOKEN नहीं मिला। "
"Space Settings → Secrets में HF_TOKEN जोड़ें।")
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
payload = {
"model": LLM_MODEL,
"messages": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt}
],
"max_tokens": 350,
"temperature": 0.3
}
for i in range(3):
try:
res = requests.post(
LLM_ROUTER_URL,
headers=headers,
json=payload,
timeout=45
)
print(f"DEBUG LLM status: {res.status_code}")
if res.status_code != 200:
print(f"DEBUG LLM error body: {res.text[:300]}")
if not res.text.strip():
print(f"Empty response, retry {i+1}...")
time.sleep(5)
continue
result = res.json()
if isinstance(result, dict) and "choices" in result:
answer = result["choices"][0]["message"]["content"].strip()
print(f"DEBUG LLM answer preview: {answer[:100]}")
return answer
if isinstance(result, dict) and "error" in result:
err = result.get("error", "")
if isinstance(err, dict):
err = err.get("message", str(err))
if "loading" in str(err).lower():
print(f"Model loading, retry {i+1} in 10s...")
time.sleep(10)
continue
print(f"LLM API error: {err}")
break
except Exception as e:
print(f"LLM exception retry {i+1}: {e}")
time.sleep(2)
return "माफ करें, अभी उत्तर देने में समस्या हो रही है। कृपया दोबारा प्रयास करें।"
|