Skip to content

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 response
  • InvokeByModelID(modelID, payload) — raw response body
  • InvokeModelFromImageBase64(modelID, imageB64) — vision models, inline image
  • InvokeModelFromBucket(modelID, bucket, key) — vision models, bucket object
  • InvokeModelStreamJSON(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.