Install
openclaw skills install @psyb0t/go-contextual-aiUnofficial Go client for the Contextual AI API, generated with oapi-codegen. contextual.NewClientWithResponses(baseURL, opts...) from github.com/psyb0t/go-contextual-ai gives a typed method for every endpoint in Contextual AI's OpenAPI spec (agents, agent queries, datastores, documents, generate, LMUnit, parse jobs, rerank, users), with request structs and decoded JSON200/JSON422 response fields. Auth is a bearer API key added through a request editor. Use when Go code needs to call the Contextual AI API, or already imports go-contextual-ai.
openclaw skills install @psyb0t/go-contextual-aiTyped Go client for the Contextual AI API. Package contextual, generated from the spec Contextual AI publishes for its SDKs.
For install details, the method naming scheme and the operation list, see references/setup.md.
CONTEXTUAL_API_KEY. Never hardcode it, commit it, or log it, and never print request headers.NewClientWithResponses. Use https://api.contextual.ai/v1 unless the user names another Contextual AI host.github.com/psyb0t/go-contextual-ai.Stream unset to get one JSON response.import (
"context"
"fmt"
"net/http"
"os"
"github.com/google/uuid"
"github.com/psyb0t/go-contextual-ai"
)
auth := contextual.WithRequestEditorFn(func(_ context.Context, req *http.Request) error {
req.Header.Set("Authorization", "Bearer "+os.Getenv("CONTEXTUAL_API_KEY"))
return nil
})
client, err := contextual.NewClientWithResponses("https://api.contextual.ai/v1", auth)
if err != nil {
return err
}
limit := 20
datastores, err := client.ListDatastoresDatastoresGetWithResponse(
ctx,
&contextual.ListDatastoresDatastoresGetParams{Limit: &limit},
)
if err != nil {
return err // transport failure
}
if datastores.JSON200 == nil {
return fmt.Errorf("list datastores: status %d: %s", datastores.StatusCode(), datastores.Body)
}
for _, ds := range datastores.JSON200.Datastores {
fmt.Println(ds.Id, ds.Name)
}
Querying an agent:
agentID, err := uuid.Parse(os.Getenv("CONTEXTUAL_AGENT_ID"))
if err != nil {
return err
}
res, err := client.QueryAgentsAgentIdQueryPostWithResponse(
ctx,
agentID,
&contextual.QueryAgentsAgentIdQueryPostParams{},
contextual.QueryRequestV1{
Messages: []contextual.MessageAndRole{
{Role: contextual.SenderTypeUser, Content: "What is the refund policy?"},
},
},
)
if err != nil {
return err
}
if res.JSON200 != nil && res.JSON200.Message != nil {
fmt.Println(res.JSON200.Message.Content)
}
err is a transport or decoding failure.err. Check StatusCode(): JSON200 is set on success, JSON422 (*HTTPValidationError, with Detail) on a validation error, and Body always holds the raw response.