Merge branch '17.0' of github.com:guohuadeng/app-odoo into 17.0

This commit is contained in:
Chill
2025-02-10 15:58:02 +08:00
65 changed files with 762 additions and 16 deletions

View File

@@ -7,8 +7,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
'name': 'Google Bard Ai for odoo ai center, 谷歌Ai支持', 'name': 'Google Gemini (Bard) Ai for odoo ai center, 谷歌Ai支持',
'version': '24.11.06', 'version': '17.0.25.02.08',
'author': 'odooai.cn', 'author': 'odooai.cn',
'company': 'odooai.cn', 'company': 'odooai.cn',
'maintainer': 'odooai.cn', 'maintainer': 'odooai.cn',
@@ -19,12 +19,12 @@
'sequence': 10, 'sequence': 10,
'images': ['static/description/banner.gif'], 'images': ['static/description/banner.gif'],
'summary': ''' 'summary': '''
Google Bard Ai for Odoo AI Center. Ai Aigc Center including Google Bard Ai, Azure Ai, Baidu Ai. Google Gemini Ai for Odoo AI Center. Ai Aigc Center including Google Gemini Ai(Bard before), Azure Ai, Baidu Ai.
Support chatgpt 4 image. DALLE, Integration All ChatGpt Api and Azure OpenAI Service. Support chatgpt 4 image. DALLE, Integration All ChatGpt Api and Azure OpenAI Service.
Easy Chat channel with several ChatGPT Robots and train. Easy Chat channel with several ChatGPT Robots and train.
''', ''',
'description': ''' 'description': '''
Chat with google bard ai with odoo. Chat with google Gemini ai with odoo.
Allows the application to leverage the capabilities of the GPT language model to generate human-like responses, Allows the application to leverage the capabilities of the GPT language model to generate human-like responses,
providing a more natural and intuitive user experience. providing a more natural and intuitive user experience.
odoo bard connector. odoo bard connector.

View File

@@ -44,11 +44,8 @@
13. Full Open Source. 13. Full Open Source.
''', ''',
'depends': [ 'depends': [
'base',
'app_odoo_customize', 'app_odoo_customize',
'base_setup',
'mail', 'mail',
# 'queue_job',
], ],
'data': [ 'data': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',

View File

@@ -312,11 +312,13 @@ class Channel(models.Model):
# if msg_len * 2 >= 8000: # if msg_len * 2 >= 8000:
# messages = [{"role": "user", "content": msg}] # messages = [{"role": "user", "content": msg}]
if sync_config == 'sync':
self.get_ai_response(ai, messages, channel, user_id, message)
else:
if hasattr(self, 'with_delay'):
self.with_delay().get_ai_response(ai, messages, channel, user_id, message)
else:
self.get_ai_response(ai, messages, channel, user_id, message) self.get_ai_response(ai, messages, channel, user_id, message)
# if sync_config == 'sync':
# self.get_ai_response(ai, messages, channel, user_id, message)
# else:
# self.with_delay().get_ai_response(ai, messages, channel, user_id, message)
except Exception as e: except Exception as e:
raise UserError(_(e)) raise UserError(_(e))

4
app_deepseek/__init__.py Normal file
View File

@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# from . import controllers
from . import models

View File

@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
# Created on 2023-09-15
# author: 欧度智能https://www.odooai.cn
# email: 300883@qq.com
# resource of odooai
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Deepseek Ai for odoo ai center, 深度求索Ai支持-对话模型',
'version': '17.0.25.02.07',
'author': 'odooai.cn',
'company': 'odooai.cn',
'maintainer': 'odooai.cn',
'category': 'Website/Website',
'website': 'https://www.odooai.cn',
'live_test_url': 'https://demo.odooapp.cn',
'license': 'LGPL-3',
'sequence': 10,
'license': 'LGPL-3',
'price': 0.00,
'currency': 'EUR',
'images': ['static/description/banner.png'],
'summary': '''
Deepseek AI for Odoo AI Center. Ai Aigc Center including Deepseek, Azure Chatgpt Ai, OpenAi Chatgpt Ai.
Ai服务中心的DeepSeek支持包括V3和R1等本版本只支持开放对话模型。
Integration All Ai robot Api, like Azure OpenAI Chatgpt Service.
Also support(need extra pay) Ali Ai, Baidu Ai, Kimi Ai.
Easy Chat channel with several Ai Robots and train.
''',
'description': '''
Chat with Deepseek ai with odoo.
Allows the application to leverage the capabilities of the GPT language model to generate human-like responses,
providing a more natural and intuitive user experience.
odoo Deepseek ai connector.
1. Multi ChatGpt openAI robot Connector. Chat and train.
2. Multi Ai support including Google Bard Ai, Azure Ai, Chatgpt 4, Chatgpt 3.5 Turbo, Chatgpt 3 Davinci, Chatgpt 2 Code Optimized, 'Dall-E Image.
3. Bind ChatGpt Api to user. So we can chat to robot user or use ChatGpt Channel for Group Chat.
4. White and black List for ChatGpt.
5. Setup Demo Chat time for every new user.
6. Easy Start and Stop ChatGpt.
7. Evaluation the ai robot to make better response. This training.
8. Add api support Connect the Microsoft Azure OpenAI Service.
9. Can set Synchronous or Asynchronous mode for Ai response.
10.Filter Sensitive Words Setup.
11. Multi-language Support. Multi-Company Support.
12. Support Odoo 18,17,16,15,14,13,12, Enterprise and Community and odoo.sh Edition.
13. Full Open Source.
''',
'depends': [
'app_chatgpt',
],
'data': [
'data/ai_robot_data.xml',
'data/user_partner_data.xml',
'data/mail_channel_data.xml',
'views/ai_robot_views.xml',
],
'assets': {
},
'installable': True,
'application': True,
'auto_install': False,
}

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import main

