From e5385843605d468350d689c6f60973aaaf494651 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 6 Aug 2026 18:49:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(uapi):=20response=20template=20follows=20Sa?= =?UTF-8?q?ge=20async=20task=20spec=20=E2=80=94=20SUCCEEDED/FAILED=20branc?= =?UTF-8?q?hes=20with=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/minimax_h3_setup.sql | 131 +++++++++++---------------------------- 1 file changed, 35 insertions(+), 96 deletions(-) diff --git a/sql/minimax_h3_setup.sql b/sql/minimax_h3_setup.sql index 2e25ba1..0fc4b4b 100644 --- a/sql/minimax_h3_setup.sql +++ b/sql/minimax_h3_setup.sql @@ -1,75 +1,25 @@ -- ============================================================ --- MiniMax-H3 — uapiio + uapi (data/response Jinja2 templates) +-- MiniMax-H3 — 完整 uapi + uapiio 部署 SQL -- ============================================================ --- === uapiio === +-- === 1. uapiio === INSERT IGNORE INTO uapiio (id, name, description, input_fields) VALUES ( 'm_h3_video_gen_io', 'MiniMax-H3 视频生成', - 'MiniMax-H3 视频生成v2接口。支持文生视频、图生视频(首帧/尾帧)。', + 'MiniMax-H3 视频生成v2接口。支持文生视频、图生视频(首帧)。', '[ - { - "name": "model", - "label": "模型", - "uitype": "text", - "defaultvalue": "MiniMax-H3", - "hidden": true - }, - { - "name": "prompt", - "label": "提示词", - "required": true, - "uitype": "text" - }, - { - "name": "image_files", - "label": "参考图片(首帧)", - "uitype": "image" - }, - { - "name": "resolution", - "label": "分辨率", - "uitype": "code", - "data": [ - {"value": "768P", "text": "768P"}, - {"value": "2K", "text": "2K"} - ], - "defaultvalue": "768P" - }, - { - "name": "duration", - "label": "视频时长", - "uitype": "code", - "data": [ - {"value": 4, "text": "4秒"}, - {"value": 5, "text": "5秒"}, - {"value": 6, "text": "6秒"}, - {"value": 8, "text": "8秒"}, - {"value": 10, "text": "10秒"}, - {"value": 12, "text": "12秒"}, - {"value": 15, "text": "15秒"} - ], - "defaultvalue": 5 - }, - { - "name": "ratio", - "label": "宽高比", - "uitype": "code", - "data": [ - {"value": "adaptive", "text": "自适应"}, - {"value": "21:9", "text": "21:9"}, - {"value": "16:9", "text": "16:9"}, - {"value": "4:3", "text": "4:3"}, - {"value": "1:1", "text": "1:1"}, - {"value": "3:4", "text": "3:4"}, - {"value": "9:16", "text": "9:16"} - ], - "defaultvalue": "adaptive" - } + {"name":"model","label":"模型","uitype":"text","defaultvalue":"MiniMax-H3","hidden":true}, + {"name":"prompt","label":"提示词","required":true,"uitype":"text"}, + {"name":"image_files","label":"参考图片(首帧)","uitype":"image"}, + {"name":"resolution","label":"分辨率","uitype":"code","data":[{"value":"768P","text":"768P"},{"value":"2K","text":"2K"}],"defaultvalue":"768P"}, + {"name":"duration","label":"视频时长","uitype":"code","data":[{"value":4,"text":"4秒"},{"value":5,"text":"5秒"},{"value":6,"text":"6秒"},{"value":8,"text":"8秒"},{"value":10,"text":"10秒"},{"value":12,"text":"12秒"},{"value":15,"text":"15秒"}],"defaultvalue":5}, + {"name":"ratio","label":"宽高比","uitype":"code","data":[{"value":"adaptive","text":"自适应"},{"value":"21:9","text":"21:9"},{"value":"16:9","text":"16:9"},{"value":"4:3","text":"4:3"},{"value":"1:1","text":"1:1"},{"value":"3:4","text":"3:4"},{"value":"9:16","text":"9:16"}],"defaultvalue":"adaptive"} ]' ); --- === uapi: 创建视频任务 === +-- === 2. uapi: 创建任务 (async) === +-- data: bricks字段 → MiniMax content数组格式 +-- response: {{response}} 透传,由 chunk_match='task_id' 提取task_id INSERT IGNORE INTO uapi (id, upappid, name, title, description, need_auth, stream, path, httpmethod, chunk_match, headers, params, data, response, ioid) VALUES ( 'm_h3_create_task', 'minimax', @@ -84,28 +34,13 @@ INSERT IGNORE INTO uapi (id, upappid, name, title, description, need_auth, strea '{"Content-Type": "application/json", "Authorization": "Bearer {{apikey}}"}', NULL, '{ - "model": "{{model or "MiniMax-H3"}}", + "model": "{{model or ''MiniMax-H3''}}", "content": [ -{% if image_files %} -{% if isinstance(image_files, str) %} -{% set image_files = [image_files] %} -{% endif %} -{% for img in image_files %} - { - "type": "image_url", - "image_url": {"url": "{{b64media2url(request, img)}}"}, - "role": "first_frame" - }{% if not loop.last or prompt %},{% endif %} -{% endfor %} -{% endif %} -{% if prompt %} - { - "type": "text", - "text": {{json.dumps(prompt)}} - } -{% endif %} +{% if image_files %}{% if isinstance(image_files, str) %}{% set image_files = [image_files] %}{% endif %}{% for img in image_files %} + {"type": "image_url", "image_url": {"url": "{{b64media2url(request, img)}}"}, "role": "first_frame"}{% if not loop.last or prompt %},{% endif %}{% endfor %}{% endif %}{% if prompt %} + {"type": "text", "text": {{json.dumps(prompt)}}}{% endif %} ], - "resolution": "{{resolution or "768P"}}", + "resolution": "{{resolution or ''768P''}}", "duration": {{duration or 5}}{% if ratio %}, "ratio": "{{ratio}}"{% endif %} }', @@ -113,7 +48,9 @@ INSERT IGNORE INTO uapi (id, upappid, name, title, description, need_auth, strea 'm_h3_video_gen_io' ); --- === uapi: 查询视频任务 === +-- === 3. uapi: 查询任务 (sync) === +-- response: 按Sage async task规范转换 +-- output.task_status: SUCCEEDED → video+usage, FAILED → error INSERT IGNORE INTO uapi (id, upappid, name, title, description, need_auth, stream, path, httpmethod, chunk_match, headers, params, data, response, ioid) VALUES ( 'm_h3_query_task', 'minimax', @@ -129,22 +66,24 @@ INSERT IGNORE INTO uapi (id, upappid, name, title, description, need_auth, strea NULL, NULL, '{ - "task_id": "{{response.task.id}}", - "status": "{{response.task.status}}", - "video_url": "{{response.task.content.url}}", - "resolution": "{{response.task.resolution}}", - "duration": {{response.task.duration}}, - "ratio": "{{response.task.ratio}}" - }', +{% if output.task_status == ''SUCCEEDED'' %} + "video": "{{downloadfile2url(request, output.video_url)}}", + "usage": {{json.dumps(output.usage)}}, +{% elif output.task_status == ''FAILED'' %} + "error": "{{output.code}}:{{output.message}}", +{% endif %} + "status": "{{output.task_status}}" +}', 'm_h3_video_gen_io' ); --- === upapp === +-- === 4. upapp === INSERT IGNORE INTO upapp (id, name, baseurl, myappid, ownerid, description) VALUES ( - 'minimax', - 'minimax', - 'https://api.minimax.chat', - 'minimax', - 'platform', + 'minimax', 'minimax', 'https://api.minimax.chat', 'minimax', 'platform', 'MiniMax 视频生成平台。提供 H3 视频生成模型。' ); + +-- === 5. upappkey (请替换真实 API Key) === +-- INSERT IGNORE INTO upappkey (id, upappid, orgid, apikey, enabled_date, expired_date) VALUES ( +-- 'mk_minimax_default', 'minimax', 'platform', '', '2025-01-01', '9999-12-31' +-- );