@loonylabs/llm-middleware 2.28.0 โ†’ 2.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.env.example +8 -0
  2. package/README.md +3 -2
  3. package/dist/middleware/services/llm/llm.service.d.ts.map +1 -1
  4. package/dist/middleware/services/llm/llm.service.js +2 -0
  5. package/dist/middleware/services/llm/llm.service.js.map +1 -1
  6. package/dist/middleware/services/llm/providers/azure-openai-capabilities.d.ts +33 -0
  7. package/dist/middleware/services/llm/providers/azure-openai-capabilities.d.ts.map +1 -0
  8. package/dist/middleware/services/llm/providers/azure-openai-capabilities.js +66 -0
  9. package/dist/middleware/services/llm/providers/azure-openai-capabilities.js.map +1 -0
  10. package/dist/middleware/services/llm/providers/azure-openai-provider.d.ts +53 -0
  11. package/dist/middleware/services/llm/providers/azure-openai-provider.d.ts.map +1 -0
  12. package/dist/middleware/services/llm/providers/azure-openai-provider.js +333 -0
  13. package/dist/middleware/services/llm/providers/azure-openai-provider.js.map +1 -0
  14. package/dist/middleware/services/llm/providers/index.d.ts +2 -0
  15. package/dist/middleware/services/llm/providers/index.d.ts.map +1 -1
  16. package/dist/middleware/services/llm/providers/index.js +2 -0
  17. package/dist/middleware/services/llm/providers/index.js.map +1 -1
  18. package/dist/middleware/services/llm/types/azure-openai.types.d.ts +135 -0
  19. package/dist/middleware/services/llm/types/azure-openai.types.d.ts.map +1 -0
  20. package/dist/middleware/services/llm/types/azure-openai.types.js +19 -0
  21. package/dist/middleware/services/llm/types/azure-openai.types.js.map +1 -0
  22. package/dist/middleware/services/llm/types/common.types.d.ts +10 -1
  23. package/dist/middleware/services/llm/types/common.types.d.ts.map +1 -1
  24. package/dist/middleware/services/llm/types/common.types.js +2 -0
  25. package/dist/middleware/services/llm/types/common.types.js.map +1 -1
  26. package/dist/middleware/services/llm/types/index.d.ts +1 -0
  27. package/dist/middleware/services/llm/types/index.d.ts.map +1 -1
  28. package/dist/middleware/services/llm/types/index.js +1 -0
  29. package/dist/middleware/services/llm/types/index.js.map +1 -1
  30. package/dist/middleware/services/llm/utils/debug-llm.utils.d.ts.map +1 -1
  31. package/dist/middleware/services/llm/utils/debug-llm.utils.js +4 -0
  32. package/dist/middleware/services/llm/utils/debug-llm.utils.js.map +1 -1
  33. package/package.json +2 -1
package/.env.example CHANGED
@@ -36,6 +36,14 @@ BEDROCK_API_KEY=your_bedrock_api_key_here # Amazon Bedrock API key (B
36
36
  BEDROCK_REGION=eu-central-1 # AWS region (Frankfurt = EU data residency)
37
37
  BEDROCK_MODEL=qwen.qwen3-32b-v1:0 # Default model ID (verify via Bedrock console / list-foundation-models)
38
38
 
39
+ # Azure OpenAI / Foundry Configuration (Optional - api-key auth, OpenAI-compatible, serverless)
40
+ # EU data residency: create the resource in Germany West Central (or Sweden Central) with a Data Zone deployment.
41
+ # Note: some partner models (e.g. Kimi K2.5) are GLOBAL-ONLY on Azure -> they cannot be EU-resident.
42
+ AZURE_OPENAI_API_KEY=your_azure_openai_api_key_here # Azure OpenAI / Foundry API key (sent in the 'api-key' header)
43
+ AZURE_OPENAI_ENDPOINT=https://<resource>.openai.azure.com # Your resource endpoint (region is encoded in the host)
44
+ AZURE_OPENAI_DEPLOYMENT=o4-mini # Your deployment name (= 'model' field in the request body)
45
+ AZURE_OPENAI_API_VERSION= # Optional: empty = v1 route (/openai/v1/); '2024-05-01-preview' = MaaS route (/models/)
46
+
39
47
  # Test Configuration (Optional)
40
48
  TEST_LLM_MODEL=vertex/gemini-2.0-flash-lite # Model for general LLM tests
41
49
  # Reasoning models:
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ๐Ÿš€ LLM Middleware
4
4
 
5
- *A comprehensive TypeScript middleware library for building robust multi-provider LLM backends. Currently supports Ollama, Anthropic Claude, Google Gemini (Direct API & Vertex AI), and Requesty.AI (300+ models). Features EU data residency via Vertex AI, reasoning control, advanced JSON cleaning, logging, error handling, cost tracking, and more.*
5
+ *A comprehensive TypeScript middleware library for building robust multi-provider LLM backends. Currently supports Ollama, Anthropic Claude, Google Gemini (Direct API & Vertex AI), Requesty.AI (300+ models), AWS Bedrock, and Azure OpenAI / Foundry. Features EU data residency via Vertex AI / Bedrock / Azure data zones, reasoning control, advanced JSON cleaning, logging, error handling, cost tracking, and more.*
6
6
 
7
7
  <!-- Horizontal Badge Navigation Bar -->
