from beanie import Document from pydantic import BaseModel, Field class BotConfig(BaseModel): admins: list[int] = [] chats_whitelist: list[int] = [] class GeminiModelsConfig(BaseModel): respond_model: str = "gemini-2.5-flash" message_review_model: str = "gemini-2.5-flash-lite-preview-06-17" tts_model: str = "gemini-2.5-flash-preview-tts" class DynamicConfigBase(BaseModel): bot: BotConfig = Field(default_factory=BotConfig) models: GeminiModelsConfig = Field(default_factory=GeminiModelsConfig) class DynamicConfig(DynamicConfigBase, Document): class Settings: name = "config" async def save(self): # noqa await super().save() # noqa @classmethod async def get_or_create(cls): config = await cls.find_one() if not config: config = cls() await config.save() return config