Перейти к содержанию

Config

Управление конфигурацией приложения через Pydantic Settings.

Возможности

  • Автоматическая загрузка из .env файлов
  • Валидация типов
  • Значения по умолчанию
  • Вложенные конфигурации

Использование

Базовая конфигурация

from kit.core.config import Settings

settings = Settings()

# Автоматически загружает из .env
print(settings.openai_api_key)
print(settings.database_url)
print(settings.debug)

Файл .env

# .env
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
DATABASE_URL=postgresql://localhost/mydb
DEBUG=true
LOG_LEVEL=INFO

Кастомные настройки

from kit.core.config import BaseSettings
from pydantic import Field

class MySettings(BaseSettings):
    app_name: str = "MyApp"
    max_workers: int = Field(default=4, ge=1, le=32)
    api_timeout: float = 30.0

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"

settings = MySettings()

Вложенные конфигурации

from kit.core.config import BaseSettings
from pydantic import BaseModel

class DatabaseConfig(BaseModel):
    host: str = "localhost"
    port: int = 5432
    name: str = "app"

class AppSettings(BaseSettings):
    database: DatabaseConfig = DatabaseConfig()
    redis_url: str = "redis://localhost"

API Reference

Settings

class Settings(BaseSettings):
    openai_api_key: str = ""
    anthropic_api_key: str = ""
    database_url: str = "sqlite:///./data.db"
    debug: bool = False
    log_level: str = "INFO"

    class Config:
        env_file = ".env"

Примеры из production

Autoshorts

class AutoshortsSettings(BaseSettings):
    # Video generation
    kling_access_key: str
    kling_secret_key: str

    # TTS
    edge_tts_voice: str = "ru-RU-DmitryNeural"

    # Storage
    output_dir: str = "./output"
    temp_dir: str = "./temp"

    # Limits
    max_video_duration: int = 60
    max_concurrent_jobs: int = 3

DedMoroz.ai

class DedMorozSettings(BaseSettings):
    telegram_bot_token: str
    openai_api_key: str

    # Moderation
    enable_moderation: bool = True
    moderation_languages: list = ["ru", "kz"]

    # Rate limits
    requests_per_minute: int = 10