You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The capabilities-layer video_generate() function ships with default model="runway/gen3a_turbo". On PraisonAI v4.7.10 with current LiteLLM, that identifier does not resolve to any video provider. Calls fail immediately with:
litellm.BadRequestError: LLM Provider NOT provided ... You passed model=runway/gen3a_turbo
This occurs before Runway (or any provider) authentication — integrators cannot distinguish “bad API key” from “broken SDK default.”
$ python -m praisonai --version
PraisonAI version 4.7.10
$ python -c "from praisonai.capabilities.videos import video_generate; video_generate('a red ball', api_key='sk-dummy', timeout=8)"
Provider List: https://docs.litellm.ai/docs/providers
Traceback (most recent call last):
...
File ".../praisonai/capabilities/videos.py", line 74, in video_generate
response = litellm.video_generation(**call_kwargs)
...
litellm.exceptions.BadRequestError: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM provider you are trying to call. You passed model=runway/gen3a_turbo
Pass model as E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/starcoder',..)` Learn more: https://docs.litellm.ai/docs/providers
$ python -m praisonai models validate runway/gen3a_turbo
ERROR: ❌ 'runway/gen3a_turbo' is not a valid model
INFO: Did you mean one of these?
• runwayml/gen4_turbo
• runwayml/gen4_image_turbo
• runwayml/gen4.5
$ python -m praisonai models validate runwayml/gen4_turbo
SUCCESS: ✅ 'runwayml/gen4_turbo' is a valid model
Capabilities: tool-calling
$ python -m praisonai models validate openai/sora-2
SUCCESS: ✅ 'sora-2' is a valid model
Capabilities: tool-calling
Note: Exit code and emoji output may vary by terminal encoding; the error text is stable.
Terminal evidence — contrast matrix (VideoAgent vs capabilities)
Probe with dummy keys — supported models should fail at authentication, not provider resolution.
# capabilities default (broken)
video_generate('probe', api_key='sk-dummy', timeout=8)
→ BadRequestError: LLM Provider NOT provided ... runway/gen3a_turbo
# explicit runwayml (provider resolved)
VideoAgent(llm='runwayml/gen4_turbo', api_key='sk-dummy').generate('probe')
→ APIConnectionError / key format error from Runway (expected)
# explicit OpenAI Sora family
VideoAgent(llm='openai/sora-2', api_key='sk-dummy').generate('probe')
→ AuthenticationError from OpenAI (expected)
This contrast is the smoking gun for SDK maintainers: only the capabilities default uses an unresolvable id.
Impact
Consumer
Risk
MCP server hosts
Tool defaults mirror capabilities — broken out of the box
Notebook / script authors
Omit model= → confusing LiteLLM error
CI pipelines
models validate fails default id while docs show it in signature
Technical writers
Docstring example runway/gen3a_turbo is invalid
Suggested fix
Change default to runwayml/gen4_turbo (align with VideoAgent) oropenai/sora-2 if OpenAI-first positioning matches product docs.
Update docstrings, MCP adapter defaults (runway-gen3 → canonical id), and CLI --model help text in the same PR.
Add unit test: default model string passes ModelCatalogue.validate_model() and LiteLLM video backend probe (mocked).
Add release note under v4.7.11: breaking default change for anyone relying on the old string (unlikely in production since it never worked).
Acceptance criteria
video_generate(prompt, api_key=...) without model= reaches provider layer (401/403 acceptable with dummy key)
praisonai models validate <default> → SUCCESS
MCP video tool default matches capabilities module
Changelog documents default change
Workaround
Always pass explicit model:
frompraisonai.capabilities.videosimportvideo_generatevideo_generate(
"A sunset over the ocean",
model="runwayml/gen4_turbo", # or openai/sora-2api_key=os.environ["RUNWAYML_API_SECRET"], # or OPENAI_API_KEY
)
Appendix — MCP default drift (static analysis)
MCP extended capabilities historically default to runway-gen3 — a third stale id class. Any fix must update all three surfaces:
OpenAI’s public catalog lists Sora family video models for API consumers. PraisonAI validates sora-2 but capabilities default to Runway Gen3a turbo under wrong prefix — double misalignment (wrong vendor default + wrong prefix).
litellm.exceptions.BadRequestError: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM provider you are trying to call. You passed model=runway/gen3a_turbo
Pass model as E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/starcoder',..)` Learn more: https://docs.litellm.ai/docs/providers
Appendix — mermaid (three defaults problem)
flowchart TB
subgraph surfaces [Public surfaces v4.7.10]
CAP[capabilities video_generate]
CLI[CLI praisonai videos]
MCP[MCP videos.generate]
end
CAP --> D1[runway/gen3a_turbo invalid]
CLI --> D2[sora invalid]
MCP --> D3[runway-gen3 invalid]
VAL[models validate] --> OK[runwayml/gen4_turbo, sora-2]
D1 -.->|contradicts| VAL
D2 -.->|contradicts| VAL
Loading
Appendix — post-fix verification
python -c "from praisonai.capabilities.videos import video_generate; video_generate('probe', api_key='sk-dummy', timeout=5)"# Expect: auth error from Runway/OpenAI — NOT Provider NOT provided
Appendix — Runway prefix history (integrator note)
LiteLLM standardized Runway video provider string on runwayml/. Older examples used runway/ or hyphenated runway-gen3. PraisonAI still embeds the oldest form in capabilities defaults — tripping provider resolution before HTTP.
Appendix — OpenAI Sora path
Validators accept sora-2. Capabilities Python default does not use it — CLI issue covers sora shorthand. Python default uses Runway instead, splitting OpenAI-first vs Runway-first stories.
Test should fail on v4.7.10 until default changes.
Appendix — observability
Log structured fields on video failures: model, provider_resolved, exception_class. Today users only see LiteLLM generic provider message.
Appendix — docs site updates
Replace all occurrences of runway/gen3a_turbo in:
Capabilities reference pages
MCP tool schema defaults
VideoAgent comparison tables
Appendix — release manager checklist
Verify tag contains fix commit
PyPI praisonai wheel includes updated videos.py
Desktop bundle picks up same wheel version
Appendix — stack trace anchor (line numbers)
On v4.7.10, failure originates at video_generate → litellm.video_generation → get_llm_provider. Support teams can search logs for runway/gen3a_turbo to identify this bug vs customer misconfiguration.
Appendix — customer support macro
Your SDK is using the default video model runway/gen3a_turbo, which PraisonAI 4.7.10 cannot route. Upgrade to ≥4.7.11 (when fixed) or pass model="runwayml/gen4_turbo" / model="openai/sora-2" explicitly.
[BUG] v4.7.10:
praisonai.capabilities.video_generate()defaultrunway/gen3a_turbostill invalid — fails before provider authenticationMetadata
db166f427)praisonai(praisonai.capabilities.videos)VideoAgent, MCPpraisonai.videos.generate, LiteLLM video backendsbug,sdk-contract,video,litellm,capabilitiespraisonai models validatesrc/praisonai/praisonai/capabilities/videos.pygh search issues --repo MervinPraison/PraisonAI "runway/gen3a_turbo"Executive summary
The capabilities-layer
video_generate()function ships with defaultmodel="runway/gen3a_turbo". On PraisonAI v4.7.10 with current LiteLLM, that identifier does not resolve to any video provider. Calls fail immediately with:This occurs before Runway (or any provider) authentication — integrators cannot distinguish “bad API key” from “broken SDK default.”
Meanwhile:
praisonai models validate runway/gen3a_turbo→ ERROR, suggestsrunwayml/gen4_turboVideoAgent(llm="runwayml/gen4_turbo")→ reaches Runway backend (auth errors only with dummy keys)sora-2(validates successfully)v4.7.10 did not update the capabilities default, MCP defaults, or docstrings to match LiteLLM’s
runwayml/*namespace.Expected vs actual
video_generate("prompt", api_key=...)BadRequestError— provider not providedmodels validateVideoAgentdocsrunwayml/gen4_turbo, capabilities sayrunway/gen3a_turboRoot cause
src/praisonai/praisonai/capabilities/videos.py:LiteLLM video provider resolution expects prefixes such as:
runwayml/gen4_turbo,runwayml/gen4.5, …openai/sora-2(OpenAI video)gemini/veo-*(Google)There is no
runway/provider alias in LiteLLM’s video config path — henceget_llm_provider()raises before HTTP.Sequence diagram
sequenceDiagram participant App participant VG as video_generate() participant LLM as litellm.video_generation participant Prov as Provider resolver App->>VG: prompt only (default model) VG->>LLM: model=runway/gen3a_turbo LLM->>Prov: resolve provider Prov-->>LLM: BadRequestError (no provider) LLM-->>VG: exception VG-->>App: no VideoResultMinimal reproduction
Terminal evidence — v4.7.10 (2026-09-28)
Note: Exit code and emoji output may vary by terminal encoding; the error text is stable.
Terminal evidence — contrast matrix (VideoAgent vs capabilities)
Probe with dummy keys — supported models should fail at authentication, not provider resolution.
This contrast is the smoking gun for SDK maintainers: only the capabilities default uses an unresolvable id.
Impact
model=→ confusing LiteLLM errormodels validatefails default id while docs show it in signaturerunway/gen3a_turbois invalidSuggested fix
runwayml/gen4_turbo(align withVideoAgent) oropenai/sora-2if OpenAI-first positioning matches product docs.runway-gen3→ canonical id), and CLI--modelhelp text in the same PR.ModelCatalogue.validate_model()and LiteLLM video backend probe (mocked).Acceptance criteria
video_generate(prompt, api_key=...)withoutmodel=reaches provider layer (401/403 acceptable with dummy key)praisonai models validate <default>→ SUCCESSWorkaround
Always pass explicit model:
Appendix — MCP default drift (static analysis)
MCP extended capabilities historically default to
runway-gen3— a third stale id class. Any fix must update all three surfaces:capabilities.videosrunway/gen3a_turborunwayml/gen4_turbooropenai/sora-2runway-gen3praisonai videossorasora-2oropenai/sora-2(see separate issue)Appendix — LiteLLM catalogue probe (conceptual)
Appendix — test gap
test_video_agent.pymay pass 33/33 while never importingpraisonai.capabilities.videos. Add:Appendix — severity table
Appendix — OpenAI catalog alignment
OpenAI’s public catalog lists Sora family video models for API consumers. PraisonAI validates
sora-2but capabilities default to Runway Gen3a turbo under wrong prefix — double misalignment (wrong vendor default + wrong prefix).Appendix — release diff expectation
Maintainers should verify on each release until default id validates.
Appendix — consumer messaging (docs)
Document a Supported video models table:
openai/sora-2runwayml/gen4_turborunway/gen3a_turboAppendix — filing checklist
Appendix — extended BadRequestError (full message)
Appendix — mermaid (three defaults problem)
flowchart TB subgraph surfaces [Public surfaces v4.7.10] CAP[capabilities video_generate] CLI[CLI praisonai videos] MCP[MCP videos.generate] end CAP --> D1[runway/gen3a_turbo invalid] CLI --> D2[sora invalid] MCP --> D3[runway-gen3 invalid] VAL[models validate] --> OK[runwayml/gen4_turbo, sora-2] D1 -.->|contradicts| VAL D2 -.->|contradicts| VALAppendix — post-fix verification
Appendix — Runway prefix history (integrator note)
LiteLLM standardized Runway video provider string on
runwayml/. Older examples usedrunway/or hyphenatedrunway-gen3. PraisonAI still embeds the oldest form in capabilities defaults — tripping provider resolution before HTTP.Appendix — OpenAI Sora path
Validators accept
sora-2. Capabilities Python default does not use it — CLI issue coverssorashorthand. Python default uses Runway instead, splitting OpenAI-first vs Runway-first stories.Appendix — mock-based unit test (sketch)
Test should fail on v4.7.10 until default changes.
Appendix — observability
Log structured fields on video failures:
model,provider_resolved,exception_class. Today users only see LiteLLM generic provider message.Appendix — docs site updates
Replace all occurrences of
runway/gen3a_turboin:Appendix — release manager checklist
praisonaiwheel includes updatedvideos.pyAppendix — stack trace anchor (line numbers)
On v4.7.10, failure originates at
video_generate→litellm.video_generation→get_llm_provider. Support teams can search logs forrunway/gen3a_turboto identify this bug vs customer misconfiguration.Appendix — customer support macro
Appendix — PyPI install repro (isolated)
Expect
BadRequestErrorprovider not provided on unfixed versions.Appendix — GitHub issue title (copy-paste)
[BUG] video_generate() default runway/gen3a_turbo invalid on v4.7.10 — fails before authAppendix — labels
bug,sdk-contract,video,litellm,capabilities,regressionAppendix — owner routing
End of issue document.