Skip to main content

QuiverAI Provider

QuiverAI provides SVG generation and raster-to-SVG vectorization through the Go-AI image model interface.

Setup​

import "github.com/digitallysavvy/go-ai/pkg/providers/quiverai"

qprovider := quiverai.New(quiverai.Config{
APIKey: "your-api-key",
})

APIKey defaults to QUIVERAI_API_KEY. BaseURL defaults to https://api.quiver.ai/v1 and can be overridden with QUIVERAI_BASE_URL.

SVG Generation​

model, _ := qprovider.ImageModel(quiverai.ModelArrow11)

result, err := model.DoGenerate(ctx, &provider.ImageGenerateOptions{
Prompt: "minimal rocket logo",
})

Generated images are returned as SVG bytes, use image/svg+xml as the MIME type, and include token usage when QuiverAI reports it.

Vectorization​

result, err := model.DoGenerate(ctx, &provider.ImageGenerateOptions{
Files: []provider.ImageFile{{
Type: "url",
URL: "https://example.com/logo.png",
}},
ProviderOptions: map[string]interface{}{
"quiverai": map[string]interface{}{
"operation": quiverai.OperationVectorize,
"autoCrop": true,
"targetSize": 512,
},
},
})

Provider Options​

OptionTypeDescription
operationgenerate or vectorizeSelects text-to-SVG generation or raster vectorization.
instructionsstringExtra style guidance for generation.
temperaturenumberSampling temperature.
topPnumberNucleus sampling value.
presencePenaltynumberPresence penalty.
maxOutputTokensnumberMaximum output tokens.
autoCropboolVectorization-only auto-crop setting.
targetSizenumberVectorization-only target canvas size in pixels.

Language Models​

The Arrow 2 / Arrow 2 Telos models are available through the standard language model interface, reusing the Open Responses transport with QuiverAI's own request policy layered on top:

model, _ := qprovider.LanguageModel(quiverai.ModelArrow2) // or quiverai.ModelArrow2Telos

result, err := ai.GenerateText(ctx, ai.GenerateTextOptions{
Model: model,
Prompt: "Suggest a minimal color palette for a weather app icon set.",
ProviderOptions: map[string]interface{}{
"quiverai": map[string]interface{}{
"reasoningEffort": "medium", // low | medium | high | xhigh
"reasoningSummary": "auto",
},
},
})

QuiverAI also supports a caller-executed "custom" tool (ProviderID: "quiverai.custom"), whose input the model streams as raw text (e.g. SVG markup) instead of JSON function arguments. Build one with qprovider.Tools().CustomTool(...):

import "github.com/digitallysavvy/go-ai/pkg/providers/openresponses"

svgTool := qprovider.Tools().CustomTool("write_svg", openresponses.CustomToolOptions{
Description: "Return raw SVG markup for the requested icon.",
Format: &openresponses.CustomToolFormat{Type: "text"},
})

See examples/providers/quiverai for full runnable examples.

Workflow Serialization​

QuiverAI image models can cross a workflow boundary with provider.SerializeImageModel / DeserializeImageModel (Open Responses language models can too, via providerutils.SerializeModel / DeserializeModel, gated by provider.SerializableModelStrict and refused when extensions are registered). See Provider Serialization for the mechanism.