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

92 lines
2.5 KiB
Python
Executable File

# coding:utf-8
import json
class ComplexEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, Statement):
return {'Effect': o.effect,
'Action': o.action,
'Resource': o.resource}
if isinstance(o, InnerToken):
return {
'LTAccessKeyId': o.lt_access_key_id,
'AccessKeyId': o.access_key_id,
'SignedSecretAccessKey': o.signed_secret_access_key,
'ExpiredTime': o.expired_time,
'PolicyString': o.policy_string,
'Signature': o.signature
}
if isinstance(o, Policy):
return {
'Statement': [item for item in o.statements]
}
return json.JSONEncoder.default(self, o)
class Policy(object):
def __init__(self, statements):
self.statements = statements
class Statement(object):
def __init__(self):
self.effect = ''
self.action = []
self.resource = []
self.condition = ''
@staticmethod
def new_allow_statement(actions, resources):
s = Statement()
s.effect = "Allow"
s.action = actions
s.resource = resources
return s
@staticmethod
def new_deny_statement(actions, resources):
s = Statement()
s.effect = "Deny"
s.action = actions
s.resource = resources
return s
class SecurityToken2(object):
def __init__(self):
self.access_key_id = ''
self.secret_access_key = ''
self.session_token = ''
self.expired_time = ''
self.current_time = ''
def __str__(self):
return json.dumps({
'AccessKeyID': self.access_key_id,
'SecretAccessKey': self.secret_access_key,
'SessionToken': self.session_token,
'ExpiredTime': self.expired_time,
'CurrentTime': self.current_time
})
class InnerToken(object):
def __init__(self):
self.lt_access_key_id = ''
self.access_key_id = ''
self.signed_secret_access_key = ''
self.expired_time = 0
self.policy_string = ''
self.signature = ''
def __str__(self):
return json.dumps({
'LTAccessKeyId': self.lt_access_key_id,
'AccessKeyId': self.access_key_id,
'SignedSecretAccessKey': self.signed_secret_access_key,
'ExpiredTime': self.expired_time,
'PolicyString': self.policy_string,
'Signature': self.signature
})