Factory Pattern
Why Factory Pattern for LLM?
Key LLM Use Cases
1. AI Model Factory
from abc import ABC, abstractmethod
from enum import Enum
class ModelType(Enum):
FAST = "fast"
BALANCED = "balanced"
ADVANCED = "advanced"
SPECIALIZED = "specialized"
class AIModel(ABC):
@abstractmethod
def generate(self, prompt, **kwargs):
pass
@abstractmethod
def get_model_info(self):
pass
class FastModel(AIModel):
def __init__(self):
self.model_name = "gpt-3.5-turbo"
self.max_tokens = 1000
self.cost_per_token = 0.002
def generate(self, prompt, **kwargs):
# Fast, lightweight model for simple queries
return f"Fast response to: {prompt}"
def get_model_info(self):
return {
"name": self.model_name,
"speed": "high",
"cost": "low",
"quality": "good"
}
class BalancedModel(AIModel):
def __init__(self):
self.model_name = "gpt-4"
self.max_tokens = 2000
self.cost_per_token = 0.03
def generate(self, prompt, **kwargs):
# Balanced model for general use
return f"Balanced response to: {prompt}"
def get_model_info(self):
return {
"name": self.model_name,
"speed": "medium",
"cost": "medium",
"quality": "high"
}
class AdvancedModel(AIModel):
def __init__(self):
self.model_name = "gpt-4-turbo"
self.max_tokens = 4000
self.cost_per_token = 0.06
def generate(self, prompt, **kwargs):
# Most capable model for complex tasks
return f"Advanced response to: {prompt}"
def get_model_info(self):
return {
"name": self.model_name,
"speed": "low",
"cost": "high",
"quality": "excellent"
}
class SpecializedModel(AIModel):
def __init__(self, domain):
self.domain = domain
self.model_name = f"specialized-{domain}-model"
self.max_tokens = 2000
def generate(self, prompt, **kwargs):
return f"Specialized {self.domain} response to: {prompt}"
def get_model_info(self):
return {
"name": self.model_name,
"domain": self.domain,
"quality": "domain-optimized"
}
class AIModelFactory:
@staticmethod
def create_model(model_type: ModelType, **kwargs):
"""Factory method to create AI models based on type"""
if model_type == ModelType.FAST:
return FastModel()
elif model_type == ModelType.BALANCED:
return BalancedModel()
elif model_type == ModelType.ADVANCED:
return AdvancedModel()
elif model_type == ModelType.SPECIALIZED:
domain = kwargs.get('domain', 'general')
return SpecializedModel(domain)
else:
raise ValueError(f"Unknown model type: {model_type}")
@staticmethod
def create_model_by_requirements(requirements):
"""Create model based on specific requirements"""
if requirements.get('speed_priority', False):
return AIModelFactory.create_model(ModelType.FAST)
elif requirements.get('cost_sensitive', False):
return AIModelFactory.create_model(ModelType.FAST)
elif requirements.get('quality_priority', False):
return AIModelFactory.create_model(ModelType.ADVANCED)
elif requirements.get('domain'):
return AIModelFactory.create_model(
ModelType.SPECIALIZED,
domain=requirements['domain']
)
else:
return AIModelFactory.create_model(ModelType.BALANCED)
# Usage examples
def handle_user_query(query, user_preferences):
# Create appropriate model based on user preferences
model = AIModelFactory.create_model_by_requirements(user_preferences)
response = model.generate(query)
return response, model.get_model_info()
# Different usage scenarios
urgent_response = handle_user_query(
"Quick math question",
{"speed_priority": True}
)
research_response = handle_user_query(
"Complex analysis needed",
{"quality_priority": True}
)
medical_response = handle_user_query(
"Medical consultation",
{"domain": "medical"}
)2. Tool Factory for AI Agents
3. Prompt Template Factory
4. Evaluation Metric Factory
Implementation Advantages
1. Flexibility
2. Extensibility
3. Maintainability
4. Scalability
Real-World Impact
๐ Interactive Implementation
Last updated