@mcp-abap-adt/llm-agent-server-libs 29.0.0 → 30.1.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 (104) hide show
  1. package/dist/factories/controller-factory.d.ts +2 -2
  2. package/dist/factories/controller-factory.d.ts.map +1 -1
  3. package/dist/generated/version.d.ts +1 -1
  4. package/dist/generated/version.js +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/pipelines/server-context.d.ts +2 -2
  9. package/dist/pipelines/server-context.d.ts.map +1 -1
  10. package/dist/smart-agent/config-reload-watcher.d.ts +7 -0
  11. package/dist/smart-agent/config-reload-watcher.d.ts.map +1 -1
  12. package/dist/smart-agent/config-reload-watcher.js +23 -6
  13. package/dist/smart-agent/config-reload-watcher.js.map +1 -1
  14. package/dist/smart-agent/config-validator.d.ts.map +1 -1
  15. package/dist/smart-agent/config-validator.js +198 -6
  16. package/dist/smart-agent/config-validator.js.map +1 -1
  17. package/dist/smart-agent/config.d.ts.map +1 -1
  18. package/dist/smart-agent/config.js +9 -1
  19. package/dist/smart-agent/config.js.map +1 -1
  20. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts +2 -2
  21. package/dist/smart-agent/controller/controller-coordinator-handler.d.ts.map +1 -1
  22. package/dist/smart-agent/controller/recall.d.ts +4 -2
  23. package/dist/smart-agent/controller/recall.d.ts.map +1 -1
  24. package/dist/smart-agent/controller/recall.js +5 -3
  25. package/dist/smart-agent/controller/recall.js.map +1 -1
  26. package/dist/smart-agent/controller/target-state.d.ts +2 -2
  27. package/dist/smart-agent/controller/target-state.d.ts.map +1 -1
  28. package/dist/smart-agent/controller/target-state.js +2 -2
  29. package/dist/smart-agent/controller/target-state.js.map +1 -1
  30. package/dist/smart-agent/decision-config.d.ts +32 -0
  31. package/dist/smart-agent/decision-config.d.ts.map +1 -0
  32. package/dist/smart-agent/decision-config.js +18 -0
  33. package/dist/smart-agent/decision-config.js.map +1 -0
  34. package/dist/smart-agent/embedder-knowledge-index.d.ts +4 -2
  35. package/dist/smart-agent/embedder-knowledge-index.d.ts.map +1 -1
  36. package/dist/smart-agent/embedder-knowledge-index.js +5 -3
  37. package/dist/smart-agent/embedder-knowledge-index.js.map +1 -1
  38. package/dist/smart-agent/http/adapter-route-handler.d.ts +1 -1
  39. package/dist/smart-agent/http/adapter-route-handler.d.ts.map +1 -1
  40. package/dist/smart-agent/http/adapter-route-handler.js +34 -3
  41. package/dist/smart-agent/http/adapter-route-handler.js.map +1 -1
  42. package/dist/smart-agent/http/chat-route-handler.d.ts.map +1 -1
  43. package/dist/smart-agent/http/chat-route-handler.js +35 -4
  44. package/dist/smart-agent/http/chat-route-handler.js.map +1 -1
  45. package/dist/smart-agent/http/config-route-handler.d.ts +6 -3
  46. package/dist/smart-agent/http/config-route-handler.d.ts.map +1 -1
  47. package/dist/smart-agent/http/config-route-handler.js +7 -5
  48. package/dist/smart-agent/http/config-route-handler.js.map +1 -1
  49. package/dist/smart-agent/http/request-abort.d.ts +11 -0
  50. package/dist/smart-agent/http/request-abort.d.ts.map +1 -0
  51. package/dist/smart-agent/http/request-abort.js +19 -0
  52. package/dist/smart-agent/http/request-abort.js.map +1 -0
  53. package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts +3 -2
  54. package/dist/smart-agent/knowledge/make-knowledge-backend.d.ts.map +1 -1
  55. package/dist/smart-agent/knowledge/make-knowledge-backend.js.map +1 -1
  56. package/dist/smart-agent/llm/llm-circuit-breakers.d.ts +21 -0
  57. package/dist/smart-agent/llm/llm-circuit-breakers.d.ts.map +1 -0
  58. package/dist/smart-agent/llm/llm-circuit-breakers.js +43 -0
  59. package/dist/smart-agent/llm/llm-circuit-breakers.js.map +1 -0
  60. package/dist/smart-agent/llm/role-llm-resolver.d.ts +3 -0
  61. package/dist/smart-agent/llm/role-llm-resolver.d.ts.map +1 -1
  62. package/dist/smart-agent/llm/role-llm-resolver.js +4 -1
  63. package/dist/smart-agent/llm/role-llm-resolver.js.map +1 -1
  64. package/dist/smart-agent/rag-config.d.ts +21 -6
  65. package/dist/smart-agent/rag-config.d.ts.map +1 -1
  66. package/dist/smart-agent/rag-config.js +2 -2
  67. package/dist/smart-agent/rag-config.js.map +1 -1
  68. package/dist/smart-agent/resolve-agent-embedder.d.ts +18 -1
  69. package/dist/smart-agent/resolve-agent-embedder.d.ts.map +1 -1
  70. package/dist/smart-agent/resolve-agent-embedder.js +37 -0
  71. package/dist/smart-agent/resolve-agent-embedder.js.map +1 -1
  72. package/dist/smart-agent/resolve-config-sections.d.ts +7 -0
  73. package/dist/smart-agent/resolve-config-sections.d.ts.map +1 -1
  74. package/dist/smart-agent/resolve-config-sections.js +65 -0
  75. package/dist/smart-agent/resolve-config-sections.js.map +1 -1
  76. package/dist/smart-agent/resolve-reranker.d.ts +10 -0
  77. package/dist/smart-agent/resolve-reranker.d.ts.map +1 -0
  78. package/dist/smart-agent/resolve-reranker.js +8 -0
  79. package/dist/smart-agent/resolve-reranker.js.map +1 -0
  80. package/dist/smart-agent/resolve-retrieval.d.ts +26 -0
  81. package/dist/smart-agent/resolve-retrieval.d.ts.map +1 -0
  82. package/dist/smart-agent/resolve-retrieval.js +96 -0
  83. package/dist/smart-agent/resolve-retrieval.js.map +1 -0
  84. package/dist/smart-agent/skill-host-embedder-resolver.d.ts +17 -0
  85. package/dist/smart-agent/skill-host-embedder-resolver.d.ts.map +1 -0
  86. package/dist/smart-agent/skill-host-embedder-resolver.js +21 -0
  87. package/dist/smart-agent/skill-host-embedder-resolver.js.map +1 -0
  88. package/dist/smart-agent/skill-plugins-config.d.ts +7 -5
  89. package/dist/smart-agent/skill-plugins-config.d.ts.map +1 -1
  90. package/dist/smart-agent/skill-plugins-config.js +18 -0
  91. package/dist/smart-agent/skill-plugins-config.js.map +1 -1
  92. package/dist/smart-agent/skill-plugins-host-factory.d.ts +4 -2
  93. package/dist/smart-agent/skill-plugins-host-factory.d.ts.map +1 -1
  94. package/dist/smart-agent/skill-plugins-host-factory.js +4 -1
  95. package/dist/smart-agent/skill-plugins-host-factory.js.map +1 -1
  96. package/dist/smart-agent/smart-server.d.ts +76 -6
  97. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  98. package/dist/smart-agent/smart-server.js +249 -82
  99. package/dist/smart-agent/smart-server.js.map +1 -1
  100. package/dist/smart-agent/tools-rag-handle.d.ts +2 -2
  101. package/dist/smart-agent/tools-rag-handle.d.ts.map +1 -1
  102. package/dist/smart-agent/tools-rag-handle.js +4 -2
  103. package/dist/smart-agent/tools-rag-handle.js.map +1 -1
  104. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"config-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-route-handler.js","sourceRoot":"","sources":["../../../src/smart-agent/http/config-route-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ServerResponse } from 'node:http';
2
+ /**
3
+ * One AbortController per HTTP request. It aborts (default `AbortError`
4
+ * reason — never a `TimeoutError`, so breakers ignore it) when the client
5
+ * connection closes before the response finished. A connection that closes
6
+ * after the response completed (keep-alive, normal end) does not abort.
7
+ */
8
+ export declare function createRequestAbort(res: ServerResponse): AbortController;
9
+ /** True while it is still safe to write to `res` for this request. */
10
+ export declare function canWrite(res: ServerResponse, signal: AbortSignal): boolean;
11
+ //# sourceMappingURL=request-abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-abort.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/http/request-abort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAMvE;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAE1E"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * One AbortController per HTTP request. It aborts (default `AbortError`
3
+ * reason — never a `TimeoutError`, so breakers ignore it) when the client
4
+ * connection closes before the response finished. A connection that closes
5
+ * after the response completed (keep-alive, normal end) does not abort.
6
+ */
7
+ export function createRequestAbort(res) {
8
+ const abort = new AbortController();
9
+ res.on('close', () => {
10
+ if (!res.writableFinished)
11
+ abort.abort();
12
+ });
13
+ return abort;
14
+ }
15
+ /** True while it is still safe to write to `res` for this request. */
16
+ export function canWrite(res, signal) {
17
+ return !signal.aborted && !res.destroyed && !res.writableEnded;
18
+ }
19
+ //# sourceMappingURL=request-abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-abort.js","sourceRoot":"","sources":["../../../src/smart-agent/http/request-abort.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAmB;IACpD,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,IAAI,CAAC,GAAG,CAAC,gBAAgB;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,GAAmB,EAAE,MAAmB;IAC/D,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;AACjE,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { IEmbedder } from '@mcp-abap-adt/llm-agent';
1
+ import type { IRetrievalEmbedder } from '@mcp-abap-adt/llm-agent';
2
2
  import { type KnowledgeBackend } from '@mcp-abap-adt/llm-agent-libs';
