Ax Audio And Realtime For Go
Use when writing Go code with github.com/ax-llm/ax/packages/go for audio input/output, OpenAI Responses audio mapping, realtime event folding, and generated package audio examples.
Install
Install only this skill for Go:
npx skills add https://ax-llm.github.io/ax/go/ --skill 'ax-go-audio'Published skill file: ax-go-audio/SKILL.md.
Source
- Source: packages/go/skills/ax-go-audio/SKILL.md
- Version:
25.3.2
Skill Instructions
This skill helps an agent write Go code with the generated Ax package github.com/ax-llm/ax/packages/go. Use the generated package API, examples, and manifests; do not import TypeScript-only APIs unless you are editing the TypeScript package.
When To Use
- Map speech, transcription, or realtime events through the generated provider surface.
- Use no-key examples for event folding and provider request mapping.
- Keep live provider calls behind explicit credentials and provider-api examples.
Package Facts
- Language: Go.
- Package:
github.com/ax-llm/ax/packages/go. - Package API docs:
API.mdandaxir-api.json. - Capability manifest:
axir-capabilities.json. - Runnable examples:
examples/. - Real network support: yes.
- Scripted no-key transport support: yes.
- Runtime profiles:
javascript-goja.
Core Pattern
import ax "github.com/ax-llm/ax/packages/go"
llm := ax.NewAI("openai", map[string]ax.Value{"apiKey": os.Getenv("OPENAI_API_KEY")})Speech And Audio Fields
speak()returns TypeScript’s speech result keys:data(base64 audio),format,mimeType,transcript(the spoken text), andsampleRate/channelswhen the mime type gives them. The older keysaudio,mime_type, andsample_rateare removed.- As in TypeScript, a binary speech body’s Content-Type is its
mimeType(else the format’s mime type), and a JSON body (by its Content-Type) is read fromaudio_data,audioData,data,audio.data,output.audio.data, or a Gemini part’s inline data. A JSON body with a bare string underaudio, or without an audio data field, raises TypeScript’s error. - Speak requests match TypeScript: OpenAI defaults to
gpt-4o-mini-ttswith thealloyvoice, sends a{ id }voice by its id, sendsspeedwhen set, and asks forpcmwhen the format ispcm16; Mistral defaults tovoxtral-mini-tts-2603and sends the voice asvoice_id; Grok sendsspeedwhen set. - The renderer calls the client’s
Speak(ctx, request, options):AxAIServiceclients have it, and theAIClientinterface does not require it, so a custom client withoutSpeakcannot render audio. - An AxGen
audiooutput field becomes speech with therenderAudio/render_audiooption (see the gen skill): the field then holds thespeak()result, with the spoken text as itstranscript. - An agent’s
audiooutput fields render the same way whenrenderAudio/render_audiois set on the agent, itsresponderOptions, or the forward call (the call’s wins); as in TypeScript, the responder’sspeak()request takes the forward call’sspeechorresponderOptions.speech, not a top-levelspeechoption. - An audio input that is a string, or an audio object with a string
transcript(a rendered audio output), reaches the model as text. Audio without a transcript goes as an audio part with only itsformat(wavwhen it has none) anddata.
Relevant API Surface
- AxAI:
axllm.NewAI,axllm.OpenAIDecisions,axllm.AxAIOpenAIDecisionsClient,axllm.Typesafe,axllm.AxAITypesafeClient,context.Context,axllm.AxAIServiceAbortedError,axllm.GetSupportedAIModels,axllm.AxCredentialRequest,axllm.AxCredentialProvider,AxOwnedClientFactory.OwnedWorkerFactory,axllm.AxChatSession,axllm.AxChatStream,axllm.OpenAICompatibleClient,axllm.OpenAIResponsesClient,axllm.GoogleGeminiClient,axllm.AnthropicClient,axllm.AxUsageContext,axllm.AxUsageEvent,axllm.AxUsageObserver,axllm.SetUsageObserver,axllm.AxRuntimeHooks,axllm.AxRateLimitInfo,axllm.AxRateLimiter,axllm.AxTracer,axllm.AxMeter,axllm.AxGlobals,axllm.SetRateLimiter,axllm.SetTracer,axllm.SetMeter,axllm.AxBalancer,axllm.AxBalancerAdaptiveStrategy,axllm.AxBalancerStatsStore,axllm.AxInMemoryBalancerStatsStore,axllm.CreateBalancerRouteStats,axllm.UpdateBalancerRouteStats,axllm.SampleBalancerRouteHealth,axllm.MultiServiceRouter,axllm.ProviderRouter
Guardrails
- Start from package examples for exact native syntax before inventing a new call shape.
- Use
provider-apiexamples only when the user explicitly has provider credentials available. - Use
no-keyexamples for deterministic local checks and provider request mapping. - Treat AxIR as the source of generated package truth: if package docs disagree with source code, update the compiler and regenerate packages.
- Do not copy repo-maintainer skills from
tools/*/skills/into user packages.