feat: add ali doubao native video mode#593
Merged
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces provider-native video relay support for Alibaba DashScope and Doubao (Ark) while expanding the OpenAI-compatible video surface area (edits/extensions) and tightening async-usage/error handling across video adaptors (notably Gemini/VertexAI).
Changes:
- Add new relay modes + routes for Ali/Doubao native video task creation/status (and Doubao delete), plus OpenAI-style
/v1/videos/editsand/v1/videos/extensions. - Refactor video request validation/usage/price helpers into mode-specific controller files and extend tests accordingly.
- Improve video adaptor behavior: new error wrappers for OpenAI-video error shape, async-usage robustness (HTTP 200 “error” bodies, partial RAI filters), and updated request URL/method handling (Azure video job GETs).
Reviewed changes
Copilot reviewed 59 out of 59 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| core/router/relay.go | Adds provider-native Ali/Doubao video routes and OpenAI video edits/extensions routes. |
| core/relay/utils/testreq.go | Extends relay test-request builder for video jobs and videos modes. |
| core/relay/utils/testreq_test.go | Adds coverage for the new test-request builder cases. |
| core/relay/plugin/timeout/timeout.go | Applies video timeout behavior to edits/extensions modes. |
| core/relay/model/video.go | Updates video request models (adds edits/extensions request types; removes job size). |
| core/relay/model/errors.go | Wraps OpenAI-video-style errors for edits/extensions modes. |
| core/relay/model/doubao_video.go | Adds typed model for Doubao native video task responses. |
| core/relay/model/ali_video.go | Adds typed model for Ali native video task responses. |
| core/relay/mode/define.go | Introduces new relay modes (edits/extensions + Ali/Doubao native task modes). |
| core/relay/mode/define_test.go | Locks in stable numeric IDs for newly introduced modes. |
| core/relay/controller/video.go | Keeps shared video validation/parsing helpers after refactor split. |
| core/relay/controller/video_videos.go | Adds request validation/usage/price for /v1/videos* modes. |
| core/relay/controller/video_videos_test.go | Tests videos request parsing/validation (JSON + multipart, size/seconds rules). |
| core/relay/controller/video_generation_jobs.go | Adds request validation/usage/price for video generation jobs mode. |
| core/relay/controller/video_generation_jobs_test.go | Tests job request parsing/validation (variants/seconds/resolution constraints). |
| core/relay/controller/video_gemini.go | Moves Gemini-native video request validation/usage/price logic into its own file. |
| core/relay/controller/video_gemini_test.go | Adds tests for Gemini-native video validation/usage behaviors. |
| core/relay/adaptor/vertexai/adaptor.go | Improves VertexAI Gemini video async-usage failure/RAI handling and logging. |
| core/relay/adaptor/vertexai/adaptor_test.go | Adds tests for HTTP 200 error bodies and partial RAI filter success behavior. |
| core/relay/adaptor/utils.go | Expands “successful response” logic for video edits/extensions modes. |
| core/relay/adaptor/siliconflow/video.go | Aligns siliconflow video sizing/error handling with updated video job shape. |
| core/relay/adaptor/siliconflow/error.go | Adds OpenAI-video-shaped error handler for siliconflow. |
| core/relay/adaptor/siliconflow/error_test.go | Tests OpenAI-video error shaping for siliconflow. |
| core/relay/adaptor/siliconflow/adaptor_test.go | Updates tests to use width/height instead of size for job requests. |
| core/relay/adaptor/openai/video.go | Adds conversion/response handling entrypoints for edits/extensions. |
| core/relay/adaptor/openai/async_usage.go | Extends OpenAI async usage fetch to include edits/extensions modes. |
| core/relay/adaptor/openai/adaptor.go | Wires new modes into OpenAI adaptor routing/conversion/response paths. |
| core/relay/adaptor/gemini/video.go | Adds edits/extensions request parsing, stored-video hydration, and refined RAI failure logic. |
| core/relay/adaptor/gemini/video_test.go | Tests edits/extensions request parsing + stored-video hydration. |
| core/relay/adaptor/gemini/export_test.go | Exposes edits/extensions conversion for tests. |
| core/relay/adaptor/gemini/async_usage.go | Refines Gemini async usage completion/failure logic and adds edits/extensions support. |
| core/relay/adaptor/gemini/adaptor.go | Routes edits/extensions modes through store-aware converters and submit handler. |
| core/relay/adaptor/doubao/video.go | Adds edits/extensions conversion mapping and switches to OpenAI-video error shaping. |
| core/relay/adaptor/doubao/main.go | Adds dedicated Doubao native video modes and consolidates video task URL building. |
| core/relay/adaptor/doubao/main_test.go | Adds tests for error parsing and adjusts video generation tests to width/height. |
| core/relay/adaptor/doubao/image.go | Routes image errors through Doubao error handler (removes OpenAI adaptor dependency). |
| core/relay/adaptor/doubao/error.go | Implements Doubao OpenAI-style error parsing + OpenAI-video error shaping. |
| core/relay/adaptor/doubao/doubao_video.go | Implements Doubao native video request conversion and task submit/status/delete handlers. |
| core/relay/adaptor/doubao/doubao_video_test.go | Tests native Doubao video request conversion + passthrough/store behavior. |
| core/relay/adaptor/doubao/constants.go | Reclassifies Doubao Seedance models to native Doubao video mode. |
| core/relay/adaptor/doubao/async_usage.go | Extends Doubao async usage to support native and edits/extensions modes. |
| core/relay/adaptor/azure/main.go | Fixes Azure video job/content request method to GET; adds edits/extensions endpoints. |
| core/relay/adaptor/azure/main_test.go | Adds method assertions and coverage for Azure video job URL generation. |
| core/relay/adaptor/azure/async_usage.go | Extends Azure async usage to include edits/extensions modes. |
| core/relay/adaptor/ali/error.go | Adds OpenAI-video error shaping and normalizes Ali errors before wrapping. |
| core/relay/adaptor/ali/constants.go | Reclassifies Ali video models to native Ali video mode. |
| core/relay/adaptor/ali/async_usage.go | Extends Ali async usage for native Ali video and edits/extensions modes; enriches usage context. |
| core/relay/adaptor/ali/ali_video.go | Implements Ali native video request conversion and task submit/status handlers. |
| core/relay/adaptor/ali/ali_video_test.go | Tests Ali native video request conversion + passthrough/store behavior. |
| core/relay/adaptor/ali/adaptor.go | Wires Ali native modes + edits/extensions into adaptor routing and headers. |
| core/model/yaml_integration.go | Adds YAML model type name mappings for new video modes. |
| core/middleware/distributor.go | Adds provider-native video model resolution + stored-video model pinning for edits/extensions. |
| core/middleware/distributor_video_test.go | Adds tests for stored-video model fallback/pinning and a sqlite-backed store harness. |
| core/middleware/distributor_provider_video_test.go | Adds tests for provider-native mode checks and stored-task channel pinning. |
| core/controller/relay.go | Adds Swagger + relay handler wiring for Ali/Doubao native video APIs and video edits/extensions. |
| core/controller/relay-controller.go | Routes edits/extensions into videos validation/usage/price pipeline. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+160
to
+168
| if response.ID == "" { | ||
| return nil, relaymodel.DoubaoVideoTaskResponse{}, relaymodel.WrapperOpenAIErrorWithMessage( | ||
| "missing id in doubao video response", | ||
| relaymodel.ErrorCodeBadResponse, | ||
| http.StatusInternalServerError, | ||
| relaymodel.ErrorTypeUpstream, | ||
| ) | ||
| } | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.