View File

@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from odoo import http
class ChatgptController(http.Controller):
@http.route(['/chatgpt_form'], type='http', auth="public", csrf=False,
website=True)
def question_submit(self):
return http.request.render('app_chatgpt.connector')

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo noupdate="1">
<record id="robot_deepseek_chat" model="ai.robot">
<field name="name">DeepSeek Ai</field>
<field name="provider">deepseek</field>
<field name="ai_model">deepseek-chat</field>
<field name="set_ai_model">deepseek-chat</field>
<field name="api_version" eval="False"/>
<field name="endpoint">https://api.deepseek.com</field>
<field name="sequence">11</field>
<field name="image_avatar" type="base64" file="app_deepseek/static/src/img/deepseek.png"/>
</record>
</odoo>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record model="discuss.channel" id="channel_deepseek">
<field name="name">Deepseek Group Chat</field>
<!-- <field name="description">你的职责是帮我们解决各行业你是各行业的专家,专门解决大家的行业疑难问题。</field>-->
<field name="image_128" type="base64" file="app_deepseek/static/src/img/deepseek.png"/>
<field name="ai_partner_id" ref="app_deepseek.partner_deepseek_chat"/>
</record>
<record model="mail.message" id="module_install_notification">
<field name="model">discuss.channel</field>
<field name="res_id" ref="app_deepseek.channel_deepseek"/>
<field name="message_type">email</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Welcome to Deepseek Ai Group Chat</field>
<field name="body"><![CDATA[<p>Welcome to Deepseek Ai Group Chat.</p>
<p>Please ask me any question.</p>]]></field>
</record>
<record model="discuss.channel" id="app_deepseek.channel_deepseek">
<field name="group_ids" eval="[Command.link(ref('base.group_user'))]"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="partner_deepseek_chat" model="res.partner">
<field name="name">Deepseek聊天</field>
<field name="image_1920" type="base64" file="app_deepseek/static/src/img/deepseek.png"/>
</record>
<record id="user_deepseek_chat" model="res.users">
<field name="login">deepseek_chat@example.com</field>
<field name="email">deepseek_chat@example.com</field>
<field name="partner_id" ref="partner_deepseek_chat"/>
<field name="gpt_id" ref="robot_deepseek_chat"/>
<field name="company_id" ref="base.main_company"/>
<field name="company_ids" eval="[Command.link(ref('base.main_company'))]"/>
<field name="groups_id" eval="[Command.link(ref('base.group_user'))]"/>
</record>
</data>
</odoo>

