Merge pull request #148 from Madhuvod/multimodel-agent-error

feat: updated multimodel agent code
This commit is contained in:
Shubham Saboo 2025-03-17 21:14:20 -05:00 committed by GitHub
commit 10f85f2098
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,8 +1,7 @@
import streamlit as st import streamlit as st
from agno.agent import Agent from agno.agent import Agent
from agno.models.google import Gemini from agno.models.google import Gemini
from agno.tools.duckduckgo import DuckDuckGoTools from agno.media import Video
from google.generativeai import upload_file, get_file
import time import time
from pathlib import Path from pathlib import Path
import tempfile import tempfile
@ -15,63 +14,65 @@ st.set_page_config(
st.title("Multimodal AI Agent 🧬") st.title("Multimodal AI Agent 🧬")
# Get Gemini API key from user
gemini_api_key = st.text_input("Enter your Gemini API Key", type="password")
# Initialize single agent with both capabilities # Initialize single agent with both capabilities
@st.cache_resource @st.cache_resource
def initialize_agent(): def initialize_agent(api_key):
return Agent( return Agent(
name="Multimodal Analyst", name="Multimodal Analyst",
model=Gemini(id="gemini-2.0-flash-exp"), model=Gemini(id="gemini-2.0-flash", api_key=api_key),
tools=[DuckDuckGoTools()],
markdown=True, markdown=True,
) )
agent = initialize_agent() if gemini_api_key:
agent = initialize_agent(gemini_api_key)
# File uploader # File uploader
uploaded_file = st.file_uploader("Upload a video file", type=['mp4', 'mov', 'avi']) uploaded_file = st.file_uploader("Upload a video file", type=['mp4', 'mov', 'avi'])
if uploaded_file: if uploaded_file:
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as tmp_file: with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as tmp_file:
tmp_file.write(uploaded_file.read()) tmp_file.write(uploaded_file.read())
video_path = tmp_file.name video_path = tmp_file.name
st.video(video_path) st.video(video_path)
user_prompt = st.text_area( user_prompt = st.text_area(
"What would you like to know?", "What would you like to know?",
placeholder="Ask any question related to the video - the AI Agent will analyze it and search the web if needed", placeholder="Ask any question related to the video - the AI Agent will analyze it and search the web if needed",
help="You can ask questions about the video content and get relevant information from the web" help="You can ask questions about the video content and get relevant information from the web"
) )
if st.button("Analyze & Research"): if st.button("Analyze & Research"):
if not user_prompt: if not user_prompt:
st.warning("Please enter your question.") st.warning("Please enter your question.")
else: else:
try: try:
with st.spinner("Processing video and researching..."): with st.spinner("Processing video and researching..."):
video_file = upload_file(video_path) video = Video(filepath=video_path)
while video_file.state.name == "PROCESSING":
time.sleep(2)
video_file = get_file(video_file.name)
prompt = f""" prompt = f"""
First analyze this video and then answer the following question using both First analyze this video and then answer the following question using both
the video analysis and web research: {user_prompt} the video analysis and web research: {user_prompt}
Provide a comprehensive response focusing on practical, actionable information. Provide a comprehensive response focusing on practical, actionable information.
""" """
result = agent.run(prompt, videos=[video_file]) result = agent.run(prompt, videos=[video])
st.subheader("Result") st.subheader("Result")
st.markdown(result.content) st.markdown(result.content)
except Exception as e: except Exception as e:
st.error(f"An error occurred: {str(e)}") st.error(f"An error occurred: {str(e)}")
finally: finally:
Path(video_path).unlink(missing_ok=True) Path(video_path).unlink(missing_ok=True)
else:
st.info("Please upload a video to begin analysis.")
else: else:
st.info("Please upload a video to begin analysis.") st.warning("Please enter your Gemini API key to continue.")
st.markdown(""" st.markdown("""
<style> <style>