feat: мульти-провайдер AI, выбор типов заданий, настройка количества
- Добавлена поддержка нескольких AI провайдеров (OpenAI, Google Gemini) - Добавлена админ-панель (/admin) для переключения AI моделей - Добавлен AIModelService для управления моделями в БД - Добавлен выбор типа заданий (микс, перевод слов, подстановка, перевод предложений) - Добавлена настройка количества заданий (5-15) - ai_service динамически выбирает провайдера на основе активной модели - Обработка ограничений моделей (temperature, response_format) - Очистка markdown обёртки из ответов Gemini 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -48,6 +48,12 @@ class WordSource(str, enum.Enum):
|
||||
AI_TASK = "ai_task" # Из AI-задания
|
||||
|
||||
|
||||
class AIProvider(str, enum.Enum):
|
||||
"""Провайдеры AI моделей"""
|
||||
openai = "openai"
|
||||
google = "google"
|
||||
|
||||
|
||||
class User(Base):
|
||||
"""Модель пользователя"""
|
||||
__tablename__ = "users"
|
||||
@@ -65,6 +71,7 @@ class User(Base):
|
||||
reminders_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
last_reminder_sent: Mapped[Optional[datetime]] = mapped_column(DateTime)
|
||||
streak_days: Mapped[int] = mapped_column(Integer, default=0)
|
||||
tasks_count: Mapped[int] = mapped_column(Integer, default=5) # Количество заданий (5-15)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
last_active: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
@@ -121,3 +128,15 @@ class Task(Base):
|
||||
ai_feedback: Mapped[Optional[str]] = mapped_column(String(1000))
|
||||
completed_at: Mapped[Optional[datetime]] = mapped_column(DateTime)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
|
||||
|
||||
class AIModel(Base):
|
||||
"""Модель AI моделей для генерации"""
|
||||
__tablename__ = "ai_models"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
provider: Mapped[AIProvider] = mapped_column(SQLEnum(AIProvider), nullable=False) # openai / google
|
||||
model_name: Mapped[str] = mapped_column(String(100), nullable=False) # gpt-4o-mini, gemini-2.5-flash-lite
|
||||
display_name: Mapped[str] = mapped_column(String(100), nullable=False) # Название для отображения
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=False) # Только одна модель активна
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
|
||||
Reference in New Issue
Block a user