Skip to main content

AI Capability and Start Eligibility

TopStepAIKit has two query layers. supportsAIFeatures: is a legacy discovery API. Before actually starting an AI operation, call startEligibilityForRequest: to evaluate the complete request against current state without side effects.

Show entry: supportsAIFeatures: (optional, coarse)
↓
Build TSAIStartRequest (use case + parameters + optional device coordination)
↓
startEligibilityForRequest: (required, exact)
↓ Supported
Call the capability API

TSAIStartEligibility.support is either TSAICapabilitySupported or TSAICapabilityUnsupported. An unsupported result always carries an error; a supported result never does.

Build a start request​

TSAIUseCaseParameters *parameters =
[TSAIUseCaseParameters voiceTranslationParametersWithMode:
TSAIVoiceTranslationModeStandard];

TSAIAudioRouteConfiguration *route =
[TSAIAudioRouteConfiguration defaultConfiguration];
TSAIDeviceCoordination *coordination =
[TSAIDeviceCoordination coordinationWithScene:TSAIDeviceAISceneTranslation
initiator:TSAISessionInitiatorApp
audioRouteConfiguration:route];

TSAIStartRequest *request =
[TSAIStartRequest requestWithIdentifier:NSUUID.UUID.UUIDString
useCase:TSAIUseCaseVoiceTranslation
parameters:parameters
deviceCoordination:coordination];

TSAIStartEligibility *eligibility =
[context startEligibilityForRequest:request];
if (eligibility.support == TSAICapabilityUnsupported) {
TSLog(@"Cannot start: %@", eligibility.error.localizedDescription);
return;
}

Pass nil for deviceCoordination in app-only operations. A device-coordinated operation must specify the exact scene, initiator, and complete audio route; a feature bit is not sufficient.

Request models​

TypeRead-only propertiesConstructor
TSAIStartRequestrequestIdentifier, useCase, parameters, deviceCoordinationrequestWithIdentifier:useCase:parameters:deviceCoordination:
TSAIUseCaseParameterskind, recordingScene, voiceTranslationModeaudioRecordingParametersWithScene:, voiceTranslationParametersWithMode:
TSAIDeviceCoordinationscene, initiator, audioRouteConfigurationcoordinationWithScene:initiator:audioRouteConfiguration:
TSAIStartEligibilitysupport, errorsupportedEligibility, unsupportedEligibilityWithError:

requestIdentifier must be unique within the current connection generation. These models are immutable and copyable.

Use cases​

TSAIUseCasePurpose
TSAIUseCaseInvalidInvalid use case
TSAIUseCaseTextSummary / TSAIUseCaseChatText summary / AI chat
TSAIUseCaseTextTranslationText translation
TSAIUseCaseSpeechSynthesisSpeech synthesis
TSAIUseCasePCMRecognition / TSAIUseCaseFileRecognition / TSAIUseCaseOfflineRecognitionPCM / file / offline recognition
TSAIUseCasePhoneInterpretationPhone interpretation
TSAIUseCaseAIRecording / TSAIUseCaseCallRecording / TSAIUseCaseNormalRecordingAI / call / normal recording
TSAIUseCaseTextQuestionAnswerText question answering
TSAIUseCaseImageGenerationImage generation
TSAIUseCaseVoiceTranslation / TSAIUseCaseVoiceQuestionAnswerDevice-coordinated voice translation / question answering
TSAIUseCaseWatchFace / TSAIUseCaseRideHailingVoice watch-face creation / ride hailing

Device-coordination enums​

EnumValues
TSAIDeviceAISceneTSAIDeviceAISceneInvalid, TSAIDeviceAISceneChat, TSAIDeviceAISceneRecording, TSAIDeviceAISceneCallRecording, TSAIDeviceAISceneTranslation, TSAIDeviceAISceneRideHailing, TSAIDeviceAISceneWatchFace, TSAIDeviceAISceneQuestionAnswer, TSAIDeviceAISceneTranslationSelf, TSAIDeviceAISceneTranslationPeer
TSAISessionInitiatorTSAISessionInitiatorInvalid, TSAISessionInitiatorApp, TSAISessionInitiatorDevice
TSAIUseCaseParameterKindTSAIUseCaseParameterKindNone, TSAIUseCaseParameterKindAudioRecording, TSAIUseCaseParameterKindVoiceTranslation
TSAIVoiceTranslationModeTSAIVoiceTranslationModeInvalid, TSAIVoiceTranslationModeStandard, TSAIVoiceTranslationModeConversationSelf, TSAIVoiceTranslationModeConversationPeer
TSAIConversationTranslationModeTSAIConversationTranslationModeInvalid, TSAIConversationTranslationModeFaceToFace, TSAIConversationTranslationModePrivate, TSAIConversationTranslationModePortable

Atomic service capabilities​

TSAIServiceCapabilityOptions defines TSAIServiceCapabilityNone, TSAIServiceCapabilityTextSummarization, TSAIServiceCapabilityConversation, TSAIServiceCapabilityTextTranslation, TSAIServiceCapabilitySpeechSynthesis, TSAIServiceCapabilityPCMRecognition, TSAIServiceCapabilityFileRecognition, TSAIServiceCapabilityOfflineRecognition, TSAIServiceCapabilityInterpretation, TSAIServiceCapabilityAudioRecordingProcessing, TSAIServiceCapabilityQuestionAnswering, and TSAIServiceCapabilityImageGeneration.

A provider exposes supportedAIServiceCapabilities and supportForAIServiceCapabilities:. A device bridge exposes supportForDeviceAIScene:initiator:audioInputChannel:. Each reports only its own facts; the Context combines them with live state.

Legacy feature discovery​

- (BOOL)supportsAIFeatures:(TSAIFeatureOptions)features;

The legacy bit values are frozen: TSAIFeatureNone, TSAIFeatureAISummary, TSAIFeatureAIChat, TSAIFeatureTextTranslation, TSAIFeatureSpeechSynthesis, TSAIFeaturePCMRecognition, TSAIFeatureFileRecognition, TSAIFeatureDeviceMicRecognition, TSAIFeatureOfflineRecognition, TSAIFeatureInterpretation, TSAIFeatureAIAudioRecording, TSAIFeatureCallAudioRecording, TSAIFeatureNormalAudioRecording, TSAIFeatureQuestionAnswering, TSAIFeatureImageGeneration, TSAIFeatureDeviceVoiceTranslation, and TSAIFeatureDeviceQuestionAnswering. TSAIFeatureAll is fixed at 0xFFFF.

This API omits Context state, authorization, permissions, network state, task contention, and exact routing. A YES result must never authorize a start.

Important notes​

  1. Evaluate eligibility immediately before the real start call and re-evaluate after external state changes.
  2. Use the unsupported result's error as the exact reason; do not infer it from feature bits.
  3. Unknown and Automatic inputs are not device capability facts; device evaluation requires a resolved channel.
  4. Use TSAIFeatureAll only for compatibility diagnostics, not UI enablement.