@x12i/ai-gateway 9.1.3 → 9.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -789,7 +789,9 @@ const response = await gateway.invoke({
789
789
 
790
790
  - **`GatewayConfig.templateRendering`** — default `TemplateRenderOptions` for every `invoke()` render path (merged after packaged **`src/defaults/template-rendering.json`**, which ships with **`subPathSearch.enabled: false`**). Your gateway config overrides that JSON.
791
791
  - **`templateRenderOptions` on the request** (`ChatRequest` / `AIInvokeRequest`) — merged on top of the gateway default for that call only (per-field override; `subPathSearch` fields merge with request winning).
792
- - Supported fields match the parser: **`templateId`**, **`subPathSearch`** (`enabled`, `roots`), **`silentMissingMustTokens`** (legacy Handlebars-style silence for missing MUST paths).
792
+ - **Smart Input (optional shorthand on the request)** top-level **`smartInput`** (`SmartInputConfig`) and **`smartInputRenderOptions`** (`SmartInputRenderOptions`) are merged into the same Rendrix options object **after** `GatewayConfig.templateRendering` and **before** `templateRenderOptions`. If you set the same field both as a shorthand and inside **`templateRenderOptions`**, the nested **`templateRenderOptions`** value wins. Templates use the **`{{smartInput}}`** insertion macro (see **`@x12i/rendrix`**). Types **`SmartInputConfig`** and **`SmartInputRenderOptions`** are re-exported from this package.
793
+ - For programmatic merges (tests or wrappers), use **`mergeGatewayAndRequestTemplateRenderOptions`** (same rules as `buildMessages`).
794
+ - Supported fields match the parser: **`templateId`**, **`subPathSearch`** (`enabled`, `roots`), **`silentMissingMustTokens`** (legacy Handlebars-style silence for missing MUST paths), **`smartInput`**, **`smartInputRenderOptions`**.
793
795
  - **Sub-path root priority:** `subPathSearch.roots` is an **ordered** list. The parser tries roots in **array order**; **the first root that resolves the leaf path wins** (see ISSUE-005). There is no separate “priority” field—the order of `roots` *is* the priority. Omit `roots` when `enabled` is true to use **`@x12i/rendrix`** packaged defaults.
794
796
 
795
797
  ```typescript
package/dist/index.d.ts CHANGED
@@ -16,9 +16,10 @@ export * from '@x12i/ai-providers-router';
16
16
  export { AIGateway } from './gateway.js';
17
17
  export { InstructionNotFoundError, InstructionBackendError } from './instruction-errors.js';
18
18
  export { autoRegisterProviders } from './gateway-provider-auto-register.js';
19
- export type { GatewayConfig, ProviderModelRef, ModelConfig, RetryConfig, ChatRequest, AIInvokeRequest, AIRequest, GatewayActionType, GatewayInvokeRejectionMetadata, GatewayTraceRequestIds, GatewayTraceMergedConfig, EnhancedLLMResponse, InstructionMetadata, ValidationRule, TemplateRenderOptions } from './types.js';
19
+ export type { GatewayConfig, ProviderModelRef, ModelConfig, RetryConfig, ChatRequest, AIInvokeRequest, AIRequest, GatewayActionType, GatewayInvokeRejectionMetadata, GatewayTraceRequestIds, GatewayTraceMergedConfig, EnhancedLLMResponse, InstructionMetadata, ValidationRule, TemplateRenderOptions, SmartInputConfig, SmartInputRenderOptions } from './types.js';
20
20
  export { attachGatewayInvokeRejectionMetadata, buildInvokeRejectionMetadata, tryExtractRouterLikePayloadFromErrorChain, pickRequestIdsFromRouterLike } from './gateway-utils.js';
21
- export { mergeTemplateRenderOptions } from './template-render-merge.js';
21
+ export { mergeGatewayAndRequestTemplateRenderOptions, mergeTemplateRenderOptions } from './template-render-merge.js';
22
+ export type { GatewayTemplateRenderRequestSlice } from './template-render-merge.js';
22
23
  export type { UsageTier } from './types.js';
23
24
  export { Activix } from '@x12i/activix';
24
25
  export type { ActivixRunContext, FindByRunContextCriteria, GetJobActivitiesInput, GetJobActivitiesResult } from '@x12i/activix';
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ export { AIGateway } from './gateway.js';
18
18
  export { InstructionNotFoundError, InstructionBackendError } from './instruction-errors.js';
19
19
  export { autoRegisterProviders } from './gateway-provider-auto-register.js';
20
20
  export { attachGatewayInvokeRejectionMetadata, buildInvokeRejectionMetadata, tryExtractRouterLikePayloadFromErrorChain, pickRequestIdsFromRouterLike } from './gateway-utils.js';
21
- export { mergeTemplateRenderOptions } from './template-render-merge.js';
21
+ export { mergeGatewayAndRequestTemplateRenderOptions, mergeTemplateRenderOptions } from './template-render-merge.js';
22
22
  // Usage tracking: UsageTracker class methods are available but consumption calculation is disabled
23
23
  // (x-models was previously used for RPM/TPM tracking but is no longer integrated)
24
24
  // Re-export activity tracking primitives (Activix)
@@ -4,7 +4,7 @@
4
4
  * Handles flex-md format exclusively
5
5
  */
6
6
  import { parseTemplate } from './template-parser.js';
7
- import { mergeTemplateRenderOptions } from './template-render-merge.js';
7
+ import { mergeGatewayAndRequestTemplateRenderOptions } from './template-render-merge.js';
8
8
  import { resolveNestedInstructionsBlock } from './gateway-instructions.js';
9
9
  // Type guard
10
10
  // AIRequest is distinguished by having primaryObjectType or objectTypes
@@ -379,7 +379,7 @@ export async function buildMessages(request, config, options = {}) {
379
379
  const shortTermMemory = options.shortTermMemory;
380
380
  const experienceMemory = options.experienceMemory;
381
381
  const knowledgeMemory = options.knowledgeMemory;
382
- const templateRenderOptions = mergeTemplateRenderOptions(config.templateRendering, request.templateRenderOptions);
382
+ const templateRenderOptions = mergeGatewayAndRequestTemplateRenderOptions(config.templateRendering, request);
383
383
  if (request.instructions) {
384
384
  if (typeof request.instructions === 'string') {
385
385
  logger.info('Using instructions as template text', {
@@ -1,9 +1,20 @@
1
1
  /**
2
2
  * Merge @x12i/rendrix TemplateRenderOptions from gateway defaults and per-request overrides.
3
3
  */
4
- import type { TemplateRenderOptions } from '@x12i/rendrix';
4
+ import type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
5
+ /** Request fields that participate in gateway + Rendrix template option merging. */
6
+ export type GatewayTemplateRenderRequestSlice = {
7
+ smartInput?: SmartInputConfig;
8
+ smartInputRenderOptions?: SmartInputRenderOptions;
9
+ templateRenderOptions?: TemplateRenderOptions;
10
+ };
5
11
  /**
6
12
  * Deep-merge template render options. Request/gateway overrides win per field.
7
13
  * For `subPathSearch`, `roots` on the override replace the base list when present.
8
14
  */
9
15
  export declare function mergeTemplateRenderOptions(base?: TemplateRenderOptions, override?: TemplateRenderOptions): TemplateRenderOptions | undefined;
16
+ /**
17
+ * Gateway default `templateRendering` + optional request shorthand (`smartInput`, `smartInputRenderOptions`) + `templateRenderOptions`.
18
+ * Same merge order as {@link buildMessages}.
19
+ */
20
+ export declare function mergeGatewayAndRequestTemplateRenderOptions(gatewayTemplateRendering: TemplateRenderOptions | undefined, request: GatewayTemplateRenderRequestSlice): TemplateRenderOptions | undefined;
@@ -6,6 +6,10 @@ function hasMeaningfulOptions(o) {
6
6
  return true;
7
7
  if (o.silentMissingMustTokens !== undefined)
8
8
  return true;
9
+ if (o.smartInput !== undefined)
10
+ return true;
11
+ if (o.smartInputRenderOptions !== undefined)
12
+ return true;
9
13
  if (o.subPathSearch !== undefined) {
10
14
  const s = o.subPathSearch;
11
15
  return (s.enabled !== undefined ||
@@ -38,3 +42,18 @@ export function mergeTemplateRenderOptions(base, override) {
38
42
  }
39
43
  return hasMeaningfulOptions(merged) ? merged : undefined;
40
44
  }
45
+ /**
46
+ * Gateway default `templateRendering` + optional request shorthand (`smartInput`, `smartInputRenderOptions`) + `templateRenderOptions`.
47
+ * Same merge order as {@link buildMessages}.
48
+ */
49
+ export function mergeGatewayAndRequestTemplateRenderOptions(gatewayTemplateRendering, request) {
50
+ const requestSmartTemplateOpts = request.smartInput !== undefined || request.smartInputRenderOptions !== undefined
51
+ ? {
52
+ ...(request.smartInput !== undefined ? { smartInput: request.smartInput } : {}),
53
+ ...(request.smartInputRenderOptions !== undefined
54
+ ? { smartInputRenderOptions: request.smartInputRenderOptions }
55
+ : {})
56
+ }
57
+ : undefined;
58
+ return mergeTemplateRenderOptions(mergeTemplateRenderOptions(gatewayTemplateRendering, requestSmartTemplateOpts), request.templateRenderOptions);
59
+ }
package/dist/types.d.ts CHANGED
@@ -8,7 +8,7 @@ type AIProvider = string;
8
8
  type AIModel = string;
9
9
  export type UsageTier = string;
10
10
  import type { Activix } from '@x12i/activix';
11
- import type { TemplateRenderOptions } from '@x12i/rendrix';
11
+ import type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
12
12
  import type { Logxer } from '@x12i/logxer';
13
13
  /**
14
14
  * Diagnostics options for opt-in authoritative tracing.
@@ -168,8 +168,8 @@ export type ActivityIdentity = {
168
168
  */
169
169
  actionRef?: string;
170
170
  };
171
- /** Re-export parser template options for gateway consumers (MUST/optional protocol, subPathSearch, etc.). */
172
- export type { TemplateRenderOptions } from '@x12i/rendrix';
171
+ /** Re-export parser template options for gateway consumers (MUST/optional protocol, subPathSearch, smartInput, etc.). */
172
+ export type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
173
173
  type LLMRequest = Parameters<LLMProviderRouter['invoke']>[0];
174
174
  type LLMResponse = Awaited<ReturnType<LLMProviderRouter['invoke']>>;
175
175
  /**
@@ -635,6 +635,17 @@ interface BaseLLMRequest extends Omit<LLMRequest, 'messages' | 'input' | 'reques
635
635
  * the full list or only set `enabled` and inherit `roots` from the gateway default merge.
636
636
  */
637
637
  templateRenderOptions?: TemplateRenderOptions;
638
+ /**
639
+ * Smart Input paths for Rendrix `{{smartInput}}` (optional shorthand).
640
+ * Merged into render options after gateway `templateRendering` and before `templateRenderOptions`
641
+ * (nested `templateRenderOptions.smartInput` wins when both are set).
642
+ */
643
+ smartInput?: SmartInputConfig;
644
+ /**
645
+ * Rendering controls for Smart Input markdown (optional shorthand).
646
+ * Merged the same way as `smartInput`; `templateRenderOptions.smartInputRenderOptions` wins when both are set.
647
+ */
648
+ smartInputRenderOptions?: SmartInputRenderOptions;
638
649
  /**
639
650
  * Messages array - Optional, can be used instead of instructions/prompt
640
651
  * If provided, will be appended as-is after built messages; instructions template text is still parsed for the system message when present
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
21
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
22
  };
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.resetObjectTypesLibrary = exports.getObjectTypesLibrary = exports.initializeObjectTypesLibrary = exports.getObjectTypesForAgent = exports.getObjectType = exports.OBJECT_TYPES_LIBRARY = exports.assertValidAIRequest = exports.formatDiagnostic = exports.runValidationTests = exports.createValidationTestCases = exports.createTestAIRequest = exports.supportsJSONMode = exports.diagnoseResponse = exports.diagnoseRequest = exports.validateResponse = exports.extractJSON = exports.validateJSON = exports.validateAIRequest = exports.DEFAULT_RATE_LIMIT_ENABLED = exports.DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS = exports.GatewayRateLimiter = exports.runtimeObjects = exports.DebugLogAbstract = exports.createLogxer = exports.gatewayLogDebug = exports.withActivityIdentity = exports.activityIdentityToLogMeta = exports.ensureGatewayRequestIdentity = exports.ActivityManager = exports.Activix = exports.mergeTemplateRenderOptions = exports.pickRequestIdsFromRouterLike = exports.tryExtractRouterLikePayloadFromErrorChain = exports.buildInvokeRejectionMetadata = exports.attachGatewayInvokeRejectionMetadata = exports.autoRegisterProviders = exports.InstructionBackendError = exports.InstructionNotFoundError = exports.AIGateway = exports.FallbackExhaustedError = exports.ProviderNotFoundError = exports.createRouterFromConfig = exports.createRouter = exports.LLMProviderRouter = void 0;
24
+ exports.resetObjectTypesLibrary = exports.getObjectTypesLibrary = exports.initializeObjectTypesLibrary = exports.getObjectTypesForAgent = exports.getObjectType = exports.OBJECT_TYPES_LIBRARY = exports.assertValidAIRequest = exports.formatDiagnostic = exports.runValidationTests = exports.createValidationTestCases = exports.createTestAIRequest = exports.supportsJSONMode = exports.diagnoseResponse = exports.diagnoseRequest = exports.validateResponse = exports.extractJSON = exports.validateJSON = exports.validateAIRequest = exports.DEFAULT_RATE_LIMIT_ENABLED = exports.DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS = exports.GatewayRateLimiter = exports.runtimeObjects = exports.DebugLogAbstract = exports.createLogxer = exports.gatewayLogDebug = exports.withActivityIdentity = exports.activityIdentityToLogMeta = exports.ensureGatewayRequestIdentity = exports.ActivityManager = exports.Activix = exports.mergeTemplateRenderOptions = exports.mergeGatewayAndRequestTemplateRenderOptions = exports.pickRequestIdsFromRouterLike = exports.tryExtractRouterLikePayloadFromErrorChain = exports.buildInvokeRejectionMetadata = exports.attachGatewayInvokeRejectionMetadata = exports.autoRegisterProviders = exports.InstructionBackendError = exports.InstructionNotFoundError = exports.AIGateway = exports.FallbackExhaustedError = exports.ProviderNotFoundError = exports.createRouterFromConfig = exports.createRouter = exports.LLMProviderRouter = void 0;
25
25
  // Re-export router class and types (base functionality)
26
26
  var ai_providers_router_1 = require("@x12i/ai-providers-router");
27
27
  Object.defineProperty(exports, "LLMProviderRouter", { enumerable: true, get: function () { return ai_providers_router_1.LLMProviderRouter; } });
@@ -49,6 +49,7 @@ Object.defineProperty(exports, "buildInvokeRejectionMetadata", { enumerable: tru
49
49
  Object.defineProperty(exports, "tryExtractRouterLikePayloadFromErrorChain", { enumerable: true, get: function () { return gateway_utils_js_1.tryExtractRouterLikePayloadFromErrorChain; } });
50
50
  Object.defineProperty(exports, "pickRequestIdsFromRouterLike", { enumerable: true, get: function () { return gateway_utils_js_1.pickRequestIdsFromRouterLike; } });
51
51
  var template_render_merge_js_1 = require("./template-render-merge.cjs");
52
+ Object.defineProperty(exports, "mergeGatewayAndRequestTemplateRenderOptions", { enumerable: true, get: function () { return template_render_merge_js_1.mergeGatewayAndRequestTemplateRenderOptions; } });
52
53
  Object.defineProperty(exports, "mergeTemplateRenderOptions", { enumerable: true, get: function () { return template_render_merge_js_1.mergeTemplateRenderOptions; } });
53
54
  // Usage tracking: UsageTracker class methods are available but consumption calculation is disabled
54
55
  // (x-models was previously used for RPM/TPM tracking but is no longer integrated)
@@ -16,9 +16,10 @@ export * from '@x12i/ai-providers-router';
16
16
  export { AIGateway } from './gateway.js';
17
17
  export { InstructionNotFoundError, InstructionBackendError } from './instruction-errors.js';
18
18
  export { autoRegisterProviders } from './gateway-provider-auto-register.js';
19
- export type { GatewayConfig, ProviderModelRef, ModelConfig, RetryConfig, ChatRequest, AIInvokeRequest, AIRequest, GatewayActionType, GatewayInvokeRejectionMetadata, GatewayTraceRequestIds, GatewayTraceMergedConfig, EnhancedLLMResponse, InstructionMetadata, ValidationRule, TemplateRenderOptions } from './types.js';
19
+ export type { GatewayConfig, ProviderModelRef, ModelConfig, RetryConfig, ChatRequest, AIInvokeRequest, AIRequest, GatewayActionType, GatewayInvokeRejectionMetadata, GatewayTraceRequestIds, GatewayTraceMergedConfig, EnhancedLLMResponse, InstructionMetadata, ValidationRule, TemplateRenderOptions, SmartInputConfig, SmartInputRenderOptions } from './types.js';
20
20
  export { attachGatewayInvokeRejectionMetadata, buildInvokeRejectionMetadata, tryExtractRouterLikePayloadFromErrorChain, pickRequestIdsFromRouterLike } from './gateway-utils.js';
21
- export { mergeTemplateRenderOptions } from './template-render-merge.js';
21
+ export { mergeGatewayAndRequestTemplateRenderOptions, mergeTemplateRenderOptions } from './template-render-merge.js';
22
+ export type { GatewayTemplateRenderRequestSlice } from './template-render-merge.js';
22
23
  export type { UsageTier } from './types.js';
23
24
  export { Activix } from '@x12i/activix';
24
25
  export type { ActivixRunContext, FindByRunContextCriteria, GetJobActivitiesInput, GetJobActivitiesResult } from '@x12i/activix';
@@ -415,7 +415,7 @@ async function buildMessages(request, config, options = {}) {
415
415
  const shortTermMemory = options.shortTermMemory;
416
416
  const experienceMemory = options.experienceMemory;
417
417
  const knowledgeMemory = options.knowledgeMemory;
418
- const templateRenderOptions = (0, template_render_merge_js_1.mergeTemplateRenderOptions)(config.templateRendering, request.templateRenderOptions);
418
+ const templateRenderOptions = (0, template_render_merge_js_1.mergeGatewayAndRequestTemplateRenderOptions)(config.templateRendering, request);
419
419
  if (request.instructions) {
420
420
  if (typeof request.instructions === 'string') {
421
421
  logger.info('Using instructions as template text', {
@@ -4,11 +4,16 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.mergeTemplateRenderOptions = mergeTemplateRenderOptions;
7
+ exports.mergeGatewayAndRequestTemplateRenderOptions = mergeGatewayAndRequestTemplateRenderOptions;
7
8
  function hasMeaningfulOptions(o) {
8
9
  if (o.templateId !== undefined)
9
10
  return true;
10
11
  if (o.silentMissingMustTokens !== undefined)
11
12
  return true;
13
+ if (o.smartInput !== undefined)
14
+ return true;
15
+ if (o.smartInputRenderOptions !== undefined)
16
+ return true;
12
17
  if (o.subPathSearch !== undefined) {
13
18
  const s = o.subPathSearch;
14
19
  return (s.enabled !== undefined ||
@@ -41,3 +46,18 @@ function mergeTemplateRenderOptions(base, override) {
41
46
  }
42
47
  return hasMeaningfulOptions(merged) ? merged : undefined;
43
48
  }
49
+ /**
50
+ * Gateway default `templateRendering` + optional request shorthand (`smartInput`, `smartInputRenderOptions`) + `templateRenderOptions`.
51
+ * Same merge order as {@link buildMessages}.
52
+ */
53
+ function mergeGatewayAndRequestTemplateRenderOptions(gatewayTemplateRendering, request) {
54
+ const requestSmartTemplateOpts = request.smartInput !== undefined || request.smartInputRenderOptions !== undefined
55
+ ? {
56
+ ...(request.smartInput !== undefined ? { smartInput: request.smartInput } : {}),
57
+ ...(request.smartInputRenderOptions !== undefined
58
+ ? { smartInputRenderOptions: request.smartInputRenderOptions }
59
+ : {})
60
+ }
61
+ : undefined;
62
+ return mergeTemplateRenderOptions(mergeTemplateRenderOptions(gatewayTemplateRendering, requestSmartTemplateOpts), request.templateRenderOptions);
63
+ }
@@ -1,9 +1,20 @@
1
1
  /**
2
2
  * Merge @x12i/rendrix TemplateRenderOptions from gateway defaults and per-request overrides.
3
3
  */
4
- import type { TemplateRenderOptions } from '@x12i/rendrix';
4
+ import type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
5
+ /** Request fields that participate in gateway + Rendrix template option merging. */
6
+ export type GatewayTemplateRenderRequestSlice = {
7
+ smartInput?: SmartInputConfig;
8
+ smartInputRenderOptions?: SmartInputRenderOptions;
9
+ templateRenderOptions?: TemplateRenderOptions;
10
+ };
5
11
  /**
6
12
  * Deep-merge template render options. Request/gateway overrides win per field.
7
13
  * For `subPathSearch`, `roots` on the override replace the base list when present.
8
14
  */
9
15
  export declare function mergeTemplateRenderOptions(base?: TemplateRenderOptions, override?: TemplateRenderOptions): TemplateRenderOptions | undefined;
16
+ /**
17
+ * Gateway default `templateRendering` + optional request shorthand (`smartInput`, `smartInputRenderOptions`) + `templateRenderOptions`.
18
+ * Same merge order as {@link buildMessages}.
19
+ */
20
+ export declare function mergeGatewayAndRequestTemplateRenderOptions(gatewayTemplateRendering: TemplateRenderOptions | undefined, request: GatewayTemplateRenderRequestSlice): TemplateRenderOptions | undefined;
@@ -8,7 +8,7 @@ type AIProvider = string;
8
8
  type AIModel = string;
9
9
  export type UsageTier = string;
10
10
  import type { Activix } from '@x12i/activix';
11
- import type { TemplateRenderOptions } from '@x12i/rendrix';
11
+ import type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
12
12
  import type { Logxer } from '@x12i/logxer';
13
13
  /**
14
14
  * Diagnostics options for opt-in authoritative tracing.
@@ -168,8 +168,8 @@ export type ActivityIdentity = {
168
168
  */
169
169
  actionRef?: string;
170
170
  };
171
- /** Re-export parser template options for gateway consumers (MUST/optional protocol, subPathSearch, etc.). */
172
- export type { TemplateRenderOptions } from '@x12i/rendrix';
171
+ /** Re-export parser template options for gateway consumers (MUST/optional protocol, subPathSearch, smartInput, etc.). */
172
+ export type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
173
173
  type LLMRequest = Parameters<LLMProviderRouter['invoke']>[0];
174
174
  type LLMResponse = Awaited<ReturnType<LLMProviderRouter['invoke']>>;
175
175
  /**
@@ -635,6 +635,17 @@ interface BaseLLMRequest extends Omit<LLMRequest, 'messages' | 'input' | 'reques
635
635
  * the full list or only set `enabled` and inherit `roots` from the gateway default merge.
636
636
  */
637
637
  templateRenderOptions?: TemplateRenderOptions;
638
+ /**
639
+ * Smart Input paths for Rendrix `{{smartInput}}` (optional shorthand).
640
+ * Merged into render options after gateway `templateRendering` and before `templateRenderOptions`
641
+ * (nested `templateRenderOptions.smartInput` wins when both are set).
642
+ */
643
+ smartInput?: SmartInputConfig;
644
+ /**
645
+ * Rendering controls for Smart Input markdown (optional shorthand).
646
+ * Merged the same way as `smartInput`; `templateRenderOptions.smartInputRenderOptions` wins when both are set.
647
+ */
648
+ smartInputRenderOptions?: SmartInputRenderOptions;
638
649
  /**
639
650
  * Messages array - Optional, can be used instead of instructions/prompt
640
651
  * If provided, will be appended as-is after built messages; instructions template text is still parsed for the system message when present
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/ai-gateway",
3
- "version": "9.1.3",
3
+ "version": "9.1.5",
4
4
  "description": "AI Gateway - Unified interface for LLM provider routing and management",
5
5
  "type": "module",
6
6
  "exports": {
@@ -61,7 +61,7 @@
61
61
  "license": "mit",
62
62
  "dependencies": {
63
63
  "@x12i/ai-providers-router": "^4.7.7",
64
- "@x12i/rendrix": "^4.2.0",
64
+ "@x12i/rendrix": "^4.3.0",
65
65
  "@aws-sdk/s3-request-presigner": "^3.953.0",
66
66
  "@x12i/env": "^4.0.1",
67
67
  "@x12i/logxer": "^4.3.5",