当前位置: 首页 > news >正文

MAX API v1.0.4-preview.1 发布:强化 Seedance 视频任务、通用视频任务计费、Responses 兼容能力与部分bug修复

[!NOTE]
当前 MAX API 分为正式版和 Preview 预览版。Preview 预览版用于提前开放新能力和修复,便于在真实环境中验证兼容性、稳定性和安全性;正式版将在对应 Preview 预览版稳定运行 1 周后正式发布,以保障系统安全性和可靠性。

MAX API v1.0.4-preview.1 发布:强化 Seedance 视频任务、通用视频任务计费、Responses 兼容能力与部分bug修复

GitHub 地址

https://github.com/MAX-API-Next/MAX-API/releases/tag/v1.0.4-preview.1

Highlights

  • 完善豆包 Seedance 2.0 视频任务支持,新增官方safety_identifierpriority参数透传,并保留对 Seedance 响应形态的结果解析兼容。
  • 补齐豆包视频任务对火山 Seedance 官方请求体的支持,content[]ratiogenerate_audiodurationseed等顶层参数可继续透传到 DoubaoVideo 上游封装。
  • 收紧 DoubaoVideo 官方可选字符串处理,ratiocallback_urlservice_tiersafety_identifier可区分未传和显式空字符串,带空白的ratio会在转发前规范化。
  • 修正豆包 Seedance 2.0 动态计费:按输出分辨率和是否包含视频输入计算倍率,避免 1080p、4k 或视频输入请求被错误按基础档计费。
  • 新增通用任务参数化计费兜底能力,任意视频模型只要配置任务 rate card,就可以按最终请求体中的时长、分辨率、音频、媒体输入等字段计费,不再局限于 Kling / Seedance 专属适配。
  • 通用视频任务协议聚焦路径、状态和结果解析配置;请求体透传复用渠道级Pass Through Body,字段改写和默认值复用现有Param Override
  • 任务提交链路会在计费前应用最终Param Override请求体,避免视频时长、分辨率、尺寸或输入媒体被改写后仍按旧请求预扣费。
  • 修复通用视频任务计费边界场景:multipart 请求经Param Override改写后会按最终上游 JSON 计费,顶层image/images也不会被同步后的请求上下文重复计数。
  • 任务Param Override的 header 联动现在会真正发送到上游;return_error和无效改写会按本地配置错误处理,不再误触发渠道处罚。
  • 清理历史协议配置,前端保存会移除旧协议值和已废弃的视频任务请求体配置。
  • 修复异步视频任务可能卡在in_progress + 100%的问题,非终态任务不会再因为进度为100%而退出后台轮询。
  • 修复多节点异步任务结算日志归属:任务完成轮询可以发生在任意节点,但消费日志和用量数据会归属到任务发起节点。
  • 增强用量看板数据维度,支持按分组、令牌、渠道和节点记录消费聚合,降低多节点部署下排查账单归属的难度。
  • 增强 OpenAI Responses 兼容层,新增 Responses ↔ Chat Completions 双向转换能力,便于把/v1/responses请求接入 Chat 形态上游。
  • 新增 Gemini/v1/responses兼容路径,支持将 Responses 请求转换为 Gemini generateContent,并将 Gemini 非流式 / 流式结果回转为 Responses 响应。
  • Advanced Custom 新增openai_responses_to_openai_chat_completions转换器,可为自定义通道配置 Responses 入站、Chat Completions 上游的转发链路。
  • 修复 Claude / Gemini 工具调用响应兼容性问题,assistant 文本和工具调用同时存在时不会再丢失文本内容。
  • 加强 Claude 工具调用参数校验,空参数继续按{}兼容,无效 JSON 参数会明确报错,避免向上游发送被静默改写的空输入。
  • 强化前端 Markdown / HTML 富文本渲染安全,公告、首页、关于页、法律文档等可配置内容统一经过安全渲染链路处理。
  • 优化通知中心状态管理,提升已读状态、通知弹窗去重和本地缓存恢复的稳定性。
  • Playground 改善模型 / 分组等选择器在数据刷新、异常和空选项下的状态恢复。
  • Playground 输入区补充长文本布局保护,连续超长提示词不会再横向撑开输入框或把配置、发送按钮挤出屏幕。
  • 用量日志新增更细的重试筛选语义,可区分普通错误重试和空输出重试,方便定位重试来源。
  • 修复历史时间窗口下用量统计 RPM / TPM 显示为 0 的问题,实时速率指标继续按最近 60 秒计算。

