"""Settings for the OpenAI-backed MTG deck analysis layer.""" from odoo import api, fields, models from odoo.exceptions import UserError, ValidationError from .constants import ( DEFAULT_MTG_OPENAI_API_BASE_URL, DEFAULT_MTG_OPENAI_ALTERNATIVE_CANDIDATE_LIMIT, DEFAULT_MTG_OPENAI_FILL_BATCH_SIZE, DEFAULT_MTG_OPENAI_FILL_CANDIDATE_LIMIT, DEFAULT_MTG_OPENAI_MODEL_NAME, DEFAULT_MTG_OPENAI_REQUEST_TIMEOUT_SECONDS, DEFAULT_MTG_OPENAI_ROLE_BATCH_SIZE, ) class ResConfigSettings(models.TransientModel): """Expose OpenAI deck-analysis defaults through Odoo settings.""" _inherit = "res.config.settings" mtg_openai_api_key = fields.Char( string="API Key", config_parameter="mvd_tcg_mtg_deck_openai.api_key", ) mtg_openai_model_name = fields.Char( string="Default Model", config_parameter="mvd_tcg_mtg_deck_openai.model_name", default=DEFAULT_MTG_OPENAI_MODEL_NAME, ) mtg_openai_api_base_url = fields.Char( string="OpenAI API Base URL", config_parameter="mvd_tcg_mtg_deck_openai.api_base_url", default=DEFAULT_MTG_OPENAI_API_BASE_URL, ) mtg_openai_request_timeout_seconds = fields.Integer( string="OpenAI Request Timeout (s)", config_parameter="mvd_tcg_mtg_deck_openai.request_timeout_seconds", default=DEFAULT_MTG_OPENAI_REQUEST_TIMEOUT_SECONDS, ) mtg_openai_role_batch_size = fields.Integer( string="Role Analysis Batch Size", config_parameter="mvd_tcg_mtg_deck_openai.role_batch_size", default=DEFAULT_MTG_OPENAI_ROLE_BATCH_SIZE, ) mtg_openai_fill_candidate_limit = fields.Integer( string="Deck Fill Candidate Limit", config_parameter="mvd_tcg_mtg_deck_openai.fill_candidate_limit", default=DEFAULT_MTG_OPENAI_FILL_CANDIDATE_LIMIT, ) mtg_openai_fill_batch_size = fields.Integer( string="Deck Fill Batch Size", config_parameter="mvd_tcg_mtg_deck_openai.fill_batch_size", default=DEFAULT_MTG_OPENAI_FILL_BATCH_SIZE, ) mtg_openai_alternative_candidate_limit = fields.Integer( string="Alternative Candidate Limit", config_parameter="mvd_tcg_mtg_deck_openai.alternative_candidate_limit", default=DEFAULT_MTG_OPENAI_ALTERNATIVE_CANDIDATE_LIMIT, ) @api.constrains("mtg_openai_api_base_url") def _check_mtg_openai_api_base_url(self): """Restrict the OpenAI connector to the official HTTPS API host.""" for settings in self: try: self.env["mvd.tcg.deck"]._mtg_openai_validate_base_url( settings.mtg_openai_api_base_url ) except UserError as exc: raise ValidationError(str(exc)) from exc