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

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 (179) hide show
  1. package/README.md +83 -4
  2. package/dist/browser/clientDefinitions.d.ts +3 -3
  3. package/dist/browser/clientDefinitions.d.ts.map +1 -1
  4. package/dist/browser/clientDefinitions.js +1 -1
  5. package/dist/browser/clientDefinitions.js.map +1 -1
  6. package/dist/browser/constants.d.ts +2 -0
  7. package/dist/browser/constants.d.ts.map +1 -0
  8. package/dist/browser/constants.js +4 -0
  9. package/dist/browser/constants.js.map +1 -0
  10. package/dist/browser/index.js +1 -1
  11. package/dist/browser/index.js.map +1 -1
  12. package/dist/browser/isUnexpected.d.ts +1 -1
  13. package/dist/browser/isUnexpected.d.ts.map +1 -1
  14. package/dist/browser/isUnexpected.js +2 -3
  15. package/dist/browser/isUnexpected.js.map +1 -1
  16. package/dist/browser/logger.js +1 -1
  17. package/dist/browser/logger.js.map +1 -1
  18. package/dist/browser/modelClient.d.ts +3 -3
  19. package/dist/browser/modelClient.d.ts.map +1 -1
  20. package/dist/browser/modelClient.js +10 -3
  21. package/dist/browser/modelClient.js.map +1 -1
  22. package/dist/browser/models.d.ts +36 -35
  23. package/dist/browser/models.d.ts.map +1 -1
  24. package/dist/browser/models.js +1 -1
  25. package/dist/browser/models.js.map +1 -1
  26. package/dist/browser/outputModels.d.ts +17 -26
  27. package/dist/browser/outputModels.d.ts.map +1 -1
  28. package/dist/browser/outputModels.js +1 -1
  29. package/dist/browser/outputModels.js.map +1 -1
  30. package/dist/browser/parameters.d.ts +9 -3
  31. package/dist/browser/parameters.d.ts.map +1 -1
  32. package/dist/browser/parameters.js +1 -1
  33. package/dist/browser/parameters.js.map +1 -1
  34. package/dist/browser/responses.d.ts +3 -3
  35. package/dist/browser/responses.d.ts.map +1 -1
  36. package/dist/browser/responses.js +1 -1
  37. package/dist/browser/responses.js.map +1 -1
  38. package/dist/browser/tracingHelper.d.ts +9 -0
  39. package/dist/browser/tracingHelper.d.ts.map +1 -0
  40. package/dist/browser/tracingHelper.js +198 -0
  41. package/dist/browser/tracingHelper.js.map +1 -0
  42. package/dist/browser/tracingPolicy.d.ts +12 -0
  43. package/dist/browser/tracingPolicy.d.ts.map +1 -0
  44. package/dist/browser/tracingPolicy.js +68 -0
  45. package/dist/browser/tracingPolicy.js.map +1 -0
  46. package/dist/commonjs/clientDefinitions.d.ts +3 -3
  47. package/dist/commonjs/clientDefinitions.d.ts.map +1 -1
  48. package/dist/commonjs/clientDefinitions.js +1 -1
  49. package/dist/commonjs/clientDefinitions.js.map +1 -1
  50. package/dist/commonjs/constants.d.ts +2 -0
  51. package/dist/commonjs/constants.d.ts.map +1 -0
  52. package/dist/commonjs/constants.js +7 -0
  53. package/dist/commonjs/constants.js.map +1 -0
  54. package/dist/commonjs/index.js +1 -1
  55. package/dist/commonjs/index.js.map +1 -1
  56. package/dist/commonjs/isUnexpected.d.ts +1 -1
  57. package/dist/commonjs/isUnexpected.d.ts.map +1 -1
  58. package/dist/commonjs/isUnexpected.js +2 -3
  59. package/dist/commonjs/isUnexpected.js.map +1 -1
  60. package/dist/commonjs/logger.js +1 -1
  61. package/dist/commonjs/logger.js.map +1 -1
  62. package/dist/commonjs/modelClient.d.ts +3 -3
  63. package/dist/commonjs/modelClient.d.ts.map +1 -1
  64. package/dist/commonjs/modelClient.js +9 -2
  65. package/dist/commonjs/modelClient.js.map +1 -1
  66. package/dist/commonjs/models.d.ts +36 -35
  67. package/dist/commonjs/models.d.ts.map +1 -1
  68. package/dist/commonjs/models.js +1 -1
  69. package/dist/commonjs/models.js.map +1 -1
  70. package/dist/commonjs/outputModels.d.ts +17 -26
  71. package/dist/commonjs/outputModels.d.ts.map +1 -1
  72. package/dist/commonjs/outputModels.js +1 -1
  73. package/dist/commonjs/outputModels.js.map +1 -1
  74. package/dist/commonjs/parameters.d.ts +9 -3
  75. package/dist/commonjs/parameters.d.ts.map +1 -1
  76. package/dist/commonjs/parameters.js +1 -1
  77. package/dist/commonjs/parameters.js.map +1 -1
  78. package/dist/commonjs/responses.d.ts +3 -3
  79. package/dist/commonjs/responses.d.ts.map +1 -1
  80. package/dist/commonjs/responses.js +1 -1
  81. package/dist/commonjs/responses.js.map +1 -1
  82. package/dist/commonjs/tracingHelper.d.ts +9 -0
  83. package/dist/commonjs/tracingHelper.d.ts.map +1 -0
  84. package/dist/commonjs/tracingHelper.js +205 -0
  85. package/dist/commonjs/tracingHelper.js.map +1 -0
  86. package/dist/commonjs/tracingPolicy.d.ts +12 -0
  87. package/dist/commonjs/tracingPolicy.d.ts.map +1 -0
  88. package/dist/commonjs/tracingPolicy.js +72 -0
  89. package/dist/commonjs/tracingPolicy.js.map +1 -0
  90. package/dist/commonjs/tsdoc-metadata.json +1 -1
  91. package/dist/esm/clientDefinitions.d.ts +3 -3
  92. package/dist/esm/clientDefinitions.d.ts.map +1 -1
  93. package/dist/esm/clientDefinitions.js +1 -1
  94. package/dist/esm/clientDefinitions.js.map +1 -1
  95. package/dist/esm/constants.d.ts +2 -0
  96. package/dist/esm/constants.d.ts.map +1 -0
  97. package/dist/esm/constants.js +4 -0
  98. package/dist/esm/constants.js.map +1 -0
  99. package/dist/esm/index.js +1 -1
  100. package/dist/esm/index.js.map +1 -1
  101. package/dist/esm/isUnexpected.d.ts +1 -1
  102. package/dist/esm/isUnexpected.d.ts.map +1 -1
  103. package/dist/esm/isUnexpected.js +2 -3
  104. package/dist/esm/isUnexpected.js.map +1 -1
  105. package/dist/esm/logger.js +1 -1
  106. package/dist/esm/logger.js.map +1 -1
  107. package/dist/esm/modelClient.d.ts +3 -3
  108. package/dist/esm/modelClient.d.ts.map +1 -1
  109. package/dist/esm/modelClient.js +10 -3
  110. package/dist/esm/modelClient.js.map +1 -1
  111. package/dist/esm/models.d.ts +36 -35
  112. package/dist/esm/models.d.ts.map +1 -1
  113. package/dist/esm/models.js +1 -1
  114. package/dist/esm/models.js.map +1 -1
  115. package/dist/esm/outputModels.d.ts +17 -26
  116. package/dist/esm/outputModels.d.ts.map +1 -1
  117. package/dist/esm/outputModels.js +1 -1
  118. package/dist/esm/outputModels.js.map +1 -1
  119. package/dist/esm/parameters.d.ts +9 -3
  120. package/dist/esm/parameters.d.ts.map +1 -1
  121. package/dist/esm/parameters.js +1 -1
  122. package/dist/esm/parameters.js.map +1 -1
  123. package/dist/esm/responses.d.ts +3 -3
  124. package/dist/esm/responses.d.ts.map +1 -1
  125. package/dist/esm/responses.js +1 -1
  126. package/dist/esm/responses.js.map +1 -1
  127. package/dist/esm/tracingHelper.d.ts +9 -0
  128. package/dist/esm/tracingHelper.d.ts.map +1 -0
  129. package/dist/esm/tracingHelper.js +198 -0
  130. package/dist/esm/tracingHelper.js.map +1 -0
  131. package/dist/esm/tracingPolicy.d.ts +12 -0
  132. package/dist/esm/tracingPolicy.d.ts.map +1 -0
  133. package/dist/esm/tracingPolicy.js +68 -0
  134. package/dist/esm/tracingPolicy.js.map +1 -0
  135. package/dist/react-native/clientDefinitions.d.ts +3 -3
  136. package/dist/react-native/clientDefinitions.d.ts.map +1 -1
  137. package/dist/react-native/clientDefinitions.js +1 -1
  138. package/dist/react-native/clientDefinitions.js.map +1 -1
  139. package/dist/react-native/constants.d.ts +2 -0
  140. package/dist/react-native/constants.d.ts.map +1 -0
  141. package/dist/react-native/constants.js +4 -0
  142. package/dist/react-native/constants.js.map +1 -0
  143. package/dist/react-native/index.js +1 -1
  144. package/dist/react-native/index.js.map +1 -1
  145. package/dist/react-native/isUnexpected.d.ts +1 -1
  146. package/dist/react-native/isUnexpected.d.ts.map +1 -1
  147. package/dist/react-native/isUnexpected.js +2 -3
  148. package/dist/react-native/isUnexpected.js.map +1 -1
  149. package/dist/react-native/logger.js +1 -1
  150. package/dist/react-native/logger.js.map +1 -1
  151. package/dist/react-native/modelClient.d.ts +3 -3
  152. package/dist/react-native/modelClient.d.ts.map +1 -1
  153. package/dist/react-native/modelClient.js +10 -3
  154. package/dist/react-native/modelClient.js.map +1 -1
  155. package/dist/react-native/models.d.ts +36 -35
  156. package/dist/react-native/models.d.ts.map +1 -1
  157. package/dist/react-native/models.js +1 -1
  158. package/dist/react-native/models.js.map +1 -1
  159. package/dist/react-native/outputModels.d.ts +17 -26
  160. package/dist/react-native/outputModels.d.ts.map +1 -1
  161. package/dist/react-native/outputModels.js +1 -1
  162. package/dist/react-native/outputModels.js.map +1 -1
  163. package/dist/react-native/parameters.d.ts +9 -3
  164. package/dist/react-native/parameters.d.ts.map +1 -1
  165. package/dist/react-native/parameters.js +1 -1
  166. package/dist/react-native/parameters.js.map +1 -1
  167. package/dist/react-native/responses.d.ts +3 -3
  168. package/dist/react-native/responses.d.ts.map +1 -1
  169. package/dist/react-native/responses.js +1 -1
  170. package/dist/react-native/responses.js.map +1 -1
  171. package/dist/react-native/tracingHelper.d.ts +9 -0
  172. package/dist/react-native/tracingHelper.d.ts.map +1 -0
  173. package/dist/react-native/tracingHelper.js +198 -0
  174. package/dist/react-native/tracingHelper.js.map +1 -0
  175. package/dist/react-native/tracingPolicy.d.ts +12 -0
  176. package/dist/react-native/tracingPolicy.d.ts.map +1 -0
  177. package/dist/react-native/tracingPolicy.js +68 -0
  178. package/dist/react-native/tracingPolicy.js.map +1 -0
  179. package/package.json +25 -29