8
8
  [![npm version](https://img.shields.io/npm/v/@loonylabs/llm-middleware.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@loonylabs/llm-middleware)
@@ -46,6 +46,7 @@
46
46
  - โœ… **Google Vertex AI**: CDPA/GDPR-compliant with EU data residency (Service Account auth)
47
47
  - โœ… **Requesty.AI**: 300+ models via unified API, built-in cost tracking
48
48
  - โœ… **AWS Bedrock**: Converse API via Bearer-token auth (no AWS SDK); Claude, Nova, Qwen, GLM, Kimi, DeepSeek, gpt-oss โ€” with central `reasoningEffort` control โ€” **v2.28.0**
49
+ - โœ… **Azure OpenAI / Foundry**: OpenAI-compatible v1 route with `api-key` auth; o-series/GPT-5 reasoning vs. gpt-4o standard auto-handled; EU data-zone residency โ€” **v2.29.0**
49
50
  - ๐Ÿ”Œ **Pluggable**: Easy to add custom providers - see [LLM Providers Guide](docs/LLM_PROVIDERS.md)
50
51
  - ๐Ÿ‘๏ธ **Vision / Multimodal Input**: Send images alongside text to LLM providers
51
52
  - โœจ **v2.22.0**: Provider-agnostic `MultimodalContent` type (`string | ContentPart[]`)
@@ -371,7 +372,7 @@ VERTEX_AI_MODEL=gemini-2.5-flash # Default Vertex AI model
371
372
  GOOGLE_APPLICATION_CREDENTIALS=./vertex-ai-service-account.json # Service Account
372
373
  ```
373
374
 
374
- **Multi-Provider Support:** The middleware is fully integrated with **Ollama**, **Anthropic Claude**, **Google Gemini** (Direct API & Vertex AI), **Requesty.AI**, and **AWS Bedrock** (Converse API, EU data residency). See the [LLM Providers Guide](docs/LLM_PROVIDERS.md) for details on the provider system and how to use or add providers. AWS Bedrock specifics: [AWS Bedrock Guide](docs/AWS_BEDROCK.md).
375
+ **Multi-Provider Support:** The middleware is fully integrated with **Ollama**, **Anthropic Claude**, **Google Gemini** (Direct API & Vertex AI), **Requesty.AI**, **AWS Bedrock** (Converse API, EU data residency), and **Azure OpenAI / Foundry** (OpenAI-compatible v1 route, EU data zone). See the [LLM Providers Guide](docs/LLM_PROVIDERS.md) for details on the provider system and how to use or add providers. Provider specifics: [AWS Bedrock Guide](docs/AWS_BEDROCK.md) ยท [Azure OpenAI Guide](docs/AZURE_OPENAI.md).
375
376
 
376
377
  </details>
377
378
 
@@ -1 +1 @@
1
- {"version":3,"file":"llm.service.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/llm/llm.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAKhE,OAAO,EAAoB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAAmC;gBAE9C,OAAO,CAAC,EAAE,iBAAiB;IAWvC;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe;IAQ1D;;;;;;;;;;;;;;;;;;OAkBG;IACI,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI/E;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAOtD;;OAEG;IACI,kBAAkB,IAAI,WAAW;IAIxC;;;OAGG;IACU,qBAAqB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gBAAgB,GAAG;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAO,GAC1D,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMpC;;;OAGG;IACU,IAAI,CACf,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,gBAAgB,GAAG;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAO,GAC1D,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMpC;;OAEG;IACI,qBAAqB,IAAI,WAAW,EAAE;CAG9C;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
1
+ {"version":3,"file":"llm.service.d.ts","sourceRoot":"","sources":["../../../../src/middleware/services/llm/llm.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAKhE,OAAO,EAAoB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAAmC;gBAE9C,OAAO,CAAC,EAAE,iBAAiB;IAYvC;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe;IAQ1D;;;;;;;;;;;;;;;;;;OAkBG;IACI,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI/E;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAOtD;;OAEG;IACI,kBAAkB,IAAI,WAAW;IAIxC;;;OAGG;IACU,qBAAqB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gBAAgB,GAAG;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAO,GAC1D,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMpC;;;OAGG;IACU,IAAI,CACf,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,gBAAgB,GAAG;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAO,GAC1D,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMpC;;OAEG;IACI,qBAAqB,IAAI,WAAW,EAAE;CAG9C;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -11,6 +11,7 @@ const gemini_provider_1 = require("./providers/gemini-provider");
11
11
  const requesty_provider_1 = require("./providers/requesty-provider");
12
12
  const gemini_1 = require("./providers/gemini");
13
13
  const bedrock_provider_1 = require("./providers/bedrock-provider");
14
+ const azure_openai_provider_1 = require("./providers/azure-openai-provider");
14
15
  const types_1 = require("./types");
15
16
  class LLMService {
16
17
  constructor(options) {
@@ -23,6 +24,7 @@ class LLMService {
23
24
  this.providers.set(types_1.LLMProvider.REQUESTY, new requesty_provider_1.RequestyProvider());
24
25
  this.providers.set(types_1.LLMProvider.VERTEX_AI, new gemini_1.VertexAIProvider(options?.vertexAIConfig));
25
26
  this.providers.set(types_1.LLMProvider.BEDROCK, new bedrock_provider_1.BedrockProvider());
27
+ this.providers.set(types_1.LLMProvider.AZURE_OPENAI, new azure_openai_provider_1.AzureOpenAIProvider());
26
28
  }
27
29
  /**
28
30
  * Get a specific provider instance
@@ -1 +1 @@
1
- {"version":3,"file":"llm.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/llm/llm.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.service.js","sourceRoot":"","sources":["../../../../src/middleware/services/llm/llm.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Azure OpenAI model-capability detection.
3
+ *
4
+ * On Azure, reasoning models (o-series, GPT-5 series) and standard models
5
+ * (gpt-4o, gpt-4o-mini, โ€ฆ) require a *different* parameter set โ€” verified live:
6
+ * - Reasoning models use `max_completion_tokens` and REJECT `temperature`/`max_tokens` (HTTP 400);
7
+ * they accept `reasoning_effort`.
8
+ * - Standard models use `max_tokens` + `temperature` and ignore `reasoning_effort`.
9
+ *
10
+ * The split is binary, so a lightweight helper (rather than a full strategy
11
+ * pattern) is sufficient. Because Azure deployment names are user-chosen, the
12
+ * name heuristic can be overridden explicitly via `AzureOpenAIRequestOptions.reasoningModel`.
13
+ */
14
+ import { ReasoningEffort } from '../types';
15
+ import { AzureOpenAIReasoningEffort } from '../types/azure-openai.types';
16
+ /**
17
+ * Decide whether a deployment should be treated as a reasoning model.
18
+ * @param deployment - The Azure deployment name (sent as `model`).
19
+ * @param override - Explicit override; when a boolean, it wins over the heuristic.
20
+ */
21
+ export declare function isAzureReasoningModel(deployment: string, override?: boolean): boolean;
22
+ /**
23
+ * Map the provider-agnostic {@link ReasoningEffort} to Azure's `reasoning_effort`.
24
+ *
25
+ * Returns `{ value }` to send, or `{ warning }` (and no value) when the effort
26
+ * should be omitted. `none` is intentionally omitted: only gpt-5.1+ accept it,
27
+ * while o-series reject it โ€” omitting lets the model use its default safely.
28
+ */
29
+ export declare function mapAzureReasoningEffort(effort: ReasoningEffort): {
30
+ value?: AzureOpenAIReasoningEffort;
31
+ warning?: string;
32
+ };
33
+ //# sourceMappingURL=azure-openai-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-capabilities.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/azure-openai-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAezE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAIrF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,GACtB;IAAE,KAAK,CAAC,EAAE,0BAA0B,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAiB1D"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * Azure OpenAI model-capability detection.
4
+ *
5
+ * On Azure, reasoning models (o-series, GPT-5 series) and standard models
6
+ * (gpt-4o, gpt-4o-mini, โ€ฆ) require a *different* parameter set โ€” verified live:
7
+ * - Reasoning models use `max_completion_tokens` and REJECT `temperature`/`max_tokens` (HTTP 400);
8
+ * they accept `reasoning_effort`.
9
+ * - Standard models use `max_tokens` + `temperature` and ignore `reasoning_effort`.
10
+ *
11
+ * The split is binary, so a lightweight helper (rather than a full strategy
12
+ * pattern) is sufficient. Because Azure deployment names are user-chosen, the
13
+ * name heuristic can be overridden explicitly via `AzureOpenAIRequestOptions.reasoningModel`.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.isAzureReasoningModel = isAzureReasoningModel;
17
+ exports.mapAzureReasoningEffort = mapAzureReasoningEffort;
18
+ /**
19
+ * Deployment-name patterns that indicate a reasoning model. Matched against the
20
+ * deployment name (which usually defaults to the underlying model name).
21
+ * - `o\d` family: o1, o1-mini, o3, o3-mini, o3-pro, o4-mini (separator-anchored to avoid e.g. "neo4j")
22
+ * - GPT-5 series: gpt-5, gpt-5-mini, gpt-5.1, gpt5, gpt-5-codex
23
+ * - codex-mini
24
+ */
25
+ const REASONING_NAME_PATTERNS = [
26
+ /(^|[-_/.])o\d+(-(mini|pro|preview))?($|[-_/.])/i,
27
+ /gpt-?5/i,
28
+ /(^|[-_/.])codex(-mini)?($|[-_/.])/i,
29
+ ];
30
+ /**
31
+ * Decide whether a deployment should be treated as a reasoning model.
32
+ * @param deployment - The Azure deployment name (sent as `model`).
33
+ * @param override - Explicit override; when a boolean, it wins over the heuristic.
34
+ */
35
+ function isAzureReasoningModel(deployment, override) {
36
+ if (typeof override === 'boolean')
37
+ return override;
38
+ if (!deployment)
39
+ return false;
40
+ return REASONING_NAME_PATTERNS.some(re => re.test(deployment));
41
+ }
42
+ /**
43
+ * Map the provider-agnostic {@link ReasoningEffort} to Azure's `reasoning_effort`.
44
+ *
45
+ * Returns `{ value }` to send, or `{ warning }` (and no value) when the effort
46
+ * should be omitted. `none` is intentionally omitted: only gpt-5.1+ accept it,
47
+ * while o-series reject it โ€” omitting lets the model use its default safely.
48
+ */
49
+ function mapAzureReasoningEffort(effort) {
50
+ switch (effort) {
51
+ case 'low':
52
+ case 'medium':
53
+ case 'high':
54
+ return { value: effort };
55
+ case 'none':
56
+ return {
57
+ warning: "reasoningEffort 'none' is not reliably supported across Azure reasoning models " +
58
+ '(only gpt-5.1+ accept it; o-series reject it). Omitting reasoning_effort so the ' +
59
+ 'model uses its default.',
60
+ };
61
+ default:
62
+ // Defensive: unknown value โ†’ safe middle ground.
63
+ return { value: 'medium' };
64
+ }
65
+ }
66
+ //# sourceMappingURL=azure-openai-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-capabilities.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/azure-openai-capabilities.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAuBH,sDAIC;AASD,0DAmBC;AAlDD;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAa;IACxC,iDAAiD;IACjD,SAAS;IACT,oCAAoC;CACrC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,UAAkB,EAAE,QAAkB;IAC1E,IAAI,OAAO,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,MAAuB;IAEvB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO;gBACL,OAAO,EACL,iFAAiF;oBACjF,kFAAkF;oBAClF,yBAAyB;aAC5B,CAAC;QACJ;YACE,iDAAiD;YACjD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { BaseLLMProvider } from './base-llm-provider';
2
+ import { CommonLLMResponse } from '../types';
3
+ import { AzureOpenAIRequestOptions } from '../types/azure-openai.types';
4
+ import { MultimodalContent } from '../types/multimodal.types';
5
+ /**
6
+ * Azure OpenAI / Microsoft Foundry provider using the OpenAI-compatible
7
+ * Chat Completions API (v1 route).
8
+ *
9
+ * Why v1 (not the classic deployments route): the deployment name is sent as the
10
+ * `model` field in the body and `api-version` is optional, which keeps the payload
11
+ * identical to a standard OpenAI request and matches the Requesty provider. The
12
+ * same route serves OpenAI and (increasingly) partner models on Foundry.
13
+ *
14
+ * Why `api-key` header (not Authorization: Bearer): Azure passes the static API
15
+ * key in the `api-key` header; `Authorization: Bearer` is reserved for Microsoft
16
+ * Entra ID tokens (a planned follow-up).
17
+ *
18
+ * Reasoning vs standard models take different parameters (verified live) โ€” see
19
+ * `azure-openai-capabilities.ts`.
20
+ *
21
+ * Auth: api-key: <AZURE_OPENAI_API_KEY>
22
+ * Endpoint: {AZURE_OPENAI_ENDPOINT}/openai/v1/chat/completions
23
+ * Residency: data zone is chosen at deployment time (EU = Germany West Central / Sweden Central)
24
+ * @see https://learn.microsoft.com/en-us/azure/foundry/openai/latest
25
+ */
26
+ export declare class AzureOpenAIProvider extends BaseLLMProvider {
27
+ private dataFlowLogger;
28
+ private readonly DEFAULT_TIMEOUT;
29
+ constructor();
30
+ /**
31
+ * Build the Azure OpenAI v1 Chat Completions endpoint.
32
+ * `api-version` is appended only when explicitly provided (the v1 route
33
+ * defaults to no api-version).
34
+ */
35
+ private buildEndpoint;
36
+ /**
37
+ * Build the user message content: multimodal (text + image_url) or plain string.
38
+ * Uses the OpenAI image_url/data-URI format, identical to the Requesty provider.
39
+ */
40
+ private buildUserContent;
41
+ /**
42
+ * Call the Azure OpenAI Chat Completions API with a custom system message.
43
+ * @param userPrompt - The user's prompt (text or multimodal content)
44
+ * @param systemMessage - The system message defining AI behavior
45
+ * @param options - Options for the API call
46
+ * @returns The API response or null on error
47
+ */
48
+ callWithSystemMessage(userPrompt: MultimodalContent, systemMessage: string, options?: AzureOpenAIRequestOptions): Promise<CommonLLMResponse | null>;
49
+ }
50
+ export declare const azureOpenAIProvider: AzureOpenAIProvider;
51
+ export { AzureOpenAIProvider as AzureOpenAIService };
52
+ export { azureOpenAIProvider as azureOpenAIService };
53
+ //# sourceMappingURL=azure-openai-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-provider.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/azure-openai-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAe,iBAAiB,EAAc,MAAM,UAAU,CAAC;AACtE,OAAO,EACL,yBAAyB,EAK1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQ9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;;IAO1C;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAMrB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;OAMG;IACU,qBAAqB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAmUrC;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAG7D,OAAO,EAAE,mBAAmB,IAAI,kBAAkB,EAAE,CAAC;AACrD,OAAO,EAAE,mBAAmB,IAAI,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.azureOpenAIService = exports.AzureOpenAIService = exports.azureOpenAIProvider = exports.AzureOpenAIProvider = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const uuid_1 = require("uuid");
9
+ const logging_utils_1 = require("../../../shared/utils/logging.utils");
10
+ const base_llm_provider_1 = require("./base-llm-provider");
11
+ const types_1 = require("../types");
12
+ const debug_llm_utils_1 = require("../utils/debug-llm.utils");
13
+ const data_flow_logger_1 = require("../../data-flow-logger");
14
+ const thinking_1 = require("../thinking");
15
+ const retry_utils_1 = require("../utils/retry.utils");
16
+ const multimodal_utils_1 = require("../utils/multimodal.utils");
17
+ const azure_openai_capabilities_1 = require("./azure-openai-capabilities");
18
+ /**
19
+ * Azure OpenAI / Microsoft Foundry provider using the OpenAI-compatible
20
+ * Chat Completions API (v1 route).
21
+ *
22
+ * Why v1 (not the classic deployments route): the deployment name is sent as the
23
+ * `model` field in the body and `api-version` is optional, which keeps the payload
24
+ * identical to a standard OpenAI request and matches the Requesty provider. The
25
+ * same route serves OpenAI and (increasingly) partner models on Foundry.
26
+ *
27
+ * Why `api-key` header (not Authorization: Bearer): Azure passes the static API
28
+ * key in the `api-key` header; `Authorization: Bearer` is reserved for Microsoft
29
+ * Entra ID tokens (a planned follow-up).
30
+ *
31
+ * Reasoning vs standard models take different parameters (verified live) โ€” see
32
+ * `azure-openai-capabilities.ts`.
33
+ *
34
+ * Auth: api-key: <AZURE_OPENAI_API_KEY>
35
+ * Endpoint: {AZURE_OPENAI_ENDPOINT}/openai/v1/chat/completions
36
+ * Residency: data zone is chosen at deployment time (EU = Germany West Central / Sweden Central)
37
+ * @see https://learn.microsoft.com/en-us/azure/foundry/openai/latest
38
+ */
39
+ class AzureOpenAIProvider extends base_llm_provider_1.BaseLLMProvider {
40
+ constructor() {
41
+ super(types_1.LLMProvider.AZURE_OPENAI);
42
+ this.DEFAULT_TIMEOUT = 180000;
43
+ this.dataFlowLogger = data_flow_logger_1.DataFlowLoggerService.getInstance();
44
+ }
45
+ /**
46
+ * Build the Azure OpenAI v1 Chat Completions endpoint.
47
+ * `api-version` is appended only when explicitly provided (the v1 route
48
+ * defaults to no api-version).
49
+ */
50
+ buildEndpoint(endpoint, apiVersion) {
51
+ const base = endpoint.replace(/\/+$/, '');
52
+ const url = `${base}/openai/v1/chat/completions`;
53
+ return apiVersion ? `${url}?api-version=${encodeURIComponent(apiVersion)}` : url;
54
+ }
55
+ /**
56
+ * Build the user message content: multimodal (text + image_url) or plain string.
57
+ * Uses the OpenAI image_url/data-URI format, identical to the Requesty provider.
58
+ */
59
+ buildUserContent(userPrompt) {
60
+ if (!(0, multimodal_utils_1.hasImages)(userPrompt)) {
61
+ return typeof userPrompt === 'string'
62
+ ? userPrompt
63
+ : (0, multimodal_utils_1.normalizeContent)(userPrompt)
64
+ .map(p => p.text)
65
+ .join('\n');
66
+ }
67
+ return (0, multimodal_utils_1.normalizeContent)(userPrompt).map(part => {
68
+ if (part.type === 'text') {
69
+ return { type: 'text', text: part.text };
70
+ }
71
+ return {
72
+ type: 'image_url',
73
+ image_url: {
74
+ url: `data:${part.mimeType};base64,${part.data}`,
75
+ ...(part.detail && { detail: part.detail })
76
+ }
77
+ };
78
+ });
79
+ }
80
+ /**
81
+ * Call the Azure OpenAI Chat Completions API with a custom system message.
82
+ * @param userPrompt - The user's prompt (text or multimodal content)
83
+ * @param systemMessage - The system message defining AI behavior
84
+ * @param options - Options for the API call
85
+ * @returns The API response or null on error
86
+ */
87
+ async callWithSystemMessage(userPrompt, systemMessage, options = {}) {
88
+ const { authToken = process.env.AZURE_OPENAI_API_KEY, endpoint = options.baseUrl || process.env.AZURE_OPENAI_ENDPOINT, deployment = options.model || process.env.AZURE_OPENAI_DEPLOYMENT, apiVersion = process.env.AZURE_OPENAI_API_VERSION || undefined, temperature = 0.7, maxTokens = 4096, topP, timeout = this.DEFAULT_TIMEOUT, debugContext, sessionId = (0, uuid_1.v4)(), chapterNumber, pageNumber, pageName, reasoningEffort, reasoningModel } = options;
89
+ // Validate API key
90
+ if (!authToken) {
91
+ throw new Error('Azure OpenAI API key is required but not provided. ' +
92
+ 'Please set AZURE_OPENAI_API_KEY in your .env file or pass authToken in options.');
93
+ }
94
+ // Validate endpoint
95
+ if (!endpoint) {
96
+ throw new Error('Azure OpenAI endpoint is required but not provided. ' +
97
+ 'Please set AZURE_OPENAI_ENDPOINT in your .env file or pass endpoint in options.');
98
+ }
99
+ // Validate deployment (= model)
100
+ if (!deployment) {
101
+ throw new Error('Azure OpenAI deployment name is required but not provided. ' +
102
+ 'Please set AZURE_OPENAI_DEPLOYMENT in your .env file or pass deployment/model in options.');
103
+ }
104
+ const isReasoning = (0, azure_openai_capabilities_1.isAzureReasoningModel)(deployment, reasoningModel);
105
+ // Build request payload (OpenAI Chat Completions format).
106
+ const requestPayload = {
107
+ model: deployment,
108
+ messages: [
109
+ ...(systemMessage ? [{ role: 'system', content: systemMessage }] : []),
110
+ { role: 'user', content: this.buildUserContent(userPrompt) }
111
+ ]
112
+ };
113
+ // Apply the verified, model-class-specific parameter set.
114
+ if (isReasoning) {
115
+ // Reasoning models: max_completion_tokens, NO temperature/top_p, reasoning_effort.
116
+ requestPayload.max_completion_tokens = maxTokens;
117
+ if (reasoningEffort) {
118
+ const { value, warning } = (0, azure_openai_capabilities_1.mapAzureReasoningEffort)(reasoningEffort);
119
+ if (value)
120
+ requestPayload.reasoning_effort = value;
121
+ if (warning) {
122
+ logging_utils_1.logger.warn(warning, {
123
+ context: 'AzureOpenAIProvider',
124
+ metadata: { deployment, reasoningEffort }
125
+ });
126
+ }
127
+ }
128
+ }
129
+ else {
130
+ // Standard models: max_tokens + temperature (+ top_p); reasoning_effort is ignored.
131
+ requestPayload.max_tokens = maxTokens;
132
+ requestPayload.temperature = temperature;
133
+ if (topP !== undefined)
134
+ requestPayload.top_p = topP;
135
+ if (reasoningEffort) {
136
+ logging_utils_1.logger.warn(`reasoningEffort '${reasoningEffort}' is ignored for the non-reasoning Azure model '${deployment}'. ` +
137
+ 'Set options.reasoningModel=true if this is actually a reasoning deployment.', { context: 'AzureOpenAIProvider', metadata: { deployment } });
138
+ }
139
+ }
140
+ const url = this.buildEndpoint(endpoint, apiVersion);
141
+ const headers = {
142
+ 'Content-Type': 'application/json',
143
+ 'Accept': 'application/json',
144
+ 'api-key': authToken
145
+ };
146
+ // Use debug string to avoid base64 blobs in logs
147
+ const userMessageDebug = (0, multimodal_utils_1.contentToDebugString)(userPrompt);
148
+ const debugInfo = {
149
+ timestamp: new Date(),
150
+ provider: this.providerName,
151
+ model: deployment,
152
+ baseUrl: url,
153
+ systemMessage,
154
+ userMessage: userMessageDebug,
155
+ requestData: requestPayload,
156
+ useCase: debugContext,
157
+ sessionId,
158
+ chapterNumber,
159
+ pageNumber,
160
+ pageName,
161
+ temperature: isReasoning ? undefined : temperature,
162
+ reasoningEffort
163
+ };
164
+ await debug_llm_utils_1.LLMDebugger.logRequest(debugInfo);
165
+ const contextForLogger = {
166
+ currentChapterNr: chapterNumber,
167
+ currentPage: pageNumber,
168
+ debugContext
169
+ };
170
+ const requestId = this.dataFlowLogger.startRequest(debugContext || 'azure-openai', contextForLogger);
171
+ this.dataFlowLogger.logLLMRequest({
172
+ stage: debugContext || 'azure-openai',
173
+ prompt: userMessageDebug,
174
+ systemMessage,
175
+ modelName: deployment,
176
+ temperature: isReasoning ? undefined : temperature,
177
+ contextInfo: { sessionId, chapterNumber, pageNumber, pageName }
178
+ }, contextForLogger, requestId);
179
+ const requestStartTime = Date.now();
180
+ try {
181
+ logging_utils_1.logger.info('Sending request to Azure OpenAI', {
182
+ context: 'AzureOpenAIProvider',
183
+ metadata: {
184
+ url,
185
+ deployment,
186
+ isReasoning,
187
+ promptLength: (0, multimodal_utils_1.contentLength)(userPrompt),
188
+ maxTokens
189
+ }
190
+ });
191
+ const response = await (0, retry_utils_1.retryWithBackoff)(() => axios_1.default.post(url, requestPayload, { headers, timeout }), this.constructor.name, options.retry);
192
+ const requestDuration = Date.now() - requestStartTime;
193
+ if (response && response.status === 200) {
194
+ const apiResponse = response.data;
195
+ const rawResponseText = apiResponse.choices[0]?.message?.content || '';
196
+ // Partner models served via Azure may inline reasoning as <think> tags;
197
+ // native OpenAI reasoning text is hidden by Azure (only token counts exposed).
198
+ const extractor = thinking_1.ThinkingExtractorFactory.forModel(deployment);
199
+ const { content: responseText, thinking } = extractor.extract(rawResponseText);
200
+ // Normalize token usage to the provider-agnostic format.
201
+ const usage = apiResponse.usage;
202
+ const reasoningTokens = usage.completion_tokens_details?.reasoning_tokens;
203
+ const cachedTokens = usage.prompt_tokens_details?.cached_tokens;
204
+ const tokenUsage = {
205
+ inputTokens: usage.prompt_tokens,
206
+ outputTokens: usage.completion_tokens,
207
+ totalTokens: usage.total_tokens,
208
+ ...(reasoningTokens ? { reasoningTokens } : {}),
209
+ ...(cachedTokens ? { cacheMetadata: { cacheReadTokens: cachedTokens } } : {})
210
+ };
211
+ const normalizedResponse = {
212
+ message: {
213
+ content: responseText,
214
+ ...(thinking && { thinking })
215
+ },
216
+ sessionId,
217
+ metadata: {
218
+ provider: this.providerName,
219
+ model: apiResponse.model || deployment,
220
+ tokensUsed: tokenUsage.totalTokens,
221
+ processingTime: requestDuration
222
+ },
223
+ usage: tokenUsage,
224
+ id: apiResponse.id,
225
+ finish_reason: apiResponse.choices[0]?.finish_reason || undefined
226
+ };
227
+ debugInfo.responseTimestamp = new Date();
228
+ debugInfo.response = responseText;
229
+ debugInfo.rawResponseData = apiResponse;
230
+ if (thinking) {
231
+ debugInfo.thinking = thinking;
232
+ }
233
+ // Surface reasoning token count in the log. Azure hides the raw reasoning
234
+ // text for o-series, so this is the signal that reasoning actually happened.
235
+ if (reasoningTokens !== undefined) {
236
+ debugInfo.reasoningTokens = reasoningTokens;
237
+ }
238
+ await debug_llm_utils_1.LLMDebugger.logResponse(debugInfo);
239
+ this.dataFlowLogger.logLLMResponse(debugContext || 'azure-openai', { rawResponse: responseText, processingTime: requestDuration }, contextForLogger, requestId);
240
+ return normalizedResponse;
241
+ }
242
+ else {
243
+ const error = new Error(`Status ${response?.status || 'unknown'}`);
244
+ logging_utils_1.logger.error('Error calling Azure OpenAI', {
245
+ context: this.constructor.name,
246
+ error: error.message,
247
+ metadata: response?.data || {}
248
+ });
249
+ this.dataFlowLogger.logLLMResponse(debugContext || 'azure-openai', { rawResponse: '', processingTime: Date.now() - requestStartTime, error }, contextForLogger, requestId);
250
+ return null;
251
+ }
252
+ }
253
+ catch (error) {
254
+ let errorMessage = 'Unknown error';
255
+ let errorDetails = {};
256
+ if (error instanceof Error) {
257
+ errorMessage = error.message;
258
+ }
259
+ if (error &&
260
+ typeof error === 'object' &&
261
+ 'isAxiosError' in error &&
262
+ error.isAxiosError === true) {
263
+ const axiosError = error;
264
+ if (axiosError.response) {
265
+ errorDetails = {
266
+ statusCode: axiosError.response.status,
267
+ statusText: axiosError.response.statusText,
268
+ data: axiosError.response.data
269
+ };
270
+ if (axiosError.response.status === 401) {
271
+ logging_utils_1.logger.error('Authentication error with Azure OpenAI', {
272
+ context: this.constructor.name,
273
+ error: 'Invalid Azure OpenAI API key (sent in the api-key header)',
274
+ metadata: { statusCode: 401, message: axiosError.response.data?.error?.message }
275
+ });
276
+ }
277
+ else if (axiosError.response.status === 404) {
278
+ logging_utils_1.logger.error('Azure OpenAI deployment or route not found', {
279
+ context: this.constructor.name,
280
+ error: 'Deployment name not found, or endpoint/route incorrect',
281
+ metadata: {
282
+ statusCode: 404,
283
+ deployment,
284
+ hint: 'Verify the deployment name and that AZURE_OPENAI_ENDPOINT points at the resource host.'
285
+ }
286
+ });
287
+ }
288
+ else if (axiosError.response.status === 429) {
289
+ logging_utils_1.logger.error('Rate limit / quota exceeded on Azure OpenAI', {
290
+ context: this.constructor.name,
291
+ error: 'Too many requests',
292
+ metadata: { statusCode: 429, retryAfter: axiosError.response.headers?.['retry-after'] }
293
+ });
294
+ }
295
+ else if (axiosError.response.status === 400) {
296
+ logging_utils_1.logger.error('Bad request to Azure OpenAI', {
297
+ context: this.constructor.name,
298
+ error: axiosError.response.data?.error?.message || 'Invalid request',
299
+ metadata: {
300
+ deployment,
301
+ isReasoning,
302
+ hint: isReasoning
303
+ ? 'Reasoning models reject temperature/max_tokens; they require max_completion_tokens.'
304
+ : 'Check parameter compatibility for this deployment.',
305
+ details: axiosError.response.data?.error
306
+ }
307
+ });
308
+ }
309
+ }
310
+ }
311
+ logging_utils_1.logger.error('Error in Azure OpenAI API request', {
312
+ context: this.constructor.name,
313
+ error: errorMessage,
314
+ metadata: { ...errorDetails, requestDeployment: deployment, sessionId }
315
+ });
316
+ this.dataFlowLogger.logLLMResponse(debugContext || 'azure-openai', {
317
+ rawResponse: '',
318
+ processingTime: Date.now() - requestStartTime,
319
+ error: error instanceof Error ? error : new Error(errorMessage)
320
+ }, contextForLogger, requestId);
321
+ debugInfo.responseTimestamp = new Date();
322
+ debugInfo.error = { message: errorMessage, details: errorDetails };
323
+ await debug_llm_utils_1.LLMDebugger.logError(debugInfo);
324
+ return null;
325
+ }
326
+ }
327
+ }
328
+ exports.AzureOpenAIProvider = AzureOpenAIProvider;
329
+ exports.AzureOpenAIService = AzureOpenAIProvider;
330
+ // Export singleton instance
331
+ exports.azureOpenAIProvider = new AzureOpenAIProvider();
332
+ exports.azureOpenAIService = exports.azureOpenAIProvider;
333
+ //# sourceMappingURL=azure-openai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-provider.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/azure-openai-provider.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,6 @@ export * from './anthropic-provider';
4
4
  export * from './gemini-provider';
5
5
  export * from './requesty-provider';
6
6
  export * from './bedrock-provider';
7
+ export * from './azure-openai-provider';
8
+ export * from './azure-openai-capabilities';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -22,6 +22,8 @@ __exportStar(require("./anthropic-provider"), exports);
22
22
  __exportStar(require("./gemini-provider"), exports);
23
23
  __exportStar(require("./requesty-provider"), exports);
24
24
  __exportStar(require("./bedrock-provider"), exports);
25
+ __exportStar(require("./azure-openai-provider"), exports);
26
+ __exportStar(require("./azure-openai-capabilities"), exports);
25
27
  // Future providers will be added here:
26
28
  // export * from './openai-provider';
27
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gBAAgB;AAChB,sDAAoC;AAEpC,qBAAqB;AACrB,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AAEnC,uCAAuC;AACvC,qCAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gBAAgB;AAChB,sDAAoC;AAEpC,qBAAqB;AACrB,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,0DAAwC;AACxC,8DAA4C;AAE5C,uCAAuC;AACvC,qCAAqC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Azure OpenAI / Microsoft Foundry-specific types and interfaces.
3
+ *
4
+ * Azure exposes OpenAI (and some partner) models through an OpenAI-compatible
5
+ * Chat Completions API. This provider targets the new **v1 route**
6
+ * (`{endpoint}/openai/v1/chat/completions`), where the deployment name is sent
7
+ * as the `model` field in the request body and `api-version` is optional.
8
+ *
9
+ * Authentication uses an Azure API key in the **`api-key` header** (not
10
+ * `Authorization: Bearer`, which Azure reserves for Microsoft Entra ID tokens).
11
+ *
12
+ * Reasoning models (o-series, GPT-5 series) and standard models (gpt-4o, โ€ฆ) take
13
+ * a different parameter set; see `providers/azure-openai-capabilities.ts`.
14
+ *
15
+ * @see https://learn.microsoft.com/en-us/azure/foundry/openai/latest
16
+ */
17
+ import { CommonLLMOptions, CommonLLMResponse } from './common.types';
18
+ /**
19
+ * Azure-specific request options.
20
+ * Extends common options with Azure/Foundry-specific parameters.
21
+ */
22
+ export interface AzureOpenAIRequestOptions extends CommonLLMOptions {
23
+ /**
24
+ * Resource endpoint base URL, e.g. `https://<resource>.openai.azure.com` or
25
+ * `https://<resource>.services.ai.azure.com`. The region is encoded in the host.
26
+ * Falls back to `baseUrl`, then the AZURE_OPENAI_ENDPOINT env var.
27
+ */
28
+ endpoint?: string;
29
+ /**
30
+ * Deployment name โ€” sent as the `model` field in the request body.
31
+ * Falls back to the common `model` option, then the AZURE_OPENAI_DEPLOYMENT env var.
32
+ */
33
+ deployment?: string;
34
+ /**
35
+ * Optional `api-version` query parameter. Leave empty for the v1 GA route.
36
+ * Falls back to the AZURE_OPENAI_API_VERSION env var.
37
+ */
38
+ apiVersion?: string;
39
+ /** Nucleus sampling โ€” standard models only; ignored for reasoning models. */
40
+ topP?: number;
41
+ /**
42
+ * Explicit override for reasoning-model parameter handling. Azure deployment
43
+ * names are user-chosen, so the name heuristic can miss a renamed reasoning
44
+ * model โ€” set this to force the correct behavior.
45
+ * - `true` โ†’ treat as a reasoning model (max_completion_tokens, no temperature, reasoning_effort)
46
+ * - `false` โ†’ treat as a standard model (max_tokens, temperature)
47
+ */
48
+ reasoningModel?: boolean;
49
+ /** Request timeout in milliseconds (default: 180000). */
50
+ timeout?: number;
51
+ }
52
+ /**
53
+ * Reasoning effort values accepted by Azure reasoning models.
54
+ * `minimal`/`xhigh`/`none` are only supported by specific model generations.
55
+ */
56
+ export type AzureOpenAIReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
57
+ /** OpenAI-compatible content part for multimodal (vision) messages. */
58
+ export type AzureOpenAIContentPart = {
59
+ type: 'text';
60
+ text: string;
61
+ } | {
62
+ type: 'image_url';
63
+ image_url: {
64
+ url: string;
65
+ detail?: 'low' | 'high' | 'auto';
66
+ };
67
+ };
68
+ /** OpenAI-compatible chat message. `developer` is the reasoning-model equivalent of `system`. */
69
+ export interface AzureOpenAIMessage {
70
+ role: 'system' | 'developer' | 'user' | 'assistant';
71
+ content: string | AzureOpenAIContentPart[];
72
+ }
73
+ /**
74
+ * Azure OpenAI Chat Completions request payload (OpenAI-compatible).
75
+ * `max_tokens` vs `max_completion_tokens` and `temperature` vs `reasoning_effort`
76
+ * are mutually exclusive per model class โ€” the provider sets only the valid set.
77
+ */
78
+ export interface AzureOpenAIRequest {
79
+ /** Deployment name */
80
+ model: string;
81
+ messages: AzureOpenAIMessage[];
82
+ /** Standard models only. Reasoning models reject this (HTTP 400). */
83
+ max_tokens?: number;
84
+ /** Reasoning models only (replaces max_tokens). */
85
+ max_completion_tokens?: number;
86
+ /** Standard models only. Reasoning models reject this (HTTP 400). */
87
+ temperature?: number;
88
+ /** Standard models only. */
89
+ top_p?: number;
90
+ /** Reasoning models only. */
91
+ reasoning_effort?: AzureOpenAIReasoningEffort;
92
+ }
93
+ /** Azure Chat Completions token usage (OpenAI-compatible, with Azure detail blocks). */
94
+ export interface AzureOpenAIUsage {
95
+ prompt_tokens: number;
96
+ completion_tokens: number;
97
+ total_tokens: number;
98
+ /** Reasoning-model detail; `reasoning_tokens` is a subset of `completion_tokens`. */
99
+ completion_tokens_details?: {
100
+ reasoning_tokens?: number;
101
+ accepted_prediction_tokens?: number;
102
+ rejected_prediction_tokens?: number;
103
+ audio_tokens?: number;
104
+ };
105
+ /** `cached_tokens` reflects prompt-cache hits. */
106
+ prompt_tokens_details?: {
107
+ cached_tokens?: number;
108
+ audio_tokens?: number;
109
+ };
110
+ }
111
+ /** Azure OpenAI Chat Completions API response payload. */
112
+ export interface AzureOpenAIAPIResponse {
113
+ id: string;
114
+ object: string;
115
+ created: number;
116
+ model: string;
117
+ choices: Array<{
118
+ index: number;
119
+ message: {
120
+ role: 'assistant';
121
+ content: string;
122
+ };
123
+ finish_reason: string | null;
124
+ }>;
125
+ usage: AzureOpenAIUsage;
126
+ }
127
+ /**
128
+ * Azure OpenAI-specific response (normalized to CommonLLMResponse).
129
+ * Keeps the raw id/finish_reason for consumers that need them.
130
+ */
131
+ export interface AzureOpenAIResponse extends CommonLLMResponse {
132
+ id?: string;
133
+ finish_reason?: string;
134
+ }
135
+ //# sourceMappingURL=azure-openai.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/azure-openai.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Azure OpenAI / Microsoft Foundry-specific types and interfaces.
4
+ *
5
+ * Azure exposes OpenAI (and some partner) models through an OpenAI-compatible
6
+ * Chat Completions API. This provider targets the new **v1 route**
7
+ * (`{endpoint}/openai/v1/chat/completions`), where the deployment name is sent
8
+ * as the `model` field in the request body and `api-version` is optional.
9
+ *
10
+ * Authentication uses an Azure API key in the **`api-key` header** (not
11
+ * `Authorization: Bearer`, which Azure reserves for Microsoft Entra ID tokens).
12
+ *
13
+ * Reasoning models (o-series, GPT-5 series) and standard models (gpt-4o, โ€ฆ) take
14
+ * a different parameter set; see `providers/azure-openai-capabilities.ts`.
15
+ *
16
+ * @see https://learn.microsoft.com/en-us/azure/foundry/openai/latest
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ //# sourceMappingURL=azure-openai.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/azure-openai.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -145,7 +145,9 @@ export declare enum LLMProvider {
145
145
  /** Google Vertex AI - Service Account auth, EU hosting support */
146
146
  VERTEX_AI = "vertex_ai",
147
147
  /** AWS Bedrock - Bearer token (API key) auth via Converse API, EU hosting support */
148
- BEDROCK = "bedrock"
148
+ BEDROCK = "bedrock",
149
+ /** Azure OpenAI / Microsoft Foundry - api-key auth via OpenAI-compatible v1 route, EU data-zone support */
150
+ AZURE_OPENAI = "azure_openai"
149
151
  }
