mirror of
https://github.com/guohuadeng/app-odoo.git
synced 2025-02-23 04:11:36 +02:00
fix #I6SC9C app_chatgpt优化,指定用户时增加使用情况
This commit is contained in:
@@ -57,6 +57,7 @@
|
||||
'views/res_config_settings_views.xml',
|
||||
'views/ai_robot_views.xml',
|
||||
'views/res_users_views.xml',
|
||||
'views/res_partner_ai_use_views.xml',
|
||||
],
|
||||
'assets': {
|
||||
'mail.assets_messaging': [
|
||||
|
||||
@@ -7,3 +7,4 @@ from . import res_partner
|
||||
from . import res_users
|
||||
from . import mail_message
|
||||
from . import mail_thread
|
||||
from . import res_partner_ai_use
|
||||
|
||||
@@ -139,25 +139,35 @@ GPT-3 A set of models that can understand and generate natural language
|
||||
usage = json.loads(json.dumps(res['usage']))
|
||||
content = json.loads(json.dumps(res['choices'][0]['message']['content']))
|
||||
data = content.replace(' .', '.').strip()
|
||||
if usage:
|
||||
# todo: 不是写到 user ,是要写到指定 m2m 相关模型, 如: res.partner.ai.use
|
||||
user_id = author_id.mapped('user_ids')[:1]
|
||||
answer_user = answer_id.mapped('user_ids')[:1]
|
||||
if answer_user.gpt_policy == 'limit' and usage:
|
||||
prompt_tokens = usage['prompt_tokens']
|
||||
completion_tokens = usage['completion_tokens']
|
||||
total_tokens = usage['total_tokens']
|
||||
vals = {
|
||||
'human_prompt_tokens': user_id.human_prompt_tokens + prompt_tokens,
|
||||
'ai_completion_tokens': user_id.ai_completion_tokens + completion_tokens,
|
||||
'tokens_total': user_id.tokens_total + total_tokens,
|
||||
'used_number': user_id.used_number + 1,
|
||||
}
|
||||
if not user_id.first_ask_time:
|
||||
# 不是写到 user ,是要写到指定 m2m 相关模型, 如: res.partner.ai.use
|
||||
ai_use = self.env['res.partner.ai.use'].search([('name', '=', author_id.id)], limit=1)
|
||||
ask_date = fields.Datetime.now()
|
||||
if not ai_use:
|
||||
ai_use.create({
|
||||
'name': author_id.id,
|
||||
'human_prompt_tokens': prompt_tokens,
|
||||
'ai_completion_tokens': completion_tokens,
|
||||
'tokens_total': total_tokens,
|
||||
'used_number': 1,
|
||||
'first_ask_time': ask_date
|
||||
})
|
||||
else:
|
||||
vals = {
|
||||
'human_prompt_tokens': ai_use.human_prompt_tokens + prompt_tokens,
|
||||
'ai_completion_tokens': ai_use.ai_completion_tokens + completion_tokens,
|
||||
'tokens_total': ai_use.tokens_total + total_tokens,
|
||||
'used_number': ai_use.used_number + 1,
|
||||
}
|
||||
if not ai_use.first_ask_time:
|
||||
vals.update({
|
||||
'first_ask_time': ask_date
|
||||
})
|
||||
user_id.write(vals)
|
||||
# res = self.filter_sensitive_words(data)
|
||||
ai_use.write(vals)
|
||||
else:
|
||||
data = res
|
||||
return data
|
||||
|
||||
20
app_chatgpt/models/res_partner_ai_use.py
Normal file
20
app_chatgpt/models/res_partner_ai_use.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResPartnerAiUse(models.Model):
|
||||
_name = "res.partner.ai.use"
|
||||
_description = '消费者Ai使用情况'
|
||||
|
||||
name = fields.Many2one('res.partner', 'Partner')
|
||||
first_ask_time = fields.Datetime('First Ask Time')
|
||||
service_start_date = fields.Datetime('Service Start Date')
|
||||
service_end_date = fields.Datetime('Service End Date')
|
||||
used_number = fields.Integer('Number of Used')
|
||||
max_number = fields.Integer('Max Number of Call')
|
||||
human_prompt_tokens = fields.Integer('Human Prompt Tokens')
|
||||
ai_completion_tokens = fields.Integer('AI Completion Tokens')
|
||||
tokens_total = fields.Integer('Total Tokens')
|
||||
token_balance = fields.Integer('Token Balance')
|
||||
|
||||
@@ -14,13 +14,3 @@ class ResUsers(models.Model):
|
||||
], string='Allowed Conversation Mode', default='all', ondelete='set default')
|
||||
gpt_wl_users = fields.Many2many('res.users', 'res_users_res_users_rel', 'robot_id', 'user_id', string='Allowed Users', domain="[('id', '!=', id)]")
|
||||
gpt_demo_time = fields.Integer('Default Demo Time', default=0)
|
||||
|
||||
first_ask_time = fields.Datetime('First Ask Time')
|
||||
service_start_date = fields.Datetime('Service Start Date')
|
||||
service_end_date = fields.Datetime('Service End Date')
|
||||
used_number = fields.Integer('Number of Used')
|
||||
max_number = fields.Integer('Max Number of Call')
|
||||
human_prompt_tokens = fields.Integer('Human Prompt Tokens')
|
||||
ai_completion_tokens = fields.Integer('AI Completion Tokens')
|
||||
tokens_total = fields.Integer('Total Tokens')
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_gpt_robt_user,AiRobotUser,model_ai_robot,base.group_user,1,1,1,1
|
||||
access_res_partner_ai_use_user,ResPartnerAiUseUser,model_res_partner_ai_use,base.group_user,1,1,1,1
|
||||
|
68
app_chatgpt/views/res_partner_ai_use_views.xml
Normal file
68
app_chatgpt/views/res_partner_ai_use_views.xml
Normal file
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="res_partner_ai_use_tree_view" model="ir.ui.view">
|
||||
<field name="name">res.partner.ai.use.tree</field>
|
||||
<field name="model">res.partner.ai.use</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="first_ask_time"/>
|
||||
<field name="service_start_date"/>
|
||||
<field name="service_end_date"/>
|
||||
<field name="used_number"/>
|
||||
<field name="max_number"/>
|
||||
<field name="token_balance"/>
|
||||
<field name="human_prompt_tokens"/>
|
||||
<field name="ai_completion_tokens"/>
|
||||
<field name="tokens_total"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_ai_use_form_view" model="ir.ui.view">
|
||||
<field name="name">res.partner.ai.use.form</field>
|
||||
<field name="model">res.partner.ai.use</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<label for="name"/>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="first_ask_time"/>
|
||||
<field name="service_start_date"/>
|
||||
<field name="service_end_date"/>
|
||||
<field name="used_number" readonly="True"/>
|
||||
<field name="max_number" readonly="True"/>
|
||||
<field name="token_balance" readonly="True"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="human_prompt_tokens" readonly="True"/>
|
||||
<field name="ai_completion_tokens" readonly="True"/>
|
||||
<field name="tokens_total" readonly="True"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_res_partner_ai_use" model="ir.actions.act_window">
|
||||
<field name="name">Partner Ai Use</field>
|
||||
<field name="res_model">res.partner.ai.use</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="menu_res_partner_ai_use"
|
||||
name="Partner Ai Use"
|
||||
parent="base.menu_users"
|
||||
sequence="3"
|
||||
action="action_res_partner_ai_use"
|
||||
groups="base.group_system"/>
|
||||
</odoo>
|
||||
@@ -15,18 +15,6 @@
|
||||
<field name="gpt_demo_time"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Usage">
|
||||
<field name="first_ask_time"/>
|
||||
<field name="service_start_date"/>
|
||||
<field name="service_end_date"/>
|
||||
<field name="used_number"/>
|
||||
<field name="max_number"/>
|
||||
<field name="human_prompt_tokens"/>
|
||||
<field name="ai_completion_tokens"/>
|
||||
<field name="tokens_total"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
Reference in New Issue
Block a user