Files

89 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"