150
152
  /**
151
153
  * Debug information interface (provider-agnostic)
@@ -174,5 +176,12 @@ export interface LLMDebugInfo {
174
176
  pageName?: string;
175
177
  temperature?: number;
176
178
  reasoningEffort?: ReasoningEffort;
179
+ /**
180
+ * Reasoning/thinking tokens reported by the model (output side, since 2.29.0).
181
+ * Surfaced in the log so you can see whether reasoning actually happened โ€” useful
182
+ * for providers that hide the raw reasoning text (e.g. Azure o-series exposes only
183
+ * the token count). Distinct from `reasoningEffort` (the requested input level).
184
+ */
185
+ reasoningTokens?: number;
177
186
  }
178
187
  //# sourceMappingURL=common.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/common.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/common.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,yFAAyF;IACzF,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,aAAa,CAAC,EAAE;QACd,kCAAkC;QAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,6BAA6B;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,6GAA6G;QAC7G,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,wDAAwD;QACxD,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,kEAAkE;IAClE,SAAS,cAAc;IACvB,qFAAqF;IACrF,OAAO,YAAY;IACnB,2GAA2G;IAC3G,YAAY,iBAAiB;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAGF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAGlB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -18,5 +18,7 @@ var LLMProvider;
18
18
  LLMProvider["VERTEX_AI"] = "vertex_ai";
