Spaces:
Sleeping
Sleeping
from typing import Type | |
from ..config import get_settings | |
from .base import BaseAttributionService | |
from .service_anthropic import AnthropicService # Assuming this exists | |
from .service_openai import OpenAIService | |
from .service_gemini import GeminiService # Import the new GeminiService | |
settings = get_settings() | |
class AIServiceFactory: | |
_services = { | |
"openai": OpenAIService, | |
"anthropic": AnthropicService, | |
"gemini": GeminiService, # Add Gemini service | |
} | |
def get_service(cls, ai_vendor: str = None) -> BaseAttributionService: | |
""" | |
Factory method to get an AI service instance. | |
Args: | |
ai_vendor (str, optional): The name of the AI vendor. | |
Defaults to settings.DEFAULT_VENDOR. | |
Returns: | |
BaseAttributionService: An instance of the requested AI service. | |
Raises: | |
ValueError: If the ai_vendor is unsupported. | |
""" | |
# Use the provided ai_vendor or fallback to the default from settings | |
ai_vendor_to_use = ai_vendor or settings.DEFAULT_VENDOR | |
# Retrieve the service class from the dictionary (case-insensitive lookup) | |
service_class = cls._services.get(ai_vendor_to_use.lower()) | |
# If the service class is not found, raise an error | |
if not service_class: | |
raise ValueError(f"Unsupported AI vendor: {ai_vendor_to_use}. Supported vendors are: {', '.join(cls._services.keys())}") | |
# Create and return an instance of the service | |
return service_class() | |