From e48e6d9aef9ef687e1a4da8877aed83c19b71df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20V=C3=A9zina?= Date: Wed, 19 Feb 2025 15:32:34 -0500 Subject: [PATCH] next try 2 --- ai_integration/models/ai_model.py | 13 +++++++ ai_integration/models/ai_model_stats.py | 13 +++++++ ai_integration/models/ai_provider_instance.py | 13 +++++++ ai_integration/views/ai_model_stats_views.xml | 7 +--- ai_integration/views/ai_model_views.xml | 14 ------- .../views/ai_provider_instance_views.xml | 7 +--- ai_integration/views/menu.xml | 37 +++++++++++++++++-- ai_integration/views/res_company_views.xml | 7 +--- 8 files changed, 75 insertions(+), 36 deletions(-) diff --git a/ai_integration/models/ai_model.py b/ai_integration/models/ai_model.py index 04666a6..bf2db12 100644 --- a/ai_integration/models/ai_model.py +++ b/ai_integration/models/ai_model.py @@ -9,6 +9,19 @@ class AIModel(models.Model): _order = 'sequence, name' _check_company = False # Disable automatic company checks + @api.model + def _has_provider_modules(self): + """Check if any AI provider modules are installed.""" + modules = ['ollama_ai_integration', 'chatgpt_ai_integration'] + return any(self.env['ir.module.module'].search([('name', 'in', modules), ('state', '=', 'installed')])) + + @api.model + def default_get(self, fields_list): + """Override default_get to prevent creation if no provider modules are installed.""" + if not self._has_provider_modules(): + raise UserError(_('No AI provider modules are installed. Please install at least one provider module (e.g., Ollama or ChatGPT) before creating an AI model.')) + return super().default_get(fields_list) + active = fields.Boolean( string='Active', default=True, diff --git a/ai_integration/models/ai_model_stats.py b/ai_integration/models/ai_model_stats.py index 89442f6..263124c 100644 --- a/ai_integration/models/ai_model_stats.py +++ b/ai_integration/models/ai_model_stats.py @@ -6,6 +6,19 @@ class AIModelStats(models.Model): _description = 'AI Model Usage Statistics' _order = 'date desc' + @api.model + def _has_provider_modules(self): + """Check if any AI provider modules are installed.""" + modules = ['ollama_ai_integration', 'chatgpt_ai_integration'] + return any(self.env['ir.module.module'].search([('name', 'in', modules), ('state', '=', 'installed')])) + + @api.model + def default_get(self, fields_list): + """Override default_get to prevent creation if no provider modules are installed.""" + if not self._has_provider_modules(): + raise UserError(_('No AI provider modules are installed. Please install at least one provider module (e.g., Ollama or ChatGPT) before creating model statistics.')) + return super().default_get(fields_list) + model_id = fields.Many2one('ai.model', string='Model', required=True, ondelete='cascade') provider_instance_id = fields.Many2one( related='model_id.provider_instance_id', diff --git a/ai_integration/models/ai_provider_instance.py b/ai_integration/models/ai_provider_instance.py index 4469c6f..012bbd0 100644 --- a/ai_integration/models/ai_provider_instance.py +++ b/ai_integration/models/ai_provider_instance.py @@ -11,6 +11,19 @@ class AIProviderInstance(models.Model): _check_company = False # Disable automatic company checks _inherit = ['mail.thread', 'ai.base.mixin'] + @api.model + def _has_provider_modules(self): + """Check if any AI provider modules are installed.""" + modules = ['ollama_ai_integration', 'chatgpt_ai_integration'] + return any(self.env['ir.module.module'].search([('name', 'in', modules), ('state', '=', 'installed')])) + + @api.model + def default_get(self, fields_list): + """Override default_get to prevent creation if no provider modules are installed.""" + if not self._has_provider_modules(): + raise UserError(_('No AI provider modules are installed. Please install at least one provider module (e.g., Ollama or ChatGPT) before creating a provider instance.')) + return super().default_get(fields_list) + active = fields.Boolean( string='Active', default=True, diff --git a/ai_integration/views/ai_model_stats_views.xml b/ai_integration/views/ai_model_stats_views.xml index d756d78..b8370f4 100644 --- a/ai_integration/views/ai_model_stats_views.xml +++ b/ai_integration/views/ai_model_stats_views.xml @@ -114,10 +114,5 @@ - - + diff --git a/ai_integration/views/ai_model_views.xml b/ai_integration/views/ai_model_views.xml index 85e8372..8d28b35 100644 --- a/ai_integration/views/ai_model_views.xml +++ b/ai_integration/views/ai_model_views.xml @@ -92,19 +92,5 @@ - - - - - diff --git a/ai_integration/views/ai_provider_instance_views.xml b/ai_integration/views/ai_provider_instance_views.xml index 4630d19..753df54 100644 --- a/ai_integration/views/ai_provider_instance_views.xml +++ b/ai_integration/views/ai_provider_instance_views.xml @@ -103,10 +103,5 @@ - - + diff --git a/ai_integration/views/menu.xml b/ai_integration/views/menu.xml index 47552f7..83d6948 100644 --- a/ai_integration/views/menu.xml +++ b/ai_integration/views/menu.xml @@ -1,14 +1,43 @@ - - + parent="menu_ai_root" + sequence="10"/> + + + + + + + + + + + + diff --git a/ai_integration/views/res_company_views.xml b/ai_integration/views/res_company_views.xml index 37a2c6e..6349ecb 100644 --- a/ai_integration/views/res_company_views.xml +++ b/ai_integration/views/res_company_views.xml @@ -10,10 +10,5 @@ {'module': 'ai_integration'} - +