fix: address review — fail loud on non-video bodies, dedupe form plumbing, doc parity
- videoMIME no longer hard-falls-back to video/mp4: a 2xx body that is neither declared nor sniffable as video (JSON job envelope, HTML error page) is now an APIError instead of a 'successful' corrupt clip. - Resolution rides the wire as width/height AND the OpenAI-style size string, so either upstream convention honors an explicit request. - writeFormFields + mimeFromContentType shared helpers replace the copied multipart loop (audio.go/video.go) and Content-Type branch. - ADR-0019 indexed in docs/adr/README.md; README gains the videogen section + support-matrix mention (docs-parity rule). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AXQxVhXBw8PwFAtsVrXSmj
This commit is contained in:
@@ -266,6 +266,24 @@ tr, err := tm.Transcribe(ctx, audio.TranscriptionRequest{
|
||||
voices, err := ls.ListVoices(ctx, "kokoro") // []string of voice ids
|
||||
```
|
||||
|
||||
## Video: text-to-video + image-to-video
|
||||
|
||||
Video generation lives in the `videogen` package (ADR-0019), mirroring
|
||||
imagegen/audio: one small `Model` contract, zero values mean backend
|
||||
defaults, bytes in/out. Text-to-video and image-to-video are one surface —
|
||||
a nil `InitImage` is a pure text prompt; setting it conditions generation
|
||||
on that frame (hybrid checkpoints like Wan 2.2 TI2V serve both). First
|
||||
backend: llama-swap (blocking `/v1/videos/sync`, vLLM-Omni style — the
|
||||
response body is the encoded clip, so `Result` carries a single `Video`).
|
||||
Generation runs for minutes; bound the call with a context deadline.
|
||||
|
||||
```go
|
||||
vm, _ := ls.VideoModel("videogen-wan22-5b")
|
||||
res, err := vm.Generate(ctx, videogen.Request{Prompt: "a cat surfing"},
|
||||
videogen.WithSize("1280x704"), videogen.WithNumFrames(81))
|
||||
// res.Video.Data ([]byte) + res.Video.MIME ("video/mp4")
|
||||
```
|
||||
|
||||
## Tool calls
|
||||
|
||||
```go
|
||||
@@ -398,7 +416,8 @@ response as a single delta plus final event.
|
||||
capabilities are present at the client level; whether a given call succeeds
|
||||
depends on the llama.cpp model llama-swap loads. llama-swap also provides
|
||||
**image generation + editing** (`imagegen`), **speech synthesis +
|
||||
transcription** (`audio`) — separate axes, not shown above — plus a `Health`
|
||||
transcription** (`audio`), **video generation** (`videogen`) — separate
|
||||
axes, not shown above — plus a `Health`
|
||||
probe and management methods on `*llamaswap.Provider`.
|
||||
|
||||
Notes: Ollama has no native tool_choice — `"none"` drops the tools;
|
||||
|
||||
Reference in New Issue
Block a user