Model API Catalog¶
Invoke platform-hosted models from the SDK using a catalog ID. No stack.json entry or inference endpoint is required.
For models you train or bring yourself, declare an inference endpoint in stack.json.
Usage is metered per catalog model ID.
Invoke a catalog model (Go SDK)¶
package main
import (
"fmt"
"github.com/coding-berlin/kernstack-sdk-go/common/auth_sdk/auth_sdk_accesskey"
"github.com/coding-berlin/kernstack-sdk-go/sdk_inference/sdk_client_inference_invoke"
)
func main() {
aks, err := auth_sdk_accesskey.GetDefaultAccessKeySet()
if err != nil {
panic(err)
}
client := sdk_client_inference_invoke.NewClient(sdk_client_inference_invoke.InferenceInvokeClientConfig{
DZone: aks.DZone,
AccessKeySet: &aks,
})
body, err := client.InvokeByModelID("text-embed-v1", map[string]any{
"input": []string{"Hello world"},
})
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
GetDefaultAccessKeySet() reads KERNSTACK_ACCESS_KEY_ID, KERNSTACK_ACCESS_KEY_SECRET, and KERNSTACK_DZONE.
Client helpers:
InvokeModelJSON(modelID, payload)— typed JSON responseInvokeByModelID(modelID, payload)— raw response bodyInvokeModelFromImageBase64(modelID, imageB64)— vision models, inline imageInvokeModelFromBucket(modelID, bucket, key)— vision models, bucket objectInvokeModelStreamJSON(modelID, payload)— streaming chat responses
Text models¶
text-embed-v1¶
out, err := client.InvokeModelJSON("text-embed-v1", map[string]any{
"input": []string{"Hello world", "Example text"},
})
sentiment-multilingual-v1¶
out, err := client.InvokeModelJSON("sentiment-multilingual-v1", map[string]any{
"input": []string{"I love this product!", "Das ist schrecklich."},
})
Example response body (out.DecodeBody(&v)). Each input gets one data entry; its results are sorted by score, highest first:
{
"data": [
{
"index": 0,
"results": [
{ "label": "positive", "score": 0.93 },
{ "label": "neutral", "score": 0.05 },
{ "label": "negative", "score": 0.02 }
]
},
{
"index": 1,
"results": [
{ "label": "negative", "score": 0.91 },
{ "label": "neutral", "score": 0.07 },
{ "label": "positive", "score": 0.02 }
]
}
],
"usage": { "prompt_tokens": 14 }
}
chat-qwen3-0-6b-v1¶
Small instruct model. Supports streaming.
out, err := client.InvokeModelJSON("chat-qwen3-0-6b-v1", map[string]any{
"messages": []map[string]string{
{"role": "user", "content": "Say hello in one sentence."},
},
})
Streaming:
stream, err := client.InvokeModelStreamJSON("chat-qwen3-0-6b-v1", map[string]any{
"stream": true,
"messages": []map[string]string{
{"role": "user", "content": "Write a short haiku about Berlin."},
},
})
if err != nil {
panic(err)
}
defer stream.Close()
for stream.Next() {
fmt.Print(string(stream.Frame()))
}
Vision models¶
Pass an inline base64 image or a bucket object:
out, err := client.InvokeModelFromImageBase64("label-detect-v1", imageB64)
out, err := client.InvokeModelFromBucket("face-detect-v1", "uploads", "photos/team.jpg")
| Catalog ID | Capabilities |
|---|---|
face-detect-v1 |
face_detect, face_analyze |
label-detect-v1 |
label_detect |
text-detect-v1 |
text_detect, text_recognize |
moderation-v1 |
moderation |
image-quality-v1 |
image_quality |
Catalog reference¶
| Catalog ID | Category | Capabilities |
|---|---|---|
text-embed-v1 |
embedding | embed |
sentiment-multilingual-v1 |
sentiment | sentiment |
chat-qwen3-0-6b-v1 |
chat | chat, completion |
face-detect-v1 |
vision | face_detect, face_analyze |
label-detect-v1 |
vision | label_detect |
text-detect-v1 |
vision | text_detect, text_recognize |
moderation-v1 |
vision | moderation |
image-quality-v1 |
vision | image_quality |
New model revisions ship under a new catalog ID (for example *-v2). Existing IDs are not changed.