Ax Audio And Realtime For Java
Use when writing Java code with dev.axllm:ax for audio input/output, OpenAI Responses audio mapping, realtime event folding, and generated package audio examples.
Install
Install only this skill for Java:
npx skills add https://ax-llm.github.io/ax/java/ --skill 'ax-java-audio'Published skill file: ax-java-audio/SKILL.md.
Source
- Source: packages/java/skills/ax-java-audio/SKILL.md
- Version:
25.3.2
Skill Instructions
This skill helps an agent write Java code with the generated Ax package dev.axllm:ax. 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: Java.
- Package:
dev.axllm:ax. - 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-quickjs,python-pyodide.
Core Pattern
import dev.axllm.ax.*;
var llm = Ax.ai("openai", java.util.Map.of("apiKey", System.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
AiClient.speak(request, options):AxAIServiceclients speak, and a client without speech throwsUnsupportedOperationException. - 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:
Ax.ai,Ax.openaiDecisions,AxAIOpenAIDecisionsClient,Ax.typesafe,AxAITypesafeClient,AxCancellationToken,AxAIServiceAbortedError,Ax.getSupportedAIModels,OpenAICompatibleClient.CredentialRequest,OpenAICompatibleClient.CredentialProvider,AiClient.ownedWorkerFactory,AxChatSession,AxChatStream,OpenAICompatibleClient,OpenAIResponsesClient,GoogleGeminiClient,AnthropicClient,Map<String, Object>,AxUsageEvent,AxUsageObserver,AxGlobals.setUsageObserver,AxRuntimeHooks,AxRateLimitInfo,AxRateLimiter,AxTracer,AxMeter,AxGlobals,AxGlobals.setRateLimiter,AxGlobals.setTracer,AxGlobals.setMeter,AxBalancer,AxBalancerAdaptiveStrategy,AxBalancerStatsStore,AxInMemoryBalancerStatsStore,AxBalancerAdaptive.createRouteStats,AxBalancerAdaptive.updateRouteStats,AxBalancerAdaptive.sampleRouteHealth,MultiServiceRouter,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.