feat(model): LLM 多供应商适配(Adapter/OpenAI 非流式+SSE 流式/per-role 路由/主备降级/多模态检测/调用记录)
This commit is contained in:
1 parent
51b2bdfba2
commit
d09ccc7570
9 files changed
+1285
No files matched your search
@@ -0,0 +1,41 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// Errors returned by the model package. Each is wrapped with %w on the way out
|
||||
// so callers can test for a category while keeping the underlying cause.
|
||||
var (
|
||||
// ErrNoModel is returned when no model name can be resolved.
|
||||
ErrNoModel = errors.New("model: no model configured")
|
||||
// ErrNoSteps is returned when a fallback chain has no steps.
|
||||
ErrNoSteps = errors.New("model: empty fallback chain")
|
||||
// ErrUpstream is returned when the provider request fails (network, status,
|
||||
// decode) or every fallback step fails.
|
||||
ErrUpstream = errors.New("model: upstream request failed")
|
||||
// ErrBadRequest is returned when the request cannot be encoded for the wire.
|
||||
ErrBadRequest = errors.New("model: invalid request")
|
||||
// ErrStream is returned when a stream ends before completion.
|
||||
ErrStream = errors.New("model: stream closed before completion")
|
||||
)
|
||||
|
||||
// Recorder receives a CallRecord after a successfully completed LLM call. It is
|
||||
// invoked by adapters so the runtime (M9 monitor/frontend) can collect usage
|
||||
// without coupling to a storage backend.
|
||||
type Recorder func(CallRecord)
|
||||
|
||||
// Adapter abstracts a single LLM provider. Implementations are vendor-specific
|
||||
// but speak the normalized Request/Response vocabulary; a fallback Chain or a
|
||||
// Router can compose them without knowing which provider is behind each one.
|
||||
type Adapter interface {
|
||||
// Name returns a stable identifier for the provider/adapter.
|
||||
Name() string
|
||||
// Chat performs a non-streaming completion and returns the full response.
|
||||
Chat(ctx context.Context, req Request, opts Options) (Response, error)
|
||||
// ChatStream streams token-level deltas via onChunk and returns the
|
||||
// aggregated response (with usage when the provider reports it). onChunk may
|
||||
// be nil to discard deltas while still aggregating.
|
||||
ChatStream(ctx context.Context, req Request, onChunk func(delta string)) (Response, error)
|
||||
}
|
||||
Reference in new issue
Block a user