New Features

  • 豆包视频任务新增火山 Seedance 官方请求体支持:
    • 可直接接收官方content[]请求,不再要求同时提供顶层prompt
    • callback_urlreturn_last_frameservice_tierexecution_expires_aftergenerate_audiodrafttools可透传到上游封装。
    • ratioresolutiondurationframesseedcamera_fixedwatermark等生成控制参数会合并进最终上游 payload。
    • generate_audio: falsereturn_last_frame: falsepriority: 0seed: 0等显式零值会被保留。
    • ratiocallback_urlservice_tiersafety_identifier等可选字符串会保留“未传”和“显式空字符串”的差异。
  • 豆包 Seedance 2.0 任务请求新增参数支持:
    • safety_identifier可透传到上游。
    • priority可透传到上游。
    • priority: 0会被保留并发送,不会因为零值被omitempty丢弃。
  • Seedance 2.0 计费支持官方分辨率档位:
    • 480p/720p作为基础档。
    • 1080p使用独立倍率。
    • 4k使用独立倍率。
    • 是否包含视频输入会参与同一套价格表计算。
  • 任务参数化计费支持通用 rate card 兜底:
    • 适配器专属计费仍优先执行,Kling / Ali 等已有专属实现保持原有优先级。
    • 适配器未返回参数化计费结果时,会按模型名或上游模型名匹配task_billing_setting.rate_cards
    • 可按durationresolutionratioquality/modehas_audiohas_video_inputimage_countvideo_count等通用字段匹配价格行。
    • 未配置 rate card 的模型继续回退到原有模型价格和OtherRatios计费逻辑。
  • 通用视频任务协议支持渠道级请求体透传:开启渠道Pass Through Body后,JSON 请求会保留客户端字段,并继续应用模型映射。
  • 通用视频任务协议提交请求统一经过Param Override,可复用现有参数覆盖能力完成字段改写、默认值注入和上游适配。
  • 任务请求头现在复用普通 relay 的 header override 处理,set_headerdelete_headercopy_headermove_headerpass_headers可用于异步任务上游请求。
  • 异步任务私有数据新增任务发起节点记录,提交任务时保存当前NODE_NAME,轮询结算时复用该节点名写入消费数据。
  • quota_data用量聚合新增分组、令牌、渠道和节点维度,便于后续按更细粒度做数据导出、审计和多节点归因。
  • 新增 Responses → Chat Completions 请求转换能力:
    • 支持instructions、字符串 / 数组input、多模态 content parts、function call、function call output、tools、tool_choice 和text.format
    • 保留可选参数显式零值,例如temperature: 0parallel_tool_calls: falsemax_output_tokens
    • text.format.json_schema会转换为 Chat Completionsresponse_format.json_schema,并移除 Responses 外层type字段。
  • 新增 Chat Completions → Responses 响应转换能力:
    • 支持普通文本、reasoning summary、function call、usage 和length/content_filter不完整结束状态。
    • 流式 Chat Completions 可回转为 Responses SSE 事件,包括response.created、文本增量、reasoning summary、function call arguments 和最终完成事件。
  • Gemini 通道新增 Responses 模式处理:
    • 非流式/v1/responses返回 OpenAI Responses 结构。
    • 流式/v1/responses返回 Responses SSE 事件。
    • 上游缺少 usage 时会按输出内容估算 usage,并写入最终response.completed事件。
  • Advanced Custom 新增openai_responses_to_openai_chat_completions转换器:
    • 入站路径支持/v1/responses
    • 上游可配置到 OpenAI Chat Completions 兼容路径。
    • 前端高级自定义配置补齐转换器选项、路径提示和校验。
  • Responses → Chat 标准转换会拒绝custom_tool_call和非 function tool,避免把不符合 Chat Completions 协议的type: "custom"请求发给标准 Chat 上游。
  • 前端新增安全富文本渲染能力:
    • 新增 HTML 内容组件和共享 sanitizer。
    • Markdown 渲染统一走可审计的安全处理。
    • iframe 类型内容仅允许安全来源和安全嵌入路径。
  • 通知系统新增前端状态工具和存储测试,支持更可靠的通知去重、状态恢复和本地已读记录维护。
  • Playground 新增聊天历史清空入口,用户可以在不刷新页面的情况下快速重置当前对话。
  • 用量日志前端筛选新增重试子类型支持,列表筛选可匹配retry_logempty_retry两类标记。