123
app_deepseek/i18n/zh_CN.po Normal file
View File

@@ -0,0 +1,123 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * app_ai_baidu
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0+e-20230721\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-15 10:35+0000\n"
"PO-Revision-Date: 2023-09-15 10:35+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: app_ai_baidu
#: model:ir.model.fields,help:app_ai_baidu.field_ai_robot__set_ai_model
msgid ""
"\n"
"GPT-4: Can understand Image, generate natural language or code.\n"
"GPT-3.5: A set of models that improve on GPT-3 and can understand as well as generate natural language or code\n"
"DALL·E: A model that can generate and edit images given a natural language prompt\n"
"Whisper: A model that can convert audio into text\n"
"Embeddings:\tA set of models that can convert text into a numerical form\n"
"CodexLimited: A set of models that can understand and generate code, including translating natural language to code\n"
"Moderation: A fine-tuned model that can detect whether text may be sensitive or unsafe\n"
"GPT-3\tA set of models that can understand and generate natural language\n"
" "
msgstr ""
"\n"
"GPT-4: 最新引擎,更好的智能回复。支持多模态输入如图片,但暂时没开放。\n"
"GPT-3.5: 问答引擎,可以根据提问回复答案或者代码。\n"
"DALL·E: 根据要求生成图片。\n"
"Whisper: 文字转语音引擎。\n"
"Embeddings:\tA set of models that can convert text into a numerical form\n"
"CodexLimited: A set of models that can understand and generate code, including translating natural language to code\n"
"Moderation: A fine-tuned model that can detect whether text may be sensitive or unsafe\n"
"GPT-3\tA set of models that can understand and generate natural language\n"
#. module: app_ai_baidu
#: model:ir.model.fields,field_description:app_ai_baidu.field_ai_robot__provider
msgid "AI Provider"
msgstr "Ai服务商"
#. module: app_ai_baidu
#: model:ir.model,name:app_ai_baidu.model_ai_robot
msgid "Ai Robot"
msgstr "Ai机器人"
#. module: app_ai_baidu
#: model:ai.robot,name:app_ai_baidu.robot_bloomz_7b
#: model:ir.model.fields.selection,name:app_ai_baidu.selection__ai_robot__set_ai_model__bloomz-7b
msgid "BLOOMZ-7B"
msgstr ""
#. module: app_ai_baidu
#: model:ir.model,name:app_ai_baidu.model_mail_channel
msgid "Discussion Channel"
msgstr ""
#. module: app_ai_baidu
#: model:ir.model.fields.selection,name:app_ai_baidu.selection__ai_robot__set_ai_model__ernie-bot-turbo
msgid "ERNIE-Bot-turbo百度大语言"
msgstr ""
#. module: app_ai_baidu
#: model:ir.model.fields.selection,name:app_ai_baidu.selection__ai_robot__set_ai_model__ernie-bot
msgid "ERNIE-Bot百度大语言"
msgstr ""
#. module: app_ai_baidu
#. odoo-python
#: code:addons/app_ai_baidu/models/ai_robot.py:0
#: code:addons/app_ai_baidu/models/ai_robot.py:0
#, python-format
msgid "Please provide Ai Robot [%s] API Key and Secret Key first."
msgstr "请先设置 Ai机器人 [%s] 的 API Key 和 Secret Key。"
#. module: app_ai_baidu
#: model:ir.model.fields,help:app_ai_baidu.field_ai_robot__client_secret
msgid "Provide API Client Secret here if needed."
msgstr "如果需要请设置API Client Secret。"
#. module: app_ai_baidu
#: model:ir.model.fields,field_description:app_ai_baidu.field_ai_robot__set_ai_model
msgid "Quick Set Model"
msgstr "模型快选"
#. module: app_ai_baidu
#. odoo-python
#: code:addons/app_ai_baidu/models/mail_channel.py:0
#, python-format
msgid "Response Timeout, please speak again."
msgstr ""
#. module: app_ai_baidu
#: model:ir.model.fields,field_description:app_ai_baidu.field_ai_robot__client_secret
msgid "Secret Key"
msgstr ""
#. module: app_ai_baidu
#. odoo-python
#: code:addons/app_ai_baidu/models/mail_channel.py:0
#, python-format
msgid "温馨提示:您发送的内容含有敏感词,请修改内容后再向我发送。"
msgstr ""
#. module: app_ai_baidu
#: model:ir.model.fields.selection,name:app_ai_baidu.selection__ai_robot__provider__baidu
msgid "百度千帆"
msgstr ""
#. module: app_ai_baidu
#: model:ai.robot,name:app_ai_baidu.robot_baidu_ernie_bot
msgid "百度千帆ERNIE-Bot"
msgstr ""
#. module: app_ai_baidu
#: model:ai.robot,name:app_ai_baidu.robot_baidu_ernie_bot_turbo
msgid "百度千帆ERNIE-Bot-turbo"
msgstr ""

