micro--go-micro
1e2901ad0e
goreleaser / goreleaser (push) Has been cancelled
Add ai.ImageModel interface for text-to-image generation alongside the existing ai.Model for text. Uses the same options pattern (WithAPIKey, WithBaseURL) and the same provider registration system (RegisterImage/NewImage). Implement GenerateImage for Atlas Cloud and OpenAI providers via the OpenAI-compatible /v1/images/generations endpoint. Default image model is gpt-image-1. Responses return images as URL, base64, or both depending on the provider. Update Atlas Cloud blog post and integration guide with image generation examples. Update ai/README.md with ImageModel docs. Co-authored-by: Claude <noreply@anthropic.com>
62 行
1.8 KiB
Go
62 行
1.8 KiB
Go
package ai
|
|
|
|
import "context"
|
|
|
|
// ImageModel provides an interface for image generation providers.
|
|
// Providers that support image generation implement this alongside
|
|
// or instead of Model. Use NewImage to construct, or type-assert
|
|
// a provider that implements both:
|
|
//
|
|
// p := atlascloud.NewProvider(ai.WithAPIKey(key))
|
|
// if ig, ok := p.(ai.ImageModel); ok {
|
|
// resp, _ := ig.GenerateImage(ctx, req)
|
|
// }
|
|
type ImageModel interface {
|
|
GenerateImage(ctx context.Context, req *ImageRequest, opts ...GenerateOption) (*ImageResponse, error)
|
|
String() string
|
|
}
|
|
|
|
// ImageRequest describes what image to generate.
|
|
type ImageRequest struct {
|
|
// Prompt is the text description of the image to generate.
|
|
Prompt string
|
|
// Model overrides the provider's default image model.
|
|
Model string
|
|
// Size of the generated image (e.g. "1024x1024"). Provider-specific.
|
|
Size string
|
|
// N is the number of images to generate. Defaults to 1.
|
|
N int
|
|
}
|
|
|
|
// ImageResponse holds the generated images.
|
|
type ImageResponse struct {
|
|
Images []Image
|
|
}
|
|
|
|
// Image is a single generated image, returned as a URL, base64 data, or both
|
|
// depending on the provider and request options.
|
|
type Image struct {
|
|
// URL is a remote URL where the image can be fetched.
|
|
URL string
|
|
// Base64 is the base64-encoded image data.
|
|
Base64 string
|
|
}
|
|
|
|
// NewImageFunc creates a new ImageModel instance.
|
|
type NewImageFunc func(...Option) ImageModel
|
|
|
|
var imageProviders = make(map[string]NewImageFunc)
|
|
|
|
// RegisterImage registers an image generation provider.
|
|
func RegisterImage(name string, fn NewImageFunc) {
|
|
imageProviders[name] = fn
|
|
}
|
|
|
|
// NewImage creates a new ImageModel instance based on the provider name.
|
|
func NewImage(provider string, opts ...Option) ImageModel {
|
|
if fn, ok := imageProviders[provider]; ok {
|
|
return fn(opts...)
|
|
}
|
|
return nil
|
|
}
|