fix #I6SC9C app_chatgpt优化,指定用户时增加使用情况

This commit is contained in:
Chill
2023-04-13 13:40:29 +08:00
parent 5a2ef86358
commit e5e5207f4d
8 changed files with 116 additions and 37 deletions

View File

@@ -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': [

View File

@@ -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

View File

@@ -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

View 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')

View File

@@ -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')

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_gpt_robt_user AiRobotUser model_ai_robot base.group_user 1 1 1 1
3 access_res_partner_ai_use_user ResPartnerAiUseUser model_res_partner_ai_use base.group_user 1 1 1 1

View 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>

View File

@@ -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>