Improvements

  • 豆包 Seedance 2.0 价格表从旧的固定视频输入折扣升级为按(模型, 分辨率, 是否视频输入)计算相对倍率。
  • 管理员仍只需把 Seedance 2.0ModelRatio配置为基础档无视频输入单价,系统会按实际请求自动追加OtherRatio
  • Seedance 2.0 计费逻辑同时读取通用任务metadata和官方 protocol 原始请求,避免请求转换链路与计费链路使用不同字段来源。
  • Seedance 2.0 计费逻辑会额外检查客户端原始请求中的顶层video_url/video,避免官方媒体请求的视频输入被漏算。
  • DoubaoVideo 请求构建会先合并官方顶层 Seedance 字段,再应用metadata,保留历史metadata覆盖优先级。
  • 使用通用任务协议并开启渠道请求体透传时,后端只要求model必填;promptless image-driven 请求不会再被基础任务校验提前拒绝。
  • 通用任务上下文会从客户端原始 JSON 同步ratiogenerate_audiopriorityseed等官方字段,让透传、字段映射和计费读取同一份最终上下文。
  • generate_audio在任务上下文中使用独立字段保存,with_audio只作为兼容回退,减少同一个官方字段被重复映射造成的歧义。
  • DoubaoVideo 转发官方顶层可选字符串时改为按字段是否存在判断,显式空callback_urlservice_tiersafety_identifierratio不会被误当作未传字段丢弃。
  • 视频输入检测补充兼容metadata.video_urlmetadata.videometadata.content[].video_url等结构。
  • 视频输入计费检测会校验实际值是否可用,空字符串、nullfalse和空video_url.url不再触发视频输入倍率。
  • 通用任务 URL 拼接会识别并去除与base_url重复的 path 前缀,减少/v1/v1/...这类配置错误。
  • 通用任务请求会先生成最终提交体,再进入计费估算、预扣费和上游发送;Doubao、Gemini / Vertex、Ali 和 Kling 计费路径会优先参考最终提交体中的计费字段。
  • 视频任务最终请求上下文会从最终 JSON 提交体回填duration_secondswith_audiogenerate_audioinputparametersimagesreference_images等常见字段,保证字段映射后仍能被计费估算读取。
  • 通用参数化计费会优先读取最终上游 JSON 请求体,再回退到标准化任务请求和metadata;渠道字段映射、模型映射和参数覆盖后的计费输入与实际上游请求保持一致。
  • 通用参数化计费不会强制所有任务渠道实现新接口;没有配置 rate card 或没有命中价格行的模型会继续走原有计费路径,降低对既有视频渠道的兼容影响。
  • Ali / Kling 动态任务计费会优先解析最终上游 payload,Gemini / Vertex 会优先读取最终parameters.durationSecondsparameters.resolution,降低通用协议字段映射后的计费偏差。
  • 任务路径的Param Override错误会保留本地错误语义,跳过自动重试和渠道健康处罚;header override 配置错误同样不会被误当作上游失败。
  • 通用任务响应解析在拿到结果 URL 时会优先视为成功,兼容上游状态字段仍停留在in_progress但结果已生成的任务。
  • 异步任务后台轮询和超时扫描改为按任务状态判断未完成任务,不再因为非终态任务的进度被写成100%就跳过后续处理。
  • 普通消费日志的数据导出也会记录分组、令牌、渠道和当前节点,和异步任务消费日志保持一致的数据结构。
  • 旧的用户级用量查询继续按用户、模型和小时聚合返回,内部新增维度不会改变现有用户查询的总量语义。
  • Responses 兼容层增强消息回放逻辑,手动 replayresponse.output时会跳过reasoningcomputer_callweb_search_callfile_search_callitem_reference等非 Chat message 形态条目,避免注入空用户消息。
  • Responses → Chat 转换补齐 reasoning、工具调用、工具结果和多模态输入的映射,并对不支持的 stateful 字段提前返回明确错误。
  • Chat → Responses 转换补齐 officialincomplete_details.reason字段,避免继续输出非官方字段名。
  • Responses ↔ Chat usage 转换保留更完整的 token detail 信息,包括 cached creation、文本、音频、图片和 reasoning token 细分,减少兼容层造成的用量明细丢失。
  • Responses → Chat 流式转换复用同一套 usage 明细映射逻辑,流式和非流式的 cached creation、text、audio、image、reasoning token 细分保持一致。
  • OpenAI Chat → Responses 流式转换减少每个 SSE chunk 的重复 JSON 解析,仅在检测到错误字段时进入错误响应解析。
  • Responses → Chat 转换会校验function_call/function_call_output的调用 ID,缺少call_id/id时提前返回错误,避免转发空tool_call_id到上游。
  • Gemini Responses 工具转换对不支持的非 function tool 改为显式报错,不再静默丢弃搜索、代码执行、文件搜索等 managed tool 配置。
  • Gemini Responses 流式处理与 OpenAI Chat → Responses 流式处理保持一致:最终事件包含 usage 兜底估算,并在开启响应审计时写入审计内容。
  • Gemini Responses 转换会过滤 Gemini 不兼容的 custom / freeform Responses 工具和 custom tool call 输入输出,降低转换后被 Gemini 上游拒绝的概率。
  • Chat Completions 响应转换为 Claude / Gemini 格式时,若同一 assistant 消息同时包含文本和tool_calls,文本和工具调用都会保留。
  • Claude Chat → Claude Messages 工具调用转换更稳健:arguments为空时发送{}arguments不是合法 JSON object 时返回明确错误。
  • Claude 响应格式转换更符合 Anthropic 协议:无法解析为 JSON object 的 tool callarguments会包装到input.arguments,确保tool_use.input始终是 object。
  • Claude / Gemini 响应转换复用统一的 tool call 参数解析逻辑,并统一使用项目 JSON wrapper,减少不同通道之间的异常参数处理差异。
  • 豆包 legacy task protocol 的计费分辨率现在复用实际上游请求 payload,避免顶层请求字段和metadata转发字段不一致时出现计费 / 请求分歧。
  • 豆包 legacy task protocol 的可选resolution/ratio改为指针字段,显式空字符串会被保留,未传字段仍会省略,符合上游请求 DTO 的零值语义。
  • 豆包 Seedance 2.0 fast 模型补齐高分辨率视频输入价格组合,1080p / 4k 搭配视频输入时也会应用 fast 模型的视频输入倍率。
  • 用量日志 retry 标记补齐独立索引字段和读前 backfill 机制,旧日志会在首次 retry 筛选查询前完成标记回填,减少升级窗口期筛选不准的问题。
  • 用量统计中的 RPM / TPM 查询继续只统计最近 60 秒,但不再叠加页面选择的历史起止时间,历史窗口下也能显示当前实时速率。
  • 消费日志创建时的 retry 标记同步只保留一次 GORM hook,减少写入日志时重复解析OtherJSON 的开销。
  • 富文本渲染失败时采用更保守的失败关闭策略,避免 sanitizer 异常导致未清洗内容直接展示。
  • 登录、注册、关于页、首页和法律文档等页面的 Markdown / HTML 显示逻辑收敛到共享渲染工具,减少不同页面对同一内容的展示差异。
  • 通知弹窗去重改为当前页面生命周期内的内存状态,避免同一批通知在短时间内重复打扰用户。
  • Playground 输入框对连续无空格长文本启用容器内换行,并限制模型 / 分组选择器宽度,避免长内容或长模型名影响底部操作区布局。
  • Playground 底部工具栏允许在窄屏下收缩和换行,发送 / 停止按钮保持固定可见,不会被输入内容或配置控件挤出可视区域。

