From b5f8020ad5ba97c0e5093ea788e37eb592ad475b Mon Sep 17 00:00:00 2001 From: Zhang Xiao Yan Date: Thu, 10 Apr 2025 14:02:32 +0800 Subject: [PATCH] feat(all): deployed chatbot widget --- docs/_static/js/chatbot_widget.css | 9 ++++++++ docs/_static/js/chatbot_widget_cn.js | 31 ++++++++++++++++++++++++++++ docs/_static/js/chatbot_widget_en.js | 30 +++++++++++++++++++++++++++ docs/conf_common.py | 1 + docs/en/conf.py | 7 +++++-- docs/zh_CN/conf.py | 7 +++++-- 6 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 docs/_static/js/chatbot_widget.css create mode 100644 docs/_static/js/chatbot_widget_cn.js create mode 100644 docs/_static/js/chatbot_widget_en.js diff --git a/docs/_static/js/chatbot_widget.css b/docs/_static/js/chatbot_widget.css new file mode 100644 index 0000000000..c6585b0588 --- /dev/null +++ b/docs/_static/js/chatbot_widget.css @@ -0,0 +1,9 @@ +#kapa-widget-container { + z-index: 10000 !important; + position: absolute !important; + } + + .mantine-Modal-root { + z-index: 10000; + position: absolute; + } diff --git a/docs/_static/js/chatbot_widget_cn.js b/docs/_static/js/chatbot_widget_cn.js new file mode 100644 index 0000000000..01ba62fdde --- /dev/null +++ b/docs/_static/js/chatbot_widget_cn.js @@ -0,0 +1,31 @@ +document.addEventListener("DOMContentLoaded", function () { + var script = document.createElement("script"); + script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; + script.setAttribute("data-bot-protection-mechanism", "hcaptcha"); + script.setAttribute("data-website-id", "6b18f5e5-d883-4ccd-9a24-371457cc0d7b"); + script.setAttribute("data-modal-title", "ESP-IDF 编程指南文档 AI 助手"); + script.setAttribute("data-project-color", "#C62817"); + script.setAttribute("data-project-logo", "https://dl.espressif.com/public/logo.png"); + script.setAttribute("data-button-image", "https://dl.espressif.com/chatbot/Chatbot.png"); + script.setAttribute("data-button-text-font-size", "0px"); + script.setAttribute("data-button-border-radius", "50%"); + script.setAttribute("data-button-bg-color", "#38393a"); + script.setAttribute("data-button-border", "#38393a"); + script.setAttribute("data-button-height", "45px"); + script.setAttribute("data-button-width", "45px"); + script.setAttribute("data-button-animation-enabled", "false"); + script.setAttribute("data-button-image-height", "100%"); + script.setAttribute("data-button-image-width", "100%"); + script.setAttribute("data-button-padding", "0"); + script.setAttribute("data-button-hover-animation-enabled", "false"); + script.setAttribute("data-button-position-top", "50px"); + script.setAttribute("data-button-position-left", "305px"); + script.setAttribute("data-button-box-shadow", "0px 6px 12px 1px rgba(0,0,0,0.16)"); + script.setAttribute("data-modal-override-open-class", "test-ai"); + script.setAttribute("data-user-analytics-fingerprint-enabled", "true"); + script.setAttribute("data-modal-example-questions-title", "问题示例"); + script.setAttribute("data-modal-disclaimer", "欢迎使用乐鑫文档智能问答助手!本助手基于乐鑫的公开文档,旨在为您提供产品和服务的技术支持与解答。如有任何意见或建议,欢迎留下反馈!\n\n**注意**:本回答由 AI 生成,可能存在不准确之处,请核实重要信息。"); + script.setAttribute("data-modal-example-questions", "esp-idf 是什么?,我如何使用 esp-idf?"); + script.async = true; + document.head.appendChild(script); + }); diff --git a/docs/_static/js/chatbot_widget_en.js b/docs/_static/js/chatbot_widget_en.js new file mode 100644 index 0000000000..4f0841dee9 --- /dev/null +++ b/docs/_static/js/chatbot_widget_en.js @@ -0,0 +1,30 @@ +document.addEventListener("DOMContentLoaded", function () { + var script = document.createElement("script"); + script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; + script.setAttribute("data-bot-protection-mechanism", "hcaptcha"); + script.setAttribute("data-website-id", "e569d308-b8f4-43d1-a0d2-bebc1ece63de"); + script.setAttribute("data-project-name", "ESP-IDF Programming Guide"); + script.setAttribute("data-project-color", "#C62817"); + script.setAttribute("data-project-logo", "https://dl.espressif.com/public/logo.png"); + script.setAttribute("data-button-image", "https://dl.espressif.com/chatbot/Chatbot.png"); + script.setAttribute("data-button-text-font-size", "0px"); + script.setAttribute("data-button-border-radius", "50%"); + script.setAttribute("data-button-bg-color", "#38393a"); + script.setAttribute("data-button-border", "#38393a"); + script.setAttribute("data-button-height", "45px"); + script.setAttribute("data-button-width", "45px"); + script.setAttribute("data-button-animation-enabled", "false"); + script.setAttribute("data-button-image-height", "100%"); + script.setAttribute("data-button-image-width", "100%"); + script.setAttribute("data-button-padding", "0"); + script.setAttribute("data-button-hover-animation-enabled", "false"); + script.setAttribute("data-button-position-top", "50px"); + script.setAttribute("data-button-position-left", "305px"); + script.setAttribute("data-button-box-shadow", "0px 6px 12px 1px rgba(0,0,0,0.16)"); + script.setAttribute("data-modal-override-open-class", "test-ai"); + script.setAttribute("data-user-analytics-fingerprint-enabled", "true"); + script.setAttribute("data-modal-disclaimer", "This custom large language model (LLM), trained on official documentation from espressif.com, is designed to provide technical support and answers related to Espressif’s products and services. Give it a try, share your thoughts, and let us know your feedback—we truly appreciate it! \n\n**Note**: AI-generated information may be incomplete or inaccurate. Always verify critical information with official sources."); + script.setAttribute("data-modal-example-questions", "What is esp-idf?,How do I get started with esp-idf?"); + script.async = true; + document.head.appendChild(script); + }); diff --git a/docs/conf_common.py b/docs/conf_common.py index a1b545cd88..f458cd7411 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -450,6 +450,7 @@ with open('../page_redirects.txt') as f: html_redirect_pages = [tuple(line.split(' ')) for line in lines] html_static_path = ['../_static'] +html_css_files = ['js/chatbot_widget.css'] idf_build_system = { 'doxygen_component_info': True, diff --git a/docs/en/conf.py b/docs/en/conf.py index dbb6edf291..85998bcdf5 100644 --- a/docs/en/conf.py +++ b/docs/en/conf.py @@ -11,6 +11,7 @@ try: except ImportError: import os import sys + sys.path.insert(0, os.path.abspath('../')) from conf_common import * # noqa: F403,F401 @@ -19,11 +20,13 @@ import datetime current_year = datetime.datetime.now().year # General information about the project. -project = u'ESP-IDF Programming Guide' -copyright = u'2016 - {}, Espressif Systems (Shanghai) Co., Ltd'.format(current_year) +project = 'ESP-IDF Programming Guide' +copyright = '2016 - {}, Espressif Systems (Shanghai) Co., Ltd'.format(current_year) # noqa: A001 # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. language = 'en' html_zip = f'esp-idf-{language}-{release}' # noqa: F405 + +html_js_files = ['js/chatbot_widget_en.js'] diff --git a/docs/zh_CN/conf.py b/docs/zh_CN/conf.py index cf62a26e92..3935958e0c 100644 --- a/docs/zh_CN/conf.py +++ b/docs/zh_CN/conf.py @@ -11,6 +11,7 @@ try: except ImportError: import os import sys + sys.path.insert(0, os.path.abspath('..')) from conf_common import * # noqa: F403,F401 @@ -19,11 +20,13 @@ import datetime current_year = datetime.datetime.now().year # General information about the project. -project = u'ESP-IDF 编程指南' -copyright = u'2016 - {} 乐鑫信息科技(上海)股份有限公司'.format(current_year) +project = 'ESP-IDF 编程指南' +copyright = '2016 - {} 乐鑫信息科技(上海)股份有限公司'.format(current_year) # noqa: A001 # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. language = 'zh_CN' html_zip = f'esp-idf-{language}-{release}' # noqa: F405 + +html_js_files = ['js/chatbot_widget_cn.js']