feat: Update MCP server logic and fix warnings
Browse files- app.py +51 -12
- requirements.txt +1 -1
app.py
CHANGED
@@ -145,6 +145,24 @@ with gr.Blocks() as demo:
|
|
145 |
llm_last_frame_img = gr.Image(label="Last Frame", type="filepath", interactive=False)
|
146 |
llm_gif_output = gr.Image(label="Generated GIF", type="filepath", interactive=False)
|
147 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
# --- Event Handlers ---
|
149 |
|
150 |
# --- System Events ---
|
@@ -178,13 +196,15 @@ with gr.Blocks() as demo:
|
|
178 |
get_first_frame_btn.click(
|
179 |
fn=video_tools.getFirstFrame,
|
180 |
inputs=uploaded_video_path_state,
|
181 |
-
outputs=first_frame_img
|
|
|
182 |
)
|
183 |
|
184 |
get_last_frame_btn.click(
|
185 |
fn=video_tools.getLastFrame,
|
186 |
inputs=uploaded_video_path_state,
|
187 |
-
outputs=last_frame_img
|
|
|
188 |
)
|
189 |
|
190 |
# --- LLM Events ---
|
@@ -221,6 +241,35 @@ with gr.Blocks() as demo:
|
|
221 |
]
|
222 |
)
|
223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
# --- App Load Event ---
|
225 |
demo.load(
|
226 |
fn=on_load_tasks,
|
@@ -239,16 +288,6 @@ with gr.Blocks() as demo:
|
|
239 |
|
240 |
# --- MCP Server Launch ---
|
241 |
if __name__ == "__main__":
|
242 |
-
# Expose the functions we want to be available as tools
|
243 |
-
demo.add_tools(
|
244 |
-
{
|
245 |
-
"letter_counter": letter_counter,
|
246 |
-
"getFirstFrame": video_tools.getFirstFrame,
|
247 |
-
"getLastFrame": video_tools.getLastFrame,
|
248 |
-
"convert_mp4_to_gif": video_tools.convert_mp4_to_gif,
|
249 |
-
}
|
250 |
-
)
|
251 |
-
# Launch the Gradio app with MCP server enabled
|
252 |
demo.launch(mcp_server=True)
|
253 |
|
254 |
|
|
|
145 |
llm_last_frame_img = gr.Image(label="Last Frame", type="filepath", interactive=False)
|
146 |
llm_gif_output = gr.Image(label="Generated GIF", type="filepath", interactive=False)
|
147 |
|
148 |
+
# Hidden tab for exposing functions as MCP tools
|
149 |
+
with gr.Tab("MCP Tools", visible=False):
|
150 |
+
gr.Markdown("## Tools for MCP Server")
|
151 |
+
|
152 |
+
# Input for video path for MCP tools
|
153 |
+
mcp_video_path_input = gr.Textbox(label="Video Path for MCP")
|
154 |
+
|
155 |
+
# For letter_counter
|
156 |
+
lc_word_input = gr.Textbox(label="Word")
|
157 |
+
lc_letter_input = gr.Textbox(label="Letter")
|
158 |
+
lc_output = gr.Number(label="Count")
|
159 |
+
lc_btn = gr.Button("Count Letters")
|
160 |
+
|
161 |
+
# For video tools
|
162 |
+
mcp_get_first_frame_btn = gr.Button("MCP Get First Frame")
|
163 |
+
mcp_get_last_frame_btn = gr.Button("MCP Get Last Frame")
|
164 |
+
gif_btn = gr.Button("Convert to GIF")
|
165 |
+
|
166 |
# --- Event Handlers ---
|
167 |
|
168 |
# --- System Events ---
|
|
|
196 |
get_first_frame_btn.click(
|
197 |
fn=video_tools.getFirstFrame,
|
198 |
inputs=uploaded_video_path_state,
|
199 |
+
outputs=first_frame_img,
|
200 |
+
api_name="getFirstFrame"
|
201 |
)
|
202 |
|
203 |
get_last_frame_btn.click(
|
204 |
fn=video_tools.getLastFrame,
|
205 |
inputs=uploaded_video_path_state,
|
206 |
+
outputs=last_frame_img,
|
207 |
+
api_name="getLastFrame"
|
208 |
)
|
209 |
|
210 |
# --- LLM Events ---
|
|
|
241 |
]
|
242 |
)
|
243 |
|
244 |
+
# --- Hidden MCP Tool Events ---
|
245 |
+
lc_btn.click(
|
246 |
+
fn=letter_counter,
|
247 |
+
inputs=[lc_word_input, lc_letter_input],
|
248 |
+
outputs=lc_output,
|
249 |
+
api_name="letter_counter"
|
250 |
+
)
|
251 |
+
|
252 |
+
mcp_get_first_frame_btn.click(
|
253 |
+
fn=video_tools.getFirstFrame,
|
254 |
+
inputs=mcp_video_path_input,
|
255 |
+
outputs=llm_first_frame_img, # Can reuse an existing image component
|
256 |
+
api_name="getFirstFrame"
|
257 |
+
)
|
258 |
+
|
259 |
+
mcp_get_last_frame_btn.click(
|
260 |
+
fn=video_tools.getLastFrame,
|
261 |
+
inputs=mcp_video_path_input,
|
262 |
+
outputs=llm_last_frame_img, # Can reuse an existing image component
|
263 |
+
api_name="getLastFrame"
|
264 |
+
)
|
265 |
+
|
266 |
+
gif_btn.click(
|
267 |
+
fn=video_tools.convert_mp4_to_gif,
|
268 |
+
inputs=mcp_video_path_input,
|
269 |
+
outputs=llm_gif_output,
|
270 |
+
api_name="convert_mp4_to_gif"
|
271 |
+
)
|
272 |
+
|
273 |
# --- App Load Event ---
|
274 |
demo.load(
|
275 |
fn=on_load_tasks,
|
|
|
288 |
|
289 |
# --- MCP Server Launch ---
|
290 |
if __name__ == "__main__":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
demo.launch(mcp_server=True)
|
292 |
|
293 |
|
requirements.txt
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
gradio[mcp]
|
2 |
requests
|
|
|
1 |
+
gradio[mcp]
|
2 |
requests
|