Class: AI
Defined in: src/ai/AI.ts:52
AI Interface to wrap different AI models (primarily Gemini) Handles both traditional query-based AI interactions and real-time live sessions
Features:
- Text and multimodal queries
- Real-time audio/video AI sessions (Gemini Live)
- Advanced API key management with multiple sources
- Session locking to prevent concurrent operations
The URL param and key.json shortcut is only for demonstration and prototyping practice and we strongly suggest not using it for production or deployment purposes. One should set up a proper server to converse with AI servers in deployment.
API Key Management Features:
- Multiple Key Sources (Priority Order):
- URL Parameter: ?key=<api_key>
- keys.json file: Local configuration file
- User Prompt: Interactive fallback
- keys.json Support:
- Structure: {"gemini": {"apiKey": "YOUR_KEY_HERE"}}
- Automatically loads if present
Extends
Constructors
Constructor
new AI():
AI
Defined in: node_modules/@types/three/src/core/Object3D.d.ts:95
This creates a new Object3D object.
Returns
AI
Inherited from
Properties
isXRScript
isXRScript:
boolean
=true
Defined in: src/core/Script.ts:53
Inherited from
keysCache?
optional
keysCache:KeysJson
Defined in: src/ai/AI.ts:58
lock
lock:
boolean
=false
Defined in: src/ai/AI.ts:56
model?
optional
model:ModelClass
Defined in: src/ai/AI.ts:55
options
options:
AIOptions
Defined in: src/ai/AI.ts:57
ux
ux:
UX
Defined in: src/core/Script.ts:52
Inherited from
dependencies
static
dependencies:object
Defined in: src/ai/AI.ts:53
aiOptions
aiOptions: typeof
AIOptions
=AIOptions
Methods
dispose()
dispose():
void
Defined in: src/core/Script.ts:196
Called when the script is removed from the scene. Opposite of init.
Returns
void
Inherited from
generate()
generate(
prompt
,type
,systemInstruction
,model
):Promise
<undefined
|string
|void
>
Defined in: src/ai/AI.ts:248
Parameters
prompt
string
| string
[]
type
"image"
= 'image'
systemInstruction
string
= 'Generate an image'
model
string
= 'gemini-2.5-flash-image-preview'
Returns
Promise
<undefined
| string
| void
>
getLiveSessionStatus()
getLiveSessionStatus():
object
Defined in: src/ai/AI.ts:230
Returns
object
hasSession
hasSession:
boolean
isActive
isActive:
boolean
isAvailable
isAvailable:
undefined
|boolean
| typeofModality
hasApiKey()
hasApiKey():
Promise
<null
|boolean
|""
>
Defined in: src/ai/AI.ts:270
Check if the current model has an API key available from any source
Returns
Promise
<null
| boolean
| ""
>
True if API key is available
init()
init(
__namedParameters
):Promise
<void
>
Defined in: src/ai/AI.ts:80
Initializes an instance with XR controllers, grips, hands, raycaster, and default options. We allow all scripts to quickly access its user (e.g., user.isSelecting(), user.hands), world (e.g., physical depth mesh, lighting estimation, and recognized objects), and scene (the root of three.js's scene graph). If this returns a promise, we will wait for it.
Parameters
__namedParameters
aiOptions
Returns
Promise
<void
>
Overrides
initializeModel()
initializeModel(
ModelClass
,modelOptions
):Promise
<void
>
Defined in: src/ai/AI.ts:104
Parameters
ModelClass
modelOptions
Returns
Promise
<void
>
initPhysics()
initPhysics(
_physics
):void
|Promise
<void
>
Defined in: src/core/Script.ts:72
Enables depth-aware interactions with physics. See /demos/ballpit
Parameters
_physics
Returns
void
| Promise
<void
>
Inherited from
isAvailable()
isAvailable():
undefined
|boolean
Defined in: src/ai/AI.ts:171
Returns
undefined
| boolean
isLiveAvailable()
isLiveAvailable():
undefined
|false
| typeofModality
Defined in: src/ai/AI.ts:237
Returns
undefined
| false
| typeof Modality
isValidApiKey()
isValidApiKey(
key
):boolean
|""
Defined in: src/ai/AI.ts:167
Parameters
key
string
Returns
boolean
| ""
loadKeysFromFile()
Defined in: src/ai/AI.ts:64
Load API keys from keys.json file if available Parsed keys object or null if not found
Returns
onHoverEnter()
onHoverEnter(
_controller
):void
Defined in: src/core/Script.ts:157
Called when the controller starts hovering over this object with reticle.
Parameters
_controller
An XR controller.
Returns
void
Inherited from
onHoverExit()
onHoverExit(
_controller
):void
Defined in: src/core/Script.ts:162
Called when the controller hovers over this object with reticle.
Parameters
_controller
An XR controller.
Returns
void
Inherited from
onHovering()
onHovering(
_controller
):void
Defined in: src/core/Script.ts:167
Called when the controller hovers over this object with reticle.
Parameters
_controller
An XR controller.
Returns
void
Inherited from
onKeyDown()
onKeyDown(
_event
):void
Defined in: src/core/Script.ts:109
Called on keyboard keypress.
Parameters
_event
Event containing .code
to read the keyboard key.
Returns
void
Inherited from
onKeyUp()
onKeyUp(
_event
):void
Defined in: src/core/Script.ts:110
Parameters
_event
Returns
void
Inherited from
onObjectGrabbing()
onObjectGrabbing(
_event
):void
Defined in: src/core/Script.ts:187
Called every frame a hand is grabbing this object.
Parameters
_event
Returns
void
Inherited from
onObjectGrabEnd()
onObjectGrabEnd(
_event
):void
Defined in: src/core/Script.ts:191
Called when a hand stops grabbing this object.
Parameters
_event
Returns
void
Inherited from
onObjectGrabStart()
onObjectGrabStart(
_event
):void
Defined in: src/core/Script.ts:183
Called when a hand starts grabbing this object (touching + pinching).
Parameters
_event
Returns
void
Inherited from
onObjectSelectEnd()
onObjectSelectEnd(
_event
):boolean
Defined in: src/core/Script.ts:150
Called when the controller stops selecting this object the script represents, e.g. View, ModelView.
Parameters
_event
event.target holds its controller.
Returns
boolean
Whether the event was handled
Inherited from
onObjectSelectStart()
onObjectSelectStart(
_event
):boolean
Defined in: src/core/Script.ts:141
Called when the controller starts selecting this object the script represents, e.g. View, ModelView.
Parameters
_event
event.target holds its controller.
Returns
boolean
Whether the event was handled
Inherited from
onObjectTouchEnd()
onObjectTouchEnd(
_event
):void
Defined in: src/core/Script.ts:179
Called when a hand's index finger stops touching this object.
Parameters
_event
Returns
void
Inherited from
onObjectTouching()
onObjectTouching(
_event
):void
Defined in: src/core/Script.ts:175
Called every frame that a hand's index finger is touching this object.
Parameters
_event
Returns
void
Inherited from
onObjectTouchStart()
onObjectTouchStart(
_event
):void
Defined in: src/core/Script.ts:171
Called when a hand's index finger starts touching this object.
Parameters
_event
Returns
void
Inherited from
onSelect()
onSelect(
_event
):void
Defined in: src/core/Script.ts:98
Called whenever pinch / mouse click successfully completes, globally.
Parameters
_event
event.target holds its controller.
Returns
void
Inherited from
onSelectEnd()
onSelectEnd(
_event
):void
Defined in: src/core/Script.ts:92
Called whenever pinch / mouse click discontinues, globally.
Parameters
_event
event.target holds its controller
Returns
void
Inherited from
onSelecting()
onSelecting(
_event
):void
Defined in: src/core/Script.ts:103
Called whenever pinch / mouse click is happening, globally.
Parameters
_event
Returns
void
Inherited from
onSelectStart()
onSelectStart(
_event
):void
Defined in: src/core/Script.ts:86
Called whenever pinch / mouse click starts, globally.
Parameters
_event
event.target holds its controller
Returns
void
Inherited from
onSimulatorStarted()
onSimulatorStarted():
void
Defined in: src/core/Script.ts:78
Returns
void
Inherited from
onSqueeze()
onSqueeze(
_event
):void
Defined in: src/core/Script.ts:132
Called whenever gamepad trigger successfully completes, globally.
Parameters
_event
event.target holds its controller.
Returns
void
Inherited from
onSqueezeEnd()
onSqueezeEnd(
_event
):void
Defined in: src/core/Script.ts:121
Called whenever gamepad trigger stops, globally.
Parameters
_event
event.target holds its controller.
Returns
void
Inherited from
onSqueezeStart()
onSqueezeStart(
_event
):void
Defined in: src/core/Script.ts:116
Called whenever gamepad trigger starts, globally.
Parameters
_event
event.target holds its controller.
Returns
void
Inherited from
onSqueezing()
onSqueezing(
_event
):void
Defined in: src/core/Script.ts:126
Called whenever gamepad is being triggered, globally.
Parameters
_event
Returns
void
Inherited from
onXRSessionEnded()
onXRSessionEnded():
void
Defined in: src/core/Script.ts:76
Returns
void
Inherited from
onXRSessionStarted()
onXRSessionStarted(
_session?
):void
Defined in: src/core/Script.ts:75
Parameters
_session?
Returns
void
Inherited from
physicsStep()
physicsStep():
void
Defined in: src/core/Script.ts:73
Returns
void
Inherited from
query()
query(
input
,tools?
):Promise
<null
|string
|GeminiResponse
>
Defined in: src/ai/AI.ts:175
Parameters
input
prompt
string
tools?
never
[]
Returns
Promise
<null
| string
| GeminiResponse
>
resolveApiKey()
resolveApiKey(
modelOptions
):Promise
<null
|string
>
Defined in: src/ai/AI.ts:122
Parameters
modelOptions
Returns
Promise
<null
| string
>
sendRealtimeInput()
sendRealtimeInput(
input
):false
|void
Defined in: src/ai/AI.ts:225
Parameters
input
LiveSendRealtimeInputParameters
Returns
false
| void
sendToolResponse()
sendToolResponse(
response
):void
Defined in: src/ai/AI.ts:219
Parameters
response
LiveSendToolResponseParameters
Returns
void
setLiveCallbacks()
setLiveCallbacks(
callbacks
):Promise
<void
>
Defined in: src/ai/AI.ts:213
Parameters
callbacks
LiveCallbacks
Returns
Promise
<void
>
startLiveSession()
startLiveSession(
config
):Promise
<Session
>
Defined in: src/ai/AI.ts:184
Parameters
config
Returns
Promise
<Session
>
stopLiveSession()
stopLiveSession():
Promise
<void
>
Defined in: src/ai/AI.ts:202
Returns
Promise
<void
>
triggerKeyPopup()
triggerKeyPopup():
void
Defined in: src/ai/AI.ts:246
In simulator mode, pop up a 2D UI to request Gemini key; In XR mode, show a 3D UI to instruct users to get an API key.
Returns
void
update()
update(
_time?
,_frame?
):void
Defined in: src/core/Script.ts:67
Runs per frame.
Parameters
_time?
number
_frame?
Returns
void
Inherited from
createSampleKeysStructure()
static
createSampleKeysStructure():object
Defined in: src/ai/AI.ts:259
Create a sample keys.json file structure for reference
Returns
object
Sample keys.json structure
gemini
gemini:
object
gemini.apiKey
apiKey:
string
='YOUR_GEMINI_API_KEY_HERE'
openai
openai:
object
openai.apiKey
apiKey:
string
='YOUR_OPENAI_API_KEY_HERE'