新功能: - 创建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助手体验!
130 lines
4.4 KiB
Python
Executable File
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)
|
|
|