61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from odoo import models, fields, api
|
|
from odoo.exceptions import UserError
|
|
|
|
class AIConfig(models.Model):
|
|
_name = 'ai.config'
|
|
_description = 'AI Configuration'
|
|
_inherit = ['mail.thread']
|
|
|
|
name = fields.Char(string='Name', required=True, default='Default Config', tracking=True)
|
|
company_id = fields.Many2one(
|
|
'res.company',
|
|
string='Company',
|
|
required=True,
|
|
default=lambda self: self.env.company,
|
|
tracking=True
|
|
)
|
|
openwebui_url = fields.Char(
|
|
string='Open WebUI URL',
|
|
required=True,
|
|
default='http://localhost:8080',
|
|
tracking=True
|
|
)
|
|
model_name = fields.Char(
|
|
string='Model Name',
|
|
required=True,
|
|
help='Nom du modèle à utiliser dans Open WebUI',
|
|
tracking=True
|
|
)
|
|
system_prompt = fields.Text(
|
|
string='System Prompt',
|
|
default="""Tu es un assistant Odoo expert qui aide les utilisateurs à effectuer des actions
|
|
dans le système. Analyse leurs demandes et propose des actions concrètes.""",
|
|
tracking=True
|
|
)
|
|
temperature = fields.Float(
|
|
string='Temperature',
|
|
default=0.7,
|
|
help='Contrôle la créativité des réponses (0.0 - 1.0)',
|
|
tracking=True
|
|
)
|
|
max_tokens = fields.Integer(
|
|
string='Max Tokens',
|
|
default=2000,
|
|
tracking=True
|
|
)
|
|
active = fields.Boolean(default=True, tracking=True)
|
|
|
|
_sql_constraints = [
|
|
('company_uniq', 'unique(company_id, active)',
|
|
'Une seule configuration active par compagnie est autorisée!')
|
|
]
|
|
|
|
@api.model
|
|
def get_default_config(self):
|
|
"""Récupère la configuration active pour la compagnie actuelle"""
|
|
config = self.search([
|
|
('active', '=', True),
|
|
('company_id', '=', self.env.company.id)
|
|
], limit=1)
|
|
if not config:
|
|
raise UserError('Aucune configuration AI active trouvée pour votre compagnie')
|