AI MODELS & final updates - feat: Implement AI Model Configuration with dynamic pricing and REST API
- Added AIModelConfig model to manage AI model configurations in the database. - Created serializers and views for AI model configurations, enabling read-only access via REST API. - Implemented filtering capabilities for model type, provider, and default status in the API. - Seeded initial data for text and image models, including pricing and capabilities. - Updated Django Admin interface for managing AI models with enhanced features and bulk actions. - Added validation methods for model and image size checks. - Comprehensive migration created to establish the AIModelConfig model and seed initial data. - Documented implementation and validation results in summary and report files.
This commit is contained in:
@@ -142,3 +142,59 @@ class UsageLimitsSerializer(serializers.Serializer):
|
||||
"""Serializer for usage limits response"""
|
||||
limits: LimitCardSerializer = LimitCardSerializer(many=True)
|
||||
|
||||
|
||||
class AIModelConfigSerializer(serializers.Serializer):
|
||||
"""
|
||||
Serializer for AI Model Configuration (Read-Only API)
|
||||
Provides model information for frontend dropdowns and displays
|
||||
"""
|
||||
model_name = serializers.CharField(read_only=True)
|
||||
display_name = serializers.CharField(read_only=True)
|
||||
model_type = serializers.CharField(read_only=True)
|
||||
provider = serializers.CharField(read_only=True)
|
||||
|
||||
# Text model fields
|
||||
input_cost_per_1m = serializers.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=4,
|
||||
read_only=True,
|
||||
allow_null=True
|
||||
)
|
||||
output_cost_per_1m = serializers.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=4,
|
||||
read_only=True,
|
||||
allow_null=True
|
||||
)
|
||||
context_window = serializers.IntegerField(read_only=True, allow_null=True)
|
||||
max_output_tokens = serializers.IntegerField(read_only=True, allow_null=True)
|
||||
|
||||
# Image model fields
|
||||
cost_per_image = serializers.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=4,
|
||||
read_only=True,
|
||||
allow_null=True
|
||||
)
|
||||
valid_sizes = serializers.ListField(read_only=True, allow_null=True)
|
||||
|
||||
# Capabilities
|
||||
supports_json_mode = serializers.BooleanField(read_only=True)
|
||||
supports_vision = serializers.BooleanField(read_only=True)
|
||||
supports_function_calling = serializers.BooleanField(read_only=True)
|
||||
|
||||
# Status
|
||||
is_default = serializers.BooleanField(read_only=True)
|
||||
sort_order = serializers.IntegerField(read_only=True)
|
||||
|
||||
# Computed field
|
||||
pricing_display = serializers.SerializerMethodField()
|
||||
|
||||
def get_pricing_display(self, obj):
|
||||
"""Generate pricing display string based on model type"""
|
||||
if obj.model_type == 'text':
|
||||
return f"${obj.input_cost_per_1m}/{obj.output_cost_per_1m} per 1M"
|
||||
elif obj.model_type == 'image':
|
||||
return f"${obj.cost_per_image} per image"
|
||||
return ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user