streaming-patterns
Streaming Patterns
Primary Primitive: iter.Seq2[T, error]
func (m *Model) Stream(ctx context.Context, msgs []schema.Message) iter.Seq2[schema.StreamChunk, error] {
return func(yield func(schema.StreamChunk, error) bool) {
stream, err := m.client.Stream(ctx, msgs)
if err != nil { yield(schema.StreamChunk{}, err); return }
defer stream.Close()
for {
select {
case <-ctx.Done(): yield(schema.StreamChunk{}, ctx.Err()); return
default:
}
chunk, err := stream.Recv()
if err == io.EOF { return }
if err != nil { yield(schema.StreamChunk{}, err); return }
if !yield(convertChunk(chunk), nil) { return } // consumer stopped
}
}
}
Composition
- Pipe:
func Pipe[A, B any](first iter.Seq2[A, error], transform func(A) (B, error)) iter.Seq2[B, error] - Collect: Stream to slice —
func Collect[T any](stream iter.Seq2[T, error]) ([]T, error) - Invoke from Stream: Stream, collect, return last.
- Fan-out:
iter.Pull2()to get next/stop, broadcast to N consumers. - BufferedStream: Channel-backed buffer for backpressure.
Rules
- Public API:
iter.Seq2[T, error]— never<-chan. - Internal goroutine communication: channels are fine.
- Always check context cancellation in producers.
yieldreturning false = consumer stopped — respect immediately.- Use
iter.Pull2only when pull semantics are genuinely needed.
More from lookatitude/beluga-ai
go-framework
Go framework design patterns for Beluga AI v2. Use when designing package structure, registries, lifecycle, or creating new packages.
12go-interfaces
Go interface design with registry, middleware, and hooks for Beluga AI v2. Use when creating interfaces, extension contracts, or adding hooks/middleware.
8doc-writing
Documentation writing patterns for Beluga AI v2. Use when creating package docs, tutorials, API guides, or teaching-oriented content.
7provider-implementation
Implementing providers for Beluga AI v2 registries. Use when creating LLM, embedding, vectorstore, voice, or any other provider.
7website-development
Website development patterns for the Beluga AI v2 documentation site. Use when building, styling, or adjusting website components, layouts, pages, and interactive elements — NOT for writing documentation content.
3go-testing
Go testing patterns for Beluga AI v2. Use when writing tests, mocks, or benchmarks.
2