from tortoise import Model, fields from app.config import ANALYSIS_PROMPT, ANSWER_PROMPT, GOOD_REVIEWS_THREAD_ID from app.models import Review class Settings(Model): id = fields.IntField(pk=True) is_good = fields.BooleanField(unique=True) analysis_prompt = fields.TextField(default=ANALYSIS_PROMPT) analysis_enabled = fields.BooleanField(default=False) answer_prompt = fields.TextField(default=ANSWER_PROMPT) auto_response_enabled = fields.BooleanField(default=False) # автоответ на отзывы с текстом (GPT) auto_response_empty_enabled = fields.BooleanField(default=False) # автоответ на отзывы без текста (шаблон) # Шаблоны ответа на отзывы без текста (редактируются из бота) template_empty_low_rating = fields.TextField(null=True) template_empty_high_rating = fields.TextField(null=True) gpt_model = fields.CharField(max_length=20, default="gpt-4o-mini") max_tokens = fields.IntField(default=100) @classmethod async def get_from_context( cls, *, review: Review | None = None, message_thread_id: int | None = None ) -> "Settings": if review is not None: is_good = review.is_good elif message_thread_id is not None: is_good = message_thread_id == GOOD_REVIEWS_THREAD_ID else: raise ValueError("Either review or message_thread_id must be provided") return await cls.get(is_good=is_good)