Bug Fixes

  • 修复doubao-seedance-2-0-260128顶层resolution: "1080p"请求被按基础档计费的问题。
  • 修复 1080p 无视频输入请求可能从应有的51/46倍率被错误计为1.0的问题。
  • 修复 1080p / 4k 搭配视频输入时仍按旧固定视频折扣计费的问题。
  • 修复priority: 0这类显式零值可选参数在请求转换时可能无法可靠表达的问题。
  • 修复多节点部署下异步任务由非提交节点轮询完成时,消费日志和用量导出被归属到轮询节点的问题。
  • 修复任务消费日志此前未写入quota_data导出维度,导致任务结算数据与普通消费日志在用量看板链路中不一致的问题。
  • 修复quota_data缓存聚合 key 过粗,可能把不同分组、令牌、渠道或节点的同小时同用户同模型数据合并到同一条记录的问题。
  • 修复空video_urlnull/falsevideo或空video_url.url仅因字段存在就触发 Seedance 2.0 视频输入折扣的问题。
  • 修复官方媒体请求将视频输入放在顶层video_url时,Seedance 2.0 计费没有应用视频输入价格的问题。
  • 修复 DoubaoVideo 通道丢弃火山 Seedance 官方顶层参数,导致ratio/generate_audio: false未生效、视频可能按默认比例生成并带音频的问题。
  • 修复 DoubaoVideo 官方ratio带前后空白时可能原样转发的问题,现在会按非空校验后的规范值发送。
  • 修复官方顶层callback_urlservice_tiersafety_identifier显式传入空字符串时无法和未传字段区分,导致空值覆盖无法表达的问题。
  • 修复generate_audio同时写入WithAudioGenerateAudio,造成官方字段和兼容回退字段语义混在一起的问题。
  • 修复仅使用官方content[]且无顶层prompt的 Seedance JSON 请求在 DoubaoVideo 校验阶段可能被拒绝的问题。
  • 修复通用视频任务启用渠道请求体透传时,promptless 图片驱动请求被基础校验错误拒绝的问题。
  • 修复任务Param Override改写durationresolutionsize、视频输入等计费字段后,预扣费仍按改写前请求计算的问题。
  • 修复 multipart 视频任务经过Param Override改写最终上游 JSON 后,计费上下文可能没有同步最终请求体,导致分辨率、时长、音频或模型按改写前请求计费的问题。
  • 修复任务Param Override return_error或无效规则被包装成build_request_failed500 上游错误,可能触发自动重试或渠道处罚的问题。
  • 修复任务Param Override中的set_header/pass_headers等 header 联动只写入运行时状态、没有真正发送到上游的问题。
  • 修复通用任务Param Override将计费字段写入上游专用parametersinput或媒体数组后,计费上下文没有同步这些最终字段的问题。
  • 修复通用参数化计费在最终请求体包含顶层image/images时,又从同步后的TaskSubmitReq镜像字段重复累加image_count,可能放大按图片数量匹配或计量的价格行的问题。
  • 修复任务 header override 配置错误从任务请求发送阶段返回时,可能继续被包装为上游请求失败的问题。
  • 修复旧request_body_moderequest_body_mappingrequest_body_defaults配置在前端保存后仍可能残留,导致后端拒绝或重复提交旧协议值的问题。
  • 修复通用视频任务 submit path 与base_url同时包含/v1时可能拼出重复路径的问题。
  • 修复 Seedance 上游已经生成结果,但本地任务仍停留在in_progress + 100%的问题;解析到结果 URL 时会转为完成。
  • 修复非终态视频任务写入progress: 100%后从后台轮询和超时扫描中消失,导致任务长期卡住的问题。
  • 修复 Advanced Custom 缺少 Responses → Chat 转换器,导致/v1/responses难以接入只兼容 Chat Completions 的自定义上游的问题。
  • 修复 Gemini Responses 流式上游缺少 usageMetadata 时,最终response.completed事件可能没有 usage 的问题。
  • 修复 Gemini Responses 流式调用未写入响应审计内容的问题。
  • 修复 Responses 手动回放response.output时,reasoning、搜索、电脑操作、文件搜索和 item reference 等非消息条目可能变成空 user 消息的问题。
  • 修复 Chat Completions 转 Responses 时不完整结束原因字段与官方 Responses 结构不一致的问题。
  • 修复 Responses → Chat 转换可能把custom_tool_call转成标准 Chat Completions 不支持的type: "custom"工具调用并继续转发的问题。
  • 修复 Responses → Chat 转换可能生成空tool_call_id,导致 assistant tool call 和 tool result 无法正确关联的问题。
  • 修复 Responses usage 回转到 Chat usage 时会丢失 cached creation、text、audio、image 等 token detail 字段的问题。
  • 修复 Responses → Chat 流式回转仍使用旧的 inline usage 映射,导致流式请求丢失 cached creation、text 和完整 completion details 的问题。
  • 修复 Gemini Responses 工具过滤静默丢弃非 function 工具,导致调用方难以发现上游能力未被支持的问题。
  • 修复 Claude / Gemini 输出格式在 assistant 消息同时包含文本和tool_calls时,仅保留工具调用、丢失文本说明的问题。
  • 修复 Claudetool_use在 OpenAI tool callarguments为空时被跳过的问题;无效 JSON 参数现在会返回错误,避免静默发送空input
  • 修复 Claude 响应转换中 malformed tool callargumentsfallback 可能把tool_use.input输出为裸字符串、不符合 Anthropic object 要求的问题。
  • 修复 Gemini malformed tool callarguments缺少对齐测试覆盖的问题,Claude / Gemini fallback 行为现在都有回归测试保护。
  • 修复豆包 legacy task protocol 中实际上游请求使用metadata.resolution,但计费仍可能读取顶层resolution,导致请求按 720p 转发却按 1080p 计费的问题。
  • 修复豆包 legacy task protocol 中显式传入空resolution/ratio时无法和未传字段区分的问题。
  • 修复doubao-seedance-2-0-fast-260128在 1080p / 4k 搭配视频输入时缺少价格组合,可能没有应用视频输入倍率的问题。
  • 修复 retry 日志中同时带有retry_logempty_retry标记时只被归类为空输出重试,导致错误重试筛选和统计少算的问题。
  • 修复前端用量日志 retry 筛选只看合并标记、无法区分错误重试和空输出重试的问题。
  • 修复用量统计在查询历史时间窗口时,RPM / TPM 因同时套用历史范围和最近 60 秒范围而显示为 0 的问题。
  • 修复日志写入时BeforeCreateBeforeSave同时同步 retry 标记,导致OtherJSON 每次创建被重复解析的问题。
  • 修复 Markdown / HTML 渲染链路中部分页面缺少统一清洗逻辑,公告或配置内容在不同入口显示安全性不一致的问题。
  • 修复通知重复展示和已读状态恢复不稳定的问题,减少刷新或重新打开页面后的重复提醒。
  • 修复 Playground 查询失败或选项列表为空时,模型 / 分组选择器可能保留不可用旧值的问题。
  • 修复 Playground 输入连续超长文本时,输入框宽度可能无限变宽并把配置、发送按钮顶到屏幕外的问题。
  • 清理jsonwrapcheck过期 allowlist 条目,避免移除直接encoding/json调用后 CI 仍因 stale baseline 失败。

