Agent / app.py
PuruAI's picture
Update app.py
7d89f41 verified
Raw
History Blame Contribute Delete
5.69 kB
import os
import uuid
import gradio as gr
from huggingface_hub import InferenceClient
from duckduckgo_search import DDGS
import chromadb
# -----------------------------
# LLM CONFIGURATION
# -----------------------------
MODEL_NAME = "openai/gpt-oss-20b"
HF_TOKEN = os.getenv("HF_TOKEN")
# -----------------------------
# VECTOR MEMORY SETUP
# -----------------------------
client_db = chromadb.PersistentClient(path="./medini_memory")
collection = client_db.get_or_create_collection(
name="conversation_memory"
)
# -----------------------------
# WEB SEARCH TOOL
# -----------------------------
def web_search(query):
results = []
try:
with DDGS() as ddgs:
for r in ddgs.text(query, max_results=3):
body = r.get("body", "")
if body:
results.append(body)
except Exception as e:
return f"Web search failed: {str(e)}"
return "\n".join(results)
# -----------------------------
# MEMORY FUNCTIONS
# -----------------------------
def save_memory(user_message, assistant_response):
memory_text = f"""
USER: {user_message}
ASSISTANT: {assistant_response}
"""
collection.add(
documents=[memory_text],
ids=[str(uuid.uuid4())]
)
def retrieve_memory(query):
try:
results = collection.query(
query_texts=[query],
n_results=3
)
docs = results.get("documents", [[]])[0]
return "\n".join(docs)
except Exception:
return ""
# -----------------------------
# PLANNER AGENT
# -----------------------------
def planner(user_input):
user_input = user_input.lower()
if any(
keyword in user_input
for keyword in [
"search",
"latest",
"news",
"find",
"lookup",
"web",
]
):
return "web_search"
return "chat"
# -----------------------------
# MAIN AI AGENT
# -----------------------------
def agent_respond(
message,
history,
system_message,
max_tokens,
temperature,
top_p,
):
# -----------------------------
# CONNECT MODEL
# -----------------------------
client = InferenceClient(
model=MODEL_NAME,
token=HF_TOKEN
)
# -----------------------------
# PLANNING
# -----------------------------
action = planner(message)
tool_context = ""
# -----------------------------
# TOOL EXECUTION
# -----------------------------
if action == "web_search":
tool_context = web_search(message)
# -----------------------------
# MEMORY RETRIEVAL
# -----------------------------
memory_context = retrieve_memory(message)
# -----------------------------
# SYSTEM PROMPT
# -----------------------------
enhanced_system_prompt = f"""
{system_message}
You are Medini Intelligence AI Agent.
You have:
- long-term memory
- web search capability
- contextual reasoning
MEMORY:
{memory_context}
TOOL RESULTS:
{tool_context}
Use the information intelligently.
"""
# -----------------------------
# BUILD MESSAGE HISTORY
# -----------------------------
messages = [
{
"role": "system",
"content": enhanced_system_prompt,
}
]
if history:
messages.extend(history)
messages.append(
{
"role": "user",
"content": message
}
)
# -----------------------------
# STREAM RESPONSE
# -----------------------------
response = ""
try:
stream = client.chat.completions.create(
messages=messages,
model=MODEL_NAME,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
)
for chunk in stream:
token = ""
if (
chunk.choices
and hasattr(chunk.choices[0].delta, "content")
and chunk.choices[0].delta.content
):
token = chunk.choices[0].delta.content
response += token
yield response
except Exception as e:
yield f"Error: {str(e)}"
return
# -----------------------------
# SAVE MEMORY
# -----------------------------
save_memory(message, response)
# -----------------------------
# GRADIO UI
# -----------------------------
chatbot = gr.ChatInterface(
fn=agent_respond,
type="messages",
additional_inputs=[
gr.Textbox(
value="You are Medini Intelligence AI Agent.",
label="System Message",
),
gr.Slider(
minimum=1,
maximum=4096,
value=1024,
step=1,
label="Max Tokens",
),
gr.Slider(
minimum=0.1,
maximum=2.0,
value=0.7,
step=0.1,
label="Temperature",
),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p",
),
],
)
# -----------------------------
# APP LAYOUT
# -----------------------------
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown(
"""
# Medini Intelligence AI Agent
### Features
- Conversational AI
- Memory
- Web Search
- Tool Use
- Autonomous Reasoning
"""
)
chatbot.render()
# -----------------------------
# RUN APP
# -----------------------------
if __name__ == "__main__":
demo. launch(
server_name="0.0.0.0",
server_port=7860
)