JaganathC commited on
Commit
bda8450
Β·
verified Β·
1 Parent(s): 3543ab7

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +156 -0
app.py ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from phi.agent import Agent
3
+ from phi.model.google import Gemini
4
+ from phi.tools.duckduckgo import DuckDuckGo
5
+ from google.generativeai import upload_file, get_file
6
+ import google.generativeai as genai
7
+ import time
8
+ from pathlib import Path
9
+ import tempfile
10
+ from dotenv import load_dotenv
11
+ import os
12
+ from phi.model.groq import Groq
13
+ from phi.tools.youtube_tools import YouTubeTools
14
+
15
+ # Load environment variables
16
+ load_dotenv()
17
+
18
+ # Configure API keys
19
+ API_KEY = os.getenv("GOOGLE_API_KEY")
20
+ groq_api_key = os.getenv("GROQ_API_KEY")
21
+ if API_KEY:
22
+ genai.configure(api_key=API_KEY)
23
+
24
+ # Page configuration
25
+ st.set_page_config(
26
+ page_title="Multimodal AI Applications",
27
+ page_icon="🌐",
28
+ layout="wide"
29
+ )
30
+
31
+ # Tabs for the two applications
32
+ tab1, tab2 = st.tabs(["Video Summarizer", "YouTube Video Analyzer"])
33
+
34
+ # Tab 1: Video Summarizer with Gemini
35
+ with tab1:
36
+ st.title("Phidata Video AI Summarizer Agent πŸŽ₯πŸŽ€πŸ–¬")
37
+ st.header("Powered by Gemini 2.0 Flash Exp")
38
+
39
+ @st.cache_resource
40
+ def initialize_agent():
41
+ return Agent(
42
+ name="Video AI Summarizer",
43
+ model=Gemini(id="gemini-2.0-flash-exp"),
44
+ tools=[DuckDuckGo()],
45
+ markdown=True,
46
+ )
47
+
48
+ multimodal_Agent = initialize_agent()
49
+
50
+ video_file = st.file_uploader(
51
+ "Upload a video file",
52
+ type=['mp4'],
53
+ help="Upload a video for AI analysis"
54
+ )
55
+
56
+ if video_file:
57
+ with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_video:
58
+ temp_video.write(video_file.read())
59
+ video_path = temp_video.name
60
+
61
+ st.video(video_path, format="video/mp4", start_time=0)
62
+
63
+ user_query = st.text_area(
64
+ "What insights are you seeking from the video?",
65
+ placeholder="Ask anything about the video content. The AI agent will analyze and gather additional context if needed. This AI agent can search the internet.",
66
+ help="Provide specific questions or insights you want from the video."
67
+ )
68
+
69
+ if st.button("πŸ” Analyze Video", key="analyze_video_button"):
70
+ if not user_query:
71
+ st.warning("Please enter a question or insight to analyze the video.")
72
+ else:
73
+ try:
74
+ with st.spinner("Processing video and gathering insights..."):
75
+ processed_video = upload_file(video_path)
76
+
77
+ while processed_video.state.name == "PROCESSING":
78
+ time.sleep(1)
79
+ processed_video = get_file(processed_video.name)
80
+
81
+ analysis_prompt = (
82
+ f"""
83
+ Analyze the uploaded video for content and context. Provide a detailed summary. Search the internet for similar topics discussed in the uploaded video.
84
+ Respond to the following query using video insights and supplementary web research: {user_query}
85
+ Provide a detailed, user-friendly, and actionable response.
86
+ """
87
+ )
88
+
89
+ response = multimodal_Agent.run(analysis_prompt, videos=[processed_video])
90
+
91
+ st.subheader("Analysis Result")
92
+ st.markdown(response.content)
93
+
94
+ except Exception as error:
95
+ st.error(f"An error occurred during analysis: {error}")
96
+
97
+ finally:
98
+ Path(video_path).unlink(missing_ok=True)
99
+ else:
100
+ st.info("Upload a video file to begin analysis.")
101
+
102
+ # Tab 2: YouTube Video Analyzer with Groq
103
+ with tab2:
104
+ st.title("YouTube Video Analyzer")
105
+ st.header("Analyze Youtube video using video link 🎬 🧷")
106
+
107
+ try:
108
+ youtube_agent = Agent(
109
+ model=Groq(id="llama3-8b-8192", api_key=groq_api_key),
110
+ tools=[YouTubeTools(), DuckDuckGo()],
111
+ show_tool_calls=True,
112
+ get_video_captions=True,
113
+ get_video_data = True,
114
+ description="You are a YouTube agent. Obtain the captions of a YouTube video, analyze its content and context, provide detailed summaries with key points, conduct web research on similar topics, and answer user questions.",
115
+ )
116
+ except Exception as e:
117
+ st.error(f"Error initializing the agent: {e}")
118
+ st.stop()
119
+
120
+ video_url = st.text_input("Enter YouTube Video URL:", "")
121
+ user_query = st.text_area("Enter your question about the video (optional):", "")
122
+
123
+ if st.button("✨ Analyze the Video", key="Analyze_Video_Button"):
124
+ if video_url:
125
+ with st.spinner("Analyzing..."):
126
+ try:
127
+ prompt_prefix = """Analyze the YouTube video provided by the URL. Provide a detailed summary of the video, including key points.
128
+ Structure the output as follows:
129
+ **Detailed Summary:**
130
+ [Detailed summary of the video content]
131
+ **Key Points:**
132
+ * [Key point 1]
133
+ * [Key point 2]
134
+ * [Key point 3]
135
+ ... (and so on)
136
+ Conduct web research on similar topics discussed in the video to provide additional context.
137
+ """
138
+
139
+ if user_query:
140
+ prompt = f"""{prompt_prefix}
141
+ Respond to the following query using video insights and supplementary web research:
142
+ {user_query}
143
+ Provide a detailed, user-friendly, and actionable response.
144
+ Video URL: {video_url}"""
145
+ else:
146
+ prompt = f"""{prompt_prefix}
147
+ Video URL: {video_url}"""
148
+
149
+ output = youtube_agent.run(prompt)
150
+
151
+ st.markdown(output.content)
152
+
153
+ except Exception as e:
154
+ st.error(f"Error analyzing the video: {e}")
155
+ else:
156
+ st.warning("Please enter a YouTube video URL.")