@azure-rest/ai-inference 1.0.0-beta.4 → 1.0.0-beta.6

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.
Files changed (172) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +323 -248
  3. package/dist/browser/clientDefinitions.d.ts +14 -5
  4. package/dist/browser/clientDefinitions.d.ts.map +1 -1
  5. package/dist/browser/clientDefinitions.js.map +1 -1
  6. package/dist/browser/constants.d.ts +7 -0
  7. package/dist/browser/constants.d.ts.map +1 -1
  8. package/dist/browser/constants.js +7 -0
  9. package/dist/browser/constants.js.map +1 -1
  10. package/dist/browser/index.d.ts +11 -3
  11. package/dist/browser/index.d.ts.map +1 -1
  12. package/dist/browser/index.js +10 -3
  13. package/dist/browser/index.js.map +1 -1
  14. package/dist/browser/isUnexpected.d.ts +8 -1
  15. package/dist/browser/isUnexpected.d.ts.map +1 -1
  16. package/dist/browser/isUnexpected.js +0 -4
  17. package/dist/browser/isUnexpected.js.map +1 -1
  18. package/dist/browser/logger.d.ts.map +1 -1
  19. package/dist/browser/logger.js +7 -0
  20. package/dist/browser/logger.js.map +1 -1
  21. package/dist/browser/modelClient.d.ts +7 -0
  22. package/dist/browser/modelClient.d.ts.map +1 -1
  23. package/dist/browser/modelClient.js +1 -1
  24. package/dist/browser/modelClient.js.map +1 -1
  25. package/dist/browser/models.d.ts +94 -12
  26. package/dist/browser/models.d.ts.map +1 -1
  27. package/dist/browser/models.js.map +1 -1
  28. package/dist/browser/outputModels.d.ts +26 -17
  29. package/dist/browser/outputModels.d.ts.map +1 -1
  30. package/dist/browser/outputModels.js.map +1 -1
  31. package/dist/browser/parameters.d.ts +15 -8
  32. package/dist/browser/parameters.d.ts.map +1 -1
  33. package/dist/browser/parameters.js.map +1 -1
  34. package/dist/browser/responses.d.ts +9 -2
  35. package/dist/browser/responses.d.ts.map +1 -1
  36. package/dist/browser/responses.js.map +1 -1
  37. package/dist/browser/tracingHelper.d.ts +8 -1
  38. package/dist/browser/tracingHelper.d.ts.map +1 -1
  39. package/dist/browser/tracingHelper.js +26 -26
  40. package/dist/browser/tracingHelper.js.map +1 -1
  41. package/dist/browser/tracingPolicy.d.ts +7 -0
  42. package/dist/browser/tracingPolicy.d.ts.map +1 -1
  43. package/dist/browser/tracingPolicy.js +2 -2
  44. package/dist/browser/tracingPolicy.js.map +1 -1
  45. package/dist/commonjs/clientDefinitions.d.ts +14 -5
  46. package/dist/commonjs/clientDefinitions.d.ts.map +1 -1
  47. package/dist/commonjs/clientDefinitions.js.map +1 -1
  48. package/dist/commonjs/constants.d.ts +7 -0
  49. package/dist/commonjs/constants.d.ts.map +1 -1
  50. package/dist/commonjs/constants.js +9 -2
  51. package/dist/commonjs/constants.js.map +1 -1
  52. package/dist/commonjs/index.d.ts +11 -3
  53. package/dist/commonjs/index.d.ts.map +1 -1
  54. package/dist/commonjs/index.js +10 -3
  55. package/dist/commonjs/index.js.map +1 -1
  56. package/dist/commonjs/isUnexpected.d.ts +8 -1
  57. package/dist/commonjs/isUnexpected.d.ts.map +1 -1
  58. package/dist/commonjs/isUnexpected.js +0 -4
  59. package/dist/commonjs/isUnexpected.js.map +1 -1
  60. package/dist/commonjs/logger.d.ts.map +1 -1
  61. package/dist/commonjs/logger.js +7 -0
  62. package/dist/commonjs/logger.js.map +1 -1
  63. package/dist/commonjs/modelClient.d.ts +7 -0
  64. package/dist/commonjs/modelClient.d.ts.map +1 -1
  65. package/dist/commonjs/modelClient.js +1 -1
  66. package/dist/commonjs/modelClient.js.map +1 -1
  67. package/dist/commonjs/models.d.ts +94 -12
  68. package/dist/commonjs/models.d.ts.map +1 -1
  69. package/dist/commonjs/models.js.map +1 -1
  70. package/dist/commonjs/outputModels.d.ts +26 -17
  71. package/dist/commonjs/outputModels.d.ts.map +1 -1
  72. package/dist/commonjs/outputModels.js.map +1 -1
  73. package/dist/commonjs/parameters.d.ts +15 -8
  74. package/dist/commonjs/parameters.d.ts.map +1 -1
  75. package/dist/commonjs/parameters.js.map +1 -1
  76. package/dist/commonjs/responses.d.ts +9 -2
  77. package/dist/commonjs/responses.d.ts.map +1 -1
  78. package/dist/commonjs/responses.js.map +1 -1
  79. package/dist/commonjs/tracingHelper.d.ts +8 -1
  80. package/dist/commonjs/tracingHelper.d.ts.map +1 -1
  81. package/dist/commonjs/tracingHelper.js +26 -26
  82. package/dist/commonjs/tracingHelper.js.map +1 -1
  83. package/dist/commonjs/tracingPolicy.d.ts +7 -0
  84. package/dist/commonjs/tracingPolicy.d.ts.map +1 -1
  85. package/dist/commonjs/tracingPolicy.js +2 -2
  86. package/dist/commonjs/tracingPolicy.js.map +1 -1
  87. package/dist/commonjs/tsdoc-metadata.json +1 -1
  88. package/dist/esm/clientDefinitions.d.ts +14 -5
  89. package/dist/esm/clientDefinitions.d.ts.map +1 -1
  90. package/dist/esm/clientDefinitions.js.map +1 -1
  91. package/dist/esm/constants.d.ts +7 -0
  92. package/dist/esm/constants.d.ts.map +1 -1
  93. package/dist/esm/constants.js +7 -0
  94. package/dist/esm/constants.js.map +1 -1
  95. package/dist/esm/index.d.ts +11 -3
  96. package/dist/esm/index.d.ts.map +1 -1
  97. package/dist/esm/index.js +10 -3
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/isUnexpected.d.ts +8 -1
  100. package/dist/esm/isUnexpected.d.ts.map +1 -1
  101. package/dist/esm/isUnexpected.js +0 -4
  102. package/dist/esm/isUnexpected.js.map +1 -1
  103. package/dist/esm/logger.d.ts.map +1 -1
  104. package/dist/esm/logger.js +7 -0
  105. package/dist/esm/logger.js.map +1 -1
  106. package/dist/esm/modelClient.d.ts +7 -0
  107. package/dist/esm/modelClient.d.ts.map +1 -1
  108. package/dist/esm/modelClient.js +1 -1
  109. package/dist/esm/modelClient.js.map +1 -1
  110. package/dist/esm/models.d.ts +94 -12
  111. package/dist/esm/models.d.ts.map +1 -1
  112. package/dist/esm/models.js.map +1 -1
  113. package/dist/esm/outputModels.d.ts +26 -17
  114. package/dist/esm/outputModels.d.ts.map +1 -1
  115. package/dist/esm/outputModels.js.map +1 -1
  116. package/dist/esm/parameters.d.ts +15 -8
  117. package/dist/esm/parameters.d.ts.map +1 -1
  118. package/dist/esm/parameters.js.map +1 -1
  119. package/dist/esm/responses.d.ts +9 -2
  120. package/dist/esm/responses.d.ts.map +1 -1
  121. package/dist/esm/responses.js.map +1 -1
  122. package/dist/esm/tracingHelper.d.ts +8 -1
  123. package/dist/esm/tracingHelper.d.ts.map +1 -1
  124. package/dist/esm/tracingHelper.js +26 -26
  125. package/dist/esm/tracingHelper.js.map +1 -1
  126. package/dist/esm/tracingPolicy.d.ts +7 -0
  127. package/dist/esm/tracingPolicy.d.ts.map +1 -1
  128. package/dist/esm/tracingPolicy.js +2 -2
  129. package/dist/esm/tracingPolicy.js.map +1 -1
  130. package/dist/react-native/clientDefinitions.d.ts +14 -5
  131. package/dist/react-native/clientDefinitions.d.ts.map +1 -1
  132. package/dist/react-native/clientDefinitions.js.map +1 -1
  133. package/dist/react-native/constants.d.ts +7 -0
  134. package/dist/react-native/constants.d.ts.map +1 -1
  135. package/dist/react-native/constants.js +7 -0
  136. package/dist/react-native/constants.js.map +1 -1
  137. package/dist/react-native/index.d.ts +11 -3
  138. package/dist/react-native/index.d.ts.map +1 -1
  139. package/dist/react-native/index.js +10 -3
  140. package/dist/react-native/index.js.map +1 -1
  141. package/dist/react-native/isUnexpected.d.ts +8 -1
  142. package/dist/react-native/isUnexpected.d.ts.map +1 -1
  143. package/dist/react-native/isUnexpected.js +0 -4
  144. package/dist/react-native/isUnexpected.js.map +1 -1
  145. package/dist/react-native/logger.d.ts.map +1 -1
  146. package/dist/react-native/logger.js +7 -0
  147. package/dist/react-native/logger.js.map +1 -1
  148. package/dist/react-native/modelClient.d.ts +7 -0
  149. package/dist/react-native/modelClient.d.ts.map +1 -1
  150. package/dist/react-native/modelClient.js +1 -1
  151. package/dist/react-native/modelClient.js.map +1 -1
  152. package/dist/react-native/models.d.ts +94 -12
  153. package/dist/react-native/models.d.ts.map +1 -1
  154. package/dist/react-native/models.js.map +1 -1
  155. package/dist/react-native/outputModels.d.ts +26 -17
  156. package/dist/react-native/outputModels.d.ts.map +1 -1
  157. package/dist/react-native/outputModels.js.map +1 -1
  158. package/dist/react-native/parameters.d.ts +15 -8
  159. package/dist/react-native/parameters.d.ts.map +1 -1
  160. package/dist/react-native/parameters.js.map +1 -1
  161. package/dist/react-native/responses.d.ts +9 -2
  162. package/dist/react-native/responses.d.ts.map +1 -1
  163. package/dist/react-native/responses.js.map +1 -1
  164. package/dist/react-native/tracingHelper.d.ts +8 -1
  165. package/dist/react-native/tracingHelper.d.ts.map +1 -1
  166. package/dist/react-native/tracingHelper.js +26 -26
  167. package/dist/react-native/tracingHelper.js.map +1 -1
  168. package/dist/react-native/tracingPolicy.d.ts +7 -0
  169. package/dist/react-native/tracingPolicy.d.ts.map +1 -1
  170. package/dist/react-native/tracingPolicy.js +2 -2
  171. package/dist/react-native/tracingPolicy.js.map +1 -1
  172. package/package.json +30 -22