19
19
  /** AWS Bedrock - Bearer token (API key) auth via Converse API, EU hosting support */
20
20
  LLMProvider["BEDROCK"] = "bedrock";
21
+ /** Azure OpenAI / Microsoft Foundry - api-key auth via OpenAI-compatible v1 route, EU data-zone support */
22
+ LLMProvider["AZURE_OPENAI"] = "azure_openai";
21
23
  })(LLMProvider || (exports.LLMProvider = LLMProvider = {}));
22
24
  //# sourceMappingURL=common.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/common.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA6JH;;GAEG;AACH,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,kEAAkE;IAClE,sCAAuB,CAAA;IACvB,qFAAqF;IACrF,kCAAmB,CAAA;AACrB,CAAC,EAVW,WAAW,2BAAX,WAAW,QAUtB"}
1
+ {"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/common.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA6JH;;GAEG;AACH,IAAY,WAYX;AAZD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,kEAAkE;IAClE,sCAAuB,CAAA;IACvB,qFAAqF;IACrF,kCAAmB,CAAA;IACnB,2GAA2G;IAC3G,4CAA6B,CAAA;AAC/B,CAAC,EAZW,WAAW,2BAAX,WAAW,QAYtB"}
@@ -6,4 +6,5 @@ export * from './gemini.types';
6
6
  export * from './requesty.types';
