import gradio as gr
from huggingface_hub import InferenceClient
import json
from bs4 import BeautifulSoup
import requests
# Futuristic, modern custom CSS for DeepConvoAI interface with a purple theme
css = '''
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700&family=Roboto:wght@400;500&display=swap');
body {
margin: 0;
padding: 0;
font-family: 'Roboto', sans-serif;
background: #0d0d0d;
color: #e0e0e0;
}
.gradio-container {
max-width: 1000px !important;
margin: 2rem auto;
background: rgba(15, 15, 15, 0.95);
border-radius: 15px;
padding: 2rem;
box-shadow: 0 15px 30px rgba(0,0,0,0.7);
position: relative;
overflow: hidden;
}
.gradio-container::before {
content: "";
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, #8A2BE2, #4B0082, #8A2BE2);
animation: gradientShift 6s linear infinite;
opacity: 0.1;
}
@keyframes gradientShift {
0% { transform: translate(0, 0) rotate(0deg); }
50% { transform: translate(20%, 20%) rotate(180deg); }
100% { transform: translate(0, 0) rotate(360deg); }
}
h1 {
text-align: center;
font-family: 'Orbitron', sans-serif;
font-size: 2.5rem;
font-weight: 700;
color: #8A2BE2;
margin-bottom: 0.5rem;
}
p.description {
text-align: center;
font-size: 1.1rem;
margin-bottom: 1rem;
color: #a0a0a0;
}
footer {
display: none;
}
/* Textbox styling */
textarea {
border: 2px solid #6A0DAD;
background: #1a1a1a;
border-radius: 10px;
padding: 12px;
font-size: 1rem;
color: #e0e0e0;
}
'''
# Function to extract text from a webpage
def get_text_from_html(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
for tag in soup(["script", "style", "header", "footer"]):
tag.extract()
return soup.get_text(strip=True)
# Function to perform a web search
def perform_search(query):
search_term = query
all_results = []
max_chars_per_page = 8000
with requests.Session() as session:
response = session.get(
url="https://www.google.com/search",
headers={
"User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/111.0.0.0 Safari/537.36 Edg/111.0.0.0")
},
params={"q": search_term, "num": 3, "udm": 14},
timeout=5,
verify=False,
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
result_block = soup.find_all("div", attrs={"class": "g"})
for result in result_block:
link = result.find("a", href=True)["href"]
try:
webpage_response = session.get(
link,
headers={
"User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/111.0.0.0 Safari/537.0.0.0")
},
timeout=5,
verify=False
)
webpage_response.raise_for_status()
visible_text = get_text_from_html(webpage_response.text)
if len(visible_text) > max_chars_per_page:
visible_text = visible_text[:max_chars_per_page]
all_results.append({"link": link, "text": visible_text})
except requests.exceptions.RequestException:
all_results.append({"link": link, "text": None})
return all_results
# Initialize inference clients
client_gemma = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")
client_mixtral = InferenceClient("NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO")
client_llama = InferenceClient("meta-llama/Meta-Llama-3-8B-Instruct")
# Function to handle responses
def chat_response(message, history):
func_calls = []
functions_metadata = [
{
"type": "function",
"function": {
"name": "web_search",
"description": "Search query on Google",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Web search query"
}
},
"required": ["query"]
}
}
}
]
for msg in history:
func_calls.append({"role": "user", "content": f"{msg[0]}"})
func_calls.append({"role": "assistant", "content": f"{msg[1]}"})
func_calls.append({
"role": "user",
"content": (f'[SYSTEM] You are a helpful assistant named DeepConvoAI with integrated search capabilities. '
f'You have access to the following functions:\n{functions_metadata}\n\n'
f'To use these functions respond with:\n'
f'
Welcome to DeepConvoAI – your intelligent assistant powered by advanced AI and integrated web search. Explore the future of conversation and discovery.
""", textbox=gr.Textbox(placeholder="Ask anything here...", lines=2), multimodal=False, concurrency_limit=200, css=css, theme="allenai/gradio-theme", ) demo.launch(share=True)