bemade-addons/ai_integration/models/mixins/ai_generation_params.py
xtremxpert 9a130bae6b new ai
2025-02-19 14:18:10 -05:00

64 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class AIGenerationParams(models.AbstractModel):
"""Mixin for common AI generation parameters across different providers."""
_name = 'ai.generation.params'
_description = 'Common AI Generation Parameters'
# Basic Generation Parameters
temperature = fields.Float(
string='Temperature',
help='Sampling temperature. Range: [0.0 - 2.0]. Higher values make output more random, lower values more deterministic.',
default=0.7,
digits=(3, 2))
top_p = fields.Float(
string='Top P',
help='Nucleus sampling: limits cumulative probability of tokens to sample from. Range: [0.0 - 1.0].',
default=0.9,
digits=(3, 2))
max_tokens = fields.Integer(
string='Max Tokens',
help='Maximum number of tokens to generate. Range: [1 - 32768].',
default=2048)
stop_sequences = fields.Char(
string='Stop Sequences',
help='Comma-separated list of sequences where the model should stop generating')
# System Settings
timeout = fields.Integer(
string='Timeout',
help='Request timeout in seconds. Range: [1 - 300].',
default=30)
retry_count = fields.Integer(
string='Retry Count',
help='Number of times to retry failed requests. Range: [0 - 5].',
default=3)
stream_response = fields.Boolean(
string='Stream Response',
help='Enable response streaming for real-time output.',
default=False)
def _get_base_generation_params(self):
"""Get common generation parameters as a dictionary."""
self.ensure_one()
params = {
'temperature': self.temperature,
'top_p': self.top_p,
'max_tokens': self.max_tokens,
'stream': self.stream_response,
}
if self.stop_sequences:
params['stop'] = [
seq.strip()
for seq in self.stop_sequences.split(',')
]
return params