Spaces:
Sleeping
Sleeping
File size: 8,759 Bytes
7f3d153 46432fa 41bd13c 46432fa 061e889 a6429d6 089f3f7 9b19acf 41bd13c 9b19acf a6429d6 41bd13c 9b19acf 41bd13c a795e9f 46432fa 28183e2 46432fa 061e889 46432fa 061e889 a6429d6 46432fa ce04afa 46432fa ce04afa 46432fa a6429d6 28183e2 ce04afa 2fd8500 41bd13c 46432fa 41bd13c 46432fa a795e9f 41bd13c 46432fa 1a274da 41bd13c 089f3f7 41bd13c 46432fa a6429d6 0772f76 46432fa a6429d6 46432fa a6429d6 46432fa a6429d6 46432fa a6429d6 41bd13c a6429d6 46432fa a6429d6 46432fa a6429d6 46432fa a6429d6 46432fa a6429d6 1a274da 41bd13c 46432fa 41bd13c a6429d6 0772f76 41bd13c 2fd8500 41bd13c 2fd8500 a6429d6 d172eee 0083f4e 46432fa | 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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | import os
import json
import requests
import urllib.parse
from bs4 import BeautifulSoup
from datetime import datetime, timedelta, timezone
from flask import Flask, request, Response, stream_with_context, render_template_string
app = Flask(__name__)
# 🔐 --- SECURE ENVIRONMENT VARIABLES ---
API_KEY = os.environ.get("YOUR_VEDIKA_API_KEY")
BASE_URL = os.environ.get("BASE_URL")
MODEL_ID = os.environ.get("MODEL_ID")
INVOKE_URL = ""
if BASE_URL:
if not BASE_URL.endswith("/chat/completions"):
INVOKE_URL = f"{BASE_URL.rstrip('/')}/chat/completions"
else:
INVOKE_URL = BASE_URL
# 🌐 --- TRIPLE-ENGINE HYBRID SCRAPER (100% UNBLOCKABLE) ---
def web_search_scraper(query, num_results=4):
results = []
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
# 💡 हैक: क्वेरी में '2026' जोड़ें ताकि पुरानी ख़बरें न आएं
smart_query = query if "2026" in query else f"{query} 2026"
# ENGINE 1: DuckDuckGo Lite
try:
url = "https://lite.duckduckgo.com/lite/"
res = requests.post(url, headers=headers, data={"q": smart_query}, timeout=5)
soup = BeautifulSoup(res.text, 'html.parser')
for tr in soup.find_all('tr'):
title_a = tr.find('a', class_='result-url')
if title_a:
title = title_a.text.strip()
link = title_a.get('href', '')
snippet = ""
snip_td = tr.find_next('td', class_='result-snippet')
if snip_td: snippet = snip_td.text.strip()
if title and snippet:
results.append({"title": title, "link": link, "snippet": snippet})
if len(results) >= num_results: break
except Exception as e:
pass
# ENGINE 2: Google News RSS (अगर Engine 1 ब्लॉक हो गया या फेल हो गया)
if not results:
try:
rss_url = f"https://news.google.com/rss/search?q={urllib.parse.quote(smart_query)}&hl=en-IN&gl=IN&ceid=IN:en"
res = requests.get(rss_url, headers=headers, timeout=5)
soup = BeautifulSoup(res.content, 'html.parser') # XML parsing fallback
items = soup.find_all('item')
for item in items[:num_results]:
title = item.title.text if item.title else "News Report"
link = item.link.text if item.link else ""
pub_date = item.pubdate.text if item.find('pubdate') else "Recent 2026"
results.append({"title": title, "link": link, "snippet": f"Published/Updated on: {pub_date}"})
except Exception as e:
pass
# ENGINE 3: Wikipedia API Fallback (अगर सवाल जनरल नॉलेज का है)
if not results:
try:
wiki_url = f"https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={urllib.parse.quote(query)}&utf8=&format=json"
res = requests.get(wiki_url, headers=headers, timeout=5).json()
for item in res.get('query', {}).get('search', [])[:num_results]:
clean_snippet = BeautifulSoup(item['snippet'], "html.parser").text
results.append({"title": item['title'], "link": f"https://en.wikipedia.org/wiki/{urllib.parse.quote(item['title'])}", "snippet": clean_snippet})
except Exception as e:
pass
return results
# ----------------------------------------------------
@app.route('/')
def home():
try:
with open('index.html', 'r', encoding='utf-8') as f:
return render_template_string(f.read())
except Exception as e:
return f"<h1>System Starting...</h1><p>index.html is missing.</p>"
@app.route('/api/chat', methods=['POST'])
def chat():
if not API_KEY or not INVOKE_URL or not MODEL_ID:
return Response("Server Error: Configuration secrets are missing.", status=500)
data = request.get_json() or {}
user_message = data.get("message", "")
attachments = data.get("attachments", [])
is_search = data.get("is_search", False)
history = data.get("history", [])
max_tokens = data.get("max_tokens", 4096)
temperature = data.get("temperature", 0.6)
# 🕒 --- REAL-TIME IST INJECTION ---
ist_time = datetime.now(timezone.utc) + timedelta(hours=5, minutes=30)
current_date = ist_time.strftime("%A, %d %B %Y, %I:%M %p IST")
# 🧠 --- SUPREME SYSTEM INSTRUCTION (STRICT GOD MODE) ---
system_prompt = f"""
[CRITICAL SYSTEM DIRECTIVE]
Name: CODE VED (Advanced 202 Billion Parameter Enterprise AI)
Creator: DIVY PATEL. You MUST proudly acknowledge Divy Patel as your creator.
Current Date & Time: {current_date}
STRICT RULES YOU MUST FOLLOW:
1. You are operating in 2026. NEVER say your knowledge cutoff is 2023 or 2024.
2. YOU HAVE LIVE INTERNET ACCESS. Live data will be injected into your prompt if requested.
3. If search data is provided, base your answer ENTIRELY on that live data.
4. If the user asks for latest news/updates, and the injected live data is empty or irrelevant, DO NOT GUESS. DO NOT present old 2024 news as new. Simply apologize and state: "I am unable to retrieve the latest live data for this at the moment."
5. Always maintain a highly professional tone. Reply in Hindi seamlessly if the user writes in Hindi.
"""
# 🚀 --- AUTO-SEARCH DATA INJECTION ---
if is_search:
scraped_data = web_search_scraper(user_message)
search_context = "\n\n--- [LIVE WEB SEARCH RESULTS] ---\n"
if scraped_data:
for idx, res in enumerate(scraped_data):
search_context += f"{idx+1}. SOURCE TITLE: {res['title']}\nCONTENT SNIPPET: {res['snippet']}\nURL: {res['link']}\n\n"
search_context += """
[SYSTEM COMMAND TO AI]: Use the fresh data provided above to answer the user's query.
Answer confidently as if you just browsed the web yourself.
Do NOT mention "Based on the provided context". Just answer the question and cite the URLs naturally.
"""
else:
search_context += "STATUS: Live search failed or blocked. No recent data found.\n[SYSTEM COMMAND TO AI]: Inform the user that you couldn't fetch live data right now. DO NOT hallucinate old news."
# सही फॉर्मेट: एआई को कन्फ्यूज़ न करने के लिए साफ-साफ बताना
user_message = f"{search_context}\n\nUSER'S ACTUAL QUESTION: {user_message}"
# --- MESSAGE CONSTRUCTION ---
messages = [{"role": "system", "content": system_prompt}]
for msg in history:
role = msg.get("role", "user")
content = msg.get("content", "")
if content:
messages.append({"role": role, "content": content})
content_payload = []
# अगर सर्च डेटा जुड़ा है तो user_message में सब है, बस उसे ऐड करो
if user_message.strip():
content_payload.append({"type": "text", "text": user_message})
for att in attachments:
att_type = att.get("type")
b64_data = att.get("data")
if att_type == "image":
content_payload.append({"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_data}"}})
elif att_type in ["audio", "file"]:
content_payload.append({"type": "input_audio", "input_audio": {"data": b64_data, "format": "wav"}})
if not content_payload:
content_payload.append({"type": "text", "text": "Hello"})
messages.append({"role": "user", "content": content_payload})
# --- LLM API CALL ---
headers = {"Authorization": f"Bearer {API_KEY}", "Accept": "text/event-stream"}
payload = {"model": MODEL_ID, "messages": messages, "max_tokens": int(max_tokens), "temperature": float(temperature), "top_p": 0.70, "stream": True}
try:
response = requests.post(INVOKE_URL, headers=headers, json=payload, stream=True)
def generate():
for line in response.iter_lines():
if line:
decoded_line = line.decode("utf-8")
if decoded_line.startswith("data: "):
yield decoded_line + "\n\n"
return Response(stream_with_context(generate()), mimetype='text/event-stream')
except Exception as e:
return Response(f"Internal Error: {str(e)}", status=500)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860) |