7
7
  export * from './vertex-ai.types';
8
8
  export * from './bedrock.types';
9
+ export * from './azure-openai.types';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -25,4 +25,5 @@ __exportStar(require("./gemini.types"), exports);
25
25
  __exportStar(require("./requesty.types"), exports);
26
26
  __exportStar(require("./vertex-ai.types"), exports);
27
27
  __exportStar(require("./bedrock.types"), exports);
28
+ __exportStar(require("./azure-openai.types"), exports);
28
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,eAAe;AACf,iDAA+B;AAE/B,wCAAwC;AACxC,qDAAmC;AAEnC,0BAA0B;AAC1B,iDAA+B;AAC/B,oDAAkC;AAClC,iDAA+B;AAC/B,mDAAiC;AACjC,oDAAkC;AAClC,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,eAAe;AACf,iDAA+B;AAE/B,wCAAwC;AACxC,qDAAmC;AAEnC,0BAA0B;AAC1B,iDAA+B;AAC/B,oDAAkC;AAClC,iDAA+B;AAC/B,mDAAiC;AACjC,oDAAkC;AAClC,kDAAgC;AAChC,uDAAqC"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-llm.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/debug-llm.utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA2F;IACnH,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAA6G;IAChJ,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA+G;IAEnJ,OAAO,CAAC,MAAM,CAAC,SAAS,CAEiD;IAEzE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAclD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQ7C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAwDzD;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAsE1D;;OAEG;WACU,cAAc,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WAyHtD,UAAU,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WAMlD,WAAW,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WAOnD,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAK9D;AAGD,YAAY,EAAE,YAAY,EAAE,CAAC;AAG7B,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,CAAC;AACzC,YAAY,EAAE,YAAY,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"debug-llm.utils.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/debug-llm.utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA2F;IACnH,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAA6G;IAChJ,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA+G;IAEnJ,OAAO,CAAC,MAAM,CAAC,SAAS,CAEiD;IAEzE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAclD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQ7C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAwDzD;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IA0E1D;;OAEG;WACU,cAAc,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WA0HtD,UAAU,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WAMlD,WAAW,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;WAOnD,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAK9D;AAGD,YAAY,EAAE,YAAY,EAAE,CAAC;AAG7B,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,CAAC;AACzC,YAAY,EAAE,YAAY,IAAI,eAAe,EAAE,CAAC"}
@@ -164,6 +164,9 @@ class LLMDebugger {
164
164
  console.log('-'.repeat(50));
165
165
  console.log(this.formatMessage(debugInfo.thinking));
166
166
  }
