- init.py: 新增6个虚拟人函数(create/list/upload/sync等),注册到ServerEnv - api_mapping: 新增create_group→CreateAssetGroup映射 - 外部API: 5个rl_virtual_*.dspy端点(创建组合/列表/上传/素材列表/状态) - 前端API: 4个submit/get dspy端点(UI表单提交和数据获取) - UI页面: 3个页面(创建组合/上传素材/查看素材) - index.ui: 左侧导航新增虚拟人素材分区(3个按钮) - load_path.py: RBAC新增virtual页面和api/%路径 - docs: api_downapp.md新增虚拟人API文档(5个端点)
35 lines
1.6 KiB
Plaintext
35 lines
1.6 KiB
Plaintext
# ============================================================
|
|
# 上传虚拟人素材到私域素材组合
|
|
# 参数: vendor_group_id(必填), source_url(必填), asset_type(选填,默认Image), name(选填)
|
|
# curl 示例:
|
|
# curl -X POST 'https://ai.atvoe.com/reallife_asset/api/rl_virtual_upload.dspy' \
|
|
# -H 'Authorization: Bearer *** \
|
|
# -d 'vendor_group_id=group-xxx&source_url=https://example.com/image.jpg&asset_type=Image&name=虚拟人正面'
|
|
# ============================================================
|
|
vendor_group_id = params_kw.get("vendor_group_id", "")
|
|
source_url = params_kw.get("source_url", "")
|
|
asset_type = params_kw.get("asset_type", "Image")
|
|
name = params_kw.get("name", "")
|
|
|
|
if not vendor_group_id or not source_url:
|
|
return json.dumps({"status": "error", "data": {"message": "vendor_group_id和source_url为必填参数"}})
|
|
|
|
# Handle base64 data URL conversion
|
|
if source_url.startswith("data:") or (not source_url.startswith("http") and len(source_url) < 8000):
|
|
source_url = await b64media2url(request, source_url)
|
|
|
|
try:
|
|
org_id = (await get_userorgid()) or "0"
|
|
user_id = await get_user()
|
|
result = await rl_upload_virtual_asset(org_id, vendor_group_id, source_url, asset_type, name, user_id)
|
|
if result.get("success"):
|
|
return json.dumps({"status": "ok", "data": {
|
|
"id": result.get("id"),
|
|
"vendor_asset_id": result.get("vendor_asset_id"),
|
|
"status": result.get("status"),
|
|
}})
|
|
else:
|
|
return json.dumps({"status": "error", "data": {"message": result.get("message", "上传失败")}})
|
|
except Exception as e:
|
|
return json.dumps({"status": "error", "data": {"message": str(e)}})
|