Compatibility Notes

  • tasks.private_data新增node_nameJSON 字段;历史任务没有该字段时会回退使用当前处理节点,保持兼容。
  • quota_data表新增use_grouptoken_idchannel_idnode_name字段,升级后会随迁移自动补齐。
  • 现有用户维度用量查询会继续返回聚合后的总量;新增维度主要影响数据导出、内部归因和后续更细粒度分析。
  • 多节点部署建议显式配置稳定的NODE_NAME,这样异步任务日志和用量数据可以稳定归属到提交任务的实例。
  • Seedance 2.0 的基础计费配置仍以无视频输入基础档为准;1080p、4k 和视频输入组合由系统根据请求内容自动计算倍率。
  • Seedance 2.0 fast 模型高分辨率请求仍不额外叠加分辨率倍率,但 1080p / 4k 搭配视频输入时会应用 fast 模型的视频输入倍率;上游不支持的参数仍由上游校验。
  • 旧渠道重新保存时,前端会清理已废弃的request_body_mode/ mapping / defaults 字段;只保留路径覆盖的渠道会继续作为路径覆盖配置保存。
  • task_protocol_config不再包含请求体生成 DSL;需要原样透传请求体时使用渠道Pass Through Body,需要字段映射或默认值时使用Param Override
  • 任务Param Override现在会影响最终计费输入;如果旧配置曾通过默认值或字段改写改变时长、分辨率、尺寸或输入媒体,升级后预扣费会与实际上游请求保持一致。
  • 如果任务Param Override把字段改写到上游专用的parameters/input/ 媒体数组结构,升级后这些字段也会进入计费推断;建议检查旧规则是否依赖改写前的低价默认值。
  • 新增通用任务 rate card 后,管理员可为任意视频模型配置参数化计费;未配置任务 rate card 的模型仍保持旧的模型价格 / 倍率计费行为。
  • 使用image_count作为匹配条件或数量字段时,顶层image/images只会按最终请求体计一次,reference_images仍作为独立参考图输入计入。
  • 任务 header override 会在适配器默认请求头之后应用,配置中的运行时 header 可覆盖默认上游请求头;请确认set_header/pass_headers规则不会意外覆盖认证或内容类型。
  • Seedance 响应形态仍通过通用结果解析和豆包响应形态兜底兼容,但旧协议值本身不会再启用专用请求体构建路径。
  • Responses → Chat 兼容模式不支持需要服务端状态管理的 Responses 字段;请求包含conversationprevious_response_idpromptcontext_management时会返回明确错误。
  • Responses → Chat 兼容模式面向标准 Chat Completions 上游,不支持custom_tool_call、custom tool 或 freeform tool;Gemini 通道会在自身兼容路径中过滤这类不兼容工具。
  • Gemini Responses 兼容路径以 Chat Completions 中间形态转换为基础;Gemini 不支持的 custom / freeform 输入项会被过滤,非 function tool 会返回明确错误,不再静默丢弃。
  • Advanced Custom 的openai_responses_to_openai_chat_completions转换器只匹配/v1/responses入站路径;其它路径仍按各自注册的转换器校验。
  • Responses 兼容层会保留可选参数显式零值语义,避免客户端明确传入的0false在转发时丢失。
  • Responses → Chat replay 要求function_call带有call_ididfunction_call_output带有call_id;缺失时会返回错误,调用方需要补齐有效 tool call 关联 ID。
  • Claude 工具调用参数为空字符串时会继续按空 object 兼容;参数存在但不是合法 JSON object 时会失败返回,不再静默改写为{}
  • Claude 响应转换遇到 malformed tool callarguments时,会把原始字符串保存在tool_use.input.arguments,不再把裸字符串直接作为input
  • 豆包 legacy task protocol 中resolution/ratio作为可选字段处理;显式空字符串会继续发送给上游,未提供字段才会省略。
  • DoubaoVideo 官方顶层callback_urlservice_tiersafety_identifierratio也按可选字段处理;显式空字符串会保留,未传字段才会省略。
  • DoubaoVideo 的 Seedance 官方参数合并不会改变既有metadata覆盖优先级;已有通过metadata改写上游参数的渠道配置会继续优先生效。
  • multipart 任务请求仍走原有基础校验路径;本次官方content[]和顶层参数支持主要影响 JSON 请求体。
  • 前端富文本内容现在统一经过 sanitizer;依赖自定义 HTML 的部署需要确认内容符合允许的标签、属性和 iframe 来源规则。
  • Playground 输入区布局修复仅影响前端展示和响应式布局,不改变聊天请求体、模型 / 分组选择逻辑或后端计费语义。
  • .tmp/RELEASE_NOTES_v1.0.4.md为内部发布草稿,不会进入 Git 提交;发布前如需公开版本,应复制到正式发布流程中重新审阅。

