import logging from odoo import models, fields, api _logger = logging.getLogger(__name__) class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' fusion_ai_provider = fields.Selection( selection=[('claude', 'Anthropic Claude'), ('openai', 'OpenAI GPT')], string='AI Provider', default='claude', config_parameter='fusion_accounting.ai_provider', ) fusion_anthropic_api_key = fields.Char( string='Anthropic API Key (Fusion AI)', config_parameter='fusion_accounting.anthropic_api_key', ) fusion_openai_api_key = fields.Char( string='OpenAI API Key (Fusion AI)', config_parameter='fusion_accounting.openai_api_key', ) fusion_claude_model = fields.Selection( selection=[ ('claude-opus-4-6', 'Claude Opus 4.6 (Most Intelligent)'), ('claude-sonnet-4-6', 'Claude Sonnet 4.6 (Best Balance)'), ('claude-haiku-4-5', 'Claude Haiku 4.5 (Fastest)'), ('claude-sonnet-4-5', 'Claude Sonnet 4.5'), ('claude-opus-4-5', 'Claude Opus 4.5'), ('claude-sonnet-4-0', 'Claude Sonnet 4'), ('claude-opus-4-0', 'Claude Opus 4'), ], string='Claude Model', default='claude-sonnet-4-6', config_parameter='fusion_accounting.claude_model', ) fusion_openai_model = fields.Selection( selection=[ ('gpt-5.4', 'GPT-5.4 (Flagship)'), ('gpt-5.4-mini', 'GPT-5.4 Mini (Fast)'), ('gpt-5.4-nano', 'GPT-5.4 Nano (Cheapest)'), ('o3', 'o3 (Best Reasoning)'), ('o4-mini', 'o4-mini (Fast Reasoning)'), ('gpt-4o', 'GPT-4o (Legacy)'), ('gpt-4o-mini', 'GPT-4o Mini (Legacy)'), ], string='OpenAI Model', default='gpt-5.4-mini', config_parameter='fusion_accounting.openai_model', ) fusion_tier3_threshold = fields.Float( string='Tier 3 Promotion Threshold', default=0.95, config_parameter='fusion_accounting.tier3_threshold', help='Accuracy threshold for promoting Tier 3 tools to auto-approved.', ) fusion_tier3_min_sample = fields.Integer( string='Tier 3 Minimum Sample Size', default=30, config_parameter='fusion_accounting.tier3_min_sample', ) fusion_audit_cron_frequency = fields.Selection( selection=[('daily', 'Daily'), ('weekly', 'Weekly'), ('monthly', 'Monthly')], string='Audit Scan Frequency', default='daily', config_parameter='fusion_accounting.audit_cron_frequency', ) fusion_history_in_prompt = fields.Integer( string='Match History in Prompt', default=50, config_parameter='fusion_accounting.history_in_prompt', help='Number of recent match history records to include in AI prompt.', ) fusion_max_tool_calls = fields.Integer( string='Max Tool Calls Per Turn', default=20, config_parameter='fusion_accounting.max_tool_calls', ) fusion_enable_post_audit = fields.Boolean( string='Enable Post-Action Audit Hook', default=False, config_parameter='fusion_accounting.enable_post_audit', )