Skip to content
FastVideo
Esc
↑↓navigate↵open⌘Jpreview
On this page

prompt

Prompt pipeline for the streaming server.

  • :mod:providers — LLM backend abstraction + built-in adapters
  • :mod:enhancer — provider-agnostic enhance / auto-extend / rewrite operations on top of the provider layer

All of this is optional; the streaming server runs fine without it (PR 7.5's skeleton never invokes the enhancer). When the operator enables ServeConfig.streaming.prompt.enabled, the server routes each session_init_v2 curated prompt through enhance before the first segment.

fastvideo.entrypoints.streaming.prompt.PromptEnhancer

PromptEnhancer(*, providers: Sequence[LLMProvider], model: str, timeout_ms: int = 20000, temperature: float = 0.7, max_tokens: int | None = 256, system_prompt_dir: str | None = None)

Orchestrates prompt operations across a priority-ordered provider list with structured fallback + hot-reloadable system prompts.

Usage::

enhancer = PromptEnhancer(
    providers=[CerebrasProvider(), GroqProvider()],
    model="gpt-oss-120b",
    system_prompt_dir="/etc/fastvideo/prompts",
)
response = await enhancer.enhance("a fox running through snow")

fastvideo.entrypoints.streaming.prompt.PromptEnhancer.register_provider

register_provider(provider: LLMProvider, *, priority: int = -1) -> None

Insert an additional provider. priority=0 makes it primary; priority=-1 (default) appends as a fallback.

fastvideo.entrypoints.streaming.prompt.PromptEnhancer.reload_system_prompts

reload_system_prompts() -> None

Re-read the system prompt files from system_prompt_dir.

The streaming server exposes this via a management endpoint so operators can iterate on prompt templates without restarting workers.

fastvideo.entrypoints.streaming.prompt.PromptEnhancer.enhance

enhance(prompt: str) -> LLMResponse

fastvideo.entrypoints.streaming.prompt.PromptEnhancer.auto_extend

auto_extend(prior_prompts: Sequence[str]) -> LLMResponse

fastvideo.entrypoints.streaming.prompt.PromptEnhancer.rewrite

rewrite(seed_prompt: str) -> LLMResponse

fastvideo.entrypoints.streaming.prompt.PromptOperation

PromptOperation()

fastvideo.entrypoints.streaming.prompt.LLMMessage

LLMMessage(role: Literal['system', 'user', 'assistant'], content: str)

fastvideo.entrypoints.streaming.prompt.LLMProvider

LLMProvider()

Provider interface every LLM adapter implements.

Providers are async-first because every built-in implementation talks to an HTTP API. Synchronous providers can wrap their call in asyncio.to_thread internally.

fastvideo.entrypoints.streaming.prompt.LLMProvider.complete

complete(request: LLMRequest) -> LLMResponse

fastvideo.entrypoints.streaming.prompt.LLMProviderError

LLMProviderError(message: str, *, retryable: bool = True)

Raised when an LLM provider fails a request.

retryable controls whether the enhancer falls back to the next provider. It is settable per-instance so the same exception type can describe retryable transport errors (5xx, 429) and non-retryable client errors (4xx auth/bad-request) without forcing a separate subclass for every status family.

fastvideo.entrypoints.streaming.prompt.LLMRequest

LLMRequest(messages: list[LLMMessage], model: str, max_tokens: int | None = None, temperature: float | None = None, timeout_ms: int | None = None)

fastvideo.entrypoints.streaming.prompt.LLMResponse

LLMResponse(content: str, provider: str, model: str, latency_ms: float, fallback_used: bool = False)

fastvideo.entrypoints.streaming.prompt.LLMTimeoutError

LLMTimeoutError(message: str)

Raised when an LLM provider times out — always retryable.

Submodules

Was this page helpful?