go-micro.dev/v5@v5.12.0/genai/genai.go (about)

     1  // Package genai provides a generic interface for generative AI providers.
     2  package genai
     3  
     4  // Result is the unified response from GenAI providers.
     5  type Result struct {
     6  	Prompt string
     7  	Type   string
     8  	Data   []byte // for audio/image binary data
     9  	Text   string // for text or image URL
    10  }
    11  
    12  // Stream represents a streaming response from a GenAI provider.
    13  type Stream struct {
    14  	Results <-chan *Result
    15  	Err     error
    16  	// You can add fields for cancellation, errors, etc. if needed
    17  }
    18  
    19  // GenAI is the generic interface for generative AI providers.
    20  type GenAI interface {
    21  	Generate(prompt string, opts ...Option) (*Result, error)
    22  	Stream(prompt string, opts ...Option) (*Stream, error)
    23  	String() string
    24  }
    25  
    26  // Option is a functional option for configuring providers.
    27  type Option func(*Options)
    28  
    29  // Options holds configuration for providers.
    30  type Options struct {
    31  	APIKey   string
    32  	Endpoint string
    33  	Type     string // "text", "image", "audio", etc.
    34  	Model    string // model name, e.g. "gemini-2.5-pro"
    35  	// Add more fields as needed
    36  }
    37  
    38  // Option functions for generation type
    39  func Text(o *Options)  { o.Type = "text" }
    40  func Image(o *Options) { o.Type = "image" }
    41  func Audio(o *Options) { o.Type = "audio" }
    42  
    43  // Provider registry
    44  var providers = make(map[string]GenAI)
    45  
    46  // Register a GenAI provider by name.
    47  func Register(name string, provider GenAI) {
    48  	providers[name] = provider
    49  }
    50  
    51  // Get a GenAI provider by name.
    52  func Get(name string) GenAI {
    53  	return providers[name]
    54  }