@@ -0,0 +1,9 @@
1
+ import type { TracingSpan } from "@azure/core-tracing";
2
+ import type { GetChatCompletionsBodyParam } from "./parameters.js";
3
+ import type { PipelineRequest, PipelineResponse } from "@azure/core-rest-pipeline";
4
+ export declare function getRequestBody(request: PipelineRequest): GetChatCompletionsBodyParam;
5
+ export declare function getSpanName(request: PipelineRequest): string;
6
+ export declare function onStartTracing(span: TracingSpan, request: PipelineRequest, url: string): void;
7
+ export declare function tryProcessResponse(span: TracingSpan, response?: PipelineResponse): void;
8
+ export declare function tryProcessError(span: TracingSpan, error: unknown): void;
9
+ //# sourceMappingURL=tracingHelper.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,198 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
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");
6
+ var TracingAttributesEnum;
7
+ (function (TracingAttributesEnum) {
8
+ TracingAttributesEnum["Operation_Name"] = "gen_ai.operation.name";
9
+ TracingAttributesEnum["Request_Model"] = "gen_ai.request.model";
10
+ TracingAttributesEnum["System"] = "gen_ai.system";
11
+ TracingAttributesEnum["Error_Type"] = "error.type";
12
+ TracingAttributesEnum["Server_Port"] = "server.port";
13
+ TracingAttributesEnum["Request_Frequency_Penalty"] = "gen_ai.request.frequency_penalty";
14
+ TracingAttributesEnum["Request_Max_Tokens"] = "gen_ai.request.max_tokens";
15
+ TracingAttributesEnum["Request_Presence_Penalty"] = "gen_ai.request.presence_penalty";
16
+ TracingAttributesEnum["Request_Stop_Sequences"] = "gen_ai.request.stop_sequences";
17
+ TracingAttributesEnum["Request_Temperature"] = "gen_ai.request.temperature";
18
+ TracingAttributesEnum["Request_Top_P"] = "gen_ai.request.top_p";
19
+ TracingAttributesEnum["Response_Finish_Reasons"] = "gen_ai.response.finish_reasons";
20
+ TracingAttributesEnum["Response_Id"] = "gen_ai.response.id";
21
+ TracingAttributesEnum["Response_Model"] = "gen_ai.response.model";
22
+ TracingAttributesEnum["Usage_Input_Tokens"] = "gen_ai.usage.input_tokens";
23
+ TracingAttributesEnum["Usage_Output_Tokens"] = "gen_ai.usage.output_tokens";
24
+ TracingAttributesEnum["Server_Address"] = "server.address";
25
+ })(TracingAttributesEnum || (TracingAttributesEnum = {}));
26
+ export function getRequestBody(request) {
27
+ return { body: JSON.parse(request.body) };
28
+ }
29
+ export function getSpanName(request) {
30
+ var _a;
31
+ const { body } = getRequestBody(request);
32
+ return `chat ${(_a = body === null || body === void 0 ? void 0 : body.model) !== null && _a !== void 0 ? _a : ""}`.trim();
33
+ }
34
+ export function onStartTracing(span, request, url) {
35
+ if (!span.isRecording()) {
36
+ return;
37
+ }
38
+ const urlObj = new URL(url);
39
+ const port = Number(urlObj.port) || (urlObj.protocol === "https:" ? undefined : 80);
40
+ if (port) {
41
+ span.setAttribute(TracingAttributesEnum.Server_Port, port);
42
+ }
43
+ span.setAttribute(TracingAttributesEnum.Server_Address, urlObj.hostname);
44
+ span.setAttribute(TracingAttributesEnum.Operation_Name, "chat");
45
+ span.setAttribute(TracingAttributesEnum.System, "az.ai.inference");
46
+ const { body } = getRequestBody(request);
47
+ if (!body)
48
+ return;
49
+ span.setAttribute(TracingAttributesEnum.Request_Model, body.model);
50
+ span.setAttribute(TracingAttributesEnum.Request_Frequency_Penalty, body.frequency_penalty);
51
+ span.setAttribute(TracingAttributesEnum.Request_Max_Tokens, body.max_tokens);
52
+ span.setAttribute(TracingAttributesEnum.Request_Presence_Penalty, body.presence_penalty);
53
+ span.setAttribute(TracingAttributesEnum.Request_Stop_Sequences, body.stop);
54
+ span.setAttribute(TracingAttributesEnum.Request_Temperature, body.temperature);
55
+ span.setAttribute(TracingAttributesEnum.Request_Top_P, body.top_p);
56
+ if (body.messages) {
57
+ addRequestChatMessageEvent(span, body.messages);
58
+ }
59
+ }
60
+ export function tryProcessResponse(span, response) {
61
+ var _a, _b, _c;
62
+ if (!span.isRecording()) {
63
+ return;
64
+ }
65
+ if (response === null || response === void 0 ? void 0 : response.bodyAsText) {
66
+ const body = JSON.parse(response.bodyAsText);
67
+ if ((_a = body.error) !== null && _a !== void 0 ? _a : body.message) {
68
+ span.setAttribute(TracingAttributesEnum.Error_Type, `${(_b = body.status) !== null && _b !== void 0 ? _b : body.statusCode}`);
69
+ span.setStatus({
70
+ status: "error",
71
+ error: (_c = body.error) !== null && _c !== void 0 ? _c : body.message, // message is not in the schema of the response, but it can present if there is crediential error
72
+ });
73
+ }
74
+ span.setAttribute(TracingAttributesEnum.Response_Id, body.id);
75
+ span.setAttribute(TracingAttributesEnum.Response_Model, body.model);
76
+ if (body.choices) {
77
+ span.setAttribute(TracingAttributesEnum.Response_Finish_Reasons, body.choices.map((choice) => choice.finish_reason).join(","));
78
+ }
79
+ if (body.usage) {
80
+ span.setAttribute(TracingAttributesEnum.Usage_Input_Tokens, body.usage.prompt_tokens);
81
+ span.setAttribute(TracingAttributesEnum.Usage_Output_Tokens, body.usage.completion_tokens);
82
+ }
83
+ addResponseChatMessageEvent(span, body);
84
+ }
85
+ }
86
+ export function tryProcessError(span, error) {
87
+ span.setStatus({
88
+ status: "error",
89
+ error: isError(error) ? error : undefined,
90
+ });
91
+ }
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
+ function addRequestChatMessageEvent(span, messages) {
105
+ messages.forEach((message) => {
106
+ var _a;
107
+ if (message.role) {
108
+ const content = {};
109
+ const chatMsg = message;
110
+ if (chatMsg.content) {
111
+ content.content = chatMsg.content;
112
+ }
113
+ if (!isContentRecordingEnabled()) {
114
+ content.content = "";
115
+ }
116
+ const assistantMsg = message;
117
+ if (assistantMsg.tool_calls) {
118
+ content.tool_calls = assistantMsg.tool_calls;
119
+ if (!isContentRecordingEnabled()) {
120
+ const toolCalls = JSON.parse(JSON.stringify(content.tool_calls));
121
+ toolCalls.forEach((toolCall) => {
122
+ if (toolCall.function.arguments) {
123
+ toolCall.function.arguments = "";
124
+ }
125
+ toolCall.function.name = "";
126
+ });
127
+ content.tool_calls = toolCalls;
128
+ }
129
+ }
130
+ const toolMsg = message;
131
+ if (toolMsg.tool_call_id) {
132
+ content.id = toolMsg.tool_call_id;
133
+ }
134
+ (_a = span.addEvent) === null || _a === void 0 ? void 0 : _a.call(span, `gen_ai.${message.role}.message`, {
135
+ attributes: {
136
+ "gen_ai.system": INFERENCE_GEN_AI_SYSTEM_NAME,
137
+ "gen_ai.event.content": JSON.stringify(content),
138
+ },
139
+ });
140
+ }
141
+ });
142
+ }
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
+ function addResponseChatMessageEvent(span, body) {
156
+ var _a;
157
+ if (!span.addEvent) {
158
+ return;
159
+ }
160
+ (_a = body === null || body === void 0 ? void 0 : body.choices) === null || _a === void 0 ? void 0 : _a.forEach((choice) => {
161
+ var _a;
162
+ let message = {};
163
+ if (choice.message.content) {
164
+ message.content = choice.message.content;
165
+ }
166
+ if (choice.message.tool_calls) {
167
+ message.toolCalls = choice.message.tool_calls;
168
+ }
169
+ if (!isContentRecordingEnabled()) {
170
+ message = JSON.parse(JSON.stringify(message));
171
+ message.content = "";
172
+ if (message.toolCalls) {
173
+ message.toolCalls.forEach((toolCall) => {
174
+ if (toolCall.function.arguments) {
175
+ toolCall.function.arguments = "";
176
+ }
177
+ toolCall.function.name = "";
178
+ });
179
+ }
180
+ }
181
+ const response = {
182
+ finish_reason: choice.finish_reason,
183
+ index: choice.index,
184
+ message,
185
+ };
186
+ const attributes = {
187
+ "gen_ai.system": INFERENCE_GEN_AI_SYSTEM_NAME,
188
+ "gen_ai.event.content": JSON.stringify(response),
189
+ };
190
+ (_a = span.addEvent) === null || _a === void 0 ? void 0 : _a.call(span, "gen_ai.choice", { attributes });
191
+ });
192
+ }
193
+ function envVarToBoolean(key) {
194
+ var _a;
195
+ const value = (_a = process.env[key]) !== null && _a !== void 0 ? _a : process.env[key.toLowerCase()];
196
+ return value !== "false" && value !== "0" && Boolean(value);
197
+ }
198
+ //# sourceMappingURL=tracingHelper.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,12 @@
1
+ import type { PipelinePolicy } from "@azure/core-rest-pipeline";
2
+ /**
3
+ * The programmatic identifier of the tracingPolicy.
4
+ */
5
+ export declare const tracingPolicyName = "inferenceTracingPolicy";
6
+ /**
7
+ * A simple policy to create OpenTelemetry Spans for each request made by the pipeline
8
+ * that has SpanOptions with a parent.
9
+ * Requests made without a parent Span will not be recorded.
10
+ */
11
+ export declare function tracingPolicy(): PipelinePolicy;
12
+ //# sourceMappingURL=tracingPolicy.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,68 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { createTracingClient, } from "@azure/core-tracing";
4
+ import { logger } from "./logger.js";
5
+ import { getErrorMessage } from "@azure/core-util";
6
+ import { tryProcessResponse, onStartTracing, tryProcessError, getSpanName, getRequestBody, } from "./tracingHelper.js";
7
+ import { SDK_VERSION } from "./constants.js";
8
+ /**
9
+ * The programmatic identifier of the tracingPolicy.
10
+ */
11
+ export const tracingPolicyName = "inferenceTracingPolicy";
12
+ /**
13
+ * A simple policy to create OpenTelemetry Spans for each request made by the pipeline
14
+ * that has SpanOptions with a parent.
15
+ * Requests made without a parent Span will not be recorded.
16
+ */
17
+ export function tracingPolicy() {
18
+ const tracingClient = createTracingClient({
19
+ namespace: "Microsoft.CognitiveServices",
20
+ packageName: "@azure/ai-inference-rest",
21
+ packageVersion: SDK_VERSION,
22
+ });
23
+ return {
24
+ name: tracingPolicyName,
25
+ async sendRequest(request, next) {
26
+ var _a, _b, _c, _d;
27
+ const url = new URL(request.url);
28
+ if (!tracingClient ||
29
+ !url.href.endsWith("/chat/completions") ||
30
+ ((_b = (_a = getRequestBody(request)) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.stream)) {
31
+ return next(request);
32
+ }
33
+ const { span, tracingContext } = (_c = tryCreateSpan(tracingClient, request)) !== null && _c !== void 0 ? _c : {};
34
+ if (!span || !tracingContext) {
35
+ return next(request);
36
+ }
37
+ try {
38
+ (_d = request.tracingOptions) !== null && _d !== void 0 ? _d : (request.tracingOptions = {});
39
+ request.tracingOptions.tracingContext = tracingContext;
40
+ onStartTracing(span, request, request.url);
41
+ const response = await tracingClient.withContext(tracingContext, next, request);
42
+ tryProcessResponse(span, response);
43
+ return response;
44
+ }
45
+ catch (err) {
46
+ tryProcessError(span, err);
47
+ throw err;
48
+ }
49
+ finally {
50
+ span.end();
51
+ }
52
+ },
53
+ };
54
+ }
55
+ function tryCreateSpan(tracingClient, request) {
56
+ try {
57
+ // As per spec, we do not need to differentiate between HTTP and HTTPS in span name.
58
+ const { span, updatedOptions } = tracingClient.startSpan(getSpanName(request), { tracingOptions: request.tracingOptions }, {
59
+ spanKind: "client",
60
+ });
61
+ return { span, tracingContext: updatedOptions.tracingOptions.tracingContext };
62
+ }
63
+ catch (e) {
64
+ logger.warning(`Skipping creating a tracing span due to an error: ${getErrorMessage(e)}`);
65
+ return undefined;
66
+ }
67
+ }
68
+ //# sourceMappingURL=tracingPolicy.js.map
@@ -0,0 +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,6 +1,6 @@
1
- import { GetChatCompletionsParameters, GetModelInfoParameters, GetEmbeddingsParameters, GetImageEmbeddingsParameters } from "./parameters.js";
2
- import { GetChatCompletions200Response, GetChatCompletionsDefaultResponse, GetModelInfo200Response, GetModelInfoDefaultResponse, GetEmbeddings200Response, GetEmbeddingsDefaultResponse, GetImageEmbeddings200Response, GetImageEmbeddingsDefaultResponse } from "./responses.js";
3
- import { Client, StreamableMethod } from "@azure-rest/core-client";
1
+ import type { GetChatCompletionsParameters, GetModelInfoParameters, GetEmbeddingsParameters, GetImageEmbeddingsParameters } from "./parameters.js";
2
+ import type { GetChatCompletions200Response, GetChatCompletionsDefaultResponse, GetModelInfo200Response, GetModelInfoDefaultResponse, GetEmbeddings200Response, GetEmbeddingsDefaultResponse, GetImageEmbeddings200Response, GetImageEmbeddingsDefaultResponse } from "./responses.js";
3
+ import type { Client, StreamableMethod } from "@azure-rest/core-client";
4
4
  export interface GetChatCompletions {
5
5
  /**
6
6
  * Gets chat completions for the provided chat messages.
@@ -1 +1 @@
1
- {"version":3,"file":"clientDefinitions.d.ts","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,4BAA4B,GACrC,gBAAgB,CACjB,6BAA6B,GAAG,iCAAiC,CAClE,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,GAAG,CACD,OAAO,CAAC,EAAE,sBAAsB,GAC/B,gBAAgB,CAAC,uBAAuB,GAAG,2BAA2B,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAAC,wBAAwB,GAAG,4BAA4B,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,4BAA4B,GACrC,gBAAgB,CACjB,6BAA6B,GAAG,iCAAiC,CAClE,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB,iFAAiF;IACjF,CAAC,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;IAChD,oEAAoE;IACpE,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,2EAA2E;IAC3E,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IACrC,kFAAkF;IAClF,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAAC;CAClD;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"clientDefinitions.d.ts","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,6BAA6B,EAC7B,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,4BAA4B,GACrC,gBAAgB,CAAC,6BAA6B,GAAG,iCAAiC,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,GAAG,CACD,OAAO,CAAC,EAAE,sBAAsB,GAC/B,gBAAgB,CAAC,uBAAuB,GAAG,2BAA2B,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAAC,wBAAwB,GAAG,4BAA4B,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,4BAA4B,GACrC,gBAAgB,CAAC,6BAA6B,GAAG,iCAAiC,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,MAAM;IACrB,iFAAiF;IACjF,CAAC,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;IAChD,oEAAoE;IACpE,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,2EAA2E;IAC3E,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IACrC,kFAAkF;IAClF,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAAC;CAClD;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1,4 +1,4 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  export {};
4
4
  //# sourceMappingURL=clientDefinitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clientDefinitions.js","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetChatCompletionsParameters,\n GetModelInfoParameters,\n GetEmbeddingsParameters,\n GetImageEmbeddingsParameters,\n} from \"./parameters.js\";\nimport {\n GetChatCompletions200Response,\n GetChatCompletionsDefaultResponse,\n GetModelInfo200Response,\n GetModelInfoDefaultResponse,\n GetEmbeddings200Response,\n GetEmbeddingsDefaultResponse,\n GetImageEmbeddings200Response,\n GetImageEmbeddingsDefaultResponse,\n} from \"./responses.js\";\nimport { Client, StreamableMethod } from \"@azure-rest/core-client\";\n\nexport interface GetChatCompletions {\n /**\n * Gets chat completions for the provided chat messages.\n * Completions support a wide variety of tasks and generate text that continues from or \"completes\"\n * provided prompt data. The method makes a REST API call to the `/chat/completions` route\n * on the given endpoint.\n */\n post(\n options?: GetChatCompletionsParameters,\n ): StreamableMethod<\n GetChatCompletions200Response | GetChatCompletionsDefaultResponse\n >;\n}\n\nexport interface GetModelInfo {\n /**\n * Returns information about the AI model.\n * The method makes a REST API call to the `/info` route on the given endpoint.\n */\n get(\n options?: GetModelInfoParameters,\n ): StreamableMethod<GetModelInfo200Response | GetModelInfoDefaultResponse>;\n}\n\nexport interface GetEmbeddings {\n /**\n * Return the embedding vectors for given text prompts.\n * The method makes a REST API call to the `/embeddings` route on the given endpoint.\n */\n post(\n options?: GetEmbeddingsParameters,\n ): StreamableMethod<GetEmbeddings200Response | GetEmbeddingsDefaultResponse>;\n}\n\nexport interface GetImageEmbeddings {\n /**\n * Return the embedding vectors for given images.\n * The method makes a REST API call to the `/images/embeddings` route on the given endpoint.\n */\n post(\n options?: GetImageEmbeddingsParameters,\n ): StreamableMethod<\n GetImageEmbeddings200Response | GetImageEmbeddingsDefaultResponse\n >;\n}\n\nexport interface Routes {\n /** Resource for '/chat/completions' has methods for the following verbs: post */\n (path: \"/chat/completions\"): GetChatCompletions;\n /** Resource for '/info' has methods for the following verbs: get */\n (path: \"/info\"): GetModelInfo;\n /** Resource for '/embeddings' has methods for the following verbs: post */\n (path: \"/embeddings\"): GetEmbeddings;\n /** Resource for '/images/embeddings' has methods for the following verbs: post */\n (path: \"/images/embeddings\"): GetImageEmbeddings;\n}\n\nexport type ModelClient = Client & {\n path: Routes;\n};\n"]}
1
+ {"version":3,"file":"clientDefinitions.js","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetChatCompletionsParameters,\n GetModelInfoParameters,\n GetEmbeddingsParameters,\n GetImageEmbeddingsParameters,\n} from \"./parameters.js\";\nimport type {\n GetChatCompletions200Response,\n GetChatCompletionsDefaultResponse,\n GetModelInfo200Response,\n GetModelInfoDefaultResponse,\n GetEmbeddings200Response,\n GetEmbeddingsDefaultResponse,\n GetImageEmbeddings200Response,\n GetImageEmbeddingsDefaultResponse,\n} from \"./responses.js\";\nimport type { Client, StreamableMethod } from \"@azure-rest/core-client\";\n\nexport interface GetChatCompletions {\n /**\n * Gets chat completions for the provided chat messages.\n * Completions support a wide variety of tasks and generate text that continues from or \"completes\"\n * provided prompt data. The method makes a REST API call to the `/chat/completions` route\n * on the given endpoint.\n */\n post(\n options?: GetChatCompletionsParameters,\n ): StreamableMethod<GetChatCompletions200Response | GetChatCompletionsDefaultResponse>;\n}\n\nexport interface GetModelInfo {\n /**\n * Returns information about the AI model.\n * The method makes a REST API call to the `/info` route on the given endpoint.\n */\n get(\n options?: GetModelInfoParameters,\n ): StreamableMethod<GetModelInfo200Response | GetModelInfoDefaultResponse>;\n}\n\nexport interface GetEmbeddings {\n /**\n * Return the embedding vectors for given text prompts.\n * The method makes a REST API call to the `/embeddings` route on the given endpoint.\n */\n post(\n options?: GetEmbeddingsParameters,\n ): StreamableMethod<GetEmbeddings200Response | GetEmbeddingsDefaultResponse>;\n}\n\nexport interface GetImageEmbeddings {\n /**\n * Return the embedding vectors for given images.\n * The method makes a REST API call to the `/images/embeddings` route on the given endpoint.\n */\n post(\n options?: GetImageEmbeddingsParameters,\n ): StreamableMethod<GetImageEmbeddings200Response | GetImageEmbeddingsDefaultResponse>;\n}\n\nexport interface Routes {\n /** Resource for '/chat/completions' has methods for the following verbs: post */\n (path: \"/chat/completions\"): GetChatCompletions;\n /** Resource for '/info' has methods for the following verbs: get */\n (path: \"/info\"): GetModelInfo;\n /** Resource for '/embeddings' has methods for the following verbs: post */\n (path: \"/embeddings\"): GetEmbeddings;\n /** Resource for '/images/embeddings' has methods for the following verbs: post */\n (path: \"/images/embeddings\"): GetImageEmbeddings;\n}\n\nexport type ModelClient = Client & {\n path: Routes;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const SDK_VERSION: string;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,EAAE,MAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export const SDK_VERSION = "1.0.0-beta.4";
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAW,cAAc,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"1.0.0-beta.4\";\n"]}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import ModelClient from "./modelClient.js";
4
4
  export * from "./modelClient.js";
