mirror of
https://github.com/go-micro/go-micro.git
synced 2025-08-04 21:42:57 +02:00
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
// Package genai provides a generic interface for generative AI providers.
|
|
package genai
|
|
|
|
// Result is the unified response from GenAI providers.
|
|
type Result struct {
|
|
Prompt string
|
|
Type string
|
|
Data []byte // for audio/image binary data
|
|
Text string // for text or image URL
|
|
}
|
|
|
|
// Stream represents a streaming response from a GenAI provider.
|
|
type Stream struct {
|
|
Results <-chan *Result
|
|
Err error
|
|
// You can add fields for cancellation, errors, etc. if needed
|
|
}
|
|
|
|
// GenAI is the generic interface for generative AI providers.
|
|
type GenAI interface {
|
|
Generate(prompt string, opts ...Option) (*Result, error)
|
|
Stream(prompt string, opts ...Option) (*Stream, error)
|
|
String() string
|
|
}
|
|
|
|
// Option is a functional option for configuring providers.
|
|
type Option func(*Options)
|
|
|
|
// Options holds configuration for providers.
|
|
type Options struct {
|
|
APIKey string
|
|
Endpoint string
|
|
Type string // "text", "image", "audio", etc.
|
|
Model string // model name, e.g. "gemini-2.5-pro"
|
|
// Add more fields as needed
|
|
}
|
|
|
|
// Option functions for generation type
|
|
func Text(o *Options) { o.Type = "text" }
|
|
func Image(o *Options) { o.Type = "image" }
|
|
func Audio(o *Options) { o.Type = "audio" }
|
|
|
|
// Provider registry
|
|
var providers = make(map[string]GenAI)
|
|
|
|
// Register a GenAI provider by name.
|
|
func Register(name string, provider GenAI) {
|
|
providers[name] = provider
|
|
}
|
|
|
|
// Get a GenAI provider by name.
|
|
func Get(name string) GenAI {
|
|
return providers[name]
|
|
}
|