diff --git a/app_chatgpt/__manifest__.py b/app_chatgpt/__manifest__.py index 84b6ae82..b9ac3881 100644 --- a/app_chatgpt/__manifest__.py +++ b/app_chatgpt/__manifest__.py @@ -10,7 +10,7 @@ { 'name': 'Latest ChatGPT4 AI Center. GPT 4 for image, Dall-E Image.Multi Robot Support. Chat and Training', - 'version': '16.23.03.16', + 'version': '16.23.03.20', 'author': 'Sunpop.cn', 'company': 'Sunpop.cn', 'maintainer': 'Sunpop.cn', diff --git a/app_chatgpt/models/ai_robot.py b/app_chatgpt/models/ai_robot.py index 475a9555..8d863317 100644 --- a/app_chatgpt/models/ai_robot.py +++ b/app_chatgpt/models/ai_robot.py @@ -5,13 +5,15 @@ import openai from odoo import api, fields, models, _ from odoo.exceptions import UserError +import logging +_logger = logging.getLogger(__name__) class AiRobot(models.Model): _name = 'ai.robot' _description = 'Gpt Robot' _order = 'sequence, name' - name = fields.Char(string='Name', translate=True) + name = fields.Char(string='Name', translate=True, required=True) provider = fields.Selection(string="AI Provider", selection=[('openai', 'OpenAI'), ('azure', 'Azure')], required=True, default='openai') ai_model = fields.Selection(string="AI Model", selection=[ ('gpt-4', 'Chatgpt 4'), @@ -35,7 +37,7 @@ GPT-3 A set of models that can understand and generate natural language openapi_api_key = fields.Char(string="API Key", help="Provide the API key here") temperature = fields.Float(string='Temperature', default=0.9) max_length = fields.Integer('Max Length', default=300) - endpoint = fields.Char('End Point') + endpoint = fields.Char('End Point', default='https://api.openai.com/v1/chat/completions') engine = fields.Char('Engine', help='If use Azure, Please input the Model deployment name.') api_version = fields.Char('API Version', default='2022-12-01') sequence = fields.Integer('Sequence', help="Determine the display order", default=10) @@ -62,7 +64,16 @@ GPT-3 A set of models that can understand and generate natural language top_p=0.5, frequency_penalty=0, presence_penalty=0, stop=["Human:", "AI:"]) - + + _logger.warning('=====================azure input data: %s' % data) if 'choices' in response: res = response['choices'][0]['text'].replace(' .', '.').strip() return res + + @api.onchange('provider') + def _onchange_provider(self): + if self.provider == 'openai': + self.endpoint = 'https://api.openai.com/v1/chat/completions' + elif self.provider == 'azure': + self.endpoint = 'https://odoo.openai.azure.com' + diff --git a/app_chatgpt/models/mail_channel.py b/app_chatgpt/models/mail_channel.py index d0f2f6b2..25544309 100644 --- a/app_chatgpt/models/mail_channel.py +++ b/app_chatgpt/models/mail_channel.py @@ -6,6 +6,7 @@ import datetime # from transformers import TextDavinciTokenizer, TextDavinciModel from odoo import api, fields, models, _ from odoo.exceptions import UserError + import logging _logger = logging.getLogger(__name__) @@ -15,9 +16,18 @@ class Channel(models.Model): @api.model def get_openai(self, gpt_id, provider, api_key, ai_model, data, user="Odoo"): + if provider == 'azure': + res = gpt_id.get_openai(data) + return res + headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"} - R_TIMEOUT = 5 + R_TIMEOUT = 30 + o_url = gpt_id.endpoint or "https://api.openai.com/v1/chat/completions" + # 以下处理 open ai + # 获取模型信息 + # list_model = requests.get("https://api.openai.com/v1/models", headers=headers) + # model_info = requests.get("https://api.openai.com/v1/models/%s" % ai_model, headers=headers) if ai_model == 'dall-e2': # todo: 处理 图像引擎,主要是返回参数到聊天中 # image_url = response['data'][0]['url'] @@ -33,49 +43,43 @@ class Channel(models.Model): "model": ai_model, "messages": [{"role": "user", "content": data}], "temperature": 0.9, - "max_tokens": 2000, + "max_tokens": gpt_id.max_length or 1000, "top_p": 1, "frequency_penalty": 0.0, "presence_penalty": 0.6, "user": user, "stop": ["Human:", "AI:"] } - if provider == 'openai': - response = requests.post("https://api.openai.com/v1/chat/completions", data=json.dumps(pdata), headers=headers, timeout=R_TIMEOUT) - res = response.json() - if 'choices' in res: - # for rec in res: - # res = rec['message']['content'] - res = '\n'.join([x['message']['content'] for x in res['choices']]) - return res - elif provider == 'azure': - res = gpt_id.get_openai(data) + + _logger.warning('=====================open input pdata: %s' % pdata) + + response = requests.post(o_url, data=json.dumps(pdata), headers=headers, timeout=R_TIMEOUT) + res = response.json() + if 'choices' in res: + # for rec in res: + # res = rec['message']['content'] + res = '\n'.join([x['message']['content'] for x in res['choices']]) return res else: pdata = { "model": ai_model, "prompt": data, "temperature": 0.9, - "max_tokens": 2000, + "max_tokens": gpt_id.max_length or 1000, "top_p": 1, "frequency_penalty": 0.0, "presence_penalty": 0.6, "user": user, "stop": ["Human:", "AI:"] } - if provider == 'openai': - response = requests.post("https://api.openai.com/v1/completions", data=json.dumps(pdata), headers=headers, timeout=R_TIMEOUT) - res = response.json() - if 'choices' in res: - res = '\n'.join([x['text'] for x in res['choices']]) - return res + response = requests.post(o_url, data=json.dumps(pdata), headers=headers, timeout=R_TIMEOUT) + res = response.json() + if 'choices' in res: + res = '\n'.join([x['text'] for x in res['choices']]) + return res elif provider == 'azure': - _logger.warning('=====================azure input data: %s' % data) res = gpt_id.get_openai(data) return res - # 获取模型信息 - # list_model = requests.get("https://api.openai.com/v1/models", headers=headers) - # model_info = requests.get("https://api.openai.com/v1/models/%s" % ai_model, headers=headers) return "获取结果超时,请重新跟我聊聊。" diff --git a/app_chatgpt/static/description/src/demob.jpg b/app_chatgpt/static/description/src/demob.jpg new file mode 100644 index 00000000..958c6424 Binary files /dev/null and b/app_chatgpt/static/description/src/demob.jpg differ diff --git a/app_chatgpt/views/ai_robot_views.xml b/app_chatgpt/views/ai_robot_views.xml index 790b32f1..017010c8 100644 --- a/app_chatgpt/views/ai_robot_views.xml +++ b/app_chatgpt/views/ai_robot_views.xml @@ -25,7 +25,7 @@ - +