@@ -1 +1 @@
1
- {"version":3,"file":"tracingHelper.d.ts","sourceRoot":"","sources":["../../src/tracingHelper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAanE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AA0BnF,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,2BAA2B,CAEpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG5D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA6B7F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CA4BvF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKvE"}
1
+ {"version":3,"file":"tracingHelper.d.ts","sourceRoot":"","sources":["../../src/tracingHelper.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAavD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAmDnE,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,2BAA2B,CAEpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG5D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA0B7F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CA4BvF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKvE"}
@@ -1,8 +1,30 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  import { isError } from "@azure/core-util";
4
- const INFERENCE_GEN_AI_SYSTEM_NAME = "az.ai.inference";
5
- const isContentRecordingEnabled = () => envVarToBoolean("AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED");
4
+ /*
5
+ * Add event to span. Sample:
6
+ {
7
+ name: 'gen_ai.user.message',
8
+ attributes: {
9
+ 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',
10
+ 'gen_ai.event.content': `{"role":"user","content":"What's the weather like in Boston?"}`
11
+ },
12
+ time: [ 1725666879, 622695900 ],
13
+ droppedAttributesCount: 0
14
+ },
15
+ */
16
+ /*
17
+ * Add event to span. Sample:
18
+ {
19
+ name: 'gen_ai.choice',
20
+ attributes: {
21
+ 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',
22
+ 'gen_ai.event.content': '{"finish_reason":"tool_calls","index":0,"message":{"content":""}}'
23
+ },
24
+ time: [ 1725666881, 780608000 ],
25
+ droppedAttributesCount: 0
26
+ }
27
+ */
6
28
  var TracingAttributesEnum;
7
29
  (function (TracingAttributesEnum) {
8
30
  TracingAttributesEnum["Operation_Name"] = "gen_ai.operation.name";
@@ -23,6 +45,8 @@ var TracingAttributesEnum;
23
45
  TracingAttributesEnum["Usage_Output_Tokens"] = "gen_ai.usage.output_tokens";
24
46
  TracingAttributesEnum["Server_Address"] = "server.address";
25
47
  })(TracingAttributesEnum || (TracingAttributesEnum = {}));
48
+ const INFERENCE_GEN_AI_SYSTEM_NAME = "az.ai.inference";
49
+ const isContentRecordingEnabled = () => envVarToBoolean("AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED");
26
50
  export function getRequestBody(request) {
27
51
  return { body: JSON.parse(request.body) };
28
52
  }
@@ -89,18 +113,6 @@ export function tryProcessError(span, error) {
89
113
  error: isError(error) ? error : undefined,
90
114
  });
91
115
  }
