Skip to content

feat(media): AI video generation — Runway provider + async API + generate_video tool (#9016) - #10308

Merged
mrveiss merged 3 commits into
Dev_new_guifrom
issue-9016
Jun 18, 2026
Merged

mrveiss merged 3 commits into
Dev_new_guifrom
issue-9016

Conversation

@mrveiss

@mrveiss mrveiss commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Thinking Path

Last member of #9928. AutoBot had no video output. Mirrors the existing image generation plugin pattern end-to-end (the issue's stated approach), adding the async submit→poll lifecycle that video requires.

What Changed

Backend — plugins/core-plugins/video-generation-plugin/ (plugin.json + main.py register/unregister, mirroring image-gen):

  • tools/providers.py — RunwayProvider (working baseline: text_to_video submit → poll tasks/{id} → normalized URL); SoraProvider + KlingProvider registered, contract-complete, credential-gated (empty key ⇒ available=False).
  • tools/generate_video.py — GenerateVideoTool(BaseTool) → generate_video(prompt, duration) -> url, registered via the same tool_sdk registry mechanism as generate_image.
  • api/video_generation.py — async REST router: /generate (returns job id), /status/{job_id} (progress + final URL), /providers; Redis-persisted jobs, env-tunable TTL/poll. Registered in feature_routers.py (same tuple shape/place as image_generation).
  • Secrets/config: RUNWAY_API_KEY (baseline), SORA_API_KEY, KLING_API_KEY (required_env, secret, empty=disabled); settings: default_provider/duration/resolution/aspect_ratio.

Frontend — useVideoGeneration.ts (submit+poll), VideoCell.vue (inline <video> + progress bar/spinner + error/download), wired in ChatMessages.vue (type==='video'); i18n across all 11 locales.

Verification

  • Backend: 22 passed (providers 13, generate_video 3, endpoint 6; all HTTP mocked). Frontend: VideoCell.test.ts 5 passed; vue-tsc 0 errors; check-locale-completeness.py complete. py_compile + startup-import safe (lazy guarded provider/aiohttp imports).
  • Wiring: provider → video_generation.py router → feature_routers.py:226; tool → tool_sdk registry via plugin main.py (same path as generate_image).

Discovery

Filed #10294: the plugin-loader entry-point path (plugins.core_plugins.*) isn't importable (hyphenated core-plugins dir) — a pre-existing bug that silently breaks loader-based tool registration for both image-gen and video-gen. The video REST API works around it via a file-path providers loader; the shared loader fix is tracked in #10294.

Model Used

Claude Opus 4.8 (1M context)

…generate_video tool (#9016)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 18, 2026 •

Copy link
Copy Markdown
Contributor

✅ SSOT Configuration Compliance: Passing

🎉 No hardcoded values detected that have SSOT config equivalents!

github-actions Bot and others added 2 commits June 18, 2026 13:30
Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@mrveiss
mrveiss merged commit a2c491e into Dev_new_gui Jun 18, 2026
29 of 30 checks passed
@mrveiss
mrveiss deleted the issue-9016 branch June 18, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant