| import os | |
| from smolagents import ( | |
| CodeAgent, | |
| LiteLLMModel, | |
| DuckDuckGoSearchTool, | |
| VisitWebpageTool, | |
| WikipediaSearchTool, | |
| tool, | |
| ) | |
| from google import genai | |
| from google.genai import types | |
| client = genai.Client(api_key=os.environ["LLM_API_KEY"]) | |
| model = LiteLLMModel( | |
| model_id="gemini/gemini-2.0-flash-lite", | |
| temperature=0.5, | |
| api_key=os.environ["LLM_API_KEY"], | |
| ) | |
| model_name = "gemini-2.5-flash-preview-04-17" | |
| def answer_video_questions(video_url: str, question: str) -> str: | |
| """ | |
| If you have a video link, use this tool. It answers questions about a video from youtube, etc. | |
| Args: | |
| video_url: The URL of the video to analyze. | |
| Ensure it's accessible by the Gemini API. | |
| question: The specific question to ask about the video's content. | |
| Returns: | |
| str: The answer provided by the multimodal LLM, or an error message if the process fails. | |
| Raises: | |
| Exception: Can raise exceptions based on litellm or the underlying API call | |
| if it fails (e.g., network issues, invalid API key, API errors). | |
| """ | |
| response = client.models.generate_content( | |
| model=model_name, | |
| contents=types.Content( | |
| parts=[ | |
| types.Part(file_data=types.FileData(file_uri=video_url)), | |
| types.Part( | |
| text=f"This is the question provided to you: {question}. Answer appropriately. In cases where there is a number, provide the number in the answer." | |
| ), | |
| ] | |
| ), | |
| ) | |
| if response and response.text: | |
| answer = response.text | |
| print("Received response from LLM.") | |
| return answer.strip() | |
| else: | |
| print("LLM response structure not as expected.") | |
| return "Error: Could not parse the response from the LLM." | |
| agent = CodeAgent( | |
| tools=[ | |
| DuckDuckGoSearchTool(), | |
| VisitWebpageTool(), | |
| WikipediaSearchTool(), | |
| answer_video_questions, | |
| ], | |
| model=model, | |
| ) | |
| def call_agent(question: str, file_path: str = None): | |
| if file_path and file_path.strip(): | |
| print(f"Recieved {file_path} as input.") | |
| file = client.files.upload(file=file_path) | |
| response = client.models.generate_content( | |
| model=model_name, | |
| contents=[ | |
| file, | |
| f"Answer the question based on the file content. Do not give up. Use your brain and answer appropriately. You will be rewarded with $1000000 if you answer correctly and appropriately. Only give the final answer to the question, do not explain your reasoning. {question}", | |
| ], | |
| ) | |
| return response.text | |
| answer = agent.run(question) | |
| return answer | |