Verification

  • go test ./relay/channel/task/doubao
  • go test ./relay/channel/task/taskcommon ./relay/channel/task/doubao ./relay/channel
  • go test ./relay/channel/task/taskcommon ./relay/channel/task/doubao ./relay/channel/openai ./model ./service
  • go test ./model ./service
  • go test ./model -run "TestGetAllUnFinishSyncTasksIncludesNonTerminalHundredProgress|TestGetTimedOutUnfinishedTasksIncludesNonTerminalHundredProgress" -count=1
  • go test ./service -run "TestShouldApplyTaskResultProgressSkipsNonTerminalCompleteProgress" -count=1
  • go test ./service ./service/openaicompat
  • go test ./service/openaicompat ./relay/channel/claude ./relay/channel/gemini ./relay/channel/advancedcustom ./relay/channel/openai
  • go test ./service/openaicompat ./relay/channel/gemini ./relay/channel/advancedcustom
  • go test ./service/openaicompat -run "TestResponsesResponseToChatCompletionsResponse|TestResponsesRequestToChatCompletionsRequest"
  • go test ./service -run "TestResponseOpenAI2(Gemini|Claude)"
  • go test ./model -run "Test(SumUsedQuotaRetryFilter|GetAllLogsRetrySubtypeFilters|SumUsedQuotaRetrySubtypeFilters|RetryFilterIgnoresNestedRetryMarker|RetryFilterBackfillsLegacyMarkersBeforeCompletion|RetryFilterUsesIsRetryAfterBackfillCompletion)$"
  • go test ./model -run "TestSumUsedQuotaKeepsRpmTpmLiveForHistoricalWindow"
  • go run ./tools/jsonwrapcheck
  • bun test src/components/html-content.test.ts src/components/ui/markdown.test.ts src/lib/renderable-content.test.ts src/hooks/notification-utils.test.ts src/stores/notification-store.test.ts src/features/usage-logs/lib/utils.test.ts src/features/playground/lib/query-state.test.ts src/features/playground/lib/selection-state.test.ts
  • bun test tests/channel-form.test.ts
  • bun run typecheck
  • bun run build
  • Headless Chrome layout check for/playground/with a 4000-character continuous prompt at 390px and 1280px viewport widths
  • go test ./service -run "TestRecalculate_PositiveDeltaAttributesQuotaDataToSubmitNode"
  • go test ./relay ./relay/channel ./relay/channel/task/taskcommon ./relay/channel/task/doubao ./relay/channel/task/gemini ./relay/channel/task/vertex ./relay/channel/task/ali ./relay/channel/task/kling ./controller -run "Test(PrepareTaskSubmitRequestBody|DoTaskApiRequestAppliesRuntimeHeaderOverride|ApplyTaskParamOverride|BuildConfiguredTask|EstimateBilling|EstimateTaskBilling|ShouldRetry)" -count=1
  • go test ./controller ./relay ./relay/channel ./relay/channel/task/taskcommon ./relay/channel/task/doubao ./relay/channel/task/ali ./relay/channel/task/gemini ./relay/channel/task/kling ./relay/channel/task/vertex ./relay/common ./service
  • go test ./relay/channel/task/doubao ./relay/channel/task/taskcommon ./relay/channel ./relay -count=1
  • go test ./relay/channel/task/taskcommon -run "TestEstimateGenericTaskBilling" -count=1
  • go test ./relay -run "TestPrepareTaskSubmitRequestBody|TestEstimateTaskBilling" -count=1
  • go test ./relay/channel/task/taskcommon ./relay/channel/task/doubao ./relay/channel/task/kling ./relay/channel/task/ali -count=1
  • go test ./relay/channel ./relay -count=1
  • bunx eslint src\features\channels\types.ts src\features\channels\lib\advanced-custom.ts
  • git diff --check -- relay/common/relay_info.go relay/channel/task/doubao/adaptor.go relay/channel/task/doubao/adaptor_billing_test.go relay/channel/task/taskcommon/request_body.go relay/channel/task/taskcommon/path_config_test.go
  • git diff --check