View File

@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import ai_robot
from . import discuss_channel

View File

@@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
import base64
import os
import requests, json
import logging
from openai import OpenAI
from http import HTTPStatus
from odoo import api, fields, models, modules, tools, _
from odoo.exceptions import UserError
_logger = logging.getLogger(__name__)
class AiRobot(models.Model):
_inherit = 'ai.robot'
provider = fields.Selection(selection_add=[('deepseek', 'Deepseek')], ondelete={'deepseek': 'set default'})
set_ai_model = fields.Selection(
selection_add=[
('deepseek-chat', 'Deepseek Chat'),
],
ondelete={'deepseek-chat': 'set default'})
@api.onchange('provider')
def _onchange_provider(self):
if self.provider == 'deepseek':
self.endpoint = 'https://api.deepseek.com'
# 取头像
module_path = modules.get_module_path('app_ai', display_warning=False)
if module_path:
path = modules.check_resource_path(module_path, ('static/description/src/%s.png' % self.provider))
if path:
image_file = tools.file_open(path, 'rb')
self.image_avatar = base64.b64encode(image_file.read())
return super()._onchange_provider()
def get_deepseek(self, data, author_id, answer_id, param={}):
self.ensure_one()
api_key = self.openapi_api_key
if not api_key or not self.endpoint:
raise UserError(_("Please provide Ai Robot [%s] API Key and Endpoint URL first." % self.name))
if isinstance(data, list):
messages = data
else:
messages = [{"role": "user", "content": data}]
url = self.endpoint
client = OpenAI(api_key=api_key, base_url=self.endpoint)
response = client.chat.completions.create(
model=self.ai_model,
messages=messages
)
res = response.model_dump()
if 'choices' in res:
return res
else:
_logger.warning('=====================deepseek output data: %s' % response.json())
return _("Response Timeout, please speak again.")
def get_ai_post(self, res, author_id=False, answer_id=False, param={}):
if self.provider == 'deepseek':
usage = res['usage']
content = res['choices'][0]['message']['content']
return content, usage, True
else:
return super().get_ai_post(res, author_id, answer_id, param)

View File