5
5
  export * from "./parameters.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,eAAe,WAAW,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport ModelClient from \"./modelClient.js\";\n\nexport * from \"./modelClient.js\";\nexport * from \"./parameters.js\";\nexport * from \"./responses.js\";\nexport * from \"./clientDefinitions.js\";\nexport * from \"./isUnexpected.js\";\nexport * from \"./models.js\";\nexport * from \"./outputModels.js\";\n\nexport default ModelClient;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,eAAe,WAAW,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport ModelClient from \"./modelClient.js\";\n\nexport * from \"./modelClient.js\";\nexport * from \"./parameters.js\";\nexport * from \"./responses.js\";\nexport * from \"./clientDefinitions.js\";\nexport * from \"./isUnexpected.js\";\nexport * from \"./models.js\";\nexport * from \"./outputModels.js\";\n\nexport default ModelClient;\n"]}
@@ -1,4 +1,4 @@
1
- import { GetChatCompletions200Response, GetChatCompletionsDefaultResponse, GetModelInfo200Response, GetModelInfoDefaultResponse, GetEmbeddings200Response, GetEmbeddingsDefaultResponse, GetImageEmbeddings200Response, GetImageEmbeddingsDefaultResponse } from "./responses.js";
1
+ import type { GetChatCompletions200Response, GetChatCompletionsDefaultResponse, GetModelInfo200Response, GetModelInfoDefaultResponse, GetEmbeddings200Response, GetEmbeddingsDefaultResponse, GetImageEmbeddings200Response, GetImageEmbeddingsDefaultResponse } from "./responses.js";
2
2
  export declare function isUnexpected(response: GetChatCompletions200Response | GetChatCompletionsDefaultResponse): response is GetChatCompletionsDefaultResponse;
