Обновление GLM моделей до GLM-4
This commit is contained in:
89
myproject/integrations/models/ai_services/glm.py
Normal file
89
myproject/integrations/models/ai_services/glm.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from django.db import models
|
||||
from integrations.models.base import BaseIntegration, IntegrationType
|
||||
from django.core.exceptions import ValidationError
|
||||
from integrations.fields import EncryptedCharField
|
||||
|
||||
|
||||
def validate_temperature(value):
|
||||
"""Валидатор для температуры, принимает значения от 0 до 1"""
|
||||
if value < 0 or value > 1:
|
||||
raise ValidationError('Температура должна быть в диапазоне 0.0-1.0')
|
||||
|
||||
|
||||
# Список доступных моделей GLM (включая бесплатные)
|
||||
GLM_MODEL_CHOICES = [
|
||||
('glm-4', 'GLM-4 (Платная, дешевле)'),
|
||||
('glm-4.7', 'GLM-4.7 (Платная)'),
|
||||
('charglm-3', 'ChargLM-3 (Платная)'),
|
||||
('glm-4.6v', 'GLM-4.6V (Бесплатная)'),
|
||||
('glm-4.5v', 'GLM-4.5V (Бесплатная)'),
|
||||
('glm-4.5-air', 'GLM-4.5-Air (Бесплатная)'),
|
||||
('glm-4.5-flash', 'GLM-4.5-Flash (Бесплатная)'),
|
||||
('glm-4.5-flashx', 'GLM-4.5-FlashX (Бесплатная)'),
|
||||
]
|
||||
|
||||
|
||||
class AIIntegration(BaseIntegration):
|
||||
"""
|
||||
Базовая модель для интеграций с ИИ-сервисами
|
||||
"""
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class GLMIntegration(AIIntegration):
|
||||
"""
|
||||
Интеграция с GLM от Z.AI
|
||||
"""
|
||||
integration_type = IntegrationType.AI_SERVICE
|
||||
|
||||
api_key = EncryptedCharField(
|
||||
max_length=500,
|
||||
blank=True,
|
||||
verbose_name="API ключ",
|
||||
help_text="Ключ для доступа к API GLM от Z.AI (шифруется в БД)"
|
||||
)
|
||||
|
||||
api_url = models.URLField(
|
||||
max_length=500,
|
||||
default="https://api.z.ai/api/paas/v4",
|
||||
verbose_name="URL API",
|
||||
help_text="URL для обращения к API GLM (обычно https://api.z.ai/api/paas/v4)"
|
||||
)
|
||||
|
||||
model_name = models.CharField(
|
||||
max_length=100,
|
||||
default="glm-4",
|
||||
choices=GLM_MODEL_CHOICES,
|
||||
verbose_name="Название модели",
|
||||
help_text="Название используемой модели GLM (например, glm-4.7, glm-4)"
|
||||
)
|
||||
|
||||
temperature = models.FloatField(
|
||||
default=0.7,
|
||||
validators=[validate_temperature],
|
||||
verbose_name="Температура",
|
||||
help_text="Параметр температуры для генерации (0.0-1.0)"
|
||||
)
|
||||
|
||||
is_coding_endpoint = models.BooleanField(
|
||||
default=False,
|
||||
verbose_name="Использовать эндпоинт для кодинга",
|
||||
help_text="Отметьте, если используете специальный эндпоинт для задач программирования"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Интеграция GLM"
|
||||
verbose_name_plural = "Интеграции GLM"
|
||||
|
||||
@property
|
||||
def is_configured(self) -> bool:
|
||||
return bool(self.api_key)
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.temperature < 0 or self.temperature > 1:
|
||||
raise ValidationError({'temperature': 'Температура должна быть в диапазоне 0.0-1.0'})
|
||||
|
||||
# Всегда используем общий эндпоинт
|
||||
self.api_url = "https://api.z.ai/api/paas/v4"
|
||||
Reference in New Issue
Block a user