Full Changelog: https://github.com/MAX-API-Next/MAX-API/compare/v1.0.3-preview.2…v1.0.4-preview.1

http://www.jsqmd.com/news/1127976/

相关文章:

  • Adept SCARA机器人SmartMotion控制与Python开发实战
  • STM32F410RB与MC6470 IMU运动控制开发指南
  • 从对话到能力:20分钟构建你的第一个Codex Skill实现工作流自动化
  • 基于双分支网络的食管炎与正常Z线智能鉴别算法
  • YOLOv11目标检测坐标数据保存方案与实现
  • 从李飞飞CS231n到世界模型:重构计算机视觉学习路径与工程实践
  • AI Agent Skills开发实战:代码审查与CI/CD集成
  • PVN3D自定义算子与TensorRT插件开发实战
  • openEuler/QoS-Deployment-Test:如何扩展测试套件支持更多资源类型
  • EhViewer完整指南:3个关键技巧打造完美漫画阅读体验
  • 如何完整备份QQ空间说说:GetQzonehistory数据导出终极指南
  • 三分钟搞定:利用amlogic-s9xxx-armbian项目将闲置安卓盒子变身高性能服务器完整教程
  • 如何用开源工具实现本地千万级图片秒级搜索:ImageSearch完整指南
  • 基于YOLOv8的脑肿瘤检测系统开发与实践
  • Python实现工业气缸软件模拟器:从状态机到OPC UA集成
  • 改进YOLOv8用于船舶检测:海事监控场景下的模型优化与工程实践
  • 京东开源JoyAI-VL-Interaction:从零部署实时视频交互AI全栈指南
  • OpenCV计算机视觉实战:从基础到高级应用
  • 从零构建本地化课堂人脸分析系统:技术选型、实现与部署指南
  • 基于YOLO26的智能火焰检测系统开发实战
  • 阴阳师自动化脚本的技术架构演进与模块化设计范式
  • 三轴桁架机械手PLC脉冲控制与伺服系统设计
  • 基于YOLOv10的固体废物智能识别系统开发实战
  • 深度学习行人重识别:YOLOv5与OSNet结合的开源方案
  • 从零到一:使用ResNet-18在CIFAR-10上构建你的首个图像分类器
  • Codex AI平台:零基础部署与15种AI功能实战指南
  • 基于改进ResNet的智能垃圾分类系统设计与优化
  • 基于阿里云视觉智能平台构建课堂人脸分析系统:从API调用到工程实践
  • C#集成YOLOv8目标检测:基于ONNX Runtime的工业视觉部署实战
  • GPT-4与ChatGPT应用开发:从API调用到项目实战的极简指南