3
3
  /**
4
4
  * Build the ONE knowledge backend shared across all requests (JSONL when a
@@ -8,6 +8,7 @@ import { type KnowledgeBackend } from '@mcp-abap-adt/llm-agent-libs';
8
8
  */
9
9
  export declare function makeKnowledgeBackend(input: {
10
10
  logDir?: string;
11
- embedder?: IEmbedder;
11
+ /** Embeds the stored entries (`embedDocument`) and the search text (`embedQuery`). */
12
+ embedder?: IRetrievalEmbedder;
12
13
  }): KnowledgeBackend;
13
14
  //# sourceMappingURL=make-knowledge-backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-knowledge-backend.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/knowledge/make-knowledge-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAItC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,GAAG,gBAAgB,CAOnB"}
1
+ {"version":3,"file":"make-knowledge-backend.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/knowledge/make-knowledge-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAItC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GAAG,gBAAgB,CAOnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"make-knowledge-backend.js","sourceRoot":"","sources":["../../../src/smart-agent/knowledge/make-knowledge-backend.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAGpC;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;QAC7B,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,KAAK,CAAC,MAAM;QACjB,CAAC,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;QACnD,CAAC,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"make-knowledge-backend.js","sourceRoot":"","sources":["../../../src/smart-agent/knowledge/make-knowledge-backend.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAIpC;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;QAC7B,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,KAAK,CAAC,MAAM;QACjB,CAAC,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;QACnD,CAAC,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { CircuitBreaker, type CircuitBreakerConfig, type ILlm } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * One circuit breaker per `llm:` entry key (spec §14.2), shared by every
4
+ * session and every role that resolves that key. Wrappers are cached BY KEY,
5
+ * not by instance: one object under two keys gets two breakers, and a key
6
+ * whose instance changes (a `PUT /v1/config` swap — also back to an instance
7
+ * used before) gets a fresh breaker. An LLM that already is a
8
+ * `CircuitBreakerLlm` (the consumer's own) is not wrapped again; its breaker
9
+ * takes the key's place, so `list()` reports the breaker that guards the key.
10
+ */
11
+ export declare class LlmCircuitBreakers {
12
+ private readonly config;
13
+ private readonly onStateChange?;
14
+ private readonly entries;
15
+ constructor(config: CircuitBreakerConfig, onStateChange?: ((key: string, from: string, to: string) => void) | undefined);
16
+ /** The instance that guards `key` when `llm` is the key's LLM. */
17
+ wrap(llm: ILlm, key: string): ILlm;
18
+ /** The current breaker of every key, in the order the keys were first seen. */
19
+ list(): readonly CircuitBreaker[];
20
+ }
21
+ //# sourceMappingURL=llm-circuit-breakers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-circuit-breakers.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/llm/llm-circuit-breakers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EAEzB,KAAK,IAAI,EACV,MAAM,yBAAyB,CAAC;AAQjC;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAJjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;gBAGxC,MAAM,EAAE,oBAAoB,EAC5B,aAAa,CAAC,GAAE,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,IAAI,aAAA;IAGX,kEAAkE;IAClE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAmBlC,+EAA+E;IAC/E,IAAI,IAAI,SAAS,cAAc,EAAE;CAGlC"}
@@ -0,0 +1,43 @@
1
+ import { CircuitBreaker, CircuitBreakerLlm, } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * One circuit breaker per `llm:` entry key (spec §14.2), shared by every
4
+ * session and every role that resolves that key. Wrappers are cached BY KEY,
5
+ * not by instance: one object under two keys gets two breakers, and a key
6
+ * whose instance changes (a `PUT /v1/config` swap — also back to an instance
7
+ * used before) gets a fresh breaker. An LLM that already is a
8
+ * `CircuitBreakerLlm` (the consumer's own) is not wrapped again; its breaker
9
+ * takes the key's place, so `list()` reports the breaker that guards the key.
10
+ */
11
+ export class LlmCircuitBreakers {
12
+ config;
13
+ onStateChange;
14
+ entries = new Map();
15
+ constructor(config, onStateChange) {
16
+ this.config = config;
17
+ this.onStateChange = onStateChange;
18
+ }
19
+ /** The instance that guards `key` when `llm` is the key's LLM. */
20
+ wrap(llm, key) {
21
+ const current = this.entries.get(key);
22
+ if (current && (llm === current.inner || llm === current.wrapper)) {
23
+ return current.wrapper;
24
+ }
25
+ if (llm instanceof CircuitBreakerLlm) {
26
+ this.entries.set(key, { inner: llm, wrapper: llm, breaker: llm.breaker });
27
+ return llm;
28
+ }
29
+ const report = this.onStateChange;
30
+ const breaker = new CircuitBreaker({
31
+ ...this.config,
32
+ ...(report ? { onStateChange: (from, to) => report(key, from, to) } : {}),
33
+ });
34
+ const wrapper = new CircuitBreakerLlm(llm, breaker);
35
+ this.entries.set(key, { inner: llm, wrapper, breaker });
36
+ return wrapper;
37
+ }
38
+ /** The current breaker of every key, in the order the keys were first seen. */
39
+ list() {
40
+ return [...this.entries.values()].map((e) => e.breaker);
41
+ }
42
+ }
43
+ //# sourceMappingURL=llm-circuit-breakers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-circuit-breakers.js","sourceRoot":"","sources":["../../../src/smart-agent/llm/llm-circuit-breakers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AAQjC;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAIV;IACA;IAJF,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE3D,YACmB,MAA4B,EAC5B,aAIR;QALQ,WAAM,GAAN,MAAM,CAAsB;QAC5B,kBAAa,GAAb,aAAa,CAIrB;IACR,CAAC;IAEJ,kEAAkE;IAClE,IAAI,CAAC,GAAS,EAAE,GAAW;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,OAAO,CAAC,OAAO,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC;YACjC,GAAG,IAAI,CAAC,MAAM;YACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -19,6 +19,9 @@ export interface RoleLlmResolverDeps {
19
19
  getLlmMap(): NormalizedLlmMap | undefined;
20
20
  /** Builds one `llm:` entry. Called at most once per key while builds succeed. */
21
21
  build(entry: SmartServerLlmConfig): Promise<ILlm>;
22
+ /** Optional decorator applied to each built entry with its `llm:` key (the
23
+ * server's per-key circuit breaker); the wrapped instance is what is held. */
24
+ wrap?(llm: ILlm, key: string): ILlm;
22
25
  }
23
26
  /**
24
27
  * The default implementation's role map (§4.6.6). Held roles are read through LIVE
@@ -1 +1 @@
1
- {"version":3,"file":"role-llm-resolver.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;wEACwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B;;iEAE6D;IAC7D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;sFACkF;IAClF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,GAAG,SAAS,CAAC;IAC5B,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC;IAC9B,aAAa,IAAI,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAC1C,iFAAiF;IACjF,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAE7B,IAAI,EAAE,mBAAmB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,KAAK;CAUd"}
1
+ {"version":3,"file":"role-llm-resolver.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;wEACwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B;;iEAE6D;IAC7D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;sFACkF;IAClF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,GAAG,SAAS,CAAC;IAC5B,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC;IAC9B,aAAa,IAAI,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAC1C,iFAAiF;IACjF,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD;mFAC+E;IAC/E,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAE7B,IAAI,EAAE,mBAAmB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,KAAK;CAad"}
@@ -65,7 +65,10 @@ export class RoleLlmResolver {
65
65
  const held = this.built.get(key);
66
66
  if (held)
67
67
  return held;
68
- const building = this.deps.build(cfg);
68
+ const wrap = this.deps.wrap?.bind(this.deps);
69
+ const building = wrap
70
+ ? this.deps.build(cfg).then((llm) => wrap(llm, key))
71
+ : this.deps.build(cfg);
69
72
  this.built.set(key, building);
70
73
  building.catch(() => {
71
74
  if (this.built.get(key) === building)
@@ -1 +1 @@
1
- {"version":3,"file":"role-llm-resolver.js","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAGG;IAFZ,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE1D,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE1D,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,+CAA+C;gBAC5E,uBAAuB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CACvE,CAAC;QACJ,CAAC;QACD,iFAAiF;QACjF,0EAA0E;QAC1E,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,wBAAwB,CAC9D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,GAAW,EAAE,GAAyB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"role-llm-resolver.js","sourceRoot":"","sources":["../../../src/smart-agent/llm/role-llm-resolver.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@
7
7
  *
8
8
  * `credentialRef` is a NAME the composition root resolves — never a value.
9
9
  */
10
- import type { IEmbedder } from '@mcp-abap-adt/llm-agent';
10
+ import type { IRetrievalEmbedder } from '@mcp-abap-adt/llm-agent';
11
+ import type { SmartServerRetrievalConfig } from './decision-config.js';
11
12
  /**
12
13
  * The in-memory store. The search knobs live here because this is the only store
13
14
  * that ever read them (VectorRag with an embedder, InMemoryRag without); Qdrant,
@@ -86,6 +87,18 @@ export type SmartServerEmbedderConfig = {
86
87
  resourceGroup?: string;
87
88
  /** SAP AI Core scenario: 'orchestration' (default) or 'foundation-models'. */
88
89
  scenario?: 'orchestration' | 'foundation-models';
90
+ /**
91
+ * The model embeds stored text and search text differently (e.g.
92
+ * `nvidia--llama-3.2-nv-embedqa-1b`): the server builds it twice on the
93
+ * same model — `inputType: 'document'` and `'query'` — and joins the two
94
+ * with `asymmetricEmbedder`. SAP AI Core, orchestration only.
95
+ */
96
+ asymmetric?: boolean;
97
+ /**
98
+ * The input type ONE instance sends — set by the server for each half of
99
+ * an asymmetric model, not by the YAML.
100
+ */
101
+ inputType?: 'document' | 'query';
89
102
  /**
90
103
  * Cap on texts per embedBatch call. Precedence: this value → the provider's
91
104
  * declared cap → the library default (100).
@@ -114,6 +127,8 @@ export interface SmartServerRagConfig {
114
127
  store: SmartServerRagStoreConfig;
115
128
  /** Absent → no embedder: only an in-memory store works without one (keyword-only). */
116
129
  embedder?: SmartServerEmbedderConfig;
130
+ /** Per-store retrieval strategy, keyed by store key; a store not listed uses embedding. */
131
+ retrieval?: Record<string, SmartServerRetrievalConfig>;
117
132
  }
118
133
  /**
119
134
  * What `BuildAgentDeps.makeRag` receives: the serializable store section and, where
@@ -122,16 +137,16 @@ export interface SmartServerRagConfig {
122
137
  */
123
138
  export type MakeRagInput = {
124
139
  store: InMemoryStoreConfig;
125
- embedder?: IEmbedder;
140
+ embedder?: IRetrievalEmbedder;
126
141
  } | {
127
142
  store: QdrantStoreConfig | PgVectorStoreConfig | HanaVectorStoreConfig;
128
- embedder: IEmbedder;
143
+ embedder: IRetrievalEmbedder;
129
144
  };
130
145
  /**
131
146
  * Narrows a `MakeRagInput` to its in-memory arm — and, in the `false` branch, to the vector
132
- * arm with `embedder: IEmbedder`. TypeScript does not narrow the pair through
147
+ * arm with `embedder: IRetrievalEmbedder`. TypeScript does not narrow the pair through
133
148
  * `input.store.type` — the discriminant is nested — so without this a `makeRag` body sees
134
- * `embedder: IEmbedder | undefined` on every arm (§4.6.4's reference `makeRag` uses exactly
149
+ * `embedder: IRetrievalEmbedder | undefined` on every arm (§4.6.4's reference `makeRag` uses exactly
135
150
  * this guard). The one-line body restates the union's own pairing.
136
151
  */
137
152
  export declare function isInMemoryInput(input: MakeRagInput): input is Extract<MakeRagInput, {
@@ -144,7 +159,7 @@ export declare function isInMemoryInput(input: MakeRagInput): input is Extract<M
144
159
  * that exists or does not at runtime; the union makes the requirement visible, and
145
160
  * this is where a vector store without one is refused, naming what to configure.
146
161
  */
147
- export declare function toMakeRagInput(store: SmartServerRagStoreConfig, embedder: IEmbedder | undefined, label: string): MakeRagInput;
162
+ export declare function toMakeRagInput(store: SmartServerRagStoreConfig, embedder: IRetrievalEmbedder | undefined, label: string): MakeRagInput;
148
163
  /**
149
164
  * The boundary for a programmatic config no compiler saw (plain JS, or a cast): a
150
165
  * `rag` still in the flat shape is refused at construction with the migration in
@@ -1 +1 @@
1
- {"version":3,"file":"rag-config.d.ts","sourceRoot":"","sources":["../../src/smart-agent/rag-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rag-config.d.ts","sourceRoot":"","sources":["../../src/smart-agent/rag-config.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,9 @@ export function embedderSectionFor(name, model) {
23
23
  }
24
24
  /**
25
25
  * Narrows a `MakeRagInput` to its in-memory arm — and, in the `false` branch, to the vector
26
- * arm with `embedder: IEmbedder`. TypeScript does not narrow the pair through
26
+ * arm with `embedder: IRetrievalEmbedder`. TypeScript does not narrow the pair through
27
27
  * `input.store.type` — the discriminant is nested — so without this a `makeRag` body sees
28
- * `embedder: IEmbedder | undefined` on every arm (§4.6.4's reference `makeRag` uses exactly
28
+ * `embedder: IRetrievalEmbedder | undefined` on every arm (§4.6.4's reference `makeRag` uses exactly
29
29
  * this guard). The one-line body restates the union's own pairing.
30
30
  */
31
31
  export function isInMemoryInput(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"rag-config.js","sourceRoot":"","sources":["../../src/smart-agent/rag-config.ts"],"names":[],"mappings":"AA2EA,sGAAsG;AACtG,MAAM,2BAA2B,GAAG;IAClC,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,QAAQ;CACA,CAAC;AAIX,MAAM,UAAU,yBAAyB,CACvC,IAAY;IAEZ,OAAQ,2BAAiD,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AA0CD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAwB,EACxB,KAAc;IAEd,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5D,OAAO,yBAAyB,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;QAC1B,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AAC9B,CAAC;AAoBD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAmB;IAEnB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgC,EAChC,QAA+B,EAC/B,KAAa;IAEb,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,gBAAgB,KAAK,CAAC,IAAI,kCAAkC,KAAK,6BAA6B,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,KAAa;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAC9C,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,2DAA2D,KAAK,SAAS;YAC/E,OAAO,KAAK,qEAAqE,CACpF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"rag-config.js","sourceRoot":"","sources":["../../src/smart-agent/rag-config.ts"],"names":[],"mappings":"AA4EA,sGAAsG;AACtG,MAAM,2BAA2B,GAAG;IAClC,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,QAAQ;CACA,CAAC;AAIX,MAAM,UAAU,yBAAyB,CACvC,IAAY;IAEZ,OAAQ,2BAAiD,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAsDD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAwB,EACxB,KAAc;IAEd,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5D,OAAO,yBAAyB,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;QAC1B,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AAC9B,CAAC;AAsBD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAmB;IAEnB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgC,EAChC,QAAwC,EACxC,KAAa;IAEb,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,gBAAgB,KAAK,CAAC,IAAI,kCAAkC,KAAK,6BAA6B,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,KAAa;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAC9C,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,2DAA2D,KAAK,SAAS;YAC/E,OAAO,KAAK,qEAAqE,CACpF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -12,10 +12,27 @@
12
12
  * to leave the context-builder's embedder `undefined`, so constrained subagents
13
13
  * failed with empty context.
14
14
  */
15
- import type { AnyLogger, EmbedderFactory, IEmbedder } from '@mcp-abap-adt/llm-agent';
15
+ import type { AnyLogger, EmbedderFactory, IEmbedder, IRetrievalEmbedder } from '@mcp-abap-adt/llm-agent';
16
16
  import type { SmartServerRagConfig } from './rag-config.js';
17
17
  import type { BuildAgentDeps } from './smart-server.js';
18
18
  export declare function resolveAgentEmbedder(rag: SmartServerRagConfig | undefined, diEmbedder: IEmbedder | undefined, resolve: BuildAgentDeps['resolveEmbedder'], extraFactories: Record<string, EmbedderFactory>, logger?: AnyLogger): Promise<IEmbedder | undefined>;
19
+ /**
20
+ * The retrieval embedder the server hands its stores and its search path: one
21
+ * object whose `embedDocument` embeds what is written and whose `embedQuery`
22
+ * embeds what is searched with — so neither job can be done by the other's
23
+ * method by mistake.
24
+ *
25
+ * A symmetric model (the default) is ONE embedder behind both methods. For
26
+ * `rag.embedder.asymmetric` the model is resolved twice — `inputType:
27
+ * 'document'` and `'query'` — each half composed and usage-logged on its own,
28
+ * and joined by `asymmetricEmbedder`. A DI-injected embedder is symmetric.
29
+ *
30
+ * `wrap` decorates each `IEmbedder` BELOW the document/query role — every half
31
+ * before `symmetricEmbedder` / `asymmetricEmbedder` joins them — so a decorator
32
+ * (the server's embedder circuit breaker) sees both jobs' calls while each half
33
+ * keeps its own inner and its batch capability.
34
+ */
35
+ export declare function resolveRetrievalEmbedder(rag: SmartServerRagConfig | undefined, diEmbedder: IEmbedder | undefined, resolve: BuildAgentDeps['resolveEmbedder'], extraFactories: Record<string, EmbedderFactory>, logger?: AnyLogger, wrap?: (embedder: IEmbedder) => IEmbedder): Promise<IRetrievalEmbedder | undefined>;
19
36
  /**
20
37
  * Resolve the embedder for the `pipeline.rag.tools` store, which feeds the
21
38
  * subagent context-builder's `toolSource`.
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-agent-embedder.d.ts","sourceRoot":"","sources":["../../src/smart-agent/resolve-agent-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,SAAS,EACV,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,UAAU,EAAE,SAAS,GAAG,SAAS,EACjC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/C,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA8BhC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,aAAa,EAAE,oBAAoB,EACnC,UAAU,EAAE,SAAS,GAAG,SAAS,EACjC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/C,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAehC"}
1
+ {"version":3,"file":"resolve-agent-embedder.d.ts","sourceRoot":"","sources":["../../src/smart-agent/resolve-agent-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,SAAS,EACT,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,UAAU,EAAE,SAAS,GAAG,SAAS,EACjC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/C,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA8BhC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,UAAU,EAAE,SAAS,GAAG,SAAS,EACjC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/C,MAAM,CAAC,EAAE,SAAS,EAClB,IAAI,GAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAkC,GAChE,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoCzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,aAAa,EAAE,oBAAoB,EACnC,UAAU,EAAE,SAAS,GAAG,SAAS,EACjC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/C,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAehC"}
@@ -12,6 +12,7 @@
12
12
  * to leave the context-builder's embedder `undefined`, so constrained subagents
13
13
  * failed with empty context.
14
14
  */
15
+ import { asymmetricEmbedder, symmetricEmbedder } from '@mcp-abap-adt/llm-agent';
15
16
  import { wrapEmbedder } from '@mcp-abap-adt/llm-agent-libs';
16
17
  import { composeEmbedder, prefetchEmbedderFactories, } from '@mcp-abap-adt/llm-agent-rag';
17
18
  export async function resolveAgentEmbedder(rag, diEmbedder, resolve, extraFactories, logger) {
@@ -43,6 +44,42 @@ export async function resolveAgentEmbedder(rag, diEmbedder, resolve, extraFactor
43
44
  // Construction goes through the app's seam: the library builds no embedder.
44
45
  return wrapEmbedder(resolve(section, { extraFactories, logger }));
45
46
  }
47
+ /**
48
+ * The retrieval embedder the server hands its stores and its search path: one
49
+ * object whose `embedDocument` embeds what is written and whose `embedQuery`
50
+ * embeds what is searched with — so neither job can be done by the other's
51
+ * method by mistake.
52
+ *
53
+ * A symmetric model (the default) is ONE embedder behind both methods. For
54
+ * `rag.embedder.asymmetric` the model is resolved twice — `inputType:
55
+ * 'document'` and `'query'` — each half composed and usage-logged on its own,
56
+ * and joined by `asymmetricEmbedder`. A DI-injected embedder is symmetric.
57
+ *
58
+ * `wrap` decorates each `IEmbedder` BELOW the document/query role — every half
59
+ * before `symmetricEmbedder` / `asymmetricEmbedder` joins them — so a decorator
60
+ * (the server's embedder circuit breaker) sees both jobs' calls while each half
61
+ * keeps its own inner and its batch capability.
62
+ */
63
+ export async function resolveRetrievalEmbedder(rag, diEmbedder, resolve, extraFactories, logger, wrap = (embedder) => embedder) {
64
+ const section = rag?.embedder;
65
+ if (diEmbedder === undefined &&
66
+ rag !== undefined &&
67
+ section !== undefined &&
68
+ section.factory === undefined &&
69
+ section.asymmetric === true) {
70
+ const half = async (inputType) => resolveAgentEmbedder({ ...rag, embedder: { ...section, inputType } }, undefined, resolve, extraFactories, logger);
71
+ const [document, query] = await Promise.all([
72
+ half('document'),
73
+ half('query'),
74
+ ]);
75
+ if (!document || !query) {
76
+ throw new Error('rag.embedder: an asymmetric embedder resolved to nothing');
77
+ }
78
+ return asymmetricEmbedder({ document: wrap(document), query: wrap(query) });
79
+ }
80
+ const embedder = await resolveAgentEmbedder(rag, diEmbedder, resolve, extraFactories, logger);
81
+ return embedder ? symmetricEmbedder(wrap(embedder)) : undefined;
82
+ }
46
83
  /**
47
84
  * Resolve the embedder for the `pipeline.rag.tools` store, which feeds the
48
85
  * subagent context-builder's `toolSource`.
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-agent-embedder.js","sourceRoot":"","sources":["../../src/smart-agent/resolve-agent-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AAOrC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAqC,EACrC,UAAiC,EACjC,OAA0C,EAC1C,cAA+C,EAC/C,MAAkB;IAElB,+EAA+E;IAC/E,+EAA+E;IAC/E,EAAE;IACF,iFAAiF;IACjF,wEAAwE;IACxE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,YAAY,CACjB,eAAe,CAAC,UAAU,EAAE;YAC1B,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY;YACzC,MAAM;SACP,CAAC,CACH,CAAC;IACJ,CAAC;IACD,mEAAmE;IACnE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,6EAA6E;IAC7E,4EAA4E;IAC5E,uBAAuB;IACvB,MAAM,OAAO,GAA8B,GAAG,CAAC,QAAQ,IAAI;QACzD,QAAQ,EAAE,QAAQ;KACnB,CAAC;IACF,qFAAqF;IACrF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,yBAAyB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,4EAA4E;IAC5E,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAA8B,EAC9B,aAAmC,EACnC,UAAiC,EACjC,OAA0C,EAC1C,cAA+C,EAC/C,MAAkB;IAElB,IAAI,OAAO,EAAE,CAAC;QACZ,6EAA6E;QAC7E,0DAA0D;QAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC;QACjD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QACtC,OAAO,eAAe,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,oBAAoB,CACzB,aAAa,EACb,UAAU,EACV,OAAO,EACP,cAAc,EACd,MAAM,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"resolve-agent-embedder.js","sourceRoot":"","sources":["../../src/smart-agent/resolve-agent-embedder.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * Per-section config builders extracted from resolveSmartServerConfig.
3
3
  * Internal module — not re-exported by the package barrel.
4
4
  */
5
+ import { type SmartServerDecisionConfig } from './decision-config.js';
5
6
  import type { SmartServerAgentConfig, SmartServerConfig } from './smart-server.js';
6
7
  import type { YamlConfig } from './yaml-loader.js';
7
8
  export declare function resolveLlmSection(yaml: YamlConfig): SmartServerConfig['llm'];
@@ -12,4 +13,10 @@ export declare function resolvePromptsSection(yaml: YamlConfig): SmartServerConf
12
13
  export declare function resolvePipelineSelection(yaml: YamlConfig): {
13
14
  pipeline?: SmartServerConfig['pipeline'];
14
15
  };
16
+ /**
17
+ * `decision:` → named fields only. An optional field absent in YAML is absent in
18
+ * the result (unset is not sent); a present falsy value (`maxRetries: 0`) is
19
+ * kept. `apiKey` is never copied — the validator refuses it from the raw YAML.
20
+ */
21
+ export declare function resolveDecisionSection(yaml: YamlConfig): SmartServerDecisionConfig | undefined;
15
22
  //# sourceMappingURL=resolve-config-sections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-config-sections.d.ts","sourceRoot":"","sources":["../../src/smart-agent/resolve-config-sections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAiC5E;AAyPD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CAW1B;AA8BD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CA4C1B;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,sBAAsB,CAyIxB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,GACf,iBAAiB,CAAC,SAAS,CAAC,CA2B9B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG;IAC1D,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;CAC1C,CAsBA"}
1
+ {"version":3,"file":"resolve-config-sections.d.ts","sourceRoot":"","sources":["../../src/smart-agent/resolve-config-sections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,sBAAsB,CAAC;AAO9B,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAoC5E;AA6PD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CAY1B;AA2DD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,iBAAiB,CAAC,KAAK,CAAC,CA4C1B;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,sBAAsB,CAyIxB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,GACf,iBAAiB,CAAC,SAAS,CAAC,CA2B9B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG;IAC1D,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;CAC1C,CAsBA;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,GACf,yBAAyB,GAAG,SAAS,CAoBvC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { ReportThrottling, WaitAsTold, } from '@mcp-abap-adt/llm-agent';
6
6
  import { normalizeHeartbeatMs } from '@mcp-abap-adt/llm-agent-libs';
7
+ import { parseIntegerField, } from './decision-config.js';
7
8
  import { optionalNumber } from './llm-config-map.js';
8
9
  import { get } from './yaml-loader.js';
9
10
  export function resolveLlmSection(yaml) {
@@ -18,6 +19,9 @@ export function resolveLlmSection(yaml) {
18
19
  : {}),
19
20
  url: get(yaml, 'llm', 'url'),
20
21
  model: get(yaml, 'llm', 'model'),
22
+ ...(get(yaml, 'llm', 'resourceGroup') !== undefined
23
+ ? { resourceGroup: String(get(yaml, 'llm', 'resourceGroup')) }
24
+ : {}),
21
25
  // Unset stays unset: the provider then sends no temperature and
22
26
  // the model applies its own default.
23
27
  temperature: optionalNumber(get(yaml, 'llm', 'temperature')),
@@ -239,6 +243,10 @@ function resolveRagEmbedder(raw) {
239
243
  ...(typeof raw.credentialRef === 'string'
240
244
  ? { credentialRef: raw.credentialRef }
241
245
  : {}),
246
+ // checkRag already refused a non-boolean / non-SAP / foundation-models one.
247
+ ...(raw.asymmetric === true || raw.asymmetric === 'true'
248
+ ? { asymmetric: true }
249
+ : {}),
242
250
  };
243
251
  }
244
252
  export function resolveRagSection(yaml, args) {
@@ -252,8 +260,36 @@ export function resolveRagSection(yaml, args) {
252
260
  !Array.isArray(embedder)
253
261
  ? { embedder: resolveRagEmbedder(embedder) }
254
262
  : {}),
263
+ ...resolveRetrieval(get(yaml, 'rag', 'retrieval')),
255
264
  };
256
265
  }
266
+ /** `rag.retrieval` → entry by entry, named fields only; null/absent → absent. */
267
+ function resolveRetrieval(raw) {
268
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
269
+ return {};
270
+ const retrieval = {};
271
+ for (const [key, e] of Object.entries(raw)) {
272
+ // checkRetrieval already refused anything that is not a valid mapping.
273
+ const r = e;
274
+ const overfetch = parseIntegerField(r.overfetch);
275
+ const maxCandidates = parseIntegerField(r.maxCandidates);
276
+ retrieval[key] = {
277
+ strategy: (r.strategy ??
278
+ 'embedding'),
279
+ ...(r.reranker != null
280
+ ? { reranker: r.reranker }
281
+ : {}),
282
+ ...(typeof r.llm === 'string' ? { llm: r.llm } : {}),
283
+ ...(r.question != null
284
+ ? { question: r.question }
285
+ : {}),
286
+ ...(typeof r.task === 'string' ? { task: r.task } : {}),
287
+ ...(typeof overfetch === 'number' ? { overfetch } : {}),
288
+ ...(typeof maxCandidates === 'number' ? { maxCandidates } : {}),
289
+ };
290
+ }
291
+ return { retrieval };
292
+ }
257
293
  /** Namespace-prefix label charset — mirrors IToolNamespace's exposed-name
258
294
  * validation so a bad label fails at config parse, not at tool-listing time. */
259
295
  const MCP_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
@@ -455,4 +491,33 @@ export function resolvePipelineSelection(yaml) {
455
491
  },
456
492
  };
457
493
  }
494
+ /**
495
+ * `decision:` → named fields only. An optional field absent in YAML is absent in
496
+ * the result (unset is not sent); a present falsy value (`maxRetries: 0`) is
497
+ * kept. `apiKey` is never copied — the validator refuses it from the raw YAML.
498
+ */
499
+ export function resolveDecisionSection(yaml) {
500
+ const raw = get(yaml, 'decision');
501
+ if (raw === undefined || raw === null)
502
+ return undefined;
503
+ const out = { provider: raw.provider };
504
+ // An empty YAML value (`model:`) parses as null: absent, never the string "null".
505
+ if (raw.model !== undefined && raw.model !== null) {
506
+ out.model = String(raw.model);
507
+ }
508
+ if (raw.credentialRef !== undefined) {
509
+ out.credentialRef = raw.credentialRef;
510
+ }
511
+ if (raw.baseUrl !== undefined && raw.baseUrl !== null) {
512
+ out.baseUrl = String(raw.baseUrl);
513
+ }
514
+ // Invalid values are left out here; the validator (same parser) reports them.
515
+ const timeoutMs = parseIntegerField(raw.timeoutMs);
516
+ if (typeof timeoutMs === 'number')
517
+ out.timeoutMs = timeoutMs;
518
+ const maxRetries = parseIntegerField(raw.maxRetries);
519
+ if (typeof maxRetries === 'number')
520
+ out.maxRetries = maxRetries;
521
+ return out;
522
+ }
458
523
  //# sourceMappingURL=resolve-config-sections.js.map