diff --git a/app_chatgpt/__manifest__.py b/app_chatgpt/__manifest__.py index 0e046cc3..b9a7a86a 100644 --- a/app_chatgpt/__manifest__.py +++ b/app_chatgpt/__manifest__.py @@ -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': [ diff --git a/app_chatgpt/models/__init__.py b/app_chatgpt/models/__init__.py index 5327e517..4b819a4e 100644 --- a/app_chatgpt/models/__init__.py +++ b/app_chatgpt/models/__init__.py @@ -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 diff --git a/app_chatgpt/models/ai_robot.py b/app_chatgpt/models/ai_robot.py index db5bcea8..545ae76d 100644 --- a/app_chatgpt/models/ai_robot.py +++ b/app_chatgpt/models/ai_robot.py @@ -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: - ask_date = fields.Datetime.now() - vals.update({ + # 不是写到 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 }) - user_id.write(vals) - # res = self.filter_sensitive_words(data) + 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 + }) + ai_use.write(vals) else: data = res return data diff --git a/app_chatgpt/models/res_partner_ai_use.py b/app_chatgpt/models/res_partner_ai_use.py new file mode 100644 index 00000000..202e87a3 --- /dev/null +++ b/app_chatgpt/models/res_partner_ai_use.py @@ -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') + diff --git a/app_chatgpt/models/res_users.py b/app_chatgpt/models/res_users.py index 7e2005f3..2fa6a8be 100644 --- a/app_chatgpt/models/res_users.py +++ b/app_chatgpt/models/res_users.py @@ -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') - diff --git a/app_chatgpt/security/ir.model.access.csv b/app_chatgpt/security/ir.model.access.csv index 48a026f0..e299d261 100644 --- a/app_chatgpt/security/ir.model.access.csv +++ b/app_chatgpt/security/ir.model.access.csv @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/app_chatgpt/views/res_partner_ai_use_views.xml b/app_chatgpt/views/res_partner_ai_use_views.xml new file mode 100644 index 00000000..9f76e740 --- /dev/null +++ b/app_chatgpt/views/res_partner_ai_use_views.xml @@ -0,0 +1,68 @@ + + + + res.partner.ai.use.tree + res.partner.ai.use + + + + + + + + + + + + + + + + + + res.partner.ai.use.form + res.partner.ai.use + +
+ + +
+
+
+ + + Partner Ai Use + res.partner.ai.use + tree,form + {} + + + +
\ No newline at end of file diff --git a/app_chatgpt/views/res_users_views.xml b/app_chatgpt/views/res_users_views.xml index 16a9895a..77c4e5f4 100644 --- a/app_chatgpt/views/res_users_views.xml +++ b/app_chatgpt/views/res_users_views.xml @@ -15,18 +15,6 @@ - - - - - - - - - - - -