@azure/ai-projects 2.7.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -5
- package/dist/browser/aiProjectClient.d.ts +4 -0
- package/dist/browser/aiProjectClient.d.ts.map +1 -1
- package/dist/browser/aiProjectClient.js +6 -1
- package/dist/browser/aiProjectClient.js.map +1 -1
- package/dist/browser/api/agents/index.d.ts +2 -2
- package/dist/browser/api/agents/index.d.ts.map +1 -1
- package/dist/browser/api/agents/index.js +1 -1
- package/dist/browser/api/agents/index.js.map +1 -1
- package/dist/browser/api/agents/operations.d.ts +41 -4
- package/dist/browser/api/agents/operations.d.ts.map +1 -1
- package/dist/browser/api/agents/operations.js +322 -21
- package/dist/browser/api/agents/operations.js.map +1 -1
- package/dist/browser/api/agents/options.d.ts +163 -93
- package/dist/browser/api/agents/options.d.ts.map +1 -1
- package/dist/browser/api/agents/options.js.map +1 -1
- package/dist/browser/api/beta/agents/index.d.ts +2 -2
- package/dist/browser/api/beta/agents/index.d.ts.map +1 -1
- package/dist/browser/api/beta/agents/index.js +1 -1
- package/dist/browser/api/beta/agents/index.js.map +1 -1
- package/dist/browser/api/beta/agents/operations.d.ts +2 -24
- package/dist/browser/api/beta/agents/operations.d.ts.map +1 -1
- package/dist/browser/api/beta/agents/operations.js +3 -185
- package/dist/browser/api/beta/agents/operations.js.map +1 -1
- package/dist/browser/api/beta/agents/options.d.ts +0 -56
- package/dist/browser/api/beta/agents/options.d.ts.map +1 -1
- package/dist/browser/api/beta/agents/options.js.map +1 -1
- package/dist/browser/api/beta/evaluators/index.d.ts +2 -2
- package/dist/browser/api/beta/evaluators/index.d.ts.map +1 -1
- package/dist/browser/api/beta/evaluators/index.js +1 -1
- package/dist/browser/api/beta/evaluators/index.js.map +1 -1
- package/dist/browser/api/beta/evaluators/operations.d.ts +2 -59
- package/dist/browser/api/beta/evaluators/operations.d.ts.map +1 -1
- package/dist/browser/api/beta/evaluators/operations.js +1 -388
- package/dist/browser/api/beta/evaluators/operations.js.map +1 -1
- package/dist/browser/api/beta/evaluators/options.d.ts +0 -84
- package/dist/browser/api/beta/evaluators/options.d.ts.map +1 -1
- package/dist/browser/api/beta/evaluators/options.js.map +1 -1
- package/dist/browser/api/datasets/index.d.ts +2 -2
- package/dist/browser/api/datasets/index.d.ts.map +1 -1
- package/dist/browser/api/datasets/index.js +1 -1
- package/dist/browser/api/datasets/index.js.map +1 -1
- package/dist/browser/api/datasets/operations.d.ts +23 -2
- package/dist/browser/api/datasets/operations.d.ts.map +1 -1
- package/dist/browser/api/datasets/operations.js +193 -1
- package/dist/browser/api/datasets/operations.js.map +1 -1
- package/dist/browser/api/datasets/options.d.ts +52 -0
- package/dist/browser/api/datasets/options.d.ts.map +1 -1
- package/dist/browser/api/datasets/options.js.map +1 -1
- package/dist/browser/api/evaluators/index.d.ts +3 -0
- package/dist/browser/api/evaluators/index.d.ts.map +1 -0
- package/dist/browser/api/evaluators/index.js +4 -0
- package/dist/browser/api/evaluators/index.js.map +1 -0
- package/dist/browser/api/evaluators/operations.d.ts +62 -0
- package/dist/browser/api/evaluators/operations.d.ts.map +1 -0
- package/dist/browser/api/evaluators/operations.js +373 -0
- package/dist/browser/api/evaluators/operations.js.map +1 -0
- package/dist/browser/api/evaluators/options.d.ts +70 -0
- package/dist/browser/api/evaluators/options.d.ts.map +1 -0
- package/dist/browser/api/evaluators/options.js.map +1 -0
- package/dist/browser/classic/agents/index.d.ts +21 -2
- package/dist/browser/classic/agents/index.d.ts.map +1 -1
- package/dist/browser/classic/agents/index.js +10 -1
- package/dist/browser/classic/agents/index.js.map +1 -1
- package/dist/browser/classic/beta/agents/index.d.ts +4 -15
- package/dist/browser/classic/beta/agents/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/agents/index.js +4 -11
- package/dist/browser/classic/beta/agents/index.js.map +1 -1
- package/dist/browser/classic/beta/evaluators/index.d.ts +3 -38
- package/dist/browser/classic/beta/evaluators/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/evaluators/index.js +2 -18
- package/dist/browser/classic/beta/evaluators/index.js.map +1 -1
- package/dist/browser/classic/beta/index.d.ts +2 -4
- package/dist/browser/classic/beta/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/index.js +3 -6
- package/dist/browser/classic/beta/index.js.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
- package/dist/browser/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/conversations/index.js +5 -4
- package/dist/browser/classic/beta/voiceAgents/conversations/index.js.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/index.d.ts +3 -2
- package/dist/browser/classic/beta/voiceAgents/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/index.js +5 -5
- package/dist/browser/classic/beta/voiceAgents/index.js.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
- package/dist/browser/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
- package/dist/browser/classic/beta/voiceAgents/telephony/index.js +16 -11
- package/dist/browser/classic/beta/voiceAgents/telephony/index.js.map +1 -1
- package/dist/browser/classic/datasets/index.d.ts +13 -2
- package/dist/browser/classic/datasets/index.d.ts.map +1 -1
- package/dist/browser/classic/datasets/index.js +6 -1
- package/dist/browser/classic/datasets/index.js.map +1 -1
- package/dist/browser/classic/evaluators/index.d.ts +43 -0
- package/dist/browser/classic/evaluators/index.d.ts.map +1 -0
- package/dist/browser/classic/evaluators/index.js +19 -0
- package/dist/browser/classic/evaluators/index.js.map +1 -0
- package/dist/browser/classic/index.d.ts +1 -1
- package/dist/browser/classic/index.d.ts.map +1 -1
- package/dist/browser/classic/index.js.map +1 -1
- package/dist/browser/constants.d.ts +1 -1
- package/dist/browser/constants.js +1 -1
- package/dist/browser/constants.js.map +1 -1
- package/dist/browser/index.d.ts +10 -17
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -2
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/models/index.d.ts +1 -3
- package/dist/browser/models/index.d.ts.map +1 -1
- package/dist/browser/models/index.js.map +1 -1
- package/dist/browser/models/models.d.ts +1081 -536
- package/dist/browser/models/models.d.ts.map +1 -1
- package/dist/browser/models/models.js +1554 -655
- package/dist/browser/models/models.js.map +1 -1
- package/dist/browser/package.json +1 -1
- package/dist/browser/realtime/voiceAgentRealtimeClient.d.ts +27 -2
- package/dist/browser/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
- package/dist/browser/realtime/voiceAgentRealtimeClient.js +97 -17
- package/dist/browser/realtime/voiceAgentRealtimeClient.js.map +1 -1
- package/dist/browser/tracing/configuration.d.ts +3 -5
- package/dist/browser/tracing/configuration.d.ts.map +1 -1
- package/dist/browser/tracing/configuration.js +8 -6
- package/dist/browser/tracing/configuration.js.map +1 -1
- package/dist/browser/tracing/tracingClient.d.ts +1 -1
- package/dist/browser/tracing/tracingClient.d.ts.map +1 -1
- package/dist/browser/tracing/tracingClient.js +2 -2
- package/dist/browser/tracing/tracingClient.js.map +1 -1
- package/dist/browser/tracing/voiceAgentTracing.d.ts +63 -0
- package/dist/browser/tracing/voiceAgentTracing.d.ts.map +1 -0
- package/dist/browser/tracing/voiceAgentTracing.js +740 -0
- package/dist/browser/tracing/voiceAgentTracing.js.map +1 -0
- package/dist/browser/webSocketTransport.d.ts +1 -0
- package/dist/browser/webSocketTransport.d.ts.map +1 -1
- package/dist/browser/webSocketTransport.js +5 -13
- package/dist/browser/webSocketTransport.js.map +1 -1
- package/dist/commonjs/aiProjectClient.d.ts +4 -0
- package/dist/commonjs/aiProjectClient.d.ts.map +1 -1
- package/dist/commonjs/aiProjectClient.js +6 -1
- package/dist/commonjs/aiProjectClient.js.map +2 -2
- package/dist/commonjs/api/agents/index.d.ts +2 -2
- package/dist/commonjs/api/agents/index.d.ts.map +1 -1
- package/dist/commonjs/api/agents/index.js +18 -0
- package/dist/commonjs/api/agents/index.js.map +2 -2
- package/dist/commonjs/api/agents/operations.d.ts +41 -4
- package/dist/commonjs/api/agents/operations.d.ts.map +1 -1
- package/dist/commonjs/api/agents/operations.js +415 -19
- package/dist/commonjs/api/agents/operations.js.map +2 -2
- package/dist/commonjs/api/agents/options.d.ts +163 -93
- package/dist/commonjs/api/agents/options.d.ts.map +1 -1
- package/dist/commonjs/api/agents/options.js.map +1 -1
- package/dist/commonjs/api/beta/agents/index.d.ts +2 -2
- package/dist/commonjs/api/beta/agents/index.d.ts.map +1 -1
- package/dist/commonjs/api/beta/agents/index.js +2 -12
- package/dist/commonjs/api/beta/agents/index.js.map +2 -2
- package/dist/commonjs/api/beta/agents/operations.d.ts +2 -24
- package/dist/commonjs/api/beta/agents/operations.d.ts.map +1 -1
- package/dist/commonjs/api/beta/agents/operations.js +4 -239
- package/dist/commonjs/api/beta/agents/operations.js.map +2 -2
- package/dist/commonjs/api/beta/agents/options.d.ts +0 -56
- package/dist/commonjs/api/beta/agents/options.d.ts.map +1 -1
- package/dist/commonjs/api/beta/agents/options.js.map +1 -1
- package/dist/commonjs/api/beta/evaluators/index.d.ts +2 -2
- package/dist/commonjs/api/beta/evaluators/index.d.ts.map +1 -1
- package/dist/commonjs/api/beta/evaluators/index.js +2 -24
- package/dist/commonjs/api/beta/evaluators/index.js.map +2 -2
- package/dist/commonjs/api/beta/evaluators/operations.d.ts +2 -59
- package/dist/commonjs/api/beta/evaluators/operations.d.ts.map +1 -1
- package/dist/commonjs/api/beta/evaluators/operations.js +2 -497
- package/dist/commonjs/api/beta/evaluators/operations.js.map +2 -2
- package/dist/commonjs/api/beta/evaluators/options.d.ts +0 -84
- package/dist/commonjs/api/beta/evaluators/options.d.ts.map +1 -1
- package/dist/commonjs/api/beta/evaluators/options.js.map +1 -1
- package/dist/commonjs/api/datasets/index.d.ts +2 -2
- package/dist/commonjs/api/datasets/index.d.ts.map +1 -1
- package/dist/commonjs/api/datasets/index.js +10 -0
- package/dist/commonjs/api/datasets/index.js.map +2 -2
- package/dist/commonjs/api/datasets/operations.d.ts +23 -2
- package/dist/commonjs/api/datasets/operations.d.ts.map +1 -1
- package/dist/commonjs/api/datasets/operations.js +245 -0
- package/dist/commonjs/api/datasets/operations.js.map +2 -2
- package/dist/commonjs/api/datasets/options.d.ts +52 -0
- package/dist/commonjs/api/datasets/options.d.ts.map +1 -1
- package/dist/commonjs/api/datasets/options.js.map +1 -1
- package/dist/commonjs/api/evaluators/index.d.ts +3 -0
- package/dist/commonjs/api/evaluators/index.d.ts.map +1 -0
- package/dist/commonjs/api/{beta/datasets → evaluators}/index.js +17 -5
- package/dist/commonjs/api/evaluators/index.js.map +7 -0
- package/dist/commonjs/api/evaluators/operations.d.ts +62 -0
- package/dist/commonjs/api/evaluators/operations.d.ts.map +1 -0
- package/dist/commonjs/api/evaluators/operations.js +505 -0
- package/dist/commonjs/api/evaluators/operations.js.map +7 -0
- package/dist/commonjs/api/evaluators/options.d.ts +70 -0
- package/dist/commonjs/api/evaluators/options.d.ts.map +1 -0
- package/dist/commonjs/api/evaluators/options.js.map +7 -0
- package/dist/commonjs/classic/agents/index.d.ts +21 -2
- package/dist/commonjs/classic/agents/index.d.ts.map +1 -1
- package/dist/commonjs/classic/agents/index.js +9 -0
- package/dist/commonjs/classic/agents/index.js.map +2 -2
- package/dist/commonjs/classic/beta/agents/index.d.ts +4 -15
- package/dist/commonjs/classic/beta/agents/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/agents/index.js +9 -10
- package/dist/commonjs/classic/beta/agents/index.js.map +2 -2
- package/dist/commonjs/classic/beta/evaluators/index.d.ts +3 -38
- package/dist/commonjs/classic/beta/evaluators/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/evaluators/index.js +2 -18
- package/dist/commonjs/classic/beta/evaluators/index.js.map +2 -2
- package/dist/commonjs/classic/beta/index.d.ts +2 -4
- package/dist/commonjs/classic/beta/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/index.js +9 -6
- package/dist/commonjs/classic/beta/index.js.map +2 -2
- package/dist/commonjs/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
- package/dist/commonjs/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/voiceAgents/conversations/index.js +10 -4
- package/dist/commonjs/classic/beta/voiceAgents/conversations/index.js.map +2 -2
- package/dist/commonjs/classic/beta/voiceAgents/index.d.ts +3 -2
- package/dist/commonjs/classic/beta/voiceAgents/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/voiceAgents/index.js +4 -4
- package/dist/commonjs/classic/beta/voiceAgents/index.js.map +2 -2
- package/dist/commonjs/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
- package/dist/commonjs/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
- package/dist/commonjs/classic/beta/voiceAgents/telephony/index.js +33 -11
- package/dist/commonjs/classic/beta/voiceAgents/telephony/index.js.map +2 -2
- package/dist/commonjs/classic/datasets/index.d.ts +13 -2
- package/dist/commonjs/classic/datasets/index.d.ts.map +1 -1
- package/dist/commonjs/classic/datasets/index.js +5 -0
- package/dist/commonjs/classic/datasets/index.js.map +2 -2
- package/dist/commonjs/classic/evaluators/index.d.ts +43 -0
- package/dist/commonjs/classic/evaluators/index.d.ts.map +1 -0
- package/dist/commonjs/classic/{beta/datasets → evaluators}/index.js +15 -14
- package/dist/commonjs/classic/evaluators/index.js.map +7 -0
- package/dist/commonjs/classic/index.d.ts +1 -1
- package/dist/commonjs/classic/index.d.ts.map +1 -1
- package/dist/commonjs/classic/index.js.map +1 -1
- package/dist/commonjs/constants.d.ts +1 -1
- package/dist/commonjs/constants.js +1 -1
- package/dist/commonjs/constants.js.map +1 -1
- package/dist/commonjs/index.d.ts +10 -17
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +1 -2
- package/dist/commonjs/index.js.map +3 -3
- package/dist/commonjs/models/index.d.ts +1 -3
- package/dist/commonjs/models/index.d.ts.map +1 -1
- package/dist/commonjs/models/index.js.map +1 -1
- package/dist/commonjs/models/models.d.ts +1081 -536
- package/dist/commonjs/models/models.d.ts.map +1 -1
- package/dist/commonjs/models/models.js +1803 -722
- package/dist/commonjs/models/models.js.map +2 -2
- package/dist/commonjs/package.json +1 -1
- package/dist/commonjs/realtime/voiceAgentRealtimeClient.d.ts +27 -2
- package/dist/commonjs/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
- package/dist/commonjs/realtime/voiceAgentRealtimeClient.js +98 -27
- package/dist/commonjs/realtime/voiceAgentRealtimeClient.js.map +2 -2
- package/dist/commonjs/tracing/configuration.d.ts +3 -5
- package/dist/commonjs/tracing/configuration.d.ts.map +1 -1
- package/dist/commonjs/tracing/configuration.js +5 -1
- package/dist/commonjs/tracing/configuration.js.map +2 -2
- package/dist/commonjs/tracing/tracingClient.d.ts +1 -1
- package/dist/commonjs/tracing/tracingClient.d.ts.map +1 -1
- package/dist/commonjs/tracing/tracingClient.js +2 -2
- package/dist/commonjs/tracing/tracingClient.js.map +2 -2
- package/dist/commonjs/tracing/voiceAgentTracing.d.ts +63 -0
- package/dist/commonjs/tracing/voiceAgentTracing.d.ts.map +1 -0
- package/dist/commonjs/tracing/voiceAgentTracing.js +705 -0
- package/dist/commonjs/tracing/voiceAgentTracing.js.map +7 -0
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/esm/aiProjectClient.d.ts +4 -0
- package/dist/esm/aiProjectClient.d.ts.map +1 -1
- package/dist/esm/aiProjectClient.js +6 -1
- package/dist/esm/aiProjectClient.js.map +1 -1
- package/dist/esm/api/agents/index.d.ts +2 -2
- package/dist/esm/api/agents/index.d.ts.map +1 -1
- package/dist/esm/api/agents/index.js +1 -1
- package/dist/esm/api/agents/index.js.map +1 -1
- package/dist/esm/api/agents/operations.d.ts +41 -4
- package/dist/esm/api/agents/operations.d.ts.map +1 -1
- package/dist/esm/api/agents/operations.js +322 -21
- package/dist/esm/api/agents/operations.js.map +1 -1
- package/dist/esm/api/agents/options.d.ts +163 -93
- package/dist/esm/api/agents/options.d.ts.map +1 -1
- package/dist/esm/api/agents/options.js.map +1 -1
- package/dist/esm/api/beta/agents/index.d.ts +2 -2
- package/dist/esm/api/beta/agents/index.d.ts.map +1 -1
- package/dist/esm/api/beta/agents/index.js +1 -1
- package/dist/esm/api/beta/agents/index.js.map +1 -1
- package/dist/esm/api/beta/agents/operations.d.ts +2 -24
- package/dist/esm/api/beta/agents/operations.d.ts.map +1 -1
- package/dist/esm/api/beta/agents/operations.js +3 -185
- package/dist/esm/api/beta/agents/operations.js.map +1 -1
- package/dist/esm/api/beta/agents/options.d.ts +0 -56
- package/dist/esm/api/beta/agents/options.d.ts.map +1 -1
- package/dist/esm/api/beta/agents/options.js.map +1 -1
- package/dist/esm/api/beta/evaluators/index.d.ts +2 -2
- package/dist/esm/api/beta/evaluators/index.d.ts.map +1 -1
- package/dist/esm/api/beta/evaluators/index.js +1 -1
- package/dist/esm/api/beta/evaluators/index.js.map +1 -1
- package/dist/esm/api/beta/evaluators/operations.d.ts +2 -59
- package/dist/esm/api/beta/evaluators/operations.d.ts.map +1 -1
- package/dist/esm/api/beta/evaluators/operations.js +1 -388
- package/dist/esm/api/beta/evaluators/operations.js.map +1 -1
- package/dist/esm/api/beta/evaluators/options.d.ts +0 -84
- package/dist/esm/api/beta/evaluators/options.d.ts.map +1 -1
- package/dist/esm/api/beta/evaluators/options.js.map +1 -1
- package/dist/esm/api/datasets/index.d.ts +2 -2
- package/dist/esm/api/datasets/index.d.ts.map +1 -1
- package/dist/esm/api/datasets/index.js +1 -1
- package/dist/esm/api/datasets/index.js.map +1 -1
- package/dist/esm/api/datasets/operations.d.ts +23 -2
- package/dist/esm/api/datasets/operations.d.ts.map +1 -1
- package/dist/esm/api/datasets/operations.js +193 -1
- package/dist/esm/api/datasets/operations.js.map +1 -1
- package/dist/esm/api/datasets/options.d.ts +52 -0
- package/dist/esm/api/datasets/options.d.ts.map +1 -1
- package/dist/esm/api/datasets/options.js.map +1 -1
- package/dist/esm/api/evaluators/index.d.ts +3 -0
- package/dist/esm/api/evaluators/index.d.ts.map +1 -0
- package/dist/esm/api/evaluators/index.js +4 -0
- package/dist/esm/api/evaluators/index.js.map +1 -0
- package/dist/esm/api/evaluators/operations.d.ts +62 -0
- package/dist/esm/api/evaluators/operations.d.ts.map +1 -0
- package/dist/esm/api/evaluators/operations.js +373 -0
- package/dist/esm/api/evaluators/operations.js.map +1 -0
- package/dist/esm/api/evaluators/options.d.ts +70 -0
- package/dist/esm/api/evaluators/options.d.ts.map +1 -0
- package/dist/esm/api/evaluators/options.js.map +1 -0
- package/dist/esm/classic/agents/index.d.ts +21 -2
- package/dist/esm/classic/agents/index.d.ts.map +1 -1
- package/dist/esm/classic/agents/index.js +10 -1
- package/dist/esm/classic/agents/index.js.map +1 -1
- package/dist/esm/classic/beta/agents/index.d.ts +4 -15
- package/dist/esm/classic/beta/agents/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/agents/index.js +4 -11
- package/dist/esm/classic/beta/agents/index.js.map +1 -1
- package/dist/esm/classic/beta/evaluators/index.d.ts +3 -38
- package/dist/esm/classic/beta/evaluators/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/evaluators/index.js +2 -18
- package/dist/esm/classic/beta/evaluators/index.js.map +1 -1
- package/dist/esm/classic/beta/index.d.ts +2 -4
- package/dist/esm/classic/beta/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/index.js +3 -6
- package/dist/esm/classic/beta/index.js.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
- package/dist/esm/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/conversations/index.js +5 -4
- package/dist/esm/classic/beta/voiceAgents/conversations/index.js.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/index.d.ts +3 -2
- package/dist/esm/classic/beta/voiceAgents/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/index.js +5 -5
- package/dist/esm/classic/beta/voiceAgents/index.js.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
- package/dist/esm/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
- package/dist/esm/classic/beta/voiceAgents/telephony/index.js +16 -11
- package/dist/esm/classic/beta/voiceAgents/telephony/index.js.map +1 -1
- package/dist/esm/classic/datasets/index.d.ts +13 -2
- package/dist/esm/classic/datasets/index.d.ts.map +1 -1
- package/dist/esm/classic/datasets/index.js +6 -1
- package/dist/esm/classic/datasets/index.js.map +1 -1
- package/dist/esm/classic/evaluators/index.d.ts +43 -0
- package/dist/esm/classic/evaluators/index.d.ts.map +1 -0
- package/dist/esm/classic/evaluators/index.js +19 -0
- package/dist/esm/classic/evaluators/index.js.map +1 -0
- package/dist/esm/classic/index.d.ts +1 -1
- package/dist/esm/classic/index.d.ts.map +1 -1
- package/dist/esm/classic/index.js.map +1 -1
- package/dist/esm/constants.d.ts +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.d.ts +10 -17
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/index.d.ts +1 -3
- package/dist/esm/models/index.d.ts.map +1 -1
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/models/models.d.ts +1081 -536
- package/dist/esm/models/models.d.ts.map +1 -1
- package/dist/esm/models/models.js +1554 -655
- package/dist/esm/models/models.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/realtime/voiceAgentRealtimeClient.d.ts +27 -2
- package/dist/esm/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
- package/dist/esm/realtime/voiceAgentRealtimeClient.js +97 -17
- package/dist/esm/realtime/voiceAgentRealtimeClient.js.map +1 -1
- package/dist/esm/tracing/configuration.d.ts +3 -5
- package/dist/esm/tracing/configuration.d.ts.map +1 -1
- package/dist/esm/tracing/configuration.js +8 -6
- package/dist/esm/tracing/configuration.js.map +1 -1
- package/dist/esm/tracing/tracingClient.d.ts +1 -1
- package/dist/esm/tracing/tracingClient.d.ts.map +1 -1
- package/dist/esm/tracing/tracingClient.js +2 -2
- package/dist/esm/tracing/tracingClient.js.map +1 -1
- package/dist/esm/tracing/voiceAgentTracing.d.ts +63 -0
- package/dist/esm/tracing/voiceAgentTracing.d.ts.map +1 -0
- package/dist/esm/tracing/voiceAgentTracing.js +740 -0
- package/dist/esm/tracing/voiceAgentTracing.js.map +1 -0
- package/dist/react-native/aiProjectClient.d.ts +4 -0
- package/dist/react-native/aiProjectClient.d.ts.map +1 -1
- package/dist/react-native/aiProjectClient.js +6 -1
- package/dist/react-native/aiProjectClient.js.map +1 -1
- package/dist/react-native/api/agents/index.d.ts +2 -2
- package/dist/react-native/api/agents/index.d.ts.map +1 -1
- package/dist/react-native/api/agents/index.js +1 -1
- package/dist/react-native/api/agents/index.js.map +1 -1
- package/dist/react-native/api/agents/operations.d.ts +41 -4
- package/dist/react-native/api/agents/operations.d.ts.map +1 -1
- package/dist/react-native/api/agents/operations.js +322 -21
- package/dist/react-native/api/agents/operations.js.map +1 -1
- package/dist/react-native/api/agents/options.d.ts +163 -93
- package/dist/react-native/api/agents/options.d.ts.map +1 -1
- package/dist/react-native/api/agents/options.js.map +1 -1
- package/dist/react-native/api/beta/agents/index.d.ts +2 -2
- package/dist/react-native/api/beta/agents/index.d.ts.map +1 -1
- package/dist/react-native/api/beta/agents/index.js +1 -1
- package/dist/react-native/api/beta/agents/index.js.map +1 -1
- package/dist/react-native/api/beta/agents/operations.d.ts +2 -24
- package/dist/react-native/api/beta/agents/operations.d.ts.map +1 -1
- package/dist/react-native/api/beta/agents/operations.js +3 -185
- package/dist/react-native/api/beta/agents/operations.js.map +1 -1
- package/dist/react-native/api/beta/agents/options.d.ts +0 -56
- package/dist/react-native/api/beta/agents/options.d.ts.map +1 -1
- package/dist/react-native/api/beta/agents/options.js.map +1 -1
- package/dist/react-native/api/beta/evaluators/index.d.ts +2 -2
- package/dist/react-native/api/beta/evaluators/index.d.ts.map +1 -1
- package/dist/react-native/api/beta/evaluators/index.js +1 -1
- package/dist/react-native/api/beta/evaluators/index.js.map +1 -1
- package/dist/react-native/api/beta/evaluators/operations.d.ts +2 -59
- package/dist/react-native/api/beta/evaluators/operations.d.ts.map +1 -1
- package/dist/react-native/api/beta/evaluators/operations.js +1 -388
- package/dist/react-native/api/beta/evaluators/operations.js.map +1 -1
- package/dist/react-native/api/beta/evaluators/options.d.ts +0 -84
- package/dist/react-native/api/beta/evaluators/options.d.ts.map +1 -1
- package/dist/react-native/api/beta/evaluators/options.js.map +1 -1
- package/dist/react-native/api/datasets/index.d.ts +2 -2
- package/dist/react-native/api/datasets/index.d.ts.map +1 -1
- package/dist/react-native/api/datasets/index.js +1 -1
- package/dist/react-native/api/datasets/index.js.map +1 -1
- package/dist/react-native/api/datasets/operations.d.ts +23 -2
- package/dist/react-native/api/datasets/operations.d.ts.map +1 -1
- package/dist/react-native/api/datasets/operations.js +193 -1
- package/dist/react-native/api/datasets/operations.js.map +1 -1
- package/dist/react-native/api/datasets/options.d.ts +52 -0
- package/dist/react-native/api/datasets/options.d.ts.map +1 -1
- package/dist/react-native/api/datasets/options.js.map +1 -1
- package/dist/react-native/api/evaluators/index.d.ts +3 -0
- package/dist/react-native/api/evaluators/index.d.ts.map +1 -0
- package/dist/react-native/api/evaluators/index.js +4 -0
- package/dist/react-native/api/evaluators/index.js.map +1 -0
- package/dist/react-native/api/evaluators/operations.d.ts +62 -0
- package/dist/react-native/api/evaluators/operations.d.ts.map +1 -0
- package/dist/react-native/api/evaluators/operations.js +373 -0
- package/dist/react-native/api/evaluators/operations.js.map +1 -0
- package/dist/react-native/api/evaluators/options.d.ts +70 -0
- package/dist/react-native/api/evaluators/options.d.ts.map +1 -0
- package/dist/react-native/api/evaluators/options.js.map +1 -0
- package/dist/react-native/classic/agents/index.d.ts +21 -2
- package/dist/react-native/classic/agents/index.d.ts.map +1 -1
- package/dist/react-native/classic/agents/index.js +10 -1
- package/dist/react-native/classic/agents/index.js.map +1 -1
- package/dist/react-native/classic/beta/agents/index.d.ts +4 -15
- package/dist/react-native/classic/beta/agents/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/agents/index.js +4 -11
- package/dist/react-native/classic/beta/agents/index.js.map +1 -1
- package/dist/react-native/classic/beta/evaluators/index.d.ts +3 -38
- package/dist/react-native/classic/beta/evaluators/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/evaluators/index.js +2 -18
- package/dist/react-native/classic/beta/evaluators/index.js.map +1 -1
- package/dist/react-native/classic/beta/index.d.ts +2 -4
- package/dist/react-native/classic/beta/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/index.js +3 -6
- package/dist/react-native/classic/beta/index.js.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
- package/dist/react-native/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/conversations/index.js +5 -4
- package/dist/react-native/classic/beta/voiceAgents/conversations/index.js.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/index.d.ts +3 -2
- package/dist/react-native/classic/beta/voiceAgents/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/index.js +5 -5
- package/dist/react-native/classic/beta/voiceAgents/index.js.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
- package/dist/react-native/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
- package/dist/react-native/classic/beta/voiceAgents/telephony/index.js +16 -11
- package/dist/react-native/classic/beta/voiceAgents/telephony/index.js.map +1 -1
- package/dist/react-native/classic/datasets/index.d.ts +13 -2
- package/dist/react-native/classic/datasets/index.d.ts.map +1 -1
- package/dist/react-native/classic/datasets/index.js +6 -1
- package/dist/react-native/classic/datasets/index.js.map +1 -1
- package/dist/react-native/classic/evaluators/index.d.ts +43 -0
- package/dist/react-native/classic/evaluators/index.d.ts.map +1 -0
- package/dist/react-native/classic/evaluators/index.js +19 -0
- package/dist/react-native/classic/evaluators/index.js.map +1 -0
- package/dist/react-native/classic/index.d.ts +1 -1
- package/dist/react-native/classic/index.d.ts.map +1 -1
- package/dist/react-native/classic/index.js.map +1 -1
- package/dist/react-native/constants.d.ts +1 -1
- package/dist/react-native/constants.js +1 -1
- package/dist/react-native/constants.js.map +1 -1
- package/dist/react-native/index.d.ts +10 -17
- package/dist/react-native/index.d.ts.map +1 -1
- package/dist/react-native/index.js +1 -2
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/models/index.d.ts +1 -3
- package/dist/react-native/models/index.d.ts.map +1 -1
- package/dist/react-native/models/index.js.map +1 -1
- package/dist/react-native/models/models.d.ts +1081 -536
- package/dist/react-native/models/models.d.ts.map +1 -1
- package/dist/react-native/models/models.js +1554 -655
- package/dist/react-native/models/models.js.map +1 -1
- package/dist/react-native/package.json +1 -1
- package/dist/react-native/realtime/voiceAgentRealtimeClient.d.ts +27 -2
- package/dist/react-native/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
- package/dist/react-native/realtime/voiceAgentRealtimeClient.js +97 -17
- package/dist/react-native/realtime/voiceAgentRealtimeClient.js.map +1 -1
- package/dist/react-native/tracing/configuration.d.ts +3 -5
- package/dist/react-native/tracing/configuration.d.ts.map +1 -1
- package/dist/react-native/tracing/configuration.js +8 -6
- package/dist/react-native/tracing/configuration.js.map +1 -1
- package/dist/react-native/tracing/tracingClient.d.ts +1 -1
- package/dist/react-native/tracing/tracingClient.d.ts.map +1 -1
- package/dist/react-native/tracing/tracingClient.js +2 -2
- package/dist/react-native/tracing/tracingClient.js.map +1 -1
- package/dist/react-native/tracing/voiceAgentTracing.d.ts +63 -0
- package/dist/react-native/tracing/voiceAgentTracing.d.ts.map +1 -0
- package/dist/react-native/tracing/voiceAgentTracing.js +740 -0
- package/dist/react-native/tracing/voiceAgentTracing.js.map +1 -0
- package/dist/react-native/webSocketTransport-browser.d.mts +1 -0
- package/dist/react-native/webSocketTransport-browser.d.mts.map +1 -1
- package/dist/react-native/webSocketTransport-browser.mjs +5 -13
- package/dist/react-native/webSocketTransport-browser.mjs.map +1 -1
- package/package.json +9 -9
- package/dist/browser/api/beta/datasets/index.d.ts +0 -3
- package/dist/browser/api/beta/datasets/index.d.ts.map +0 -1
- package/dist/browser/api/beta/datasets/index.js +0 -4
- package/dist/browser/api/beta/datasets/index.js.map +0 -1
- package/dist/browser/api/beta/datasets/operations.d.ts +0 -27
- package/dist/browser/api/beta/datasets/operations.d.ts.map +0 -1
- package/dist/browser/api/beta/datasets/operations.js +0 -184
- package/dist/browser/api/beta/datasets/operations.js.map +0 -1
- package/dist/browser/api/beta/datasets/options.d.ts +0 -58
- package/dist/browser/api/beta/datasets/options.d.ts.map +0 -1
- package/dist/browser/api/beta/datasets/options.js.map +0 -1
- package/dist/browser/classic/beta/datasets/index.d.ts +0 -20
- package/dist/browser/classic/beta/datasets/index.d.ts.map +0 -1
- package/dist/browser/classic/beta/datasets/index.js +0 -18
- package/dist/browser/classic/beta/datasets/index.js.map +0 -1
- package/dist/commonjs/api/beta/datasets/index.d.ts +0 -3
- package/dist/commonjs/api/beta/datasets/index.d.ts.map +0 -1
- package/dist/commonjs/api/beta/datasets/index.js.map +0 -7
- package/dist/commonjs/api/beta/datasets/operations.d.ts +0 -27
- package/dist/commonjs/api/beta/datasets/operations.d.ts.map +0 -1
- package/dist/commonjs/api/beta/datasets/operations.js +0 -259
- package/dist/commonjs/api/beta/datasets/operations.js.map +0 -7
- package/dist/commonjs/api/beta/datasets/options.d.ts +0 -58
- package/dist/commonjs/api/beta/datasets/options.d.ts.map +0 -1
- package/dist/commonjs/api/beta/datasets/options.js.map +0 -7
- package/dist/commonjs/classic/beta/datasets/index.d.ts +0 -20
- package/dist/commonjs/classic/beta/datasets/index.d.ts.map +0 -1
- package/dist/commonjs/classic/beta/datasets/index.js.map +0 -7
- package/dist/esm/api/beta/datasets/index.d.ts +0 -3
- package/dist/esm/api/beta/datasets/index.d.ts.map +0 -1
- package/dist/esm/api/beta/datasets/index.js +0 -4
- package/dist/esm/api/beta/datasets/index.js.map +0 -1
- package/dist/esm/api/beta/datasets/operations.d.ts +0 -27
- package/dist/esm/api/beta/datasets/operations.d.ts.map +0 -1
- package/dist/esm/api/beta/datasets/operations.js +0 -184
- package/dist/esm/api/beta/datasets/operations.js.map +0 -1
- package/dist/esm/api/beta/datasets/options.d.ts +0 -58
- package/dist/esm/api/beta/datasets/options.d.ts.map +0 -1
- package/dist/esm/api/beta/datasets/options.js.map +0 -1
- package/dist/esm/classic/beta/datasets/index.d.ts +0 -20
- package/dist/esm/classic/beta/datasets/index.d.ts.map +0 -1
- package/dist/esm/classic/beta/datasets/index.js +0 -18
- package/dist/esm/classic/beta/datasets/index.js.map +0 -1
- package/dist/react-native/api/beta/datasets/index.d.ts +0 -3
- package/dist/react-native/api/beta/datasets/index.d.ts.map +0 -1
- package/dist/react-native/api/beta/datasets/index.js +0 -4
- package/dist/react-native/api/beta/datasets/index.js.map +0 -1
- package/dist/react-native/api/beta/datasets/operations.d.ts +0 -27
- package/dist/react-native/api/beta/datasets/operations.d.ts.map +0 -1
- package/dist/react-native/api/beta/datasets/operations.js +0 -184
- package/dist/react-native/api/beta/datasets/operations.js.map +0 -1
- package/dist/react-native/api/beta/datasets/options.d.ts +0 -58
- package/dist/react-native/api/beta/datasets/options.d.ts.map +0 -1
- package/dist/react-native/api/beta/datasets/options.js.map +0 -1
- package/dist/react-native/classic/beta/datasets/index.d.ts +0 -20
- package/dist/react-native/classic/beta/datasets/index.d.ts.map +0 -1
- package/dist/react-native/classic/beta/datasets/index.js +0 -18
- package/dist/react-native/classic/beta/datasets/index.js.map +0 -1
- /package/dist/browser/api/{beta/datasets → evaluators}/options.js +0 -0
- /package/dist/commonjs/api/{beta/datasets → evaluators}/options.js +0 -0
- /package/dist/esm/api/{beta/datasets → evaluators}/options.js +0 -0
- /package/dist/react-native/api/{beta/datasets → evaluators}/options.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceAgentTracing.js","sourceRoot":"","sources":["../../../src/tracing/voiceAgentTracing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Attributes, Context, Span } from \"@opentelemetry/api\";\nimport { SpanStatusCode } from \"@opentelemetry/api\";\nimport { isRestError } from \"@azure/core-rest-pipeline\";\nimport type { ResolvedTracingConfig } from \"./configuration.js\";\nimport type {\n VoiceAgentClientEvent,\n VoiceAgentRealtimeResponse,\n VoiceAgentTransport,\n} from \"../models/models.js\";\nimport type { VoiceAgentRealtimeEvent } from \"../realtime/events.js\";\nimport { logger } from \"../logger.js\";\nimport { setServerAttributes, parseEndpoint } from \"./attributes.js\";\nimport { startSpan, runInSpanContext } from \"./tracingClient.js\";\nimport { recordOperationDuration, recordTokenUsage } from \"./metrics.js\";\nimport {\n AGENTS_PROVIDER,\n AZ_NAMESPACE,\n AZ_NAMESPACE_VALUE,\n GEN_AI_PROVIDER_NAME,\n GEN_AI_OPERATION_NAME,\n GEN_AI_INPUT_MESSAGES,\n GEN_AI_OUTPUT_MESSAGES,\n GEN_AI_REQUEST_MODEL,\n GEN_AI_RESPONSE_ID,\n GEN_AI_CONVERSATION_ID,\n GEN_AI_USAGE_INPUT_TOKENS,\n GEN_AI_USAGE_OUTPUT_TOKENS,\n GEN_AI_TOOL_CALL_ID,\n ERROR_TYPE,\n} from \"./constants.js\";\n\nconst prefix = \"az.ai.voice_agents.\";\nconst maxResponses = 64;\nconst maxInputItems = 64;\nconst maxParts = 32;\nconst maxContentLength = 4096;\nconst safeErrorTypes = new Set([\n \"Error\",\n \"TypeError\",\n \"AbortError\",\n \"RestError\",\n \"VoiceAgentAuthenticationError\",\n \"VoiceAgentConnectionError\",\n \"VoiceAgentProtocolError\",\n \"invalid_request_error\",\n \"server_error\",\n \"authentication_error\",\n \"rate_limit_error\",\n]);\nconst safeErrorCodes = new Set([\n \"agent_disabled\",\n \"invalid_request\",\n \"invalid_request_error\",\n \"invalid_event\",\n \"invalid_state\",\n \"rate_limit_exceeded\",\n \"insufficient_quota\",\n \"session_expired\",\n \"authentication_error\",\n \"permission_denied\",\n \"server_error\",\n]);\n\nfunction serverErrorAttributes(type: unknown, code?: unknown): Attributes {\n const attributes: Attributes = {\n [ERROR_TYPE]: typeof type === \"string\" && safeErrorTypes.has(type) ? type : \"Error\",\n };\n if (typeof code === \"string\" && safeErrorCodes.has(code)) {\n attributes[`${prefix}error.code`] = code;\n }\n return attributes;\n}\n\n// Exporter/provider failures must not change a service operation's result.\nfunction recordTelemetry(action: () => void): void {\n try {\n action();\n } catch {\n logger.warning(\"Unable to record Voice Agents telemetry.\");\n }\n}\n\nfunction commonAttributes(span: Span, endpoint: string): void {\n span.setAttribute(GEN_AI_PROVIDER_NAME, AGENTS_PROVIDER);\n span.setAttribute(AZ_NAMESPACE, AZ_NAMESPACE_VALUE);\n setServerAttributes(span, endpoint);\n}\n\nfunction fail(span: Span, error: unknown): void {\n const type = isRestError(error)\n ? \"RestError\"\n : error instanceof Error && safeErrorTypes.has(error.name)\n ? error.name\n : \"Error\";\n span.setAttribute(ERROR_TYPE, type);\n if (isRestError(error) && error.statusCode !== undefined) {\n span.setAttribute(\"http.response.status_code\", error.statusCode);\n }\n span.setStatus({ code: SpanStatusCode.ERROR });\n}\n\n/** @internal */\nexport async function traceVoiceAgentOperation<T>(\n operationName: string,\n endpoint: string,\n config: ResolvedTracingConfig | undefined,\n operation: () => Promise<T>,\n resultAttributes?: (result: T) => Attributes,\n): Promise<T> {\n if (!config?.enabled) {\n return operation();\n }\n let recording: { span: Span; ctx: Context } | undefined;\n recordTelemetry(() => {\n recording = startSpan(operationName);\n commonAttributes(recording.span, endpoint);\n recording.span.setAttribute(\n operationName === \"create_agent\" ? GEN_AI_OPERATION_NAME : `${prefix}operation`,\n operationName.slice(operationName.lastIndexOf(\".\") + 1),\n );\n });\n if (!recording) return operation();\n const { span, ctx } = recording;\n try {\n const result = await runInSpanContext(ctx, operation);\n recordTelemetry(() => {\n if (resultAttributes) span.setAttributes(resultAttributes(result));\n });\n return result;\n } catch (error) {\n recordTelemetry(() => {\n if (!(error instanceof Error && error.name === \"AbortError\")) fail(span, error);\n else span.setAttribute(`${prefix}cancelled`, true);\n });\n throw error;\n } finally {\n recordTelemetry(() => span.end());\n }\n}\n\ninterface TrackedResponse {\n span: Span;\n started: number;\n firstAudioInSeconds?: number;\n audioBytes: number;\n model?: string;\n outputMessages: Map<string, MessageSummary>;\n outputParts: Map<string, { itemId: string; contentIndex: number; part: Record<string, unknown> }>;\n}\n\ninterface TrackedInputAudio {\n sequence: number;\n itemId?: string;\n pendingQueue?: PendingInputAudio;\n pendingSkipped?: boolean;\n pendingSend?: boolean;\n pendingTranscript?: string;\n}\n\ninterface PendingInputAudio {\n items: TrackedInputAudio[];\n skipped: number;\n}\n\ninterface ReservedInput {\n sequence: number;\n audio?: TrackedInputAudio;\n}\n\ninterface MessageSummary {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n parts: Record<string, unknown>[];\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction limitedContent(value: unknown): string | undefined {\n return typeof value === \"string\" ? value.slice(0, maxContentLength) : undefined;\n}\n\nfunction messagePart(\n value: unknown,\n contentRecording: boolean,\n): Record<string, unknown> | undefined {\n const part = asRecord(value);\n const type = part?.type;\n if (\n !part ||\n typeof type !== \"string\" ||\n ![\"input_text\", \"output_text\", \"text\", \"input_audio\", \"output_audio\", \"audio\"].includes(type)\n ) {\n return undefined;\n }\n const audio = type.includes(\"audio\");\n const summary: Record<string, unknown> = { type: audio ? \"audio\" : \"text\" };\n if (contentRecording) {\n const content = limitedContent(audio ? part.transcript : part.text);\n if (content !== undefined) summary.content = content;\n }\n return summary;\n}\n\nfunction messages(item: unknown, contentRecording: boolean): MessageSummary | undefined {\n const record = asRecord(item);\n if (!record) return undefined;\n if (\n record.type === \"function_call\" ||\n record.type === \"function_call_output\" ||\n record.type === \"mcp_call\"\n ) {\n const part: Record<string, unknown> = {\n type: record.type === \"function_call_output\" ? \"tool_call_response\" : \"tool_call\",\n };\n if (typeof record.call_id === \"string\") part.id = record.call_id;\n if (contentRecording) {\n if (typeof record.name === \"string\") part.name = limitedContent(record.name);\n if (typeof record.arguments === \"string\") part.arguments = limitedContent(record.arguments);\n if (typeof record.output === \"string\") part.result = limitedContent(record.output);\n }\n return { role: record.type === \"function_call_output\" ? \"tool\" : \"assistant\", parts: [part] };\n }\n if (record.type !== \"message\") return undefined;\n const parts: Record<string, unknown>[] = [];\n if (Array.isArray(record.content)) {\n for (const value of record.content.slice(0, maxParts)) {\n const summary = messagePart(value, contentRecording);\n if (summary) parts.push(summary);\n }\n }\n const role = record.role === \"system\" || record.role === \"user\" ? record.role : \"assistant\";\n return parts.length ? { role, parts } : undefined;\n}\n\n/** Tracks SDK-observed realtime work, independently of the user's event iterator. @internal */\nexport class VoiceAgentRealtimeTracing {\n private readonly responses = new Map<string, TrackedResponse>();\n private session?: { span: Span; ctx: Context };\n private connectSpan?: Span;\n private ended = false;\n private connected = false;\n private model?: string;\n private inputAudioBytes = 0;\n private inputSequence = 0;\n private nextInputSequence = 0;\n private inputAudioBuffer?: TrackedInputAudio;\n private readonly inputAudioItems = new Map<string, TrackedInputAudio>();\n private readonly pendingAudioCommits: PendingInputAudio = { items: [], skipped: 0 };\n private readonly pendingAudioMessages: PendingInputAudio = { items: [], skipped: 0 };\n private pendingAudioClears = 0;\n private untrackedInputItems = 0;\n private finishedResponses = 0;\n private untrackedResponses = 0;\n\n public constructor(\n private readonly endpoint: string,\n private readonly config: ResolvedTracingConfig,\n transport: VoiceAgentTransport = \"websocket\",\n ) {\n recordTelemetry(() => {\n this.session = startSpan(\"voice_agents.realtime.session\");\n commonAttributes(this.session.span, endpoint);\n this.session.span.setAttribute(`${prefix}connection.transport`, transport);\n this.connectSpan = startSpan(\"voice_agents.realtime.connect\", this.session.ctx).span;\n commonAttributes(this.connectSpan, endpoint);\n this.connectSpan.setAttribute(`${prefix}connection.transport`, transport);\n });\n }\n\n public opened(): void {\n recordTelemetry(() => {\n if (this.ended) return;\n this.connected = true;\n this.connectSpan?.end();\n this.connectSpan = undefined;\n });\n }\n\n public reserveSend(event: VoiceAgentClientEvent): ReservedInput | undefined {\n let reservation: ReservedInput | undefined;\n recordTelemetry(() => {\n if (this.ended || !this.session || event.type !== \"conversation.item.create\") return;\n const summary = messages(event.item, this.config.contentRecording);\n const item = asRecord(event.item);\n if (!summary) return;\n reservation = { sequence: ++this.nextInputSequence };\n if (\n summary.role !== \"user\" ||\n !summary.parts.some((part) => part.type === \"audio\") ||\n typeof item?.id === \"string\" ||\n this.pendingAudioMessages.items.length >= maxInputItems ||\n this.pendingAudioMessages.skipped > 0\n ) {\n return;\n }\n reservation.audio = { sequence: reservation.sequence, pendingSend: true };\n this.enqueueInputAudio(this.pendingAudioMessages, reservation.audio);\n });\n return reservation;\n }\n\n public sent(event: VoiceAgentClientEvent, reservation?: ReservedInput): void {\n recordTelemetry(() => {\n if (this.ended || !this.session) return;\n if (event.type === \"input_audio_buffer.append\") {\n // Count decoded bytes without retaining or decoding the media.\n this.inputAudioBytes += Math.max(\n 0,\n Math.floor((event.audio.length * 3) / 4) -\n (event.audio.endsWith(\"==\") ? 2 : event.audio.endsWith(\"=\") ? 1 : 0),\n );\n if (!this.inputAudioBuffer) {\n this.inputAudioBuffer = this.startInputAudio();\n } else if (this.inputAudioBuffer.sequence !== this.inputSequence) {\n this.inputSequence = ++this.nextInputSequence;\n this.inputAudioBuffer.sequence = this.inputSequence;\n this.setInputAudioSummary();\n }\n } else if (event.type === \"input_audio_buffer.commit\") {\n if (this.inputAudioBuffer) {\n this.enqueueInputAudio(this.pendingAudioCommits, this.inputAudioBuffer);\n this.inputAudioBuffer = undefined;\n }\n } else if (event.type === \"input_audio_buffer.clear\") {\n this.inputAudioBuffer = undefined;\n this.pendingAudioClears++;\n } else if (event.type === \"conversation.item.create\") {\n const summary = messages(event.item, this.config.contentRecording);\n const item = asRecord(event.item);\n if (summary) {\n const sequence = reservation?.sequence ?? ++this.nextInputSequence;\n if (summary.role === \"user\" && summary.parts.some((part) => part.type === \"audio\")) {\n const input = reservation?.audio ?? { sequence };\n input.pendingSend = undefined;\n if (!reservation?.audio) {\n if (typeof item?.id === \"string\") {\n this.rememberInputAudio(item.id, input);\n } else {\n this.enqueueInputAudio(this.pendingAudioMessages, input);\n }\n }\n }\n if (sequence >= this.inputSequence) {\n this.inputSequence = sequence;\n this.session.span.setAttribute(GEN_AI_INPUT_MESSAGES, JSON.stringify([summary]));\n if (reservation?.audio?.pendingTranscript !== undefined) {\n this.setInputAudioSummary(reservation.audio.pendingTranscript);\n }\n }\n }\n if (item?.type === \"function_call_output\" && typeof item.call_id === \"string\") {\n this.session.span.addEvent(\"voice_agents.tool.output_sent\", {\n [GEN_AI_TOOL_CALL_ID]: item.call_id,\n });\n }\n } else if (event.type === \"response.cancel\") {\n this.session.span.addEvent(\"voice_agents.response.cancel_requested\");\n }\n });\n }\n\n public sendFailed(error: unknown, reservation?: ReservedInput): void {\n recordTelemetry(() => {\n if (reservation?.audio) this.rollbackPendingAudioMessage(reservation.audio);\n if (!this.ended) {\n this.session?.span.addEvent(\"voice_agents.send.failed\", {\n [ERROR_TYPE]:\n error instanceof Error && safeErrorTypes.has(error.name) ? error.name : \"Error\",\n });\n }\n });\n }\n\n public received(event: VoiceAgentRealtimeEvent): void {\n recordTelemetry(() => {\n if (this.ended || !this.session || event.type === \"unknown\") return;\n switch (event.type) {\n case \"session.created\":\n case \"session.updated\":\n this.model = event.session.model;\n this.session.span.setAttribute(`${prefix}session.id`, event.session.id);\n if (event.type === \"session.created\" && event.conversation_id) {\n this.session.span.setAttribute(GEN_AI_CONVERSATION_ID, event.conversation_id);\n }\n if (this.model) this.session.span.setAttribute(GEN_AI_REQUEST_MODEL, this.model);\n break;\n case \"input_audio_buffer.speech_started\":\n if (!this.inputAudioItems.has(event.item_id)) {\n const buffer = this.inputAudioBuffer;\n const input = buffer && buffer.itemId === undefined ? buffer : this.startInputAudio();\n this.rememberInputAudio(event.item_id, input);\n this.inputAudioBuffer = input;\n }\n break;\n case \"input_audio_buffer.committed\": {\n const pending =\n this.pendingAudioCommits.items.length > 0 || this.pendingAudioCommits.skipped > 0;\n let input = this.matchInputAudio(this.pendingAudioCommits, event.item_id);\n if (!input) {\n if (pending) break;\n input = this.inputAudioBuffer ?? this.startInputAudio();\n this.rememberInputAudio(event.item_id, input);\n }\n if (this.inputAudioBuffer === input) this.inputAudioBuffer = undefined;\n break;\n }\n case \"input_audio_buffer.cleared\":\n if (this.pendingAudioClears > 0) this.pendingAudioClears--;\n else this.inputAudioBuffer = undefined;\n break;\n case \"conversation.item.added\":\n case \"conversation.item.created\": {\n const item = asRecord(event.item);\n const summary = messages(event.item, false);\n if (\n typeof item?.id === \"string\" &&\n summary?.role === \"user\" &&\n summary.parts.some((part) => part.type === \"audio\")\n ) {\n this.matchInputAudio(this.pendingAudioMessages, item.id);\n }\n break;\n }\n case \"response.created\":\n this.beginResponse(event.response);\n break;\n case \"response.output_audio.delta\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n tracked.audioBytes += event.delta.byteLength;\n if (event.delta.byteLength > 0) {\n tracked.firstAudioInSeconds ??= (performance.now() - tracked.started) / 1000;\n }\n }\n break;\n }\n case \"response.done\":\n this.endResponse(event.response);\n break;\n case \"response.output_text.done\":\n case \"response.output_audio_transcript.done\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n const part: Record<string, unknown> = {\n type: event.type === \"response.output_text.done\" ? \"text\" : \"audio\",\n };\n if (this.config.contentRecording) {\n part.content = limitedContent(\n event.type === \"response.output_text.done\" ? event.text : event.transcript,\n );\n }\n this.recordOutputPart(tracked, event.item_id, event.content_index, part);\n }\n break;\n }\n case \"response.output_audio.done\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n this.recordOutputPart(tracked, event.item_id, event.content_index, { type: \"audio\" });\n }\n break;\n }\n case \"response.function_call_arguments.done\": {\n const span = this.responses.get(event.response_id)?.span ?? this.session.span;\n const attributes: Attributes = {\n [GEN_AI_TOOL_CALL_ID]: event.call_id,\n [`${prefix}tool.kind`]: \"function\",\n };\n if (this.config.contentRecording) {\n attributes[\"gen_ai.tool.name\"] = limitedContent(event.name);\n attributes[`${prefix}tool.arguments`] = limitedContent(event.arguments);\n }\n span.addEvent(\"voice_agents.tool.requested\", attributes);\n const tracked = this.responses.get(event.response_id);\n const summary = messages(\n {\n type: \"function_call\",\n call_id: event.call_id,\n name: event.name,\n arguments: event.arguments,\n },\n this.config.contentRecording,\n );\n if (tracked && summary && tracked.outputMessages.size < maxParts) {\n tracked.outputMessages.set(`tool:${event.call_id}`, summary);\n }\n break;\n }\n case \"response.mcp_call.completed\":\n case \"response.mcp_call.failed\":\n this.session.span.addEvent(event.type, { [`${prefix}item.id`]: event.item_id });\n break;\n case \"session.subagent.started\":\n case \"session.subagent.completed\":\n case \"session.subagent.aborted\": {\n const attributes: Attributes = {\n [`${prefix}subagent.consultation.id`]: event.consultation_id,\n };\n if (\n event.type === \"session.subagent.aborted\" &&\n [\n \"unknown_target\",\n \"timeout\",\n \"cancelled\",\n \"stopped_by_user\",\n \"superseded\",\n \"failed\",\n ].includes(event.reason)\n ) {\n attributes[`${prefix}subagent.abort_reason`] = event.reason;\n }\n this.session.span.addEvent(event.type, attributes);\n break;\n }\n case \"error\":\n this.session.span.addEvent(\n \"voice_agents.server_error\",\n serverErrorAttributes(event.error.type, event.error.code),\n );\n break;\n case \"warning\":\n this.session.span.addEvent(\"voice_agents.warning\");\n break;\n case \"rtc.call.error\":\n this.session.span.addEvent(\n \"rtc.call.error\",\n serverErrorAttributes(event.error.type, event.error.code),\n );\n break;\n case \"conversation.item.input_audio_transcription.completed\": {\n const input = this.inputAudioItems.get(event.item_id);\n if (input?.pendingSend) {\n input.pendingTranscript = event.transcript;\n } else if (input?.sequence === this.inputSequence) {\n this.setInputAudioSummary(event.transcript);\n }\n this.session.span.addEvent(\"voice_agents.transcription.completed\");\n break;\n }\n case \"conversation.item.input_audio_transcription.failed\": {\n const input = this.inputAudioItems.get(event.item_id);\n if (input?.sequence === this.inputSequence) {\n this.setInputAudioSummary();\n }\n this.session.span.addEvent(\"voice_agents.transcription.failed\");\n break;\n }\n }\n });\n }\n\n private startInputAudio(): TrackedInputAudio {\n const input = { sequence: ++this.nextInputSequence };\n this.inputSequence = input.sequence;\n this.setInputAudioSummary();\n return input;\n }\n\n private enqueueInputAudio(queue: PendingInputAudio, input: TrackedInputAudio): void {\n input.pendingQueue = queue;\n if (queue.items.length >= maxInputItems || queue.skipped > 0) {\n input.pendingSkipped = true;\n queue.skipped++;\n this.untrackedInputItems++;\n } else {\n queue.items.push(input);\n }\n }\n\n private rollbackPendingAudioMessage(input: TrackedInputAudio): void {\n if (input.pendingQueue) {\n const index = input.pendingQueue.items.indexOf(input);\n if (index !== -1) {\n input.pendingQueue.items.splice(index, 1);\n } else if (input.pendingSkipped && input.pendingQueue.skipped > 0) {\n input.pendingQueue.skipped--;\n this.untrackedInputItems--;\n }\n input.pendingQueue = undefined;\n input.pendingSkipped = undefined;\n }\n if (input.itemId && this.inputAudioItems.get(input.itemId) === input) {\n this.inputAudioItems.delete(input.itemId);\n }\n input.pendingSend = undefined;\n input.pendingTranscript = undefined;\n }\n\n private matchInputAudio(queue: PendingInputAudio, itemId: string): TrackedInputAudio | undefined {\n const known = this.inputAudioItems.get(itemId);\n if (known) {\n if (known.pendingQueue === queue) {\n const index = queue.items.indexOf(known);\n if (index !== -1) queue.items.splice(index, 1);\n else if (known.pendingSkipped && queue.skipped > 0) queue.skipped--;\n known.pendingQueue = undefined;\n known.pendingSkipped = undefined;\n }\n return known;\n }\n // Match ordered commit/create acknowledgements, never asynchronous ASR completion order.\n const input = queue.items.shift();\n if (input) {\n input.pendingQueue = undefined;\n this.rememberInputAudio(itemId, input);\n return input;\n }\n if (queue.skipped > 0) queue.skipped--;\n return undefined;\n }\n\n private rememberInputAudio(itemId: string, input: TrackedInputAudio): void {\n input.itemId = itemId;\n this.inputAudioItems.set(itemId, input);\n if (this.inputAudioItems.size > maxInputItems) {\n for (const [id, tracked] of this.inputAudioItems) {\n if (tracked.sequence !== this.inputSequence || id !== tracked.itemId) {\n this.inputAudioItems.delete(id);\n break;\n }\n }\n }\n }\n\n private setInputAudioSummary(transcript?: string): void {\n const parts: Record<string, unknown>[] = [{ type: \"audio\" }];\n if (this.config.contentRecording && transcript !== undefined) {\n parts[0].content = limitedContent(transcript);\n }\n this.session?.span.setAttribute(\n GEN_AI_INPUT_MESSAGES,\n JSON.stringify([{ role: \"user\", parts }]),\n );\n }\n\n private recordOutputPart(\n tracked: TrackedResponse,\n itemId: string,\n contentIndex: number,\n part: Record<string, unknown>,\n ): void {\n const key = `${itemId}:${contentIndex}:${part.type}`;\n const existing = tracked.outputParts.get(key);\n if (existing) {\n if (part.content !== undefined) existing.part.content = part.content;\n } else if (tracked.outputParts.size < maxParts) {\n tracked.outputParts.set(key, { itemId, contentIndex, part });\n }\n }\n\n private beginResponse(response: VoiceAgentRealtimeResponse): void {\n const id = response.id;\n if (!id || !this.session || this.responses.has(id)) return;\n if (this.responses.size >= maxResponses) {\n this.untrackedResponses++;\n return;\n }\n const { span } = startSpan(\"invoke_agent\", this.session.ctx);\n commonAttributes(span, this.endpoint);\n span.setAttribute(GEN_AI_OPERATION_NAME, \"invoke_agent\");\n span.setAttribute(GEN_AI_RESPONSE_ID, id);\n if (this.model) span.setAttribute(GEN_AI_REQUEST_MODEL, this.model);\n if (response.conversation_id) {\n span.setAttribute(GEN_AI_CONVERSATION_ID, response.conversation_id);\n }\n this.responses.set(id, {\n span,\n started: performance.now(),\n audioBytes: 0,\n model: this.model,\n outputMessages: new Map(),\n outputParts: new Map(),\n });\n }\n\n private endResponse(response: VoiceAgentRealtimeResponse): void {\n const id = response.id;\n const tracked = id ? this.responses.get(id) : undefined;\n if (!tracked || !id) return;\n this.responses.delete(id);\n const durationInSeconds = (performance.now() - tracked.started) / 1000;\n const { span } = tracked;\n if (response.status) span.setAttribute(`${prefix}response.status`, response.status);\n if (response.output_modalities) {\n span.setAttribute(`${prefix}response.output_modalities`, response.output_modalities);\n }\n if (response.usage?.input_tokens !== undefined) {\n span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS, response.usage.input_tokens);\n }\n if (response.usage?.output_tokens !== undefined) {\n span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS, response.usage.output_tokens);\n }\n this.flushObservedResponse(tracked, response);\n if (response.status === \"failed\") {\n span.setAttribute(ERROR_TYPE, \"response_failed\");\n span.setStatus({ code: SpanStatusCode.ERROR });\n } else if (response.status === \"completed\") {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n const dimensions = {\n operationName: \"invoke_agent\",\n ...parseEndpoint(this.endpoint),\n responseModel: tracked.model,\n ...(response.status === \"failed\" ? { errorType: \"response_failed\" } : {}),\n };\n span.end();\n this.finishedResponses++;\n recordOperationDuration(durationInSeconds, dimensions);\n recordTokenUsage(response.usage?.input_tokens, response.usage?.output_tokens, dimensions);\n }\n\n private flushObservedResponse(\n tracked: TrackedResponse,\n response?: VoiceAgentRealtimeResponse,\n ): void {\n const { span } = tracked;\n span.setAttribute(`${prefix}output.audio.bytes`, tracked.audioBytes);\n if (tracked.firstAudioInSeconds !== undefined) {\n span.setAttribute(\n `${prefix}response.time_to_first_audio_seconds`,\n tracked.firstAudioInSeconds,\n );\n }\n const fallback = new Map(tracked.outputMessages);\n for (const observed of [...tracked.outputParts.values()].sort(\n (a, b) => a.contentIndex - b.contentIndex,\n )) {\n const message: MessageSummary = fallback.get(observed.itemId) ?? {\n role: \"assistant\",\n parts: [],\n };\n message.parts.push(observed.part);\n fallback.set(observed.itemId, message);\n }\n const output: MessageSummary[] = [];\n let unkeyedFinalItem = false;\n for (const item of response?.output?.slice(0, maxParts) ?? []) {\n const summary = messages(item, this.config.contentRecording);\n if (!summary) continue;\n const record = asRecord(item);\n const itemId =\n record?.type === \"function_call\" && typeof record.call_id === \"string\"\n ? `tool:${record.call_id}`\n : typeof record?.id === \"string\"\n ? record.id\n : typeof record?.call_id === \"string\"\n ? record.call_id\n : undefined;\n if (itemId) {\n fallback.delete(itemId);\n if (record?.type === \"message\" && Array.isArray(record.content)) {\n summary.parts = record.content.slice(0, maxParts).flatMap((value, index) => {\n const part = messagePart(value, this.config.contentRecording);\n if (!part) return [];\n const observed = tracked.outputParts.get(`${itemId}:${index}:${part.type}`);\n if (part.content === undefined && observed?.part.content !== undefined) {\n part.content = observed.part.content;\n }\n return [part];\n });\n }\n } else {\n // Final output is authoritative; don't guess identities for items without an ID.\n unkeyedFinalItem = true;\n }\n output.push(summary);\n }\n if (!unkeyedFinalItem) output.push(...fallback.values());\n if (output.length) {\n span.setAttribute(GEN_AI_OUTPUT_MESSAGES, JSON.stringify(output.slice(0, maxParts)));\n }\n }\n\n public close(code: number | undefined, wasClean: boolean, error?: unknown): void {\n if (this.ended) return;\n this.ended = true;\n recordTelemetry(() => {\n const cancelled = asRecord(error)?.code === \"operationCancelled\";\n if (this.connectSpan) {\n if (error && !cancelled) fail(this.connectSpan, error);\n this.connectSpan.end();\n this.connectSpan = undefined;\n }\n for (const tracked of this.responses.values()) {\n this.flushObservedResponse(tracked);\n tracked.span.setAttribute(`${prefix}response.status`, \"interrupted\");\n if (error && !cancelled) fail(tracked.span, error);\n tracked.span.end();\n recordOperationDuration((performance.now() - tracked.started) / 1000, {\n operationName: \"invoke_agent\",\n ...parseEndpoint(this.endpoint),\n responseModel: tracked.model,\n ...(error && !cancelled ? { errorType: \"response_interrupted\" } : {}),\n });\n }\n this.responses.clear();\n this.inputAudioItems.clear();\n this.pendingAudioCommits.items.length = 0;\n this.pendingAudioMessages.items.length = 0;\n this.inputAudioBuffer = undefined;\n if (!this.session) return;\n if (error && !cancelled) fail(this.session.span, error);\n if (cancelled) this.session.span.setAttribute(`${prefix}cancelled`, true);\n if (code !== undefined) this.session.span.setAttribute(`${prefix}close.code`, code);\n this.session.span.setAttribute(`${prefix}close.was_clean`, wasClean);\n this.session.span.setAttribute(`${prefix}input.audio.bytes`, this.inputAudioBytes);\n if (this.untrackedInputItems) {\n this.session.span.setAttribute(`${prefix}input.items.untracked`, this.untrackedInputItems);\n }\n this.session.span.setAttribute(`${prefix}responses.finished`, this.finishedResponses);\n if (this.untrackedResponses) {\n this.session.span.setAttribute(`${prefix}responses.untracked`, this.untrackedResponses);\n }\n this.session.span.setAttribute(`${prefix}connected`, this.connected);\n this.session.span.end();\n });\n }\n}\n"]}
|
|
@@ -6,6 +6,7 @@ import type { VoiceAgentWebSocketConnectOptions, VoiceAgentWebSocketFactory, Voi
|
|
|
6
6
|
* Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends
|
|
7
7
|
* the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,
|
|
8
8
|
* which the service converts back into an `Authorization` header before forwarding the request.
|
|
9
|
+
* Only preview features, client request IDs, and structured inputs are mapped to query parameters.
|
|
9
10
|
*/
|
|
10
11
|
export declare class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {
|
|
11
12
|
private webSocket?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocketTransport-browser.d.mts","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sCAAsC,CAAC;AAS9C
|
|
1
|
+
{"version":3,"file":"webSocketTransport-browser.d.mts","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sCAAsC,CAAC;AAS9C;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,4BAA4B;IAC5E,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,YAAY,CAAoC;IAIxD,OAAO,CAAC,aAAa,CAAoC;gBAEtC,gBAAgB,SAAQ;IAIpC,WAAW,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAIlD,OAAO,CAAC,OAAO,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7E,2FAA2F;YAC7E,cAAc;IAQ5B,iFAAiF;YACnE,YAAY;YAWZ,qBAAqB;IActB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBhE;AA6DD,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAgBpF;AAsBD,gBAAgB;AAChB,wBAAgB,uCAAuC,IAAI,0BAA0B,CAEpF"}
|
|
@@ -7,6 +7,7 @@ import { logger } from "./logger.js";
|
|
|
7
7
|
* Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends
|
|
8
8
|
* the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,
|
|
9
9
|
* which the service converts back into an `Authorization` header before forwarding the request.
|
|
10
|
+
* Only preview features, client request IDs, and structured inputs are mapped to query parameters.
|
|
10
11
|
*/
|
|
11
12
|
export class BrowserWebSocketTransport {
|
|
12
13
|
webSocket;
|
|
@@ -171,29 +172,20 @@ async function waitForClose(webSocket, closeNotified, timeoutInMs) {
|
|
|
171
172
|
/** @internal */
|
|
172
173
|
export function addHeadersToUrl(url, headers) {
|
|
173
174
|
const target = new URL(url);
|
|
174
|
-
let foundryFeatures;
|
|
175
175
|
for (const [name, value] of Object.entries(headers)) {
|
|
176
176
|
switch (name.toLowerCase()) {
|
|
177
|
-
case "authorization":
|
|
178
|
-
break;
|
|
179
177
|
case "foundry-features":
|
|
180
|
-
|
|
178
|
+
target.searchParams.set("foundry_features", value);
|
|
181
179
|
break;
|
|
182
180
|
case "x-ms-client-request-id":
|
|
183
181
|
target.searchParams.set("client-request-id", value);
|
|
184
182
|
break;
|
|
185
|
-
|
|
186
|
-
target.searchParams.set(
|
|
183
|
+
case "x-ms-voice-structured-inputs":
|
|
184
|
+
target.searchParams.set("structured_input", value);
|
|
187
185
|
break;
|
|
188
186
|
}
|
|
189
187
|
}
|
|
190
|
-
|
|
191
|
-
if (foundryFeatures === undefined) {
|
|
192
|
-
return targetUrl;
|
|
193
|
-
}
|
|
194
|
-
const separator = target.search ? "&" : "?";
|
|
195
|
-
const encodedFeatures = encodeURIComponent(foundryFeatures).replace(/%3D/gi, "=");
|
|
196
|
-
return `${targetUrl}${separator}foundry_features=${encodedFeatures}`;
|
|
188
|
+
return target.toString();
|
|
197
189
|
}
|
|
198
190
|
function addCredentialSubprotocol(protocols, headers) {
|
|
199
191
|
const authorization = Object.entries(headers).find(([name]) => name.toLowerCase() === "authorization")?.[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocketTransport-browser.mjs","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"./logger.js\";\nimport type {\n VoiceAgentWebSocketConnectOptions,\n VoiceAgentWebSocketFactory,\n VoiceAgentWebSocketHandlers,\n VoiceAgentWebSocketTransport,\n} from \"./realtime/webSocketTransportLike.js\";\n\n/** The `CloseEvent` fields this transport forwards; the DOM lib is not in scope here. */\ninterface NativeCloseEvent {\n code: number;\n reason: string;\n wasClean: boolean;\n}\n\n/**\n * Default browser transport for the Voice Agents realtime client.\n *\n * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends\n * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,\n * which the service converts back into an `Authorization` header before forwarding the request.\n */\nexport class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {\n private webSocket?: WebSocket;\n private handlers?: VoiceAgentWebSocketHandlers;\n private readonly closeTimeoutInMs: number;\n private messageChain: Promise<void> = Promise.resolve();\n // Resolves once `onClose` has actually been invoked for the current connection (after\n // `messageChain` drains). `close()` awaits this - not just the raw native \"close\" event -\n // so it never resolves before the caller observes the authoritative close code/reason/wasClean.\n private closeNotified: Promise<void> = Promise.resolve();\n\n public constructor(closeTimeoutInMs = 5_000) {\n this.closeTimeoutInMs = closeTimeoutInMs;\n }\n\n public setHandlers(handlers: VoiceAgentWebSocketHandlers): void {\n this.handlers = handlers;\n }\n\n public async connect(options: VoiceAgentWebSocketConnectOptions): Promise<void> {\n if (options.abortSignal?.aborted) {\n throw new Error(\"WebSocket connection was cancelled.\");\n }\n const protocols = addCredentialSubprotocol(options.protocols, options.headers);\n const url = addHeadersToUrl(options.url, options.headers);\n\n let notifyClosed: () => void = () => {};\n this.closeNotified = new Promise<void>((resolve) => {\n notifyClosed = resolve;\n });\n\n const webSocket = new WebSocket(url, protocols);\n webSocket.binaryType = \"arraybuffer\";\n this.webSocket = webSocket;\n\n // These forward events for the lifetime of the connection, independent of whether connect()\n // itself is still pending.\n webSocket.addEventListener(\"message\", (event: MessageEvent) => {\n // Chain handling so an async Blob conversion can never let a later message be delivered to\n // the protocol parser out of arrival order.\n this.messageChain = this.deliverMessage(this.messageChain, event.data);\n });\n webSocket.addEventListener(\"close\", (event) => void this.deliverClose(event, notifyClosed));\n webSocket.addEventListener(\"error\", () => {\n this.handlers?.onError(new Error(\"WebSocket connection failed.\"));\n });\n\n try {\n await waitForOpen(webSocket, options.connectionTimeoutInMs, options.abortSignal);\n } catch (error) {\n webSocket.close();\n throw error;\n }\n }\n\n public async send(data: string, abortSignal?: AbortSignalLike): Promise<void> {\n if (!this.webSocket || this.webSocket.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket is not connected.\");\n }\n if (abortSignal?.aborted) {\n throw new Error(\"WebSocket send was cancelled.\");\n }\n this.webSocket.send(data);\n }\n\n /** Chains `data` behind `previous` so an async `Blob` conversion cannot reorder events. */\n private async deliverMessage(\n previous: Promise<void>,\n data: string | ArrayBuffer | Blob,\n ): Promise<void> {\n await previous;\n await this.handleIncomingMessage(data);\n }\n\n /** Reports the close only after every earlier message has reached the parser. */\n private async deliverClose(event: Event, notifyClosed: () => void): Promise<void> {\n const { code, reason, wasClean } = event as unknown as NativeCloseEvent;\n try {\n await this.messageChain;\n } catch {\n // handleIncomingMessage already reported the failure through onError.\n }\n this.handlers?.onClose(code, reason, wasClean);\n notifyClosed();\n }\n\n private async handleIncomingMessage(data: string | ArrayBuffer | Blob): Promise<void> {\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\n this.handlers?.onMessage(data);\n return;\n }\n if (data instanceof Blob) {\n try {\n this.handlers?.onMessage(await data.arrayBuffer());\n } catch (error) {\n this.handlers?.onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n }\n\n public async close(code: number, reason: string): Promise<void> {\n if (!this.webSocket) {\n return;\n }\n const webSocket = this.webSocket;\n try {\n if (webSocket.readyState !== WebSocket.CLOSING && webSocket.readyState !== WebSocket.CLOSED) {\n if (code === 1000 || (code >= 3000 && code <= 4999)) {\n webSocket.close(code, reason);\n } else {\n webSocket.close();\n }\n }\n await waitForClose(webSocket, this.closeNotified, this.closeTimeoutInMs);\n } catch (error) {\n // close() is a best-effort cleanup operation and must never throw (callers, including our\n // own VoiceAgentConnection.close()/dispose(), rely on it always resolving), so a transport\n // error here is logged for diagnosability rather than rejecting.\n logger.warning(\"Error while closing the voice-agent WebSocket transport\", { error });\n } finally {\n if (this.webSocket === webSocket) {\n this.webSocket = undefined;\n }\n }\n }\n}\n\n/** Waits for `webSocket` to open, or rejects early on an error, timeout, or abort. */\nfunction waitForOpen(\n webSocket: WebSocket,\n connectionTimeoutInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n finish(() =>\n reject(new Error(`WebSocket connection timed out after ${connectionTimeoutInMs}ms.`)),\n );\n }, connectionTimeoutInMs);\n const onOpen = (): void => finish(resolve);\n const onError = (): void => finish(() => reject(new Error(\"WebSocket connection failed.\")));\n const onAbort = (): void =>\n finish(() => reject(new Error(\"WebSocket connection was cancelled.\")));\n\n function finish(settle: () => void): void {\n clearTimeout(timeout);\n webSocket.removeEventListener(\"open\", onOpen);\n webSocket.removeEventListener(\"error\", onError);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n settle();\n }\n\n webSocket.addEventListener(\"open\", onOpen, { once: true });\n webSocket.addEventListener(\"error\", onError, { once: true });\n abortSignal?.addEventListener(\"abort\", onAbort);\n });\n}\n\n/**\n * Waits until `onClose` has been delivered to the handlers, so `close()` never returns before the\n * caller observes the true close outcome. Resolves on timeout if the socket never closes; rejects\n * if it errors instead.\n */\nasync function waitForClose(\n webSocket: WebSocket,\n closeNotified: Promise<void>,\n timeoutInMs: number,\n): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let onError: (() => void) | undefined;\n const errorOrTimeout = new Promise<void>((resolve, reject) => {\n timeout = setTimeout(resolve, timeoutInMs);\n onError = (): void => reject(new Error(\"WebSocket connection failed while closing.\"));\n webSocket.addEventListener(\"error\", onError, { once: true });\n });\n\n try {\n await Promise.race([closeNotified, errorOrTimeout]);\n } finally {\n clearTimeout(timeout);\n if (onError) {\n webSocket.removeEventListener(\"error\", onError);\n }\n }\n}\n\n/** @internal */\nexport function addHeadersToUrl(url: string, headers: Record<string, string>): string {\n const target = new URL(url);\n let foundryFeatures: string | undefined;\n for (const [name, value] of Object.entries(headers)) {\n switch (name.toLowerCase()) {\n case \"authorization\":\n break;\n case \"foundry-features\":\n foundryFeatures = value;\n break;\n case \"x-ms-client-request-id\":\n target.searchParams.set(\"client-request-id\", value);\n break;\n default:\n target.searchParams.set(`h-${name.toLowerCase()}`, value);\n break;\n }\n }\n const targetUrl = target.toString();\n if (foundryFeatures === undefined) {\n return targetUrl;\n }\n const separator = target.search ? \"&\" : \"?\";\n const encodedFeatures = encodeURIComponent(foundryFeatures).replace(/%3D/gi, \"=\");\n return `${targetUrl}${separator}foundry_features=${encodedFeatures}`;\n}\n\nfunction addCredentialSubprotocol(protocols: string[], headers: Record<string, string>): string[] {\n const authorization = Object.entries(headers).find(\n ([name]) => name.toLowerCase() === \"authorization\",\n )?.[1];\n if (authorization === undefined) {\n return protocols;\n }\n const bearerPrefix = \"Bearer \";\n if (!authorization.startsWith(bearerPrefix) || authorization.length === bearerPrefix.length) {\n throw new Error(\"Browser WebSocket authentication requires a Microsoft Entra bearer token.\");\n }\n return [...protocols, `authorization.bearer.${authorization.slice(bearerPrefix.length)}`];\n}\n\nclass BrowserWebSocketFactory implements VoiceAgentWebSocketFactory {\n public create(): VoiceAgentWebSocketTransport {\n return new BrowserWebSocketTransport();\n }\n}\n\n/** @internal */\nexport function createDefaultVoiceAgentWebSocketFactory(): VoiceAgentWebSocketFactory {\n return new BrowserWebSocketFactory();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webSocketTransport-browser.mjs","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"./logger.js\";\nimport type {\n VoiceAgentWebSocketConnectOptions,\n VoiceAgentWebSocketFactory,\n VoiceAgentWebSocketHandlers,\n VoiceAgentWebSocketTransport,\n} from \"./realtime/webSocketTransportLike.js\";\n\n/** The `CloseEvent` fields this transport forwards; the DOM lib is not in scope here. */\ninterface NativeCloseEvent {\n code: number;\n reason: string;\n wasClean: boolean;\n}\n\n/**\n * Default browser transport for the Voice Agents realtime client.\n *\n * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends\n * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,\n * which the service converts back into an `Authorization` header before forwarding the request.\n * Only preview features, client request IDs, and structured inputs are mapped to query parameters.\n */\nexport class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {\n private webSocket?: WebSocket;\n private handlers?: VoiceAgentWebSocketHandlers;\n private readonly closeTimeoutInMs: number;\n private messageChain: Promise<void> = Promise.resolve();\n // Resolves once `onClose` has actually been invoked for the current connection (after\n // `messageChain` drains). `close()` awaits this - not just the raw native \"close\" event -\n // so it never resolves before the caller observes the authoritative close code/reason/wasClean.\n private closeNotified: Promise<void> = Promise.resolve();\n\n public constructor(closeTimeoutInMs = 5_000) {\n this.closeTimeoutInMs = closeTimeoutInMs;\n }\n\n public setHandlers(handlers: VoiceAgentWebSocketHandlers): void {\n this.handlers = handlers;\n }\n\n public async connect(options: VoiceAgentWebSocketConnectOptions): Promise<void> {\n if (options.abortSignal?.aborted) {\n throw new Error(\"WebSocket connection was cancelled.\");\n }\n const protocols = addCredentialSubprotocol(options.protocols, options.headers);\n const url = addHeadersToUrl(options.url, options.headers);\n\n let notifyClosed: () => void = () => {};\n this.closeNotified = new Promise<void>((resolve) => {\n notifyClosed = resolve;\n });\n\n const webSocket = new WebSocket(url, protocols);\n webSocket.binaryType = \"arraybuffer\";\n this.webSocket = webSocket;\n\n // These forward events for the lifetime of the connection, independent of whether connect()\n // itself is still pending.\n webSocket.addEventListener(\"message\", (event: MessageEvent) => {\n // Chain handling so an async Blob conversion can never let a later message be delivered to\n // the protocol parser out of arrival order.\n this.messageChain = this.deliverMessage(this.messageChain, event.data);\n });\n webSocket.addEventListener(\"close\", (event) => void this.deliverClose(event, notifyClosed));\n webSocket.addEventListener(\"error\", () => {\n this.handlers?.onError(new Error(\"WebSocket connection failed.\"));\n });\n\n try {\n await waitForOpen(webSocket, options.connectionTimeoutInMs, options.abortSignal);\n } catch (error) {\n webSocket.close();\n throw error;\n }\n }\n\n public async send(data: string, abortSignal?: AbortSignalLike): Promise<void> {\n if (!this.webSocket || this.webSocket.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket is not connected.\");\n }\n if (abortSignal?.aborted) {\n throw new Error(\"WebSocket send was cancelled.\");\n }\n this.webSocket.send(data);\n }\n\n /** Chains `data` behind `previous` so an async `Blob` conversion cannot reorder events. */\n private async deliverMessage(\n previous: Promise<void>,\n data: string | ArrayBuffer | Blob,\n ): Promise<void> {\n await previous;\n await this.handleIncomingMessage(data);\n }\n\n /** Reports the close only after every earlier message has reached the parser. */\n private async deliverClose(event: Event, notifyClosed: () => void): Promise<void> {\n const { code, reason, wasClean } = event as unknown as NativeCloseEvent;\n try {\n await this.messageChain;\n } catch {\n // handleIncomingMessage already reported the failure through onError.\n }\n this.handlers?.onClose(code, reason, wasClean);\n notifyClosed();\n }\n\n private async handleIncomingMessage(data: string | ArrayBuffer | Blob): Promise<void> {\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\n this.handlers?.onMessage(data);\n return;\n }\n if (data instanceof Blob) {\n try {\n this.handlers?.onMessage(await data.arrayBuffer());\n } catch (error) {\n this.handlers?.onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n }\n\n public async close(code: number, reason: string): Promise<void> {\n if (!this.webSocket) {\n return;\n }\n const webSocket = this.webSocket;\n try {\n if (webSocket.readyState !== WebSocket.CLOSING && webSocket.readyState !== WebSocket.CLOSED) {\n if (code === 1000 || (code >= 3000 && code <= 4999)) {\n webSocket.close(code, reason);\n } else {\n webSocket.close();\n }\n }\n await waitForClose(webSocket, this.closeNotified, this.closeTimeoutInMs);\n } catch (error) {\n // close() is a best-effort cleanup operation and must never throw (callers, including our\n // own VoiceAgentConnection.close()/dispose(), rely on it always resolving), so a transport\n // error here is logged for diagnosability rather than rejecting.\n logger.warning(\"Error while closing the voice-agent WebSocket transport\", { error });\n } finally {\n if (this.webSocket === webSocket) {\n this.webSocket = undefined;\n }\n }\n }\n}\n\n/** Waits for `webSocket` to open, or rejects early on an error, timeout, or abort. */\nfunction waitForOpen(\n webSocket: WebSocket,\n connectionTimeoutInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n finish(() =>\n reject(new Error(`WebSocket connection timed out after ${connectionTimeoutInMs}ms.`)),\n );\n }, connectionTimeoutInMs);\n const onOpen = (): void => finish(resolve);\n const onError = (): void => finish(() => reject(new Error(\"WebSocket connection failed.\")));\n const onAbort = (): void =>\n finish(() => reject(new Error(\"WebSocket connection was cancelled.\")));\n\n function finish(settle: () => void): void {\n clearTimeout(timeout);\n webSocket.removeEventListener(\"open\", onOpen);\n webSocket.removeEventListener(\"error\", onError);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n settle();\n }\n\n webSocket.addEventListener(\"open\", onOpen, { once: true });\n webSocket.addEventListener(\"error\", onError, { once: true });\n abortSignal?.addEventListener(\"abort\", onAbort);\n });\n}\n\n/**\n * Waits until `onClose` has been delivered to the handlers, so `close()` never returns before the\n * caller observes the true close outcome. Resolves on timeout if the socket never closes; rejects\n * if it errors instead.\n */\nasync function waitForClose(\n webSocket: WebSocket,\n closeNotified: Promise<void>,\n timeoutInMs: number,\n): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let onError: (() => void) | undefined;\n const errorOrTimeout = new Promise<void>((resolve, reject) => {\n timeout = setTimeout(resolve, timeoutInMs);\n onError = (): void => reject(new Error(\"WebSocket connection failed while closing.\"));\n webSocket.addEventListener(\"error\", onError, { once: true });\n });\n\n try {\n await Promise.race([closeNotified, errorOrTimeout]);\n } finally {\n clearTimeout(timeout);\n if (onError) {\n webSocket.removeEventListener(\"error\", onError);\n }\n }\n}\n\n/** @internal */\nexport function addHeadersToUrl(url: string, headers: Record<string, string>): string {\n const target = new URL(url);\n for (const [name, value] of Object.entries(headers)) {\n switch (name.toLowerCase()) {\n case \"foundry-features\":\n target.searchParams.set(\"foundry_features\", value);\n break;\n case \"x-ms-client-request-id\":\n target.searchParams.set(\"client-request-id\", value);\n break;\n case \"x-ms-voice-structured-inputs\":\n target.searchParams.set(\"structured_input\", value);\n break;\n }\n }\n return target.toString();\n}\n\nfunction addCredentialSubprotocol(protocols: string[], headers: Record<string, string>): string[] {\n const authorization = Object.entries(headers).find(\n ([name]) => name.toLowerCase() === \"authorization\",\n )?.[1];\n if (authorization === undefined) {\n return protocols;\n }\n const bearerPrefix = \"Bearer \";\n if (!authorization.startsWith(bearerPrefix) || authorization.length === bearerPrefix.length) {\n throw new Error(\"Browser WebSocket authentication requires a Microsoft Entra bearer token.\");\n }\n return [...protocols, `authorization.bearer.${authorization.slice(bearerPrefix.length)}`];\n}\n\nclass BrowserWebSocketFactory implements VoiceAgentWebSocketFactory {\n public create(): VoiceAgentWebSocketTransport {\n return new BrowserWebSocketTransport();\n }\n}\n\n/** @internal */\nexport function createDefaultVoiceAgentWebSocketFactory(): VoiceAgentWebSocketFactory {\n return new BrowserWebSocketFactory();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure/ai-projects",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"description": "Azure AI Projects client library.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22.0.0"
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"@azure/logger": "^1.1.4",
|
|
55
55
|
"@azure/storage-blob": "^12.26.0",
|
|
56
56
|
"@opentelemetry/api": "^1.9.1",
|
|
57
|
-
"https-proxy-agent": "^
|
|
58
|
-
"openai": "^
|
|
57
|
+
"https-proxy-agent": "^9.1.0",
|
|
58
|
+
"openai": "^7.28.0",
|
|
59
59
|
"tslib": "^2.6.2",
|
|
60
|
-
"ws": "^8.
|
|
60
|
+
"ws": "^8.21.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@azure-rest/ai-inference": "^1.0.0-beta.6",
|
|
@@ -75,19 +75,19 @@
|
|
|
75
75
|
"@opentelemetry/sdk-trace-node": "^2.9.0",
|
|
76
76
|
"@types/node": "^22.0.0",
|
|
77
77
|
"@types/ws": "^8.18.1",
|
|
78
|
-
"@vitest/browser-playwright": "^
|
|
79
|
-
"@vitest/coverage-istanbul": "^
|
|
78
|
+
"@vitest/browser-playwright": "^5.0.0",
|
|
79
|
+
"@vitest/coverage-istanbul": "^5.0.0",
|
|
80
80
|
"cross-env": "^10.1.0",
|
|
81
|
-
"dotenv": "^
|
|
81
|
+
"dotenv": "^18.0.5",
|
|
82
82
|
"eslint": "^10.8.0",
|
|
83
83
|
"mkdirp": "^3.0.1",
|
|
84
84
|
"playwright": "^1.60.0",
|
|
85
85
|
"prettier": "^3.9.1",
|
|
86
|
-
"react-native": "^0.
|
|
86
|
+
"react-native": "^0.87.1",
|
|
87
87
|
"rimraf": "^6.1.0",
|
|
88
88
|
"typescript": "~6.0.2",
|
|
89
89
|
"vite": "^8.0.0",
|
|
90
|
-
"vitest": "^
|
|
90
|
+
"vitest": "^5.0.0",
|
|
91
91
|
"zod": "^4.2.1"
|
|
92
92
|
},
|
|
93
93
|
"exports": {
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { deleteGenerationJob, cancelGenerationJob, createGenerationJob, listGenerationJobs, getGenerationJob, } from "./operations.js";
|
|
2
|
-
export type { BetaDatasetsDeleteGenerationJobOptionalParams, BetaDatasetsCancelGenerationJobOptionalParams, BetaDatasetsCreateGenerationJobOptionalParams, BetaDatasetsListGenerationJobsOptionalParams, BetaDatasetsGetGenerationJobOptionalParams, } from "./options.js";
|
|
3
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,6CAA6C,EAC7C,6CAA6C,EAC7C,6CAA6C,EAC7C,4CAA4C,EAC5C,0CAA0C,GAC3C,MAAM,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport {\n deleteGenerationJob,\n cancelGenerationJob,\n createGenerationJob,\n listGenerationJobs,\n getGenerationJob,\n} from \"./operations.js\";\nexport type {\n BetaDatasetsDeleteGenerationJobOptionalParams,\n BetaDatasetsCancelGenerationJobOptionalParams,\n BetaDatasetsCreateGenerationJobOptionalParams,\n BetaDatasetsListGenerationJobsOptionalParams,\n BetaDatasetsGetGenerationJobOptionalParams,\n} from \"./options.js\";\n"]}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { AIProjectContext as Client } from "../../index.js";
|
|
2
|
-
import type { DataGenerationJob, DataGenerationJobResult, _AgentsPagedResultDataGenerationJob } from "../../../models/models.js";
|
|
3
|
-
import type { PagedAsyncIterableIterator } from "@azure/core-paging";
|
|
4
|
-
import type { JobPoller } from "../../../static-helpers/pollingHelpers.js";
|
|
5
|
-
import type { BetaDatasetsDeleteGenerationJobOptionalParams, BetaDatasetsCancelGenerationJobOptionalParams, BetaDatasetsCreateGenerationJobOptionalParams, BetaDatasetsListGenerationJobsOptionalParams, BetaDatasetsGetGenerationJobOptionalParams } from "./options.js";
|
|
6
|
-
import type { StreamableMethod, PathUncheckedResponse } from "@azure-rest/core-client";
|
|
7
|
-
export declare function _deleteGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsDeleteGenerationJobOptionalParams): StreamableMethod;
|
|
8
|
-
export declare function _deleteGenerationJobDeserialize(result: PathUncheckedResponse): Promise<void>;
|
|
9
|
-
/** Removes the specified data generation job and its associated output. */
|
|
10
|
-
export declare function deleteGenerationJob(context: Client, jobId: string, options?: BetaDatasetsDeleteGenerationJobOptionalParams): Promise<void>;
|
|
11
|
-
export declare function _cancelGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsCancelGenerationJobOptionalParams): StreamableMethod;
|
|
12
|
-
export declare function _cancelGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJob>;
|
|
13
|
-
/** Cancels the specified data generation job if it is still in progress. */
|
|
14
|
-
export declare function cancelGenerationJob(context: Client, jobId: string, options?: BetaDatasetsCancelGenerationJobOptionalParams): Promise<DataGenerationJob>;
|
|
15
|
-
export declare function _createGenerationJobSend(context: Client, job: DataGenerationJob, options?: BetaDatasetsCreateGenerationJobOptionalParams): StreamableMethod;
|
|
16
|
-
export declare function _createGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJobResult>;
|
|
17
|
-
/** Submits a new data generation job for asynchronous execution. */
|
|
18
|
-
export declare function createGenerationJob(context: Client, job: DataGenerationJob, options?: BetaDatasetsCreateGenerationJobOptionalParams): JobPoller<DataGenerationJobResult>;
|
|
19
|
-
export declare function _listGenerationJobsSend(context: Client, options?: BetaDatasetsListGenerationJobsOptionalParams): StreamableMethod;
|
|
20
|
-
export declare function _listGenerationJobsDeserialize(result: PathUncheckedResponse): Promise<_AgentsPagedResultDataGenerationJob>;
|
|
21
|
-
/** Returns a list of data generation jobs. */
|
|
22
|
-
export declare function listGenerationJobs(context: Client, options?: BetaDatasetsListGenerationJobsOptionalParams): PagedAsyncIterableIterator<DataGenerationJob>;
|
|
23
|
-
export declare function _getGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsGetGenerationJobOptionalParams): StreamableMethod;
|
|
24
|
-
export declare function _getGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJob>;
|
|
25
|
-
/** Retrieves the specified data generation job and its current status. */
|
|
26
|
-
export declare function getGenerationJob(context: Client, jobId: string, options?: BetaDatasetsGetGenerationJobOptionalParams): Promise<DataGenerationJob>;
|
|
27
|
-
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/operations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mCAAmC,EACpC,MAAM,2BAA2B,CAAC;AAQnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAG3E,OAAO,KAAK,EACV,6CAA6C,EAC7C,6CAA6C,EAC7C,6CAA6C,EAC7C,4CAA4C,EAC5C,0CAA0C,EAC3C,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAkBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,2EAA2E;AAC3E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAmBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,4EAA4E;AAC5E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,iBAAiB,EACtB,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAqBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAmBlC;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,iBAAiB,EACtB,OAAO,GAAE,6CAAsE,GAC9E,SAAS,CAAC,uBAAuB,CAAC,CAapC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,4CAAqE,GAC7E,gBAAgB,CAsBlB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,mCAAmC,CAAC,CAY9C;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,4CAAqE,GAC7E,0BAA0B,CAAC,iBAAiB,CAAC,CAQ/C;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0CAAmE,GAC3E,gBAAgB,CAmBlB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0CAAmE,GAC3E,OAAO,CAAC,iBAAiB,CAAC,CAG5B"}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT License.
|
|
3
|
-
import { apiErrorResponseDeserializer, dataGenerationJobSerializer, dataGenerationJobDeserializer, dataGenerationJobResultDeserializer, _agentsPagedResultDataGenerationJobDeserializer, } from "../../../models/models.js";
|
|
4
|
-
import { buildPagedAsyncIterator } from "../../../static-helpers/pagingHelpers.js";
|
|
5
|
-
import { getJobPoller } from "../../../static-helpers/pollingHelpers.js";
|
|
6
|
-
import { expandUrlTemplate } from "../../../static-helpers/urlTemplate.js";
|
|
7
|
-
import { createRestError, operationOptionsToRequestParameters } from "@azure-rest/core-client";
|
|
8
|
-
export function _deleteGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
|
|
9
|
-
const path = expandUrlTemplate("/data_generation_jobs/{jobId}{?api-version}", {
|
|
10
|
-
jobId: jobId,
|
|
11
|
-
"api-version": context.apiVersion ?? "v1",
|
|
12
|
-
}, {
|
|
13
|
-
allowReserved: options?.requestOptions?.skipUrlEncoding,
|
|
14
|
-
});
|
|
15
|
-
return context.path(path).delete({
|
|
16
|
-
...operationOptionsToRequestParameters(options),
|
|
17
|
-
headers: {
|
|
18
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
19
|
-
...options.requestOptions?.headers,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
export async function _deleteGenerationJobDeserialize(result) {
|
|
24
|
-
const expectedStatuses = ["204"];
|
|
25
|
-
if (!expectedStatuses.includes(result.status)) {
|
|
26
|
-
const error = createRestError(result);
|
|
27
|
-
if (result.body) {
|
|
28
|
-
error.details = apiErrorResponseDeserializer(result.body);
|
|
29
|
-
}
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
/** Removes the specified data generation job and its associated output. */
|
|
35
|
-
export async function deleteGenerationJob(context, jobId, options = { requestOptions: {} }) {
|
|
36
|
-
const result = await _deleteGenerationJobSend(context, jobId, options);
|
|
37
|
-
return _deleteGenerationJobDeserialize(result);
|
|
38
|
-
}
|
|
39
|
-
export function _cancelGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
|
|
40
|
-
const path = expandUrlTemplate("/data_generation_jobs/{jobId}:cancel{?api-version}", {
|
|
41
|
-
jobId: jobId,
|
|
42
|
-
"api-version": context.apiVersion ?? "v1",
|
|
43
|
-
}, {
|
|
44
|
-
allowReserved: options?.requestOptions?.skipUrlEncoding,
|
|
45
|
-
});
|
|
46
|
-
return context.path(path).post({
|
|
47
|
-
...operationOptionsToRequestParameters(options),
|
|
48
|
-
headers: {
|
|
49
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
50
|
-
accept: "application/json",
|
|
51
|
-
...options.requestOptions?.headers,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
export async function _cancelGenerationJobDeserialize(result) {
|
|
56
|
-
const expectedStatuses = ["200"];
|
|
57
|
-
if (!expectedStatuses.includes(result.status)) {
|
|
58
|
-
const error = createRestError(result);
|
|
59
|
-
if (result.body) {
|
|
60
|
-
error.details = apiErrorResponseDeserializer(result.body);
|
|
61
|
-
}
|
|
62
|
-
throw error;
|
|
63
|
-
}
|
|
64
|
-
return dataGenerationJobDeserializer(result.body);
|
|
65
|
-
}
|
|
66
|
-
/** Cancels the specified data generation job if it is still in progress. */
|
|
67
|
-
export async function cancelGenerationJob(context, jobId, options = { requestOptions: {} }) {
|
|
68
|
-
const result = await _cancelGenerationJobSend(context, jobId, options);
|
|
69
|
-
return _cancelGenerationJobDeserialize(result);
|
|
70
|
-
}
|
|
71
|
-
export function _createGenerationJobSend(context, job, options = { requestOptions: {} }) {
|
|
72
|
-
const path = expandUrlTemplate("/data_generation_jobs{?api-version}", {
|
|
73
|
-
"api-version": context.apiVersion ?? "v1",
|
|
74
|
-
}, {
|
|
75
|
-
allowReserved: options?.requestOptions?.skipUrlEncoding,
|
|
76
|
-
});
|
|
77
|
-
return context.path(path).post({
|
|
78
|
-
...operationOptionsToRequestParameters(options),
|
|
79
|
-
contentType: "application/json",
|
|
80
|
-
headers: {
|
|
81
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
82
|
-
...(options?.operationId !== undefined ? { "operation-id": options?.operationId } : {}),
|
|
83
|
-
accept: "application/json",
|
|
84
|
-
...options.requestOptions?.headers,
|
|
85
|
-
},
|
|
86
|
-
body: dataGenerationJobSerializer(job),
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
export async function _createGenerationJobDeserialize(result) {
|
|
90
|
-
const expectedStatuses = ["201", "200", "202"];
|
|
91
|
-
if (!expectedStatuses.includes(result.status)) {
|
|
92
|
-
const error = createRestError(result);
|
|
93
|
-
if (result.body) {
|
|
94
|
-
error.details = apiErrorResponseDeserializer(result.body);
|
|
95
|
-
}
|
|
96
|
-
throw error;
|
|
97
|
-
}
|
|
98
|
-
if (result?.body?.result === undefined) {
|
|
99
|
-
throw createRestError(`Expected a result in the response at position "result.body.result"`, result);
|
|
100
|
-
}
|
|
101
|
-
return dataGenerationJobResultDeserializer(result.body.result);
|
|
102
|
-
}
|
|
103
|
-
/** Submits a new data generation job for asynchronous execution. */
|
|
104
|
-
export function createGenerationJob(context, job, options = { requestOptions: {} }) {
|
|
105
|
-
// CUSTOMIZATION: SDK-IMPROVEMENT: `getJobPoller` exposes the queued job id on the poller state.
|
|
106
|
-
return getJobPoller(context, _createGenerationJobDeserialize, ["201", "200", "202"], {
|
|
107
|
-
updateIntervalInMs: options?.updateIntervalInMs,
|
|
108
|
-
abortSignal: options?.abortSignal,
|
|
109
|
-
getInitialResponse: () => _createGenerationJobSend(context, job, options),
|
|
110
|
-
resourceLocationConfig: "operation-location",
|
|
111
|
-
apiVersion: context.apiVersion ?? "v1",
|
|
112
|
-
pollHeaders: {
|
|
113
|
-
...options?.requestOptions?.headers,
|
|
114
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
export function _listGenerationJobsSend(context, options = { requestOptions: {} }) {
|
|
119
|
-
const path = expandUrlTemplate("/data_generation_jobs{?limit,order,after,before,api-version}", {
|
|
120
|
-
limit: options?.limit,
|
|
121
|
-
order: options?.order,
|
|
122
|
-
after: options?.after,
|
|
123
|
-
before: options?.before,
|
|
124
|
-
"api-version": context.apiVersion ?? "v1",
|
|
125
|
-
}, {
|
|
126
|
-
allowReserved: options?.requestOptions?.skipUrlEncoding,
|
|
127
|
-
});
|
|
128
|
-
return context.path(path).get({
|
|
129
|
-
...operationOptionsToRequestParameters(options),
|
|
130
|
-
headers: {
|
|
131
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
132
|
-
accept: "application/json",
|
|
133
|
-
...options.requestOptions?.headers,
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
export async function _listGenerationJobsDeserialize(result) {
|
|
138
|
-
const expectedStatuses = ["200"];
|
|
139
|
-
if (!expectedStatuses.includes(result.status)) {
|
|
140
|
-
const error = createRestError(result);
|
|
141
|
-
if (result.body) {
|
|
142
|
-
error.details = apiErrorResponseDeserializer(result.body);
|
|
143
|
-
}
|
|
144
|
-
throw error;
|
|
145
|
-
}
|
|
146
|
-
return _agentsPagedResultDataGenerationJobDeserializer(result.body);
|
|
147
|
-
}
|
|
148
|
-
/** Returns a list of data generation jobs. */
|
|
149
|
-
export function listGenerationJobs(context, options = { requestOptions: {} }) {
|
|
150
|
-
return buildPagedAsyncIterator(context, () => _listGenerationJobsSend(context, options), _listGenerationJobsDeserialize, ["200"], { itemName: "data", apiVersion: context.apiVersion ?? "v1" });
|
|
151
|
-
}
|
|
152
|
-
export function _getGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
|
|
153
|
-
const path = expandUrlTemplate("/data_generation_jobs/{jobId}{?api-version}", {
|
|
154
|
-
jobId: jobId,
|
|
155
|
-
"api-version": context.apiVersion ?? "v1",
|
|
156
|
-
}, {
|
|
157
|
-
allowReserved: options?.requestOptions?.skipUrlEncoding,
|
|
158
|
-
});
|
|
159
|
-
return context.path(path).get({
|
|
160
|
-
...operationOptionsToRequestParameters(options),
|
|
161
|
-
headers: {
|
|
162
|
-
"foundry-features": "DataGenerationJobs=V1Preview",
|
|
163
|
-
accept: "application/json",
|
|
164
|
-
...options.requestOptions?.headers,
|
|
165
|
-
},
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
export async function _getGenerationJobDeserialize(result) {
|
|
169
|
-
const expectedStatuses = ["200"];
|
|
170
|
-
if (!expectedStatuses.includes(result.status)) {
|
|
171
|
-
const error = createRestError(result);
|
|
172
|
-
if (result.body) {
|
|
173
|
-
error.details = apiErrorResponseDeserializer(result.body);
|
|
174
|
-
}
|
|
175
|
-
throw error;
|
|
176
|
-
}
|
|
177
|
-
return dataGenerationJobDeserializer(result.body);
|
|
178
|
-
}
|
|
179
|
-
/** Retrieves the specified data generation job and its current status. */
|
|
180
|
-
export async function getGenerationJob(context, jobId, options = { requestOptions: {} }) {
|
|
181
|
-
const result = await _getGenerationJobSend(context, jobId, options);
|
|
182
|
-
return _getGenerationJobDeserialize(result);
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=operations.js.map
|