@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
import logging
import datetime
from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError
from odoo.osv import expression
_logger = logging.getLogger(__name__)
class Channel(models.Model):
_inherit = 'discuss.channel'
def get_openai_context(self, channel_id, author_id, answer_id, minutes=30, chat_count=0):
gpt_id = False
if self.ai_partner_id:
ai_user = self.env['res.users'].search([('partner_id', '=', self.ai_partner_id.id)], limit=1)
gpt_id = ai_user.mapped('gpt_id')
if gpt_id and gpt_id.provider == 'deepseek':
context_history = []
afterTime = fields.Datetime.now() - datetime.timedelta(minutes=minutes)
message_model = self.env['mail.message'].sudo()
domain = [('res_id', '=', channel_id),
('model', '=', 'discuss.channel'),
('message_type', '!=', 'user_notification'),
('parent_id', '!=', False),
('is_ai', '=', True),
('body', '!=', '<p>%s</p>' % _('Response Timeout, please speak again.')),
('body', '!=', _('温馨提示:您发送的内容含有敏感词,请修改内容后再向我发送。'))]
if self.channel_type in ['group', 'channel']:
# 群聊增加时间限制,当前找所有人,不限制 author_id
domain = expression.AND([domain, [('date', '>=', afterTime)]])
else:
domain = expression.AND([domain, [('author_id', '=', answer_id.id)]])
if chat_count == 0:
ai_msg_list = []
else:
ai_msg_list = message_model.with_context(tz='UTC').search(domain, order="id asc", limit=chat_count)
for ai_msg in ai_msg_list:
# 判断这个 ai_msg 是不是ai发有才 insert。 判断 user_msg 是不是 user发的有才 insert
user_msg = ai_msg.parent_id.sudo()
ai_content = str(ai_msg.body).replace("<p>", "").replace("</p>", "").replace("<p>", "")
if ai_msg.author_id.sudo().gpt_id and answer_id.sudo().gpt_id and ai_msg.author_id.sudo().gpt_id == answer_id.sudo().gpt_id:
context_history.insert(0, {
'role': 'assistant',
'content': ai_content,
})
if not user_msg.author_id.gpt_id:
user_content = user_msg.body.replace("<p>", "").replace("</p>", "").replace('@%s' % answer_id.name, '').lstrip()
context_history.append({
'role': 'user',
'content': user_content,
})
context_history.append({
'role': 'assistant',
'content': ai_content,
})
return context_history
else:
return super(Channel, self).get_openai_context(channel_id, author_id, answer_id, minutes, chat_count)

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,322 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
# -*- coding: utf-8 -*-
##############################################################################
# Copyright (C) 2009~2024 odooAi.cn
##############################################################################
-->
<html>
<!-- begin title-->
<section class="oe_container container o_cc o_cc2">
<h2 class="text-center bg-warning text-white pt24 pb24">Deepseek Ai for odoo ai center,Mass AIGC Generator. </h2>
<h4 class="text-center">DeepSeek深度求索Ai支持-全Ai服务管理中心,全网Ai对接核心框架</h4>
</section>
<!-- end title-->
<section class="oe_container container">
<div class="oe_row oe_spaced" >
<div class="row">
<div class="oe_row">
<h3>Latest update: v17.0.25.02.07</h3>
<div class="row">
<img class="oe_demo oe_screenshot img img-fluid" style="max-height: 100%;" src="banner.png">
</div>
<div class="oe_span12 oe_spaced">
<div class="alert alert-info" style="padding:8px;font-weight: 300; font-size: 20px;">
<i class="fa fa-hand-o-right"></i><b> Key features: </b>
<ul class="list-unstyled">
<li>
<i class="fa fa-check-square-o text-primary"></i>
1. Deepseek Ai support for Multi Ai robot Connector. Ai Chat, character setup and train.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
2. Multi Ai support including Google Bard Ai, Azure Ai, Chatgpt 4, Chatgpt 3.5 Turbo, Chatgpt 3 Davinci, Chatgpt 2 Code Optimized, 'Dall-E Image.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
3. Bind ChatGpt Api to user. So we can chat to robot user or use ChatGpt Channel for Group Chat.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
4. White and black List for ChatGpt.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
5. Setup Demo Chat time for every new user.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
6. Easy Start and Stop ChatGpt.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
7. Evaluation the ai robot to make better response. This training.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
8. Add api support Connect the Microsoft Azure OpenAI Service.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
9. Can set Synchronous or Asynchronous mode for Ai response.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
10.Filter Sensitive Words Setup.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
11. Multi-language Support. Multi-Company Support.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
12. Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
13. Full Open Source.
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">Add more Ai support like Deepseek Ai, google bard, chatgpt 4, baidu china</h2>
<h4 class="oe_slogan"> Need to navigate to odoo app store to buy and install addons</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo01.jpg"/>
</div>
<h4 class="oe_slogan">Please apply for the api first from deepseek follow https://api-docs.deepseek.com/</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="apply1.jpg"/>
</div>
<h4 class="oe_slogan">Setup for your own key</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="apply5.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">Easy to use Ai Robot with multi Provider. Easy chat, easy help</h2>
<h4 class="oe_slogan">Deepseek or Open Ai for more smart. 中国用户可以使用deepseek</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo_deepseek.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">1. Multi ChatGpt openAI robot Connector. Chat and train.</h2>
<h4 class="oe_slogan"> Goto Setting--> GPT Robot to setup your robot api. </h4>
<p> Input your api key, And Select the api model you need to use.</p>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo1.jpg"/>
</div>
<p> You can set the Temperature higer for more creative answer.</p>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo2.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">2. Multi Api support, Chatgpt 3.5 Turbo, Chatgpt 3 Davinci, Chatgpt 2 Code Optimized, 'Dall-E Image.</h2>
<h4 class="oe_slogan"> Choose the model you want to use</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo2.jpg"/>
</div>
<p> You can set the Temperature higer for more creative answer.</p>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo3.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">3. Bind ChatGpt Api to user. So we can chat to robot user or use ChatGpt Channel for Group Chat.</h2>
<h4 class="oe_slogan"> Go Settings ->users, bind chatgpt to some user.</h4>
<img src="demo4.jpg"/>
</div>
<h4 class="oe_slogan"> So you can have many user, and many chatgpt robot. This provide you an Ai pool.</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo5.jpg"/>
</div>
<h4 class="oe_slogan"> You can set the blacklist to this chatgpt robot to limit request. Also you can setup Demo time for every normal user..</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo6.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">4. White and black List for ChatGpt.</h2>
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">5. Setup Demo Chat time for every new user.</h2>
<h4 class="oe_slogan"> You can set the blacklist to this chatgpt robot to limit request. Also you can setup Demo time for every normal user..</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo6.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">6. Easy Start and Stop ChatGpt..</h2>
<h4 class="oe_slogan"> You can easy chat with the apt robot with odoo IM</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo7.jpg"/>
</div>
<h4 class="oe_slogan"> You can chat with several robot in the same time</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo8.jpg"/>
</div>
<h4 class="oe_slogan"> If you have more than 1 robot in the group. you can @ the specify robot.</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo9.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">7. Evaluation the ai robot to make better response. This training.</h2>
<h4 class="oe_slogan"> You can Evaluation chatgpt's answer. Mark as good for good answer. Mark as back for bad answer.</h4>
<p> With Evaluation, you can make your ai robot more smart.
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo71.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">8. Add api support Connect the Microsoft Azure OpenAI Service.</h2>
<h4 class="oe_slogan"> Azure openai add. It is for china and other country which no chatgpt service.</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo81.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">9. Can set Synchronous or Asynchronous mode for Ai response.</h2>
<h4 class="oe_slogan"> Synchronous(default) mode can get response then ask question again. Asynchronous mode would make you do other thing when waiting for response.</h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="demo91.jpg"/>
</div>
</div>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h2 class="bg-warning text-center pt8 pb8 mt16 mb16">Multi-language Support..</h2>
<h4 class="oe_slogan"> </h4>
<div class="oe_demo oe_screenshot img img-fluid">
<img src="cnreadme.jpg"/>
</div>
</div>
</section>
<!-- begin howto-->
<section class="oe_container container s_text_block o_colored_level pt16 pb16">
<h2 class="text-center bg-info text-white pt16 pb16">- How to setup and use -</h2>
</section>
<section class="oe_container container">
<div class="oe_row oe_spaced">
<h4 class="pt16">
1. Get ChatGPT Api key from openai or azure.
</h4>
<p>Api From Azure, please read </p>
<p>https://www.odooai.cn/blog/odoo-install-deploy-6/chatgpt4-china-application-chatgpt3-5-free-one-year-microsoft-azure-openai-api-registration-tutorial-odoo-aicenter-integration-28 </p>
<p>Api For deepseek, please follow</p>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="apply1.jpg">
</div>
</div>
<h4 class="pt16">2. Setup your Api information from Settings -- Users --Ai Robot</h4>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup2.jpg">
</div>
</div>
<h4 class="pt16">3. Setup your Api Provider(openai) , api key, End point</h4>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup3.jpg">
</div>
<p> As openai change the api often, sometime you need to check</p>
<p> https://platform.openai.com/docs/introduction</p>
</div>
<h4 class="pt16">4.Bind your Ai Robot (GPT) to a User. We already setup a sample.</h4>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup4.jpg">
</div>
</div>
<h4 class="pt16">5. Bind your Ai User to Channel from Discuss. We already setup a sample.</h4>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup5.jpg">
</div>
</div>
<h5 class="pt16">6. You can setup the Ai system context and Character.</h5>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup6.jpg">
</div>
</div>
<h5 class="pt16">7. You can setup Lots of channel for subjects and projects..</h5>
<div class="row">
<div class="oe_demo oe_screenshot img img-fluid">
<img src="setup7.jpg">
</div>
</div>
</div>
</section>
<!-- end howto-->
<!-- begin support-->
<section class="container oe_dark">
<div class="oe_row oe_spaced text-center">
<div class="row">
<h2 class="oe_slogan">Technical Help & Support</h2>
</div>
<div class="col-md-12 pad0">
<div class="oe_mt16">
<p><h4 class="pt16">
For any type of technical help & support requests, Feel free to contact us</h4></p>
<a style="background: #002e5a none repeat scroll 0% 0%; color: rgb(255, 255, 255);position: relative; overflow: hidden;"
class="btn btn-warning btn-lg" rel="nofollow" href="mailto:odoo@china.com"><span
style="height: 354px; width: 354px; top: -147.433px; left: -6.93335px;" class="o_ripple"></span>
<i class="fa fa-envelope"></i> odoo@china.com</a>
<p><h4 class="pt16">
Via QQ: 300883 (App user would not get QQ or any other IM support. Only for odoo project customize.)</h4></p>
<a style="background: #002e5a none repeat scroll 0% 0%; color: rgb(255, 255, 255);position: relative; overflow: hidden;"
class="btn btn-warning btn-lg" rel="nofollow" href="mailto:300883@qq.com"><span
style="height: 354px; width: 354px; top: -147.433px; left: -6.93335px;" class="o_ripple"></span>
<i class="fa fa-envelope"></i> 300883@qq.com</a>
</div>
<div class="oe_mt16">
<h4 class="pt16">Visit our website for more support.</h4>
<h4 class="pt16">https://www.odooai.cn</h4>
</div>
</div>
</div>
</section>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- <record id="baidu_ai_robot_form_view" model="ir.ui.view">
<field name="name">baidu.ai.robot.form</field>
<field name="model">ai.robot</field>
<field name="inherit_id" ref="app_chatgpt.ai_robot_form_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='openapi_api_key']" position="after">
<field name="client_secret" password="True"/>
</xpath>
</field>
</record> -->
</odoo>