3
3
  export declare function isUnexpected(response: GetModelInfo200Response | GetModelInfoDefaultResponse): response is GetModelInfoDefaultResponse;
4
4
  export declare function isUnexpected(response: GetEmbeddings200Response | GetEmbeddingsDefaultResponse): response is GetEmbeddingsDefaultResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"isUnexpected.d.ts","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,gBAAgB,CAAC;AASxB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,6BAA6B,GAAG,iCAAiC,GAC1E,QAAQ,IAAI,iCAAiC,CAAC;AACjD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,uBAAuB,GAAG,2BAA2B,GAC9D,QAAQ,IAAI,2BAA2B,CAAC;AAC3C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,wBAAwB,GAAG,4BAA4B,GAChE,QAAQ,IAAI,4BAA4B,CAAC;AAC5C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,6BAA6B,GAAG,iCAAiC,GAC1E,QAAQ,IAAI,iCAAiC,CAAC"}
1
+ {"version":3,"file":"isUnexpected.d.ts","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,6BAA6B,EAC7B,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,gBAAgB,CAAC;AASxB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,6BAA6B,GAAG,iCAAiC,GAC1E,QAAQ,IAAI,iCAAiC,CAAC;AACjD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,uBAAuB,GAAG,2BAA2B,GAC9D,QAAQ,IAAI,2BAA2B,CAAC;AAC3C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,wBAAwB,GAAG,4BAA4B,GAChE,QAAQ,IAAI,4BAA4B,CAAC;AAC5C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,6BAA6B,GAAG,iCAAiC,GAC1E,QAAQ,IAAI,iCAAiC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  const responseMap = {
4
4
  "POST /chat/completions": ["200"],
5
5
  "GET /info": ["200"],
@@ -36,8 +36,7 @@ function getParametrizedPathSuccess(method, path) {
36
36
  // track if we have found a match to return the values found.
37
37
  let found = true;
38
38
  for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {
39
- if (((_a = candidateParts[i]) === null || _a === void 0 ? void 0 : _a.startsWith("{")) &&
40
- ((_b = candidateParts[i]) === null || _b === void 0 ? void 0 : _b.indexOf("}")) !== -1) {
39
+ if (((_a = candidateParts[i]) === null || _a === void 0 ? void 0 : _a.startsWith("{")) && ((_b = candidateParts[i]) === null || _b === void 0 ? void 0 : _b.indexOf("}")) !== -1) {
41
40
  const start = candidateParts[i].indexOf("}") + 1, end = (_c = candidateParts[i]) === null || _c === void 0 ? void 0 : _c.length;
42
41
  // If the current part of the candidate is a "template" part
43
42
  // Try to use the suffix of pattern to match the path
@@ -1 +1 @@
1
- {"version":3,"file":"isUnexpected.js","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetChatCompletions200Response,\n GetChatCompletionsDefaultResponse,\n GetModelInfo200Response,\n GetModelInfoDefaultResponse,\n GetEmbeddings200Response,\n GetEmbeddingsDefaultResponse,\n GetImageEmbeddings200Response,\n GetImageEmbeddingsDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"POST /chat/completions\": [\"200\"],\n \"GET /info\": [\"200\"],\n \"POST /embeddings\": [\"200\"],\n \"POST /images/embeddings\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetChatCompletions200Response | GetChatCompletionsDefaultResponse,\n): response is GetChatCompletionsDefaultResponse;\nexport function isUnexpected(\n response: GetModelInfo200Response | GetModelInfoDefaultResponse,\n): response is GetModelInfoDefaultResponse;\nexport function isUnexpected(\n response: GetEmbeddings200Response | GetEmbeddingsDefaultResponse,\n): response is GetEmbeddingsDefaultResponse;\nexport function isUnexpected(\n response: GetImageEmbeddings200Response | GetImageEmbeddingsDefaultResponse,\n): response is GetImageEmbeddingsDefaultResponse;\nexport function isUnexpected(\n response:\n | GetChatCompletions200Response\n | GetChatCompletionsDefaultResponse\n | GetModelInfo200Response\n | GetModelInfoDefaultResponse\n | GetEmbeddings200Response\n | GetEmbeddingsDefaultResponse\n | GetImageEmbeddings200Response\n | GetImageEmbeddingsDefaultResponse,\n): response is\n | GetChatCompletionsDefaultResponse\n | GetModelInfoDefaultResponse\n | GetEmbeddingsDefaultResponse\n | GetImageEmbeddingsDefaultResponse {\n const lroOriginal = response.headers[\"x-ms-original-url\"];\n const url = new URL(lroOriginal ?? response.request.url);\n const method = response.request.method;\n let pathDetails = responseMap[`${method} ${url.pathname}`];\n if (!pathDetails) {\n pathDetails = getParametrizedPathSuccess(method, url.pathname);\n }\n return !pathDetails.includes(response.status);\n}\n\nfunction getParametrizedPathSuccess(method: string, path: string): string[] {\n const pathParts = path.split(\"/\");\n\n // Traverse list to match the longest candidate\n // matchedLen: the length of candidate path\n // matchedValue: the matched status code array\n let matchedLen = -1,\n matchedValue: string[] = [];\n\n // Iterate the responseMap to find a match\n for (const [key, value] of Object.entries(responseMap)) {\n // Extracting the path from the map key which is in format\n // GET /path/foo\n if (!key.startsWith(method)) {\n continue;\n }\n const candidatePath = getPathFromMapKey(key);\n // Get each part of the url path\n const candidateParts = candidatePath.split(\"/\");\n\n // track if we have found a match to return the values found.\n let found = true;\n for (\n let i = candidateParts.length - 1, j = pathParts.length - 1;\n i >= 1 && j >= 1;\n i--, j--\n ) {\n if (\n candidateParts[i]?.startsWith(\"{\") &&\n candidateParts[i]?.indexOf(\"}\") !== -1\n ) {\n const start = candidateParts[i]!.indexOf(\"}\") + 1,\n end = candidateParts[i]?.length;\n // If the current part of the candidate is a \"template\" part\n // Try to use the suffix of pattern to match the path\n // {guid} ==> $\n // {guid}:export ==> :export$\n const isMatched = new RegExp(\n `${candidateParts[i]?.slice(start, end)}`,\n ).test(pathParts[j] || \"\");\n\n if (!isMatched) {\n found = false;\n break;\n }\n continue;\n }\n\n // If the candidate part is not a template and\n // the parts don't match mark the candidate as not found\n // to move on with the next candidate path.\n if (candidateParts[i] !== pathParts[j]) {\n found = false;\n break;\n }\n }\n\n // We finished evaluating the current candidate parts\n // Update the matched value if and only if we found the longer pattern\n if (found && candidatePath.length > matchedLen) {\n matchedLen = candidatePath.length;\n matchedValue = value;\n }\n }\n\n return matchedValue;\n}\n\nfunction getPathFromMapKey(mapKey: string): string {\n const pathStart = mapKey.indexOf(\"/\");\n return mapKey.slice(pathStart);\n}\n"]}
1
+ {"version":3,"file":"isUnexpected.js","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetChatCompletions200Response,\n GetChatCompletionsDefaultResponse,\n GetModelInfo200Response,\n GetModelInfoDefaultResponse,\n GetEmbeddings200Response,\n GetEmbeddingsDefaultResponse,\n GetImageEmbeddings200Response,\n GetImageEmbeddingsDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"POST /chat/completions\": [\"200\"],\n \"GET /info\": [\"200\"],\n \"POST /embeddings\": [\"200\"],\n \"POST /images/embeddings\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetChatCompletions200Response | GetChatCompletionsDefaultResponse,\n): response is GetChatCompletionsDefaultResponse;\nexport function isUnexpected(\n response: GetModelInfo200Response | GetModelInfoDefaultResponse,\n): response is GetModelInfoDefaultResponse;\nexport function isUnexpected(\n response: GetEmbeddings200Response | GetEmbeddingsDefaultResponse,\n): response is GetEmbeddingsDefaultResponse;\nexport function isUnexpected(\n response: GetImageEmbeddings200Response | GetImageEmbeddingsDefaultResponse,\n): response is GetImageEmbeddingsDefaultResponse;\nexport function isUnexpected(\n response:\n | GetChatCompletions200Response\n | GetChatCompletionsDefaultResponse\n | GetModelInfo200Response\n | GetModelInfoDefaultResponse\n | GetEmbeddings200Response\n | GetEmbeddingsDefaultResponse\n | GetImageEmbeddings200Response\n | GetImageEmbeddingsDefaultResponse,\n): response is\n | GetChatCompletionsDefaultResponse\n | GetModelInfoDefaultResponse\n | GetEmbeddingsDefaultResponse\n | GetImageEmbeddingsDefaultResponse {\n const lroOriginal = response.headers[\"x-ms-original-url\"];\n const url = new URL(lroOriginal ?? response.request.url);\n const method = response.request.method;\n let pathDetails = responseMap[`${method} ${url.pathname}`];\n if (!pathDetails) {\n pathDetails = getParametrizedPathSuccess(method, url.pathname);\n }\n return !pathDetails.includes(response.status);\n}\n\nfunction getParametrizedPathSuccess(method: string, path: string): string[] {\n const pathParts = path.split(\"/\");\n\n // Traverse list to match the longest candidate\n // matchedLen: the length of candidate path\n // matchedValue: the matched status code array\n let matchedLen = -1,\n matchedValue: string[] = [];\n\n // Iterate the responseMap to find a match\n for (const [key, value] of Object.entries(responseMap)) {\n // Extracting the path from the map key which is in format\n // GET /path/foo\n if (!key.startsWith(method)) {\n continue;\n }\n const candidatePath = getPathFromMapKey(key);\n // Get each part of the url path\n const candidateParts = candidatePath.split(\"/\");\n\n // track if we have found a match to return the values found.\n let found = true;\n for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {\n if (candidateParts[i]?.startsWith(\"{\") && candidateParts[i]?.indexOf(\"}\") !== -1) {\n const start = candidateParts[i]!.indexOf(\"}\") + 1,\n end = candidateParts[i]?.length;\n // If the current part of the candidate is a \"template\" part\n // Try to use the suffix of pattern to match the path\n // {guid} ==> $\n // {guid}:export ==> :export$\n const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test(\n pathParts[j] || \"\",\n );\n\n if (!isMatched) {\n found = false;\n break;\n }\n continue;\n }\n\n // If the candidate part is not a template and\n // the parts don't match mark the candidate as not found\n // to move on with the next candidate path.\n if (candidateParts[i] !== pathParts[j]) {\n found = false;\n break;\n }\n }\n\n // We finished evaluating the current candidate parts\n // Update the matched value if and only if we found the longer pattern\n if (found && candidatePath.length > matchedLen) {\n matchedLen = candidatePath.length;\n matchedValue = value;\n }\n }\n\n return matchedValue;\n}\n\nfunction getPathFromMapKey(mapKey: string): string {\n const pathStart = mapKey.indexOf(\"/\");\n return mapKey.slice(pathStart);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import { createClientLogger } from "@azure/logger";
4
4
  export const logger = createClientLogger("ai-inference");
5
5
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\nexport const logger = createClientLogger(\"ai-inference\");\n"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"@azure/logger\";\nexport const logger = createClientLogger(\"ai-inference\");\n"]}
@@ -1,6 +1,6 @@
1
- import { ClientOptions } from "@azure-rest/core-client";
2
- import { TokenCredential, KeyCredential } from "@azure/core-auth";
3
- import { ModelClient } from "./clientDefinitions.js";
1
+ import type { ClientOptions } from "@azure-rest/core-client";
2
+ import type { TokenCredential, KeyCredential } from "@azure/core-auth";
3
+ import type { ModelClient } from "./clientDefinitions.js";
4
4
  /** The optional parameters for the client */
5
5
  export interface ModelClientOptions extends ClientOptions {
6
6
  /** The api version option of the client */
@@ -1 +1 @@
1
- {"version":3,"file":"modelClient.d.ts","sourceRoot":"","sources":["../../src/modelClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EACL,eAAe,EACf,aAAa,EAEd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,6CAA6C;AAC7C,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,GAAG,aAAa,EAC5C,EAAE,UAAiC,EAAE,GAAG,OAAO,EAAE,GAAE,kBAAuB,GACzE,WAAW,CAgDb"}
1
+ {"version":3,"file":"modelClient.d.ts","sourceRoot":"","sources":["../../src/modelClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,6CAA6C;AAC7C,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,GAAG,aAAa,EAC5C,EAAE,UAAiC,EAAE,GAAG,OAAO,EAAE,GAAE,kBAAuB,GACzE,WAAW,CAwDb"}
@@ -1,9 +1,10 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import { __rest } from "tslib";
4
4
  import { getClient } from "@azure-rest/core-client";
5
5
  import { logger } from "./logger.js";
6
- import { isKeyCredential, } from "@azure/core-auth";
6
+ import { isKeyCredential } from "@azure/core-auth";
7
+ import { tracingPolicy } from "./tracingPolicy.js";
7
8
  /**
8
9
  * Initialize a new instance of `ModelClient`
9
10
  * @param endpointParam - The parameter endpointParam
@@ -14,7 +15,7 @@ export default function createClient(endpointParam, credentials, _a = {}) {
14
15
  var _b, _c, _d, _e, _f, _g, _h, _j;
15
16
  var { apiVersion = "2024-05-01-preview" } = _a, options = __rest(_a, ["apiVersion"]);
16
17
  const endpointUrl = (_c = (_b = options.endpoint) !== null && _b !== void 0 ? _b : options.baseUrl) !== null && _c !== void 0 ? _c : `${endpointParam}`;
17
- const userAgentInfo = `azsdk-js-AiModelInference-rest/1.0.0-beta.2`;
18
+ const userAgentInfo = `azsdk-js-ai-inference/1.0.0-beta.2`;
18
19
  const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
19
20
  ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`
20
21
  : `${userAgentInfo}`;
@@ -28,6 +29,12 @@ export default function createClient(endpointParam, credentials, _a = {}) {
28
29
  } });
29
30
  const client = getClient(endpointUrl, credentials, options);
30
31
  client.pipeline.removePolicy({ name: "ApiVersionPolicy" });
32
+ client.pipeline.addPolicy({
33
+ name: "InferenceTracingPolicy",
34
+ sendRequest: (req, next) => {
35
+ return tracingPolicy().sendRequest(req, next);
36
+ },
37
+ });
31
38
  client.pipeline.addPolicy({
32
39
  name: "ClientApiVersionPolicy",
33
40
  sendRequest: (req, next) => {
@@ -1 +1 @@
1
- {"version":3,"file":"modelClient.js","sourceRoot":"","sources":["../../src/modelClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,OAAO,EAAE,SAAS,EAAiB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAGL,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAS1B;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAqB,EACrB,WAA4C,EAC5C,KAAwE,EAAE;;QAA1E,EAAE,UAAU,GAAG,oBAAoB,OAAuC,EAAlC,OAAO,cAA/C,cAAiD,CAAF;IAE/C,MAAM,WAAW,GAAG,MAAA,MAAA,OAAO,CAAC,QAAQ,mCAAI,OAAO,CAAC,OAAO,mCAAI,GAAG,aAAa,EAAE,CAAC;IAC9E,MAAM,aAAa,GAAG,6CAA6C,CAAC;IACpE,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,eAAe;QAClE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,IAAI,aAAa,EAAE;QAChE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;IACzB,OAAO,mCACF,OAAO,KACV,gBAAgB,EAAE;YAChB,eAAe;SAChB,EACD,cAAc,EAAE;YACd,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,cAAc,0CAAE,MAAM,mCAAI,MAAM,CAAC,IAAI;SACtD,EACD,WAAW,EAAE;YACX,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAE,MAAM,mCAAI,CAAC,+BAA+B,CAAC;YACxE,gBAAgB,EAAE,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAE,gBAAgB,mCAAI,SAAS;SACrE,GACF,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAgB,CAAC;IAE3E,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACzB,qDAAqD;YACrD,yEAAyE;YACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC;gBACvD,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAC5E,eAAe,UAAU,EAAE,CAAC;YAChC,CAAC;YAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IACH,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,EAAE,2BAA2B;YACjC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI;gBAC7B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { getClient, ClientOptions } from \"@azure-rest/core-client\";\nimport { logger } from \"./logger.js\";\nimport {\n TokenCredential,\n KeyCredential,\n isKeyCredential,\n} from \"@azure/core-auth\";\nimport { ModelClient } from \"./clientDefinitions.js\";\n\n/** The optional parameters for the client */\nexport interface ModelClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `ModelClient`\n * @param endpointParam - The parameter endpointParam\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n endpointParam: string,\n credentials: TokenCredential | KeyCredential,\n { apiVersion = \"2024-05-01-preview\", ...options }: ModelClientOptions = {},\n): ModelClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `${endpointParam}`;\n const userAgentInfo = `azsdk-js-AiModelInference-rest/1.0.0-beta.2`;\n const userAgentPrefix =\n options.userAgentOptions && options.userAgentOptions.userAgentPrefix\n ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`\n : `${userAgentInfo}`;\n options = {\n ...options,\n userAgentOptions: {\n userAgentPrefix,\n },\n loggingOptions: {\n logger: options.loggingOptions?.logger ?? logger.info,\n },\n credentials: {\n scopes: options.credentials?.scopes ?? [\"https://ml.azure.com/.default\"],\n apiKeyHeaderName: options.credentials?.apiKeyHeaderName ?? \"api-key\",\n },\n };\n const client = getClient(endpointUrl, credentials, options) as ModelClient;\n\n client.pipeline.removePolicy({ name: \"ApiVersionPolicy\" });\n client.pipeline.addPolicy({\n name: \"ClientApiVersionPolicy\",\n sendRequest: (req, next) => {\n // Use the apiVersion defined in request url directly\n // Append one if there is no apiVersion and we have one at client options\n const url = new URL(req.url);\n if (!url.searchParams.get(\"api-version\") && apiVersion) {\n req.url = `${req.url}${Array.from(url.searchParams.keys()).length > 0 ? \"&\" : \"?\"\n }api-version=${apiVersion}`;\n }\n\n return next(req);\n },\n });\n if (isKeyCredential(credentials)) {\n client.pipeline.addPolicy({\n name: \"customKeyCredentialPolicy\",\n async sendRequest(request, next) {\n request.headers.set(\"Authorization\", \"Bearer \" + credentials.key);\n return next(request);\n },\n });\n }\n\n return client;\n}\n"]}
1
+ {"version":3,"file":"modelClient.js","sourceRoot":"","sources":["../../src/modelClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ClientOptions } from \"@azure-rest/core-client\";\nimport { getClient } from \"@azure-rest/core-client\";\nimport { logger } from \"./logger.js\";\nimport type { TokenCredential, KeyCredential } from \"@azure/core-auth\";\nimport { isKeyCredential } from \"@azure/core-auth\";\nimport type { ModelClient } from \"./clientDefinitions.js\";\nimport { tracingPolicy } from \"./tracingPolicy.js\";\n\n/** The optional parameters for the client */\nexport interface ModelClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `ModelClient`\n * @param endpointParam - The parameter endpointParam\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n endpointParam: string,\n credentials: TokenCredential | KeyCredential,\n { apiVersion = \"2024-05-01-preview\", ...options }: ModelClientOptions = {},\n): ModelClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `${endpointParam}`;\n const userAgentInfo = `azsdk-js-ai-inference/1.0.0-beta.2`;\n const userAgentPrefix =\n options.userAgentOptions && options.userAgentOptions.userAgentPrefix\n ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`\n : `${userAgentInfo}`;\n options = {\n ...options,\n userAgentOptions: {\n userAgentPrefix,\n },\n loggingOptions: {\n logger: options.loggingOptions?.logger ?? logger.info,\n },\n credentials: {\n scopes: options.credentials?.scopes ?? [\"https://ml.azure.com/.default\"],\n apiKeyHeaderName: options.credentials?.apiKeyHeaderName ?? \"api-key\",\n },\n };\n\n const client = getClient(endpointUrl, credentials, options) as ModelClient;\n\n client.pipeline.removePolicy({ name: \"ApiVersionPolicy\" });\n client.pipeline.addPolicy({\n name: \"InferenceTracingPolicy\",\n sendRequest: (req, next) => {\n return tracingPolicy().sendRequest(req, next);\n },\n });\n client.pipeline.addPolicy({\n name: \"ClientApiVersionPolicy\",\n sendRequest: (req, next) => {\n // Use the apiVersion defined in request url directly\n // Append one if there is no apiVersion and we have one at client options\n const url = new URL(req.url);\n if (!url.searchParams.get(\"api-version\") && apiVersion) {\n req.url = `${req.url}${\n Array.from(url.searchParams.keys()).length > 0 ? \"&\" : \"?\"\n }api-version=${apiVersion}`;\n }\n\n return next(req);\n },\n });\n if (isKeyCredential(credentials)) {\n client.pipeline.addPolicy({\n name: \"customKeyCredentialPolicy\",\n async sendRequest(request, next) {\n request.headers.set(\"Authorization\", \"Bearer \" + credentials.key);\n return next(request);\n },\n });\n }\n\n return client;\n}\n"]}