modify: 视频推流
This commit is contained in:
+23
-4
@@ -2,6 +2,7 @@
|
||||
豆包视觉理解 Worker 插件
|
||||
"""
|
||||
import os
|
||||
import logging
|
||||
from openai import AsyncOpenAI
|
||||
from volcenginesdkarkruntime import AsyncArk
|
||||
from chongming_worker import create_workers as _create_workers
|
||||
@@ -12,6 +13,8 @@ from .global_var import (
|
||||
)
|
||||
from .router import *
|
||||
|
||||
logger = logging.getLogger("plugins.doubao")
|
||||
|
||||
# 自动绑定 gen_models 生成的 Pydantic 模型
|
||||
auto_bind_models("doubao")
|
||||
|
||||
@@ -19,24 +22,34 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
"""
|
||||
工厂函数:由 app 生命周期调用,创建 Worker 协程。
|
||||
"""
|
||||
logger.info("豆包插件初始化开始 (count=%d, aicc=%s)", count, config.get("is_aicc", False))
|
||||
|
||||
is_aicc = config.get("is_aicc", False)
|
||||
set_is_aicc(is_aicc)
|
||||
|
||||
api_key = config.get("api_key") or os.environ.get("VOLC_ACCESSKEY")
|
||||
if not api_key:
|
||||
logger.error("豆包插件初始化失败: 缺少 API_KEY")
|
||||
raise ValueError("缺少 API_KEY,请在配置中设置 api_key 或环境变量 VOLC_ACCESSKEY")
|
||||
|
||||
model = config.get("model", "doubao-seed-evolving")
|
||||
os.environ["DOUBAO_MODEL"] = model
|
||||
logger.info("豆包模型: %s", model)
|
||||
|
||||
if is_aicc:
|
||||
logger.info("豆包使用 AICC 安全通信模式")
|
||||
# AICC 模式:懒加载,避免非 AICC 环境导入失败
|
||||
from bytedance.volcengine_aicc_sdk.secure_http_client import (
|
||||
AICCConfig, AsyncSecureHttpClient,
|
||||
)
|
||||
try:
|
||||
from bytedance.volcengine_aicc_sdk.secure_http_client import (
|
||||
AICCConfig, AsyncSecureHttpClient,
|
||||
)
|
||||
except ImportError as e:
|
||||
logger.error("AICC SDK 导入失败: %s,请确认已安装 bytedance_volcengine_aicc_sdk", e)
|
||||
raise
|
||||
|
||||
base_url = config.get("base_url", "https://ark.cn-beijing.volces.com/api/v3")
|
||||
os.environ["DOUBAO_BASE_URL"] = base_url
|
||||
logger.info("豆包 AICC base_url: %s", base_url)
|
||||
|
||||
aicc_config = AICCConfig(ra_url=base_url, auth_token=api_key)
|
||||
client = AsyncOpenAI(
|
||||
@@ -45,16 +58,22 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
http_client=AsyncSecureHttpClient(aicc_config=aicc_config),
|
||||
)
|
||||
set_aicc_client(client)
|
||||
logger.info("豆包 AICC 客户端已创建")
|
||||
else:
|
||||
logger.info("豆包使用标准 Ark SDK 模式")
|
||||
# Ark 模式:使用 AsyncArk
|
||||
base_url = config.get("base_url", "https://ark.cn-beijing.volces.com/api/v3")
|
||||
os.environ["DOUBAO_BASE_URL"] = base_url
|
||||
client = AsyncArk(base_url=base_url, api_key=api_key)
|
||||
set_ark_client(client)
|
||||
logger.info("豆包 Ark 客户端已创建 (base_url=%s)", base_url)
|
||||
|
||||
# 委托给通用运行时创建 Worker 任务
|
||||
logger.info("豆包插件初始化完成,创建 %d 个 Worker 副本", count)
|
||||
return _create_workers(session, config, count, worker_manager)
|
||||
|
||||
async def cleanup(worker_item: str):
|
||||
"""清理资源"""
|
||||
logger.info("豆包插件清理: %s", worker_item)
|
||||
cleanup_all()
|
||||
print(f"{worker_item} 清理完毕")
|
||||
logger.info("豆包插件清理完毕: %s", worker_item)
|
||||
@@ -1,8 +1,11 @@
|
||||
import os
|
||||
import logging
|
||||
from chongming_worker import rpc_method
|
||||
from ..models.pydantic import AnalyzePostRequest, AnalyzePostResponse
|
||||
from ..global_var import get_client, get_is_aicc
|
||||
|
||||
logger = logging.getLogger("plugins.doubao.analyze")
|
||||
|
||||
@rpc_method(
|
||||
subject="doubao.analyze",
|
||||
method="POST",
|
||||
@@ -10,10 +13,11 @@ from ..global_var import get_client, get_is_aicc
|
||||
response_model=AnalyzePostResponse,
|
||||
)
|
||||
async def analyze(request: AnalyzePostRequest) -> AnalyzePostResponse:
|
||||
print(f"[DEBUG] analyze called with prompt={request.prompt}, image_base64 length={len(request.image_base64)}")
|
||||
logger.info("收到分析请求: prompt=%s, image_len=%d", request.prompt, len(request.image_base64))
|
||||
client = get_client()
|
||||
if client is None:
|
||||
return AnalyzePostResponse(result="", error="客户端未初始化")
|
||||
logger.error("豆包客户端未初始化(is_aicc=%s)", get_is_aicc())
|
||||
return AnalyzePostResponse(result="", error="客户端未初始化,请检查插件启动日志确认 API_KEY 和 AICC 配置是否正确")
|
||||
|
||||
# 获取图片数据
|
||||
image_base64 = request.image_base64
|
||||
@@ -49,6 +53,8 @@ async def analyze(request: AnalyzePostRequest) -> AnalyzePostResponse:
|
||||
**create_kwargs # type: ignore
|
||||
)
|
||||
result = response.choices[0].message.content # type: ignore
|
||||
logger.info("分析完成: 结果长度=%d", len(result) if result else 0)
|
||||
return AnalyzePostResponse(result=result) # type: ignore
|
||||
except Exception as e:
|
||||
logger.error("调用豆包API失败: %s", e, exc_info=True)
|
||||
return AnalyzePostResponse(result="", error=f"调用豆包API失败: {str(e)}")
|
||||
Reference in New Issue
Block a user