View File

@@ -31,7 +31,7 @@
'category': 'Base', 'category': 'Base',
'website': 'https://www.odooai.cn', 'website': 'https://www.odooai.cn',
'live_test_url': 'https://demo.odooapp.cn', 'live_test_url': 'https://demo.odooapp.cn',
'license': 'OPL-1', 'license': 'LGPL-3',
'sequence': 2, 'sequence': 2,
'price': 0.00, 'price': 0.00,
'currency': 'EUR', 'currency': 'EUR',

View File

@@ -4,5 +4,4 @@
from . import res_config_settings from . import res_config_settings
from . import auth_oauth_provider from . import auth_oauth_provider
from . import res_users from . import res_users
from . import ir_config_parameter

View File

@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
class IrConfigParameter(models.Model):
_inherit = 'ir.config_parameter'
def init(self, force=False):
super(IrConfigParameter, self).init(force=force)
if force:
oauth_app_saas = self.env.ref('app_saas.ir_config_parameter.py')
if not oauth_app_saas:
return
dbuuid = self.sudo().get_param('database.uuid')
oauth_app_saas.write({'client_id': dbuuid})

View File

@@ -29,7 +29,7 @@
'category': 'Base', 'category': 'Base',
'website': 'https://www.odooai.cn', 'website': 'https://www.odooai.cn',
'live_test_url': 'https://demo.odooapp.cn', 'live_test_url': 'https://demo.odooapp.cn',
'license': 'OPL-1', 'license': 'LGPL-3',
'sequence': 2, 'sequence': 2,
'price': 2.00, 'price': 2.00,
'currency': 'EUR', 'currency': 'EUR',