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

75 lines
2.0 KiB
Python
Executable File

# coding:utf-8
import json
from enum import Enum
class FieldType(Enum):
Int64 = "int64"
List_Int64 = "list<int64>"
String = "string"
List_String = "list<string>"
Float32 = "float32"
Bool = "bool"
class EmbddingModelType(Enum):
EmbeddingModelBgeLargeZhAndM3 = "bge-large-zh-and-m3"
EmbeddingModelBgeLargeZh = "bge-large-zh"
EmbeddingModelBgeM3 = "bge-m3"
EmbeddingModelDoubao = "doubao-embedding"
EmbeddingModelDoubaoAndM3 = "doubao-embedding-and-m3"
EmbeddingModelDoubaoLarge = "doubao-embedding-large"
EmbeddingModelDoubaoLargeAndM3 = "doubao-embedding-large-and-m3"
class IndexType(Enum):
FLAT = "flat"
HNSW = "hnsw"
HNSW_HYBRID = "hnsw_hybrid"
class QuantType(Enum):
Float = "float"
Int8 = "int8"
Fix16 = "fix16"
class Field(object):
def __init__(self, kwargs):
self._field_name = kwargs.get("field_name")
self._field_type = kwargs.get("field_type")
self._field_val = kwargs.get("default_val") if kwargs.get("default_val") \
is not None else kwargs.get("field_value")
self._dim = kwargs.get("dim", 1)
self._is_primary_key = kwargs.get("is_primary_key", False)
self._pipeline_name = kwargs.get("pipeline_name")
@property
def field_name(self):
return self._field_name
@property
def field_type(self):
return self._field_type
@property
def field_val(self):
return self._field_val
@property
def dim(self):
return self._dim
@property
def is_primary_key(self):
return self._is_primary_key
@property
def pipeline_name(self):
return self._pipeline_name
class EnumEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Enum):
return obj.value
if isinstance(obj, dict):
return {k: self.default(v) for k, v in obj.items()}
return super().default(obj)