92
- /*
93
- * Add event to span. Sample:
94
- {
95
- name: 'gen_ai.user.message',
96
- attributes: {
97
- 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',
98
- 'gen_ai.event.content': `{"role":"user","content":"What's the weather like in Boston?"}`
99
- },
100
- time: [ 1725666879, 622695900 ],
101
- droppedAttributesCount: 0
102
- },
103
- */
104
116
  function addRequestChatMessageEvent(span, messages) {
105
117
  messages.forEach((message) => {
106
118
  var _a;
@@ -140,18 +152,6 @@ function addRequestChatMessageEvent(span, messages) {
140
152
  }
141
153
  });
142
154
  }
143
- /*
144
- * Add event to span. Sample:
145
- {
146
- name: 'gen_ai.choice',
147
- attributes: {
148
- 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',
149
- 'gen_ai.event.content': '{"finish_reason":"tool_calls","index":0,"message":{"content":""}}'
150
- },
151
- time: [ 1725666881, 780608000 ],
152
- droppedAttributesCount: 0
153
- }
154
- */
155
155
  function addResponseChatMessageEvent(span, body) {
156
156
  var _a;
157
157
  if (!span.addEvent) {
@@ -1 +1 @@
1
- {"version":3,"file":"tracingHelper.js","sourceRoot":"","sources":["../../src/tracingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { TracingSpan } from \"@azure/core-tracing\";\nimport type { GetChatCompletionsBodyParam } from \"./parameters.js\";\nimport type {\n ChatRequestAssistantMessage,\n ChatRequestMessage,\n ChatRequestSystemMessage,\n ChatRequestToolMessage,\n} from \"./models.js\";\nimport type {\n ChatChoiceOutput,\n ChatCompletionsOutput,\n ChatCompletionsToolCallOutput,\n} from \"./outputModels.js\";\nimport { isError } from \"@azure/core-util\";\nimport type { PipelineRequest, PipelineResponse } from \"@azure/core-rest-pipeline\";\n\nconst INFERENCE_GEN_AI_SYSTEM_NAME = \"az.ai.inference\";\nconst isContentRecordingEnabled = () =>\n envVarToBoolean(\"AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED\");\n\nenum TracingAttributesEnum {\n Operation_Name = \"gen_ai.operation.name\",\n Request_Model = \"gen_ai.request.model\",\n System = \"gen_ai.system\",\n Error_Type = \"error.type\",\n Server_Port = \"server.port\",\n Request_Frequency_Penalty = \"gen_ai.request.frequency_penalty\",\n Request_Max_Tokens = \"gen_ai.request.max_tokens\",\n Request_Presence_Penalty = \"gen_ai.request.presence_penalty\",\n Request_Stop_Sequences = \"gen_ai.request.stop_sequences\",\n Request_Temperature = \"gen_ai.request.temperature\",\n Request_Top_P = \"gen_ai.request.top_p\",\n Response_Finish_Reasons = \"gen_ai.response.finish_reasons\",\n Response_Id = \"gen_ai.response.id\",\n Response_Model = \"gen_ai.response.model\",\n Usage_Input_Tokens = \"gen_ai.usage.input_tokens\",\n Usage_Output_Tokens = \"gen_ai.usage.output_tokens\",\n Server_Address = \"server.address\",\n}\n\nexport function getRequestBody(request: PipelineRequest): GetChatCompletionsBodyParam {\n return { body: JSON.parse(request.body as string) };\n}\n\nexport function getSpanName(request: PipelineRequest): string {\n const { body } = getRequestBody(request);\n return `chat ${body?.model ?? \"\"}`.trim();\n}\n\nexport function onStartTracing(span: TracingSpan, request: PipelineRequest, url: string): void {\n if (!span.isRecording()) {\n return;\n }\n\n const urlObj = new URL(url);\n const port = Number(urlObj.port) || (urlObj.protocol === \"https:\" ? undefined : 80);\n\n if (port) {\n span.setAttribute(TracingAttributesEnum.Server_Port, port);\n }\n span.setAttribute(TracingAttributesEnum.Server_Address, urlObj.hostname);\n span.setAttribute(TracingAttributesEnum.Operation_Name, \"chat\");\n span.setAttribute(TracingAttributesEnum.System, \"az.ai.inference\");\n\n const { body } = getRequestBody(request);\n if (!body) return;\n\n span.setAttribute(TracingAttributesEnum.Request_Model, body.model);\n span.setAttribute(TracingAttributesEnum.Request_Frequency_Penalty, body.frequency_penalty);\n span.setAttribute(TracingAttributesEnum.Request_Max_Tokens, body.max_tokens);\n span.setAttribute(TracingAttributesEnum.Request_Presence_Penalty, body.presence_penalty);\n span.setAttribute(TracingAttributesEnum.Request_Stop_Sequences, body.stop);\n span.setAttribute(TracingAttributesEnum.Request_Temperature, body.temperature);\n span.setAttribute(TracingAttributesEnum.Request_Top_P, body.top_p);\n\n if (body.messages) {\n addRequestChatMessageEvent(span, body.messages);\n }\n}\n\nexport function tryProcessResponse(span: TracingSpan, response?: PipelineResponse): void {\n if (!span.isRecording()) {\n return;\n }\n\n if (response?.bodyAsText) {\n const body: any = JSON.parse(response.bodyAsText);\n if (body.error ?? body.message) {\n span.setAttribute(TracingAttributesEnum.Error_Type, `${body.status ?? body.statusCode}`);\n span.setStatus({\n status: \"error\",\n error: body.error ?? body.message, // message is not in the schema of the response, but it can present if there is crediential error\n });\n }\n span.setAttribute(TracingAttributesEnum.Response_Id, body.id);\n span.setAttribute(TracingAttributesEnum.Response_Model, body.model);\n if (body.choices) {\n span.setAttribute(\n TracingAttributesEnum.Response_Finish_Reasons,\n body.choices.map((choice: ChatChoiceOutput) => choice.finish_reason).join(\",\"),\n );\n }\n if (body.usage) {\n span.setAttribute(TracingAttributesEnum.Usage_Input_Tokens, body.usage.prompt_tokens);\n span.setAttribute(TracingAttributesEnum.Usage_Output_Tokens, body.usage.completion_tokens);\n }\n addResponseChatMessageEvent(span, body);\n }\n}\n\nexport function tryProcessError(span: TracingSpan, error: unknown): void {\n span.setStatus({\n status: \"error\",\n error: isError(error) ? error : undefined,\n });\n}\n\n/*\n* Add event to span. Sample:\n {\n name: 'gen_ai.user.message',\n attributes: {\n 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',\n 'gen_ai.event.content': `{\"role\":\"user\",\"content\":\"What's the weather like in Boston?\"}` \n },\n time: [ 1725666879, 622695900 ],\n droppedAttributesCount: 0\n },\n*/\nfunction addRequestChatMessageEvent(span: TracingSpan, messages: Array<ChatRequestMessage>): void {\n messages.forEach((message: any) => {\n if (message.role) {\n const content: {\n content?: string;\n tool_calls?: Array<ChatCompletionsToolCallOutput>;\n id?: string;\n } = {};\n\n const chatMsg = message as ChatRequestSystemMessage;\n if (chatMsg.content) {\n content.content = chatMsg.content;\n }\n if (!isContentRecordingEnabled()) {\n content.content = \"\";\n }\n\n const assistantMsg = message as ChatRequestAssistantMessage;\n if (assistantMsg.tool_calls) {\n content.tool_calls = assistantMsg.tool_calls;\n if (!isContentRecordingEnabled()) {\n const toolCalls: Array<ChatCompletionsToolCallOutput> = JSON.parse(\n JSON.stringify(content.tool_calls),\n );\n toolCalls.forEach((toolCall) => {\n if (toolCall.function.arguments) {\n toolCall.function.arguments = \"\";\n }\n toolCall.function.name = \"\";\n });\n content.tool_calls = toolCalls;\n }\n }\n\n const toolMsg: ChatRequestToolMessage = message;\n if (toolMsg.tool_call_id) {\n content.id = toolMsg.tool_call_id;\n }\n\n span.addEvent?.(`gen_ai.${message.role}.message`, {\n attributes: {\n \"gen_ai.system\": INFERENCE_GEN_AI_SYSTEM_NAME,\n \"gen_ai.event.content\": JSON.stringify(content),\n },\n });\n }\n });\n}\n\n/*\n* Add event to span. Sample:\n{\n name: 'gen_ai.choice',\n attributes: {\n 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',\n 'gen_ai.event.content': '{\"finish_reason\":\"tool_calls\",\"index\":0,\"message\":{\"content\":\"\"}}'\n },\n time: [ 1725666881, 780608000 ],\n droppedAttributesCount: 0\n} \n*/\nfunction addResponseChatMessageEvent(span: TracingSpan, body: ChatCompletionsOutput): void {\n if (!span.addEvent) {\n return;\n }\n\n body?.choices?.forEach((choice: ChatChoiceOutput) => {\n let message: { content?: string; toolCalls?: Array<ChatCompletionsToolCallOutput> } = {};\n\n if (choice.message.content) {\n message.content = choice.message.content;\n }\n if (choice.message.tool_calls) {\n message.toolCalls = choice.message.tool_calls;\n }\n\n if (!isContentRecordingEnabled()) {\n message = JSON.parse(JSON.stringify(message));\n message.content = \"\";\n if (message.toolCalls) {\n message.toolCalls.forEach((toolCall) => {\n if (toolCall.function.arguments) {\n toolCall.function.arguments = \"\";\n }\n toolCall.function.name = \"\";\n });\n }\n }\n\n const response = {\n finish_reason: choice.finish_reason,\n index: choice.index,\n message,\n };\n const attributes = {\n \"gen_ai.system\": INFERENCE_GEN_AI_SYSTEM_NAME,\n \"gen_ai.event.content\": JSON.stringify(response),\n };\n\n span.addEvent?.(\"gen_ai.choice\", { attributes });\n });\n}\n\nfunction envVarToBoolean(key: string): boolean {\n const value = process.env[key] ?? process.env[key.toLowerCase()];\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n"]}
1
+ {"version":3,"file":"tracingHelper.js","sourceRoot":"","sources":["../../src/tracingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * THIS IS AN AUTO-GENERATED FILE - DO NOT EDIT!\n *\n * Any changes you make here may be lost.\n *\n * If you need to make changes, please do so in the original source file, \\{project-root\\}/sources/custom\n */\n\nimport type { PipelineRequest, PipelineResponse } from \"@azure/core-rest-pipeline\";\nimport type { TracingSpan } from \"@azure/core-tracing\";\nimport { isError } from \"@azure/core-util\";\nimport type {\n ChatRequestAssistantMessage,\n ChatRequestMessage,\n ChatRequestSystemMessage,\n ChatRequestToolMessage,\n} from \"./models.js\";\nimport type {\n ChatChoiceOutput,\n ChatCompletionsOutput,\n ChatCompletionsToolCallOutput,\n} from \"./outputModels.js\";\nimport type { GetChatCompletionsBodyParam } from \"./parameters.js\";\n/*\n* Add event to span. Sample:\n {\n name: 'gen_ai.user.message',\n attributes: {\n 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',\n 'gen_ai.event.content': `{\"role\":\"user\",\"content\":\"What's the weather like in Boston?\"}` \n },\n time: [ 1725666879, 622695900 ],\n droppedAttributesCount: 0\n },\n*/\n/*\n* Add event to span. Sample:\n{\n name: 'gen_ai.choice',\n attributes: {\n 'gen_ai.system': 'INFERENCE_GEN_AI_SYSTEM_NAME',\n 'gen_ai.event.content': '{\"finish_reason\":\"tool_calls\",\"index\":0,\"message\":{\"content\":\"\"}}'\n },\n time: [ 1725666881, 780608000 ],\n droppedAttributesCount: 0\n} \n*/\n\nenum TracingAttributesEnum {\n Operation_Name = \"gen_ai.operation.name\",\n Request_Model = \"gen_ai.request.model\",\n System = \"gen_ai.system\",\n Error_Type = \"error.type\",\n Server_Port = \"server.port\",\n Request_Frequency_Penalty = \"gen_ai.request.frequency_penalty\",\n Request_Max_Tokens = \"gen_ai.request.max_tokens\",\n Request_Presence_Penalty = \"gen_ai.request.presence_penalty\",\n Request_Stop_Sequences = \"gen_ai.request.stop_sequences\",\n Request_Temperature = \"gen_ai.request.temperature\",\n Request_Top_P = \"gen_ai.request.top_p\",\n Response_Finish_Reasons = \"gen_ai.response.finish_reasons\",\n Response_Id = \"gen_ai.response.id\",\n Response_Model = \"gen_ai.response.model\",\n Usage_Input_Tokens = \"gen_ai.usage.input_tokens\",\n Usage_Output_Tokens = \"gen_ai.usage.output_tokens\",\n Server_Address = \"server.address\",\n}\n\nconst INFERENCE_GEN_AI_SYSTEM_NAME = \"az.ai.inference\";\n\nconst isContentRecordingEnabled = (): boolean =>\n envVarToBoolean(\"AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED\");\n\nexport function getRequestBody(request: PipelineRequest): GetChatCompletionsBodyParam {\n return { body: JSON.parse(request.body as string) };\n}\n\nexport function getSpanName(request: PipelineRequest): string {\n const { body } = getRequestBody(request);\n return `chat ${body?.model ?? \"\"}`.trim();\n}\n\nexport function onStartTracing(span: TracingSpan, request: PipelineRequest, url: string): void {\n if (!span.isRecording()) {\n return;\n }\n\n const urlObj = new URL(url);\n const port = Number(urlObj.port) || (urlObj.protocol === \"https:\" ? undefined : 80);\n if (port) {\n span.setAttribute(TracingAttributesEnum.Server_Port, port);\n }\n\n span.setAttribute(TracingAttributesEnum.Server_Address, urlObj.hostname);\n span.setAttribute(TracingAttributesEnum.Operation_Name, \"chat\");\n span.setAttribute(TracingAttributesEnum.System, \"az.ai.inference\");\n const { body } = getRequestBody(request);\n if (!body) return;\n span.setAttribute(TracingAttributesEnum.Request_Model, body.model);\n span.setAttribute(TracingAttributesEnum.Request_Frequency_Penalty, body.frequency_penalty);\n span.setAttribute(TracingAttributesEnum.Request_Max_Tokens, body.max_tokens);\n span.setAttribute(TracingAttributesEnum.Request_Presence_Penalty, body.presence_penalty);\n span.setAttribute(TracingAttributesEnum.Request_Stop_Sequences, body.stop);\n span.setAttribute(TracingAttributesEnum.Request_Temperature, body.temperature);\n span.setAttribute(TracingAttributesEnum.Request_Top_P, body.top_p);\n if (body.messages) {\n addRequestChatMessageEvent(span, body.messages);\n }\n}\n\nexport function tryProcessResponse(span: TracingSpan, response?: PipelineResponse): void {\n if (!span.isRecording()) {\n return;\n }\n\n if (response?.bodyAsText) {\n const body: any = JSON.parse(response.bodyAsText);\n if (body.error ?? body.message) {\n span.setAttribute(TracingAttributesEnum.Error_Type, `${body.status ?? body.statusCode}`);\n span.setStatus({\n status: \"error\",\n error: body.error ?? body.message, // message is not in the schema of the response, but it can present if there is crediential error\n });\n }\n span.setAttribute(TracingAttributesEnum.Response_Id, body.id);\n span.setAttribute(TracingAttributesEnum.Response_Model, body.model);\n if (body.choices) {\n span.setAttribute(\n TracingAttributesEnum.Response_Finish_Reasons,\n body.choices.map((choice: ChatChoiceOutput) => choice.finish_reason).join(\",\"),\n );\n }\n if (body.usage) {\n span.setAttribute(TracingAttributesEnum.Usage_Input_Tokens, body.usage.prompt_tokens);\n span.setAttribute(TracingAttributesEnum.Usage_Output_Tokens, body.usage.completion_tokens);\n }\n addResponseChatMessageEvent(span, body);\n }\n}\n\nexport function tryProcessError(span: TracingSpan, error: unknown): void {\n span.setStatus({\n status: \"error\",\n error: isError(error) ? error : undefined,\n });\n}\n\nfunction addRequestChatMessageEvent(span: TracingSpan, messages: Array<ChatRequestMessage>): void {\n messages.forEach((message: any) => {\n if (message.role) {\n const content: {\n content?: string;\n tool_calls?: Array<ChatCompletionsToolCallOutput>;\n id?: string;\n } = {};\n\n const chatMsg = message as ChatRequestSystemMessage;\n if (chatMsg.content) {\n content.content = chatMsg.content;\n }\n if (!isContentRecordingEnabled()) {\n content.content = \"\";\n }\n\n const assistantMsg = message as ChatRequestAssistantMessage;\n if (assistantMsg.tool_calls) {\n content.tool_calls = assistantMsg.tool_calls;\n if (!isContentRecordingEnabled()) {\n const toolCalls: Array<ChatCompletionsToolCallOutput> = JSON.parse(\n JSON.stringify(content.tool_calls),\n );\n toolCalls.forEach((toolCall) => {\n if (toolCall.function.arguments) {\n toolCall.function.arguments = \"\";\n }\n toolCall.function.name = \"\";\n });\n content.tool_calls = toolCalls;\n }\n }\n\n const toolMsg: ChatRequestToolMessage = message;\n if (toolMsg.tool_call_id) {\n content.id = toolMsg.tool_call_id;\n }\n\n span.addEvent?.(`gen_ai.${message.role}.message`, {\n attributes: {\n \"gen_ai.system\": INFERENCE_GEN_AI_SYSTEM_NAME,\n \"gen_ai.event.content\": JSON.stringify(content),\n },\n });\n }\n });\n}\n\nfunction addResponseChatMessageEvent(span: TracingSpan, body: ChatCompletionsOutput): void {\n if (!span.addEvent) {\n return;\n }\n\n body?.choices?.forEach((choice: ChatChoiceOutput) => {\n let message: { content?: string; toolCalls?: Array<ChatCompletionsToolCallOutput> } = {};\n\n if (choice.message.content) {\n message.content = choice.message.content;\n }\n if (choice.message.tool_calls) {\n message.toolCalls = choice.message.tool_calls;\n }\n\n if (!isContentRecordingEnabled()) {\n message = JSON.parse(JSON.stringify(message));\n message.content = \"\";\n if (message.toolCalls) {\n message.toolCalls.forEach((toolCall) => {\n if (toolCall.function.arguments) {\n toolCall.function.arguments = \"\";\n }\n toolCall.function.name = \"\";\n });\n }\n }\n\n const response = {\n finish_reason: choice.finish_reason,\n index: choice.index,\n message,\n };\n const attributes = {\n \"gen_ai.system\": INFERENCE_GEN_AI_SYSTEM_NAME,\n \"gen_ai.event.content\": JSON.stringify(response),\n };\n\n span.addEvent?.(\"gen_ai.choice\", { attributes });\n });\n}\n\nfunction envVarToBoolean(key: string): boolean {\n const value = process.env[key] ?? process.env[key.toLowerCase()];\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n"]}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * THIS IS AN AUTO-GENERATED FILE - DO NOT EDIT!
3
+ *
4
+ * Any changes you make here may be lost.
5
+ *
6
+ * If you need to make changes, please do so in the original source file, \{project-root\}/sources/custom
7
+ */
1
8
  import type { PipelinePolicy } from "@azure/core-rest-pipeline";
2
9
  /**
3
10
  * The programmatic identifier of the tracingPolicy.
@@ -1 +1 @@
1
- {"version":3,"file":"tracingPolicy.d.ts","sourceRoot":"","sources":["../../src/tracingPolicy.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,2BAA2B,CAAC;AAGnC;;GAEG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAyC9C"}
1
+ {"version":3,"file":"tracingPolicy.d.ts","sourceRoot":"","sources":["../../src/tracingPolicy.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,2BAA2B,CAAC;AAkBnC;;GAEG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAwC9C"}
@@ -1,10 +1,10 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  import { createTracingClient, } from "@azure/core-tracing";
4
- import { logger } from "./logger.js";
5
4
  import { getErrorMessage } from "@azure/core-util";
6
- import { tryProcessResponse, onStartTracing, tryProcessError, getSpanName, getRequestBody, } from "./tracingHelper.js";
7
5
  import { SDK_VERSION } from "./constants.js";
6
+ import { logger } from "./logger.js";
7
+ import { getRequestBody, getSpanName, onStartTracing, tryProcessError, tryProcessResponse, } from "./tracingHelper.js";
8
8
  /**
9
9
  * The programmatic identifier of the tracingPolicy.
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tracingPolicy.js","sourceRoot":"","sources":["../../src/tracingPolicy.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAIL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,SAAS,EAAE,6BAA6B;QACxC,WAAW,EAAE,0BAA0B;QACvC,cAAc,EAAE,WAAW;KAC5B,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;;YAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IACE,CAAC,aAAa;gBACd,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;iBACvC,MAAA,MAAA,cAAc,CAAC,OAAO,CAAC,0CAAE,IAAI,0CAAE,MAAM,CAAA,EACrC,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAA,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,mCAAI,EAAE,CAAC;YAE7E,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,CAAC;gBACH,MAAA,OAAO,CAAC,cAAc,oCAAtB,OAAO,CAAC,cAAc,GAAK,EAAE,EAAC;gBAC9B,OAAO,CAAC,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC;gBAEvD,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChF,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACnC,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3B,MAAM,GAAG,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,aAA4B,EAC5B,OAAwB;IAExB,IAAI,CAAC;QACH,oFAAoF;QACpF,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC,SAAS,CACtD,WAAW,CAAC,OAAO,CAAC,EACpB,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,EAC1C;YACE,QAAQ,EAAE,QAAQ;SACnB,CACF,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;IAChF,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,qDAAqD,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n type TracingClient,\n type TracingContext,\n type TracingSpan,\n createTracingClient,\n} from \"@azure/core-tracing\";\nimport { logger } from \"./logger.js\";\nimport { getErrorMessage } from \"@azure/core-util\";\nimport {\n tryProcessResponse,\n onStartTracing,\n tryProcessError,\n getSpanName,\n getRequestBody,\n} from \"./tracingHelper.js\";\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { SDK_VERSION } from \"./constants.js\";\n\n/**\n * The programmatic identifier of the tracingPolicy.\n */\nexport const tracingPolicyName = \"inferenceTracingPolicy\";\n\n/**\n * A simple policy to create OpenTelemetry Spans for each request made by the pipeline\n * that has SpanOptions with a parent.\n * Requests made without a parent Span will not be recorded.\n */\nexport function tracingPolicy(): PipelinePolicy {\n const tracingClient = createTracingClient({\n namespace: \"Microsoft.CognitiveServices\",\n packageName: \"@azure/ai-inference-rest\",\n packageVersion: SDK_VERSION,\n });\n\n return {\n name: tracingPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const url = new URL(request.url);\n if (\n !tracingClient ||\n !url.href.endsWith(\"/chat/completions\") ||\n getRequestBody(request)?.body?.stream\n ) {\n return next(request);\n }\n\n const { span, tracingContext } = tryCreateSpan(tracingClient, request) ?? {};\n\n if (!span || !tracingContext) {\n return next(request);\n }\n\n try {\n request.tracingOptions ??= {};\n request.tracingOptions.tracingContext = tracingContext;\n\n onStartTracing(span, request, request.url);\n const response = await tracingClient.withContext(tracingContext, next, request);\n tryProcessResponse(span, response);\n return response;\n } catch (err: any) {\n tryProcessError(span, err);\n throw err;\n } finally {\n span.end();\n }\n },\n };\n}\n\nfunction tryCreateSpan(\n tracingClient: TracingClient,\n request: PipelineRequest,\n): { span: TracingSpan; tracingContext: TracingContext } | undefined {\n try {\n // As per spec, we do not need to differentiate between HTTP and HTTPS in span name.\n const { span, updatedOptions } = tracingClient.startSpan(\n getSpanName(request),\n { tracingOptions: request.tracingOptions },\n {\n spanKind: \"client\",\n },\n );\n\n return { span, tracingContext: updatedOptions.tracingOptions.tracingContext };\n } catch (e: any) {\n logger.warning(`Skipping creating a tracing span due to an error: ${getErrorMessage(e)}`);\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"tracingPolicy.js","sourceRoot":"","sources":["../../src/tracingPolicy.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAgBlC,OAAO,EAIL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,SAAS,EAAE,6BAA6B;QACxC,WAAW,EAAE,0BAA0B;QACvC,cAAc,EAAE,WAAW;KAC5B,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;;YAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IACE,CAAC,aAAa;gBACd,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;iBACvC,MAAA,MAAA,cAAc,CAAC,OAAO,CAAC,0CAAE,IAAI,0CAAE,MAAM,CAAA,EACrC,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAA,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,mCAAI,EAAE,CAAC;YAE7E,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,CAAC;gBACH,MAAA,OAAO,CAAC,cAAc,oCAAtB,OAAO,CAAC,cAAc,GAAK,EAAE,EAAC;gBAC9B,OAAO,CAAC,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC;gBAEvD,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChF,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACnC,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3B,MAAM,GAAG,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,aAA4B,EAC5B,OAAwB;IAExB,IAAI,CAAC;QACH,oFAAoF;QACpF,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC,SAAS,CACtD,WAAW,CAAC,OAAO,CAAC,EACpB,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,EAC1C;YACE,QAAQ,EAAE,QAAQ;SACnB,CACF,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;IAChF,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,qDAAqD,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * THIS IS AN AUTO-GENERATED FILE - DO NOT EDIT!\n *\n * Any changes you make here may be lost.\n *\n * If you need to make changes, please do so in the original source file, \\{project-root\\}/sources/custom\n */\n\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport {\n type TracingClient,\n type TracingContext,\n type TracingSpan,\n createTracingClient,\n} from \"@azure/core-tracing\";\nimport { getErrorMessage } from \"@azure/core-util\";\nimport { SDK_VERSION } from \"./constants.js\";\nimport { logger } from \"./logger.js\";\nimport {\n getRequestBody,\n getSpanName,\n onStartTracing,\n tryProcessError,\n tryProcessResponse,\n} from \"./tracingHelper.js\";\n\n/**\n * The programmatic identifier of the tracingPolicy.\n */\nexport const tracingPolicyName = \"inferenceTracingPolicy\";\n\n/**\n * A simple policy to create OpenTelemetry Spans for each request made by the pipeline\n * that has SpanOptions with a parent.\n * Requests made without a parent Span will not be recorded.\n */\nexport function tracingPolicy(): PipelinePolicy {\n const tracingClient = createTracingClient({\n namespace: \"Microsoft.CognitiveServices\",\n packageName: \"@azure/ai-inference-rest\",\n packageVersion: SDK_VERSION,\n });\n return {\n name: tracingPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const url = new URL(request.url);\n if (\n !tracingClient ||\n !url.href.endsWith(\"/chat/completions\") ||\n getRequestBody(request)?.body?.stream\n ) {\n return next(request);\n }\n\n const { span, tracingContext } = tryCreateSpan(tracingClient, request) ?? {};\n\n if (!span || !tracingContext) {\n return next(request);\n }\n\n try {\n request.tracingOptions ??= {};\n request.tracingOptions.tracingContext = tracingContext;\n\n onStartTracing(span, request, request.url);\n const response = await tracingClient.withContext(tracingContext, next, request);\n tryProcessResponse(span, response);\n return response;\n } catch (err: any) {\n tryProcessError(span, err);\n throw err;\n } finally {\n span.end();\n }\n },\n };\n}\n\nfunction tryCreateSpan(\n tracingClient: TracingClient,\n request: PipelineRequest,\n): { span: TracingSpan; tracingContext: TracingContext } | undefined {\n try {\n // As per spec, we do not need to differentiate between HTTP and HTTPS in span name.\n const { span, updatedOptions } = tracingClient.startSpan(\n getSpanName(request),\n { tracingOptions: request.tracingOptions },\n {\n spanKind: \"client\",\n },\n );\n\n return { span, tracingContext: updatedOptions.tracingOptions.tracingContext };\n } catch (e: any) {\n logger.warning(`Skipping creating a tracing span due to an error: ${getErrorMessage(e)}`);\n return undefined;\n }\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-rest/ai-inference",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.6",
4
4
  "description": "Inference API for Azure-supported AI models",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",
@@ -26,6 +26,7 @@
26
26
  "main": "./dist/commonjs/index.js",
27
27
  "types": "./dist/commonjs/index.d.ts",
28
28
  "tshy": {
29
+ "project": "./tsconfig.src.json",
29
30
  "exports": {
30
31
  "./package.json": "./package.json",
31
32
  ".": "./src/index.ts"
@@ -78,42 +79,47 @@
78
79
  },
79
80
  "dependencies": {
80
81
  "@azure-rest/core-client": "^2.1.0",
81
- "@azure/abort-controller": "^1.0.0",
82
- "@azure/core-auth": "^1.7.2",
83
- "@azure/core-lro": "^2.6.0",
84
- "@azure/core-rest-pipeline": "^1.14.0",
82
+ "@azure/abort-controller": "^2.1.2",
83
+ "@azure/core-auth": "^1.9.0",
84
+ "@azure/core-lro": "^2.7.2",
85
+ "@azure/core-rest-pipeline": "^1.18.2",
85
86
  "@azure/core-tracing": "^1.2.0",
86
- "@azure/logger": "^1.0.0",
87
- "tslib": "^2.6.2"
87
+ "@azure/logger": "^1.1.4",
88
+ "tslib": "^2.8.1"
88
89
  },
89
90
  "devDependencies": {
90
91
  "@azure-tools/test-credential": "^2.0.0",
91
- "@azure-tools/test-recorder": "^4.0.0",
92
+ "@azure-tools/test-recorder": "^4.1.0",
93
+ "@azure-tools/test-utils-vitest": "^1.0.0",
92
94
  "@azure/core-sse": "^2.1.3",
93
- "@azure/core-util": "^1.9.0",
95
+ "@azure/core-util": "^1.11.0",
94
96
  "@azure/dev-tool": "^1.0.0",
95
97
  "@azure/eslint-plugin-azure-sdk": "^3.0.0",
96
- "@azure/identity": "^4.3.0",
98
+ "@azure/identity": "^4.6.0",
99
+ "@azure/monitor-opentelemetry-exporter": "1.0.0-beta.29",
100
+ "@azure/opentelemetry-instrumentation-azure-sdk": "1.0.0-beta.7",
97
101
  "@opentelemetry/api": "^1.9.0",
102
+ "@opentelemetry/instrumentation": "^0.57.1",
103
+ "@opentelemetry/sdk-trace-node": "^1.30.1",
98
104
  "@types/node": "^18.0.0",
99
- "@vitest/browser": "^2.0.5",
100
- "@vitest/coverage-istanbul": "^2.0.5",
105
+ "@vitest/browser": "^3.0.9",
106
+ "@vitest/coverage-istanbul": "^3.0.9",
101
107
  "autorest": "latest",
102
108
  "dotenv": "^16.4.5",
103
109
  "eslint": "^9.9.0",
104
- "playwright": "^1.41.2",
105
- "source-map-support": "^0.5.9",
106
- "typescript": "~5.6.2",
107
- "vitest": "^2.0.5"
110
+ "playwright": "^1.50.1",
111
+ "typescript": "~5.8.2",
112
+ "vitest": "^3.0.9"
108
113
  },
109
114
  "scripts": {
110
- "build": "npm run clean && dev-tool run build-package && dev-tool run vendored mkdirp ./review && dev-tool run extract-api",
115
+ "build": "npm run clean && dev-tool run build-package && dev-tool run extract-api",
111
116
  "build:samples": "echo Obsolete",
112
117
  "build:test": "npm run clean && dev-tool run build-package && dev-tool run build-test",
113
118
  "check-format": "echo skipped",
114
119
  "clean": "dev-tool run vendored rimraf --glob dist dist-* test-dist temp types *.tgz *.log",
120
+ "customize": "dev-tool customization apply -s ./generated -c ./src && npm run format",
115
121
  "execute:samples": "dev-tool samples run samples-dev",
116
- "extract-api": "dev-tool run vendored rimraf review && dev-tool run vendored mkdirp ./review && dev-tool run extract-api",
122
+ "extract-api": "dev-tool run vendored rimraf review && dev-tool run extract-api",
117
123
  "format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
118
124
  "generate": "dev-tool run vendored rimraf ./src/generated && dev-tool run vendored mkdirp ./src/generated && cp tsp-location.yaml ./src/generated && tsp-client update -o ./src/generated && dev-tool run vendored rimraf ./src/generated/tsp-location.yaml",
119
125
  "integration-test": "npm run integration-test:node && npm run integration-test:browser",
@@ -126,9 +132,9 @@
126
132
  "test:browser": "npm run clean && npm run unit-test:browser && npm run integration-test:browser",
127
133
  "test:node": "npm run clean && dev-tool run build-package && npm run unit-test:node && npm run integration-test:node",
128
134
  "unit-test": "npm run unit-test:node && npm run unit-test:browser",
129
- "unit-test:browser": "npm run clean && dev-tool run build-test && dev-tool run test:vitest --browser --hookTimeout=50000",
130
- "unit-test:node": "dev-tool run test:vitest --hookTimeout=50000",
131
- "update-snippets": "echo skipped"
135
+ "unit-test:browser": "npm run clean && dev-tool run build-package && dev-tool run build-test && dev-tool run test:vitest --browser",
136
+ "unit-test:node": "dev-tool run test:vitest",
137
+ "update-snippets": "dev-tool run update-snippets"
132
138
  },
133
139
  "//sampleConfiguration": {
134
140
  "productName": "Azure AI Inference",
@@ -137,5 +143,7 @@
137
143
  ],
138
144
  "apiRefLink": "https://learn.microsoft.com/javascript/api/@azure-rest/ai-inference"
139
145
  },
140
- "module": "./dist/esm/index.js"
146
+ "module": "./dist/esm/index.js",
147
+ "browser": "./dist/browser/index.js",
148
+ "react-native": "./dist/react-native/index.js"
141
149
  }