chenpei d0dc94e36d feat: 将弹幕功能替换为AI聊天助手
新功能:
- 创建AI聊天助手组件(AIChatWidget)
- 支持文字+图片多模态对话
- 集成Gemini AI API
- 支持图片编辑和内容生成
- 实时对话历史管理
- 优雅的UI设计,支持黑夜模式

技术实现:
- 后端API代理Gemini API(/api/ai-chat)
- 支持最多5张图片上传
- 流式响应处理
- 对话历史管理
- Base64图片处理

配置:
- 在.env中添加Gemini API配置
- GEMINI_API_KEY
- GEMINI_API_BASE_URL
- GEMINI_MODEL

替换原弹幕功能,提供更强大的AI助手体验!
2025-10-27 17:45:37 +08:00

130 lines
4.4 KiB
Python
Executable File

# Code generated by protoc-gen-volcengine-sdk
# source: ImpService
# DO NOT EDIT!
# coding:utf-8
from __future__ import print_function
from volcengine.Policy import *
from google.protobuf.json_format import *
from volcengine.imp.ImpServiceConfig import ImpServiceConfig
from retry import retry
from zlib import crc32
import os
import sys
import time
import datetime
from volcengine.util.Util import Util
from volcengine.imp.models.request.request_imp_pb2 import *
from volcengine.imp.models.response.response_imp_pb2 import *
MinChunkSize = 1024 * 1024 * 20
LargeFileSize = 1024 * 1024 * 1024
#
# Generated from protobuf service <code>ImpService</code>
#
class ImpService(ImpServiceConfig):
#
# SubmitJob.
#
# @param request ImpSubmitJobRequest
# @return ImpSubmitJobResponse
# @raise Exception
def submit_job(self, request):
try:
if sys.version_info[0] == 3:
jsonData = MessageToJson(request, False, True)
params = json.loads(jsonData)
for k, v in params.items():
if isinstance(v, (int, float, bool, str)) is True:
continue
else:
params[k] = json.dumps(v)
else:
params = MessageToDict(request, False, True)
for k, v in params.items():
if isinstance(v, (int, float, bool, str, unicode)) is True:
continue
else:
params[k] = json.dumps(v)
res = self.get("SubmitJob", params)
except Exception as Argument:
try:
resp = Parse(Argument.__str__(), ImpSubmitJobResponse(), True)
except Exception:
raise Argument
else:
raise Exception(resp.ResponseMetadata.Error.Code)
else:
return Parse(res, ImpSubmitJobResponse(), True)
#
# KillJob.
#
# @param request ImpKillJobRequest
# @return ImpKillJobResponse
# @raise Exception
def kill_job(self, request):
try:
if sys.version_info[0] == 3:
jsonData = MessageToJson(request, False, True)
params = json.loads(jsonData)
for k, v in params.items():
if isinstance(v, (int, float, bool, str)) is True:
continue
else:
params[k] = json.dumps(v)
else:
params = MessageToDict(request, False, True)
for k, v in params.items():
if isinstance(v, (int, float, bool, str, unicode)) is True:
continue
else:
params[k] = json.dumps(v)
res = self.get("KillJob", params)
except Exception as Argument:
try:
resp = Parse(Argument.__str__(), ImpKillJobResponse(), True)
except Exception:
raise Argument
else:
raise Exception(resp.ResponseMetadata.Error.Code)
else:
return Parse(res, ImpKillJobResponse(), True)
#
# RetrieveJob.
#
# @param request ImpRetrieveJobRequest
# @return ImpRetrieveJobResponse
# @raise Exception
def retrieve_job(self, request):
try:
if sys.version_info[0] == 3:
jsonData = MessageToJson(request, False, True)
params = json.loads(jsonData)
for k, v in params.items():
if isinstance(v, (int, float, bool, str)) is True:
continue
else:
params[k] = json.dumps(v)
else:
params = MessageToDict(request, False, True)
for k, v in params.items():
if isinstance(v, (int, float, bool, str, unicode)) is True:
continue
else:
params[k] = json.dumps(v)
res = self.get("RetrieveJob", params)
except Exception as Argument:
try:
resp = Parse(Argument.__str__(), ImpRetrieveJobResponse(), True)
except Exception:
raise Argument
else:
raise Exception(resp.ResponseMetadata.Error.Code)
else:
return Parse(res, ImpRetrieveJobResponse(), True)