Agent-Zero / src /streamlit_app.py
BosuBose's picture
Update src/streamlit_app.py
9fd7980 verified
Raw
History Blame Contribute Delete
2.32 kB
import streamlit as st
from langchain_groq import ChatGroq
from langchain_core.messages import HumanMessage, SystemMessage
from ddgs import DDGS
from dotenv import load_dotenv
import os
load_dotenv()
st.set_page_config(page_title="Agent Zero", page_icon="🤖")
st.title("🤖 Agent Zero")
st.caption("Powered by Groq + Llama 3.3 — free!")
llm = ChatGroq(
model="llama-3.3-70b-versatile",
api_key=os.getenv("GROQ_API_KEY")
)
def web_search(query: str) -> str:
try:
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=3))
if not results: return "No results found."
output = ""
for r in results:
output += f"- {r['title']}: {r['body'][:150]}\n"
return output[:500]
except Exception as e:
return f"Search error: {e}"
def needs_search(user_input: str) -> bool:
keywords = ["news", "latest", "today", "current", "who is",
"what is happening", "price", "weather", "score"]
return any(k in user_input.lower() for k in keywords)
if "messages" not in st.session_state:
st.session_state.messages = [
SystemMessage(content="You are a helpful assistant. Be concise.")
]
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
for chat in st.session_state.chat_history:
with st.chat_message(chat["role"]):
st.write(chat["content"])
if user_input := st.chat_input("Ask me anything..."):
with st.chat_message("user"):
st.write(user_input)
st.session_state.chat_history.append({"role": "user", "content": user_input})
context = ""
if needs_search(user_input):
with st.spinner("Searching the web..."):
context = f"Web search results:\n{web_search(user_input)}\n\n"
with st.chat_message("assistant"):
with st.spinner("Thinking..."):
st.session_state.messages.append(
HumanMessage(content=f"{context}User question: {user_input}")
)
response = llm.invoke(st.session_state.messages)
st.session_state.messages.append(response)
st.write(response.content)
st.session_state.chat_history.append(
{"role": "assistant", "content": response.content}
)