|
from langchain.tools import BaseTool |
|
from typing import Type, Optional, Any |
|
from pydantic import BaseModel, Field |
|
import google.generativeai as genai |
|
from config.settings import settings |
|
from services.logger import app_logger |
|
|
|
class GeminiInput(BaseModel): |
|
query: str = Field(description="The query or prompt to send to Google Gemini.") |
|
|
|
class GeminiTool(BaseTool): |
|
name: str = "google_gemini_chat" |
|
description: str = ( |
|
"Useful for when you need to answer questions or generate text using Google Gemini. " |
|
"Use this for general knowledge, creative text generation, or complex reasoning tasks " |
|
"that might benefit from a powerful large language model." |
|
) |
|
args_schema: Type[BaseModel] = GeminiInput |
|
|
|
|
|
def _run(self, query: str) -> str: |
|
if not settings.GEMINI_API_KEY: |
|
app_logger.error("GEMINI_API_KEY not configured.") |
|
return "Error: Gemini API key not configured." |
|
try: |
|
genai.configure(api_key=settings.GEMINI_API_KEY) |
|
model = genai.GenerativeModel('gemini-pro') |
|
response = model.generate_content(query) |
|
return response.text |
|
except Exception as e: |
|
app_logger.error(f"Error calling Gemini API: {e}") |
|
return f"Error interacting with Gemini: {str(e)}" |
|
|
|
async def _arun(self, query: str) -> str: |
|
|
|
|
|
|
|
if not settings.GEMINI_API_KEY: |
|
app_logger.error("GEMINI_API_KEY not configured.") |
|
return "Error: Gemini API key not configured." |
|
try: |
|
genai.configure(api_key=settings.GEMINI_API_KEY) |
|
model = genai.GenerativeModel('gemini-pro') |
|
|
|
response = await model.generate_content_async(query) |
|
return response.text |
|
except Exception as e: |
|
app_logger.error(f"Error calling Gemini API asynchronously: {e}") |
|
return f"Error interacting with Gemini: {str(e)}" |