167
+ if (debugInfo.reasoningTokens !== undefined) {
168
+ console.log(`\n๐Ÿง  Reasoning Tokens: ${debugInfo.reasoningTokens}`);
169
+ }
167
170
  // Show key metrics from raw response data
168
171
  if (debugInfo.rawResponseData) {
169
172
  console.log('\nโฑ๏ธ RESPONSE METRICS:');
@@ -237,6 +240,7 @@ class LLMDebugger {
237
240
  - **Base URL**: ${debugInfo.baseUrl}
238
241
  ${debugInfo.temperature !== undefined ? `- **Temperature**: ${debugInfo.temperature}` : ''}
239
242
  ${debugInfo.reasoningEffort ? `- **Reasoning Effort**: ${debugInfo.reasoningEffort}` : ''}
243
+ ${debugInfo.reasoningTokens !== undefined ? `- **Reasoning Tokens**: ${debugInfo.reasoningTokens}` : ''}
240
244
 
241
245
  ## Request Information
242
246
  - **Request Timestamp**: ${debugInfo.timestamp.toISOString()}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-llm.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/debug-llm.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug-llm.utils.js","sourceRoot":"","sources":["../../../../../src/middleware/services/llm/utils/debug-llm.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,kEAA8D;AAC9D,+DAAqD;AAGrD;;;;GAIG;AACH,MAAa,WAAW;IAStB;;OAEG;IACK,MAAM,CAAC,UAAU,CAAC,QAAgB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAgB;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAe;QAClC,oCAAoC;QACpC,OAAO,OAAO;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAuB;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,oDAAoD;QACpD,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACpD,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC;QAC3E,CAAC;aAAM,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YACnC,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,GAAG,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9D,wCAAwC;QACxC,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,wCAAwC;QACxC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,aAAa,IAAI,GAAG,UAAU,SAAS,CAAC,UAAU,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnK,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,sBAAsB;YACtB,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAEvD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,SAAuB;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,oDAAoD;QACpD,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACpD,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC;QAC3E,CAAC;aAAM,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YACnC,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,GAAG,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QAE9D,wCAAwC;QACxC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,aAAa,IAAI,GAAG,UAAU,SAAS,CAAC,UAAU,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnK,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,0CAA0C;YAC1C,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,SAAS,CAAC,eAAe,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBACD,IAAI,SAAS,CAAC,eAAe,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAC/E,CAAC;gBACD,IAAI,SAAS,CAAC,eAAe,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;oBAC3D,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC5E,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,GAAG,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,SAAS,CAAC,eAAe,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBAC1D,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/E,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,GAAG,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAuB;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE1E,kCAAkC;QAClC,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,WAAW,GAAG,SAAS,CAAC,OAAO;iBAC5B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;iBACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;iBACvB,WAAW,EAAE,CAAC;QACnB,CAAC;QAED,0CAA0C;QAC1C,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACpD,iBAAiB,GAAG,KAAK,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7E,CAAC;aAAM,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YACnC,iBAAiB,GAAG,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,WAAW,GAAG,iBAAiB,KAAK,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE9C,iDAAiD;QACjD,IAAI,oBAAoB,GAAG,EAAE,CAAC;QAC9B,IAAI,oBAAoB,GAAG,EAAE,CAAC;QAE9B,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,GAC5E,kCAAY,CAAC,4BAA4B,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAEpE,oBAAoB,GAAG,WAAW,CAAC;YACnC,oBAAoB,GAAG,WAAW,CAAC;QACrC,CAAC;QAED,MAAM,eAAe,GAAG;;;kBAGV,SAAS,CAAC,QAAQ;eACrB,SAAS,CAAC,KAAK;kBACZ,SAAS,CAAC,OAAO;EACjC,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;EACxF,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,2BAA2B,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE;EACvF,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,2BAA2B,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE;;;2BAG5E,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;4BAChC,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,KAAK;kBAC7D,SAAS,CAAC,OAAO,IAAI,SAAS;oBAC5B,SAAS,CAAC,SAAS;EACrC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,aAAa,IAAI,KAAK;cAC9G,SAAS,CAAC,UAAU,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;mBAChD,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;;EAEjD,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;;EAE9B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;;CAErD,CAAC,CAAC,CAAC,EAAE;;;;EAIJ,SAAS,CAAC,aAAa;;;;;EAKvB,SAAS,CAAC,WAAW;;;;;EAKrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAG9C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;;EAErB,SAAS,CAAC,QAAQ;;CAEnB,CAAC,CAAC,CAAC,EAAE;;EAEJ,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;;EAE5B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;;CAEnD,CAAC,CAAC,CAAC,EAAE;;EAEJ,oBAAoB;;EAEpB,oBAAoB;;EAEpB,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;;EAErB,SAAS,CAAC,QAAQ;;CAEnB,CAAC,CAAC,CAAC,EAAE;;EAEJ,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;iBACH,SAAS,CAAC,KAAK,CAAC,OAAO;EACtC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;EAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;CAEjD,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;;;gBAGG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACvC,CAAC;QAEE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAuB;QAC7C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAuB;QAC9C,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAuB;QAC3C,wEAAwE;QACxE,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;;AAlUH,kCAmUC;AAMuB,qCAAc;AAxUrB,qBAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,CAAC;AACpG,gCAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,CAAC;AACjI,iCAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,OAAO,CAAC;AAEpI,qBAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM;IAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM;IAC5C,sBAAS,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loonylabs/llm-middleware",
3
- "version": "2.28.0",
3
+ "version": "2.29.0",
4
4
  "description": "Complete middleware infrastructure for LLM-based backends with multi-provider support (Ollama, Anthropic, OpenAI, Google)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,6 +27,7 @@
27
27
  "test:provider:requesty": "TEST_PROVIDER=requesty ts-node tests/manual/provider-smoke-test.ts",
28
28
  "test:provider:vertex": "ts-node tests/manual/vertex-ai-smoke-test.ts",
29
29
  "test:provider:bedrock": "TEST_PROVIDER=bedrock ts-node tests/manual/provider-smoke-test.ts",
30
+ "test:provider:azure": "TEST_PROVIDER=azure ts-node tests/manual/provider-smoke-test.ts",
30
31
  "test:vertex:smoke": "ts-node tests/manual/vertex-ai-smoke-test.ts",
31
32
  "test:integration:reasoning": "LLM_INTEGRATION_TESTS=true jest tests/integration/reasoning-control.integration.test.ts --testTimeout=120000",
32
33
  "test:live": "LLM_INTEGRATION_TESTS=true jest tests/integration/*.integration.test.ts --testTimeout=120000",