Files
Odoo-Modules/fusion_api/models/api_usage.py
gsinghpal e56974d46f update
2026-03-16 08:14:56 -04:00

54 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
from odoo import models, fields, api
class FusionApiUsage(models.Model):
_name = 'fusion.api.usage'
_description = 'API Usage Log'
_order = 'create_date desc'
_rec_name = 'display_name'
consumer_id = fields.Many2one(
'fusion.api.consumer', required=True, index=True, ondelete='cascade',
)
provider_id = fields.Many2one(
'fusion.api.provider', required=True, index=True, ondelete='cascade',
)
user_id = fields.Many2one('res.users', index=True, ondelete='set null')
feature = fields.Char(index=True, help='Feature label, e.g. invoice_extraction')
model_name = fields.Char(string='AI Model', help='e.g. gpt-4o, claude-3-5-sonnet')
tokens_in = fields.Integer(string='Input Tokens')
tokens_out = fields.Integer(string='Output Tokens')
total_tokens = fields.Integer(
compute='_compute_total_tokens', store=True, string='Total Tokens',
)
estimated_cost_usd = fields.Float(digits=(10, 6), string='Cost (USD)')
response_time_ms = fields.Integer(string='Response Time (ms)')
status = fields.Selection([
('success', 'Success'),
('error', 'Error'),
('rate_limited', 'Rate Limited'),
('budget_exceeded', 'Budget Exceeded'),
], default='success', required=True, index=True)
error_message = fields.Text()
company_id = fields.Many2one('res.company', default=lambda self: self.env.company)
display_name = fields.Char(compute='_compute_display_name')
@api.depends('tokens_in', 'tokens_out')
def _compute_total_tokens(self):
for rec in self:
rec.total_tokens = rec.tokens_in + rec.tokens_out
def _compute_display_name(self):
for rec in self:
consumer = rec.consumer_id.name or 'Unknown'
provider = rec.provider_id.name or 'Unknown'
rec.display_name = f"{consumer} - {provider} ({rec.status})"