@mcp-abap-adt/llm-agent 2.2.1 → 2.4.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.
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/smart-agent/agent.d.ts +27 -1
- package/dist/smart-agent/agent.d.ts.map +1 -1
- package/dist/smart-agent/agent.js +236 -35
- package/dist/smart-agent/agent.js.map +1 -1
- package/dist/smart-agent/builder.d.ts +48 -4
- package/dist/smart-agent/builder.d.ts.map +1 -1
- package/dist/smart-agent/builder.js +120 -11
- package/dist/smart-agent/builder.js.map +1 -1
- package/dist/smart-agent/cache/index.d.ts +4 -0
- package/dist/smart-agent/cache/index.d.ts.map +1 -0
- package/dist/smart-agent/cache/index.js +3 -0
- package/dist/smart-agent/cache/index.js.map +1 -0
- package/dist/smart-agent/cache/noop-tool-cache.d.ts +7 -0
- package/dist/smart-agent/cache/noop-tool-cache.d.ts.map +1 -0
- package/dist/smart-agent/cache/noop-tool-cache.js +8 -0
- package/dist/smart-agent/cache/noop-tool-cache.js.map +1 -0
- package/dist/smart-agent/cache/tool-cache.d.ts +14 -0
- package/dist/smart-agent/cache/tool-cache.d.ts.map +1 -0
- package/dist/smart-agent/cache/tool-cache.js +32 -0
- package/dist/smart-agent/cache/tool-cache.js.map +1 -0
- package/dist/smart-agent/cache/types.d.ts +7 -0
- package/dist/smart-agent/cache/types.d.ts.map +1 -0
- package/dist/smart-agent/cache/types.js +2 -0
- package/dist/smart-agent/cache/types.js.map +1 -0
- package/dist/smart-agent/classifier/llm-classifier.d.ts +1 -1
- package/dist/smart-agent/classifier/llm-classifier.d.ts.map +1 -1
- package/dist/smart-agent/classifier/llm-classifier.js +8 -6
- package/dist/smart-agent/classifier/llm-classifier.js.map +1 -1
- package/dist/smart-agent/cli.d.ts +2 -0
- package/dist/smart-agent/cli.d.ts.map +1 -1
- package/dist/smart-agent/cli.js +4 -0
- package/dist/smart-agent/cli.js.map +1 -1
- package/dist/smart-agent/config/config-watcher.d.ts +53 -0
- package/dist/smart-agent/config/config-watcher.d.ts.map +1 -0
- package/dist/smart-agent/config/config-watcher.js +105 -0
- package/dist/smart-agent/config/config-watcher.js.map +1 -0
- package/dist/smart-agent/config/index.d.ts +2 -0
- package/dist/smart-agent/config/index.d.ts.map +1 -0
- package/dist/smart-agent/config/index.js +2 -0
- package/dist/smart-agent/config/index.js.map +1 -0
- package/dist/smart-agent/config.d.ts +5 -1
- package/dist/smart-agent/config.d.ts.map +1 -1
- package/dist/smart-agent/config.js +11 -3
- package/dist/smart-agent/config.js.map +1 -1
- package/dist/smart-agent/health/health-checker.d.ts +21 -0
- package/dist/smart-agent/health/health-checker.d.ts.map +1 -0
- package/dist/smart-agent/health/health-checker.js +52 -0
- package/dist/smart-agent/health/health-checker.js.map +1 -0
- package/dist/smart-agent/health/index.d.ts +3 -0
- package/dist/smart-agent/health/index.d.ts.map +1 -0
- package/dist/smart-agent/health/index.js +2 -0
- package/dist/smart-agent/health/index.js.map +1 -0
- package/dist/smart-agent/health/types.d.ts +25 -0
- package/dist/smart-agent/health/types.d.ts.map +1 -0
- package/dist/smart-agent/health/types.js +2 -0
- package/dist/smart-agent/health/types.js.map +1 -0
- package/dist/smart-agent/interfaces/index.d.ts +7 -0
- package/dist/smart-agent/interfaces/index.d.ts.map +1 -1
- package/dist/smart-agent/interfaces/index.js.map +1 -1
- package/dist/smart-agent/interfaces/types.d.ts +2 -2
- package/dist/smart-agent/interfaces/types.d.ts.map +1 -1
- package/dist/smart-agent/metrics/in-memory-metrics.d.ts +58 -0
- package/dist/smart-agent/metrics/in-memory-metrics.d.ts.map +1 -0
- package/dist/smart-agent/metrics/in-memory-metrics.js +78 -0
- package/dist/smart-agent/metrics/in-memory-metrics.js.map +1 -0
- package/dist/smart-agent/metrics/index.d.ts +4 -0
- package/dist/smart-agent/metrics/index.d.ts.map +1 -0
- package/dist/smart-agent/metrics/index.js +3 -0
- package/dist/smart-agent/metrics/index.js.map +1 -0
- package/dist/smart-agent/metrics/noop-metrics.d.ts +17 -0
- package/dist/smart-agent/metrics/noop-metrics.d.ts.map +1 -0
- package/dist/smart-agent/metrics/noop-metrics.js +22 -0
- package/dist/smart-agent/metrics/noop-metrics.js.map +1 -0
- package/dist/smart-agent/metrics/types.d.ts +36 -0
- package/dist/smart-agent/metrics/types.d.ts.map +1 -0
- package/dist/smart-agent/metrics/types.js +9 -0
- package/dist/smart-agent/metrics/types.js.map +1 -0
- package/dist/smart-agent/otel/index.d.ts +2 -0
- package/dist/smart-agent/otel/index.d.ts.map +1 -0
- package/dist/smart-agent/otel/index.js +2 -0
- package/dist/smart-agent/otel/index.js.map +1 -0
- package/dist/smart-agent/otel/otel-tracer-adapter.d.ts +15 -0
- package/dist/smart-agent/otel/otel-tracer-adapter.d.ts.map +1 -0
- package/dist/smart-agent/otel/otel-tracer-adapter.js +62 -0
- package/dist/smart-agent/otel/otel-tracer-adapter.js.map +1 -0
- package/dist/smart-agent/pipeline.d.ts +8 -4
- package/dist/smart-agent/pipeline.d.ts.map +1 -1
- package/dist/smart-agent/pipeline.js +28 -0
- package/dist/smart-agent/pipeline.js.map +1 -1
- package/dist/smart-agent/rag/inverted-index.d.ts +26 -0
- package/dist/smart-agent/rag/inverted-index.d.ts.map +1 -0
- package/dist/smart-agent/rag/inverted-index.js +61 -0
- package/dist/smart-agent/rag/inverted-index.js.map +1 -0
- package/dist/smart-agent/rag/ollama-rag.d.ts +3 -0
- package/dist/smart-agent/rag/ollama-rag.d.ts.map +1 -1
- package/dist/smart-agent/rag/ollama-rag.js +9 -2
- package/dist/smart-agent/rag/ollama-rag.js.map +1 -1
- package/dist/smart-agent/rag/openai-embedder.d.ts +3 -0
- package/dist/smart-agent/rag/openai-embedder.d.ts.map +1 -1
- package/dist/smart-agent/rag/openai-embedder.js +7 -1
- package/dist/smart-agent/rag/openai-embedder.js.map +1 -1
- package/dist/smart-agent/rag/qdrant-rag.d.ts +26 -0
- package/dist/smart-agent/rag/qdrant-rag.d.ts.map +1 -0
- package/dist/smart-agent/rag/qdrant-rag.js +175 -0
- package/dist/smart-agent/rag/qdrant-rag.js.map +1 -0
- package/dist/smart-agent/rag/query-expander.d.ts +14 -0
- package/dist/smart-agent/rag/query-expander.d.ts.map +1 -0
- package/dist/smart-agent/rag/query-expander.js +40 -0
- package/dist/smart-agent/rag/query-expander.js.map +1 -0
- package/dist/smart-agent/rag/vector-rag.d.ts +10 -3
- package/dist/smart-agent/rag/vector-rag.d.ts.map +1 -1
- package/dist/smart-agent/rag/vector-rag.js +29 -16
- package/dist/smart-agent/rag/vector-rag.js.map +1 -1
- package/dist/smart-agent/reranker/index.d.ts +4 -0
- package/dist/smart-agent/reranker/index.d.ts.map +1 -0
- package/dist/smart-agent/reranker/index.js +3 -0
- package/dist/smart-agent/reranker/index.js.map +1 -0
- package/dist/smart-agent/reranker/llm-reranker.d.ts +10 -0
- package/dist/smart-agent/reranker/llm-reranker.d.ts.map +1 -0
- package/dist/smart-agent/reranker/llm-reranker.js +55 -0
- package/dist/smart-agent/reranker/llm-reranker.js.map +1 -0
- package/dist/smart-agent/reranker/noop-reranker.d.ts +6 -0
- package/dist/smart-agent/reranker/noop-reranker.d.ts.map +1 -0
- package/dist/smart-agent/reranker/noop-reranker.js +6 -0
- package/dist/smart-agent/reranker/noop-reranker.js.map +1 -0
- package/dist/smart-agent/reranker/types.d.ts +5 -0
- package/dist/smart-agent/reranker/types.d.ts.map +1 -0
- package/dist/smart-agent/reranker/types.js +2 -0
- package/dist/smart-agent/reranker/types.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts +16 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.js +30 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts +18 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.js +65 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker.d.ts +36 -0
- package/dist/smart-agent/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker.js +60 -0
- package/dist/smart-agent/resilience/circuit-breaker.js.map +1 -0
- package/dist/smart-agent/resilience/fallback-rag.d.ts +21 -0
- package/dist/smart-agent/resilience/fallback-rag.d.ts.map +1 -0
- package/dist/smart-agent/resilience/fallback-rag.js +35 -0
- package/dist/smart-agent/resilience/fallback-rag.js.map +1 -0
- package/dist/smart-agent/resilience/index.d.ts +5 -0
- package/dist/smart-agent/resilience/index.d.ts.map +1 -0
- package/dist/smart-agent/resilience/index.js +5 -0
- package/dist/smart-agent/resilience/index.js.map +1 -0
- package/dist/smart-agent/session/index.d.ts +4 -0
- package/dist/smart-agent/session/index.d.ts.map +1 -0
- package/dist/smart-agent/session/index.js +3 -0
- package/dist/smart-agent/session/index.js.map +1 -0
- package/dist/smart-agent/session/noop-session-manager.d.ts +8 -0
- package/dist/smart-agent/session/noop-session-manager.d.ts.map +1 -0
- package/dist/smart-agent/session/noop-session-manager.js +11 -0
- package/dist/smart-agent/session/noop-session-manager.js.map +1 -0
- package/dist/smart-agent/session/session-manager.d.ts +13 -0
- package/dist/smart-agent/session/session-manager.d.ts.map +1 -0
- package/dist/smart-agent/session/session-manager.js +20 -0
- package/dist/smart-agent/session/session-manager.js.map +1 -0
- package/dist/smart-agent/session/types.d.ts +7 -0
- package/dist/smart-agent/session/types.d.ts.map +1 -0
- package/dist/smart-agent/session/types.js +2 -0
- package/dist/smart-agent/session/types.js.map +1 -0
- package/dist/smart-agent/smart-server.d.ts +15 -1
- package/dist/smart-agent/smart-server.d.ts.map +1 -1
- package/dist/smart-agent/smart-server.js +73 -4
- package/dist/smart-agent/smart-server.js.map +1 -1
- package/dist/smart-agent/testing/index.d.ts +51 -0
- package/dist/smart-agent/testing/index.d.ts.map +1 -1
- package/dist/smart-agent/testing/index.js +107 -0
- package/dist/smart-agent/testing/index.js.map +1 -1
- package/dist/smart-agent/tracer/index.d.ts +3 -0
- package/dist/smart-agent/tracer/index.d.ts.map +1 -0
- package/dist/smart-agent/tracer/index.js +2 -0
- package/dist/smart-agent/tracer/index.js.map +1 -0
- package/dist/smart-agent/tracer/noop-tracer.d.ts +5 -0
- package/dist/smart-agent/tracer/noop-tracer.d.ts.map +1 -0
- package/dist/smart-agent/tracer/noop-tracer.js +16 -0
- package/dist/smart-agent/tracer/noop-tracer.js.map +1 -0
- package/dist/smart-agent/tracer/types.d.ts +17 -0
- package/dist/smart-agent/tracer/types.d.ts.map +1 -0
- package/dist/smart-agent/tracer/types.js +2 -0
- package/dist/smart-agent/tracer/types.js.map +1 -0
- package/dist/smart-agent/validator/index.d.ts +3 -0
- package/dist/smart-agent/validator/index.d.ts.map +1 -0
- package/dist/smart-agent/validator/index.js +2 -0
- package/dist/smart-agent/validator/index.js.map +1 -0
- package/dist/smart-agent/validator/noop-validator.d.ts +6 -0
- package/dist/smart-agent/validator/noop-validator.d.ts.map +1 -0
- package/dist/smart-agent/validator/noop-validator.js +6 -0
- package/dist/smart-agent/validator/noop-validator.js.map +1 -0
- package/dist/smart-agent/validator/types.d.ts +18 -0
- package/dist/smart-agent/validator/types.d.ts.map +1 -0
- package/dist/smart-agent/validator/types.js +8 -0
- package/dist/smart-agent/validator/types.js.map +1 -0
- package/package.json +29 -2
package/dist/index.d.ts
CHANGED
|
@@ -14,5 +14,30 @@ export { type DeepSeekConfig, DeepSeekProvider, } from './llm-providers/deepseek
|
|
|
14
14
|
export { type OpenAIConfig, OpenAIProvider } from './llm-providers/openai.js';
|
|
15
15
|
export { type SapCoreAIConfig, SapCoreAIProvider, } from './llm-providers/sap-core-ai.js';
|
|
16
16
|
export { type MCPClientConfig, MCPClientWrapper, type TransportType, } from './mcp/client.js';
|
|
17
|
+
export { NoopToolCache } from './smart-agent/cache/noop-tool-cache.js';
|
|
18
|
+
export { ToolCache } from './smart-agent/cache/tool-cache.js';
|
|
19
|
+
export type { IToolCache } from './smart-agent/cache/types.js';
|
|
20
|
+
export { ConfigWatcher, type ConfigWatcherOptions, type HotReloadableConfig, } from './smart-agent/config/config-watcher.js';
|
|
21
|
+
export { HealthChecker, type HealthCheckerDeps, } from './smart-agent/health/health-checker.js';
|
|
22
|
+
export type { CircuitBreakerStatus, HealthComponentStatus, HealthStatus, } from './smart-agent/health/types.js';
|
|
23
|
+
export { type CounterSnapshot, type HistogramSnapshot, InMemoryMetrics, type MetricsSnapshot, } from './smart-agent/metrics/in-memory-metrics.js';
|
|
24
|
+
export { NoopMetrics } from './smart-agent/metrics/noop-metrics.js';
|
|
25
|
+
export type { ICounter, IHistogram, IMetrics, } from './smart-agent/metrics/types.js';
|
|
26
|
+
export { QdrantRag, type QdrantRagConfig, } from './smart-agent/rag/qdrant-rag.js';
|
|
27
|
+
export { type IQueryExpander, LlmQueryExpander, NoopQueryExpander, } from './smart-agent/rag/query-expander.js';
|
|
28
|
+
export { LlmReranker } from './smart-agent/reranker/llm-reranker.js';
|
|
29
|
+
export { NoopReranker } from './smart-agent/reranker/noop-reranker.js';
|
|
30
|
+
export type { IReranker } from './smart-agent/reranker/types.js';
|
|
31
|
+
export { CircuitBreaker, type CircuitBreakerConfig, type CircuitState, } from './smart-agent/resilience/circuit-breaker.js';
|
|
32
|
+
export { CircuitBreakerEmbedder } from './smart-agent/resilience/circuit-breaker-embedder.js';
|
|
33
|
+
export { CircuitBreakerLlm } from './smart-agent/resilience/circuit-breaker-llm.js';
|
|
34
|
+
export { FallbackRag } from './smart-agent/resilience/fallback-rag.js';
|
|
35
|
+
export { NoopSessionManager } from './smart-agent/session/noop-session-manager.js';
|
|
36
|
+
export { SessionManager } from './smart-agent/session/session-manager.js';
|
|
37
|
+
export type { ISessionManager } from './smart-agent/session/types.js';
|
|
38
|
+
export { NoopTracer } from './smart-agent/tracer/noop-tracer.js';
|
|
39
|
+
export type { ISpan, ITracer, SpanOptions, SpanStatus, } from './smart-agent/tracer/types.js';
|
|
40
|
+
export { NoopValidator } from './smart-agent/validator/noop-validator.js';
|
|
41
|
+
export type { IOutputValidator, ValidationResult, } from './smart-agent/validator/types.js';
|
|
17
42
|
export type { AgentResponse, LLMProviderConfig, LLMResponse, Message, ToolCall, ToolResult, } from './types.js';
|
|
18
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,KAAK,eAAe,EACpB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,KAAK,eAAe,EACpB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,wCAAwC,CAAC;AAEhD,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,YAAY,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,SAAS,EACT,KAAK,eAAe,GACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,cAAc,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,YAAY,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,YAAY,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,YAAY,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,4 +21,28 @@ export { OpenAIProvider } from './llm-providers/openai.js';
|
|
|
21
21
|
export { SapCoreAIProvider, } from './llm-providers/sap-core-ai.js';
|
|
22
22
|
// MCP Client
|
|
23
23
|
export { MCPClientWrapper, } from './mcp/client.js';
|
|
24
|
+
export { NoopToolCache } from './smart-agent/cache/noop-tool-cache.js';
|
|
25
|
+
export { ToolCache } from './smart-agent/cache/tool-cache.js';
|
|
26
|
+
// Config
|
|
27
|
+
export { ConfigWatcher, } from './smart-agent/config/config-watcher.js';
|
|
28
|
+
export { HealthChecker, } from './smart-agent/health/health-checker.js';
|
|
29
|
+
export { InMemoryMetrics, } from './smart-agent/metrics/in-memory-metrics.js';
|
|
30
|
+
export { NoopMetrics } from './smart-agent/metrics/noop-metrics.js';
|
|
31
|
+
// Qdrant RAG
|
|
32
|
+
export { QdrantRag, } from './smart-agent/rag/qdrant-rag.js';
|
|
33
|
+
// Query Expander
|
|
34
|
+
export { LlmQueryExpander, NoopQueryExpander, } from './smart-agent/rag/query-expander.js';
|
|
35
|
+
// Reranker
|
|
36
|
+
export { LlmReranker } from './smart-agent/reranker/llm-reranker.js';
|
|
37
|
+
export { NoopReranker } from './smart-agent/reranker/noop-reranker.js';
|
|
38
|
+
// Resilience
|
|
39
|
+
export { CircuitBreaker, } from './smart-agent/resilience/circuit-breaker.js';
|
|
40
|
+
export { CircuitBreakerEmbedder } from './smart-agent/resilience/circuit-breaker-embedder.js';
|
|
41
|
+
export { CircuitBreakerLlm } from './smart-agent/resilience/circuit-breaker-llm.js';
|
|
42
|
+
export { FallbackRag } from './smart-agent/resilience/fallback-rag.js';
|
|
43
|
+
export { NoopSessionManager } from './smart-agent/session/noop-session-manager.js';
|
|
44
|
+
export { SessionManager } from './smart-agent/session/session-manager.js';
|
|
45
|
+
// Tracer
|
|
46
|
+
export { NoopTracer } from './smart-agent/tracer/noop-tracer.js';
|
|
47
|
+
export { NoopValidator } from './smart-agent/validator/noop-validator.js';
|
|
24
48
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iEAAiE;AACjE,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAC;AACrC,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAC;AACpC,8DAA8D;AAC9D,mFAAmF;AACnF,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,GAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,GAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAEL,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAqB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,gBAAgB;AAChB,2DAA2D;AAC3D,OAAO,EAEL,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,aAAa;AACb,OAAO,EAEL,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iEAAiE;AACjE,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAC;AACrC,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAC;AACpC,8DAA8D;AAC9D,mFAAmF;AACnF,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,gBAAgB,GAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,GAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAEL,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAqB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,gBAAgB;AAChB,2DAA2D;AAC3D,OAAO,EAEL,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,aAAa;AACb,OAAO,EAEL,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,SAAS;AACT,OAAO,EACL,aAAa,GAGd,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,aAAa,GAEd,MAAM,wCAAwC,CAAC;AAOhD,OAAO,EAGL,eAAe,GAEhB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAOpE,aAAa;AACb,OAAO,EACL,SAAS,GAEV,MAAM,iCAAiC,CAAC;AACzC,iBAAiB;AACjB,OAAO,EAEL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAC7C,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAEvE,aAAa;AACb,OAAO,EACL,cAAc,GAGf,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG1E,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAOjE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Message } from '../types.js';
|
|
2
|
+
import type { IToolCache } from './cache/types.js';
|
|
2
3
|
import type { IContextAssembler } from './interfaces/assembler.js';
|
|
3
4
|
import type { ISubpromptClassifier } from './interfaces/classifier.js';
|
|
4
5
|
import type { ILlm } from './interfaces/llm.js';
|
|
@@ -6,7 +7,13 @@ import type { IMcpClient } from './interfaces/mcp-client.js';
|
|
|
6
7
|
import type { IRag } from './interfaces/rag.js';
|
|
7
8
|
import { type CallOptions, type LlmStreamChunk, type Result, SmartAgentError } from './interfaces/types.js';
|
|
8
9
|
import type { ILogger } from './logger/index.js';
|
|
10
|
+
import type { IMetrics } from './metrics/types.js';
|
|
9
11
|
import type { IPromptInjectionDetector, IToolPolicy, SessionPolicy } from './policy/types.js';
|
|
12
|
+
import { type IQueryExpander } from './rag/query-expander.js';
|
|
13
|
+
import type { IReranker } from './reranker/types.js';
|
|
14
|
+
import type { ISessionManager } from './session/types.js';
|
|
15
|
+
import type { ITracer } from './tracer/types.js';
|
|
16
|
+
import type { IOutputValidator } from './validator/types.js';
|
|
10
17
|
export declare class OrchestratorError extends SmartAgentError {
|
|
11
18
|
constructor(message: string, code?: string);
|
|
12
19
|
}
|
|
@@ -22,9 +29,16 @@ export interface SmartAgentDeps {
|
|
|
22
29
|
ragStores: SmartAgentRagStores;
|
|
23
30
|
classifier: ISubpromptClassifier;
|
|
24
31
|
assembler: IContextAssembler;
|
|
32
|
+
reranker?: IReranker;
|
|
33
|
+
queryExpander?: IQueryExpander;
|
|
25
34
|
logger?: ILogger;
|
|
26
35
|
toolPolicy?: IToolPolicy;
|
|
27
36
|
injectionDetector?: IPromptInjectionDetector;
|
|
37
|
+
tracer?: ITracer;
|
|
38
|
+
metrics?: IMetrics;
|
|
39
|
+
toolCache?: IToolCache;
|
|
40
|
+
outputValidator?: IOutputValidator;
|
|
41
|
+
sessionManager?: ISessionManager;
|
|
28
42
|
}
|
|
29
43
|
export interface SmartAgentConfig {
|
|
30
44
|
maxIterations: number;
|
|
@@ -40,6 +54,9 @@ export interface SmartAgentConfig {
|
|
|
40
54
|
historySummaryPrompt?: string;
|
|
41
55
|
historyAutoSummarizeLimit?: number;
|
|
42
56
|
mode?: 'hard' | 'pass' | 'smart';
|
|
57
|
+
queryExpansionEnabled?: boolean;
|
|
58
|
+
toolResultCacheTtlMs?: number;
|
|
59
|
+
sessionTokenBudget?: number;
|
|
43
60
|
}
|
|
44
61
|
export type StopReason = 'stop' | 'iteration_limit' | 'tool_call_limit';
|
|
45
62
|
export interface SmartAgentResponse {
|
|
@@ -55,9 +72,18 @@ export interface SmartAgentResponse {
|
|
|
55
72
|
}
|
|
56
73
|
export declare class SmartAgent {
|
|
57
74
|
private readonly deps;
|
|
58
|
-
private
|
|
75
|
+
private config;
|
|
59
76
|
private readonly toolAvailabilityRegistry;
|
|
77
|
+
private readonly tracer;
|
|
78
|
+
private readonly metrics;
|
|
79
|
+
private readonly reranker;
|
|
80
|
+
private readonly queryExpander;
|
|
81
|
+
private readonly toolCache;
|
|
82
|
+
private readonly outputValidator;
|
|
83
|
+
private readonly sessionManager;
|
|
60
84
|
constructor(deps: SmartAgentDeps, config: SmartAgentConfig);
|
|
85
|
+
/** Apply a partial config update at runtime (hot-reload). */
|
|
86
|
+
applyConfigUpdate(update: Partial<SmartAgentConfig>): void;
|
|
61
87
|
healthCheck(options?: CallOptions): Promise<Result<{
|
|
62
88
|
llm: boolean;
|
|
63
89
|
rag: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/smart-agent/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/smart-agent/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { NoopToolCache } from './cache/noop-tool-cache.js';
|
|
2
3
|
import { SmartAgentError, } from './interfaces/types.js';
|
|
4
|
+
import { NoopMetrics } from './metrics/noop-metrics.js';
|
|
3
5
|
import { isToolContextUnavailableError, ToolAvailabilityRegistry, } from './policy/tool-availability-registry.js';
|
|
6
|
+
import { NoopQueryExpander, } from './rag/query-expander.js';
|
|
7
|
+
import { NoopReranker } from './reranker/noop-reranker.js';
|
|
8
|
+
import { NoopSessionManager } from './session/noop-session-manager.js';
|
|
9
|
+
import { NoopTracer } from './tracer/noop-tracer.js';
|
|
4
10
|
import { normalizeExternalTools } from './utils/external-tools-normalizer.js';
|
|
5
11
|
import { getStreamToolCallName, toToolCallDelta, } from './utils/tool-call-deltas.js';
|
|
12
|
+
import { NoopValidator } from './validator/noop-validator.js';
|
|
6
13
|
export class OrchestratorError extends SmartAgentError {
|
|
7
14
|
constructor(message, code = 'ORCHESTRATOR_ERROR') {
|
|
8
15
|
super(message, code);
|
|
@@ -31,10 +38,28 @@ export class SmartAgent {
|
|
|
31
38
|
deps;
|
|
32
39
|
config;
|
|
33
40
|
toolAvailabilityRegistry;
|
|
41
|
+
tracer;
|
|
42
|
+
metrics;
|
|
43
|
+
reranker;
|
|
44
|
+
queryExpander;
|
|
45
|
+
toolCache;
|
|
46
|
+
outputValidator;
|
|
47
|
+
sessionManager;
|
|
34
48
|
constructor(deps, config) {
|
|
35
49
|
this.deps = deps;
|
|
36
50
|
this.config = config;
|
|
37
51
|
this.toolAvailabilityRegistry = new ToolAvailabilityRegistry(this.config.toolUnavailableTtlMs);
|
|
52
|
+
this.tracer = deps.tracer ?? new NoopTracer();
|
|
53
|
+
this.metrics = deps.metrics ?? new NoopMetrics();
|
|
54
|
+
this.reranker = deps.reranker ?? new NoopReranker();
|
|
55
|
+
this.queryExpander = deps.queryExpander ?? new NoopQueryExpander();
|
|
56
|
+
this.toolCache = deps.toolCache ?? new NoopToolCache();
|
|
57
|
+
this.outputValidator = deps.outputValidator ?? new NoopValidator();
|
|
58
|
+
this.sessionManager = deps.sessionManager ?? new NoopSessionManager();
|
|
59
|
+
}
|
|
60
|
+
/** Apply a partial config update at runtime (hot-reload). */
|
|
61
|
+
applyConfigUpdate(update) {
|
|
62
|
+
this.config = { ...this.config, ...update };
|
|
38
63
|
}
|
|
39
64
|
async healthCheck(options) {
|
|
40
65
|
const results = {
|
|
@@ -99,8 +124,13 @@ export class SmartAgent {
|
|
|
99
124
|
};
|
|
100
125
|
return;
|
|
101
126
|
}
|
|
127
|
+
this.metrics.requestCount.add();
|
|
128
|
+
const requestStart = Date.now();
|
|
102
129
|
const traceId = options?.trace?.traceId ?? randomUUID();
|
|
103
|
-
const
|
|
130
|
+
const rootSpan = this.tracer.startSpan('smart_agent.process', {
|
|
131
|
+
traceId,
|
|
132
|
+
attributes: { 'smart_agent.mode': this.config.mode || 'smart' },
|
|
133
|
+
});
|
|
104
134
|
let timeoutCleanup;
|
|
105
135
|
let opts = options;
|
|
106
136
|
if (this.config.timeoutMs) {
|
|
@@ -127,15 +157,27 @@ export class SmartAgent {
|
|
|
127
157
|
const stream = this.deps.mainLlm.streamChat(messages, externalTools, opts);
|
|
128
158
|
for await (const chunk of stream)
|
|
129
159
|
yield chunk;
|
|
160
|
+
rootSpan.setStatus('ok');
|
|
161
|
+
rootSpan.end();
|
|
130
162
|
return;
|
|
131
163
|
}
|
|
132
164
|
// 1. Unified Preparation
|
|
133
|
-
const initResult = await this._preparePipeline(textOrMessages, opts,
|
|
165
|
+
const initResult = await this._preparePipeline(textOrMessages, opts, rootSpan);
|
|
134
166
|
if (!initResult.ok) {
|
|
167
|
+
rootSpan.setStatus('error', initResult.error.message);
|
|
168
|
+
rootSpan.end();
|
|
135
169
|
yield initResult;
|
|
136
170
|
return;
|
|
137
171
|
}
|
|
138
|
-
|
|
172
|
+
let { processedHistory } = initResult.value;
|
|
173
|
+
const { subprompts, toolClientMap } = initResult.value;
|
|
174
|
+
// Token budget check — summarize if over budget
|
|
175
|
+
if (this.sessionManager.isOverBudget()) {
|
|
176
|
+
const sumResult = await this._summarizeHistory(processedHistory, opts);
|
|
177
|
+
if (sumResult.ok)
|
|
178
|
+
processedHistory = sumResult.value;
|
|
179
|
+
this.sessionManager.reset();
|
|
180
|
+
}
|
|
139
181
|
// 2. Decide context and tools for the WHOLE request
|
|
140
182
|
const actions = subprompts.filter((sp) => sp.type === 'action');
|
|
141
183
|
const isSapRequired = actions.some((a) => a.context === 'sap-abap') || mode === 'hard';
|
|
@@ -149,15 +191,49 @@ export class SmartAgent {
|
|
|
149
191
|
if (isSapRequired) {
|
|
150
192
|
// Collect all action texts for RAG
|
|
151
193
|
const combinedActionText = actions.map((a) => a.text).join(' ');
|
|
152
|
-
|
|
194
|
+
let ragText = await this._toEnglishForRag(combinedActionText, opts);
|
|
195
|
+
if (this.config.queryExpansionEnabled) {
|
|
196
|
+
const expandResult = await this.queryExpander.expand(ragText, opts);
|
|
197
|
+
if (expandResult.ok)
|
|
198
|
+
ragText = expandResult.value;
|
|
199
|
+
}
|
|
153
200
|
const k = this.config.ragQueryK ?? 10;
|
|
201
|
+
const ragSpan = this.tracer.startSpan('smart_agent.rag_query', {
|
|
202
|
+
parent: rootSpan,
|
|
203
|
+
attributes: { 'rag.k': k },
|
|
204
|
+
});
|
|
154
205
|
const [fR, fbR, sR] = await Promise.all([
|
|
155
206
|
this.deps.ragStores.facts.query(ragText, k, opts),
|
|
156
207
|
this.deps.ragStores.feedback.query(ragText, k, opts),
|
|
157
208
|
this.deps.ragStores.state.query(ragText, k, opts),
|
|
158
209
|
]);
|
|
210
|
+
ragSpan.end();
|
|
211
|
+
this.metrics.ragQueryCount.add(1, {
|
|
212
|
+
store: 'facts',
|
|
213
|
+
hit: String(fR.ok && fR.value.length > 0),
|
|
214
|
+
});
|
|
215
|
+
this.metrics.ragQueryCount.add(1, {
|
|
216
|
+
store: 'feedback',
|
|
217
|
+
hit: String(fbR.ok && fbR.value.length > 0),
|
|
218
|
+
});
|
|
219
|
+
this.metrics.ragQueryCount.add(1, {
|
|
220
|
+
store: 'state',
|
|
221
|
+
hit: String(sR.ok && sR.value.length > 0),
|
|
222
|
+
});
|
|
223
|
+
// Rerank results
|
|
224
|
+
const [rerankedFacts, rerankedFeedback, rerankedState] = await Promise.all([
|
|
225
|
+
fR.ok
|
|
226
|
+
? this.reranker.rerank(ragText, fR.value, opts)
|
|
227
|
+
: Promise.resolve(fR),
|
|
228
|
+
fbR.ok
|
|
229
|
+
? this.reranker.rerank(ragText, fbR.value, opts)
|
|
230
|
+
: Promise.resolve(fbR),
|
|
231
|
+
sR.ok
|
|
232
|
+
? this.reranker.rerank(ragText, sR.value, opts)
|
|
233
|
+
: Promise.resolve(sR),
|
|
234
|
+
]);
|
|
159
235
|
const { tools: mcpTools } = await this._listAllTools(opts);
|
|
160
|
-
const facts =
|
|
236
|
+
const facts = rerankedFacts.ok ? rerankedFacts.value : [];
|
|
161
237
|
const ragToolNames = new Set(facts
|
|
162
238
|
.map((r) => r.metadata.id)
|
|
163
239
|
.filter((id) => id?.startsWith('tool:'))
|
|
@@ -169,8 +245,8 @@ export class SmartAgent {
|
|
|
169
245
|
: [];
|
|
170
246
|
retrieved = {
|
|
171
247
|
facts,
|
|
172
|
-
feedback:
|
|
173
|
-
state:
|
|
248
|
+
feedback: rerankedFeedback.ok ? rerankedFeedback.value : [],
|
|
249
|
+
state: rerankedState.ok ? rerankedState.value : [],
|
|
174
250
|
tools: selectedMcpTools,
|
|
175
251
|
};
|
|
176
252
|
finalTools =
|
|
@@ -190,31 +266,59 @@ export class SmartAgent {
|
|
|
190
266
|
});
|
|
191
267
|
}
|
|
192
268
|
// 3. Assemble Context once
|
|
193
|
-
const mainAction = actions.length >
|
|
194
|
-
?
|
|
195
|
-
|
|
269
|
+
const mainAction = actions.length > 1
|
|
270
|
+
? {
|
|
271
|
+
type: 'action',
|
|
272
|
+
text: actions.map((a) => a.text).join('\n'),
|
|
273
|
+
context: actions.find((a) => a.context)?.context,
|
|
274
|
+
dependency: 'independent',
|
|
275
|
+
}
|
|
276
|
+
: actions.length === 1
|
|
277
|
+
? actions[0]
|
|
278
|
+
: subprompts.find((sp) => sp.type === 'chat') || subprompts[0];
|
|
279
|
+
if (actions.length > 1) {
|
|
280
|
+
opts?.sessionLogger?.logStep('actions_merged', {
|
|
281
|
+
count: actions.length,
|
|
282
|
+
actions: actions.map((a) => ({
|
|
283
|
+
text: a.text,
|
|
284
|
+
dependency: a.dependency,
|
|
285
|
+
})),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
const assembleSpan = this.tracer.startSpan('smart_agent.assemble', {
|
|
289
|
+
parent: rootSpan,
|
|
290
|
+
});
|
|
196
291
|
const assembleResult = await this.deps.assembler.assemble(mainAction, retrieved, processedHistory, opts);
|
|
197
292
|
if (!assembleResult.ok) {
|
|
293
|
+
assembleSpan.setStatus('error', assembleResult.error.message);
|
|
294
|
+
assembleSpan.end();
|
|
295
|
+
rootSpan.setStatus('error', assembleResult.error.message);
|
|
296
|
+
rootSpan.end();
|
|
198
297
|
yield {
|
|
199
298
|
ok: false,
|
|
200
299
|
error: new OrchestratorError(assembleResult.error.message, 'ASSEMBLER_ERROR'),
|
|
201
300
|
};
|
|
202
301
|
return;
|
|
203
302
|
}
|
|
303
|
+
assembleSpan.setStatus('ok');
|
|
304
|
+
assembleSpan.end();
|
|
204
305
|
opts?.sessionLogger?.logStep(`final_context_assembled`, {
|
|
205
306
|
messages: assembleResult.value,
|
|
206
307
|
tools: finalTools.map((t) => t.name),
|
|
207
308
|
});
|
|
208
309
|
// 4. Single Streaming Loop
|
|
209
|
-
const stream = this._runStreamingToolLoop(mainAction, retrieved, assembleResult.value, toolClientMap, opts,
|
|
310
|
+
const stream = this._runStreamingToolLoop(mainAction, retrieved, assembleResult.value, toolClientMap, opts, rootSpan, sessionId, mode === 'hard' ? [] : externalTools, finalTools);
|
|
210
311
|
for await (const chunk of stream)
|
|
211
312
|
yield chunk;
|
|
313
|
+
rootSpan.setStatus('ok');
|
|
212
314
|
}
|
|
213
315
|
finally {
|
|
316
|
+
rootSpan.end();
|
|
214
317
|
timeoutCleanup?.();
|
|
318
|
+
this.metrics.requestLatency.record(Date.now() - requestStart);
|
|
215
319
|
}
|
|
216
320
|
}
|
|
217
|
-
async _preparePipeline(textOrMessages, opts,
|
|
321
|
+
async _preparePipeline(textOrMessages, opts, parentSpan) {
|
|
218
322
|
opts?.sessionLogger?.logStep('client_request', { textOrMessages });
|
|
219
323
|
const text = typeof textOrMessages === 'string'
|
|
220
324
|
? textOrMessages
|
|
@@ -228,31 +332,52 @@ export class SmartAgent {
|
|
|
228
332
|
if (res.ok)
|
|
229
333
|
processedHistory = res.value;
|
|
230
334
|
}
|
|
335
|
+
const classifySpan = this.tracer.startSpan('smart_agent.classify', {
|
|
336
|
+
parent: parentSpan,
|
|
337
|
+
});
|
|
231
338
|
const classifyResult = await this.deps.classifier.classify(text, opts);
|
|
232
|
-
if (!classifyResult.ok)
|
|
339
|
+
if (!classifyResult.ok) {
|
|
340
|
+
classifySpan.setStatus('error', classifyResult.error.message);
|
|
341
|
+
classifySpan.end();
|
|
233
342
|
return {
|
|
234
343
|
ok: false,
|
|
235
344
|
error: new OrchestratorError(classifyResult.error.message, 'CLASSIFIER_ERROR'),
|
|
236
345
|
};
|
|
346
|
+
}
|
|
347
|
+
classifySpan.setStatus('ok');
|
|
348
|
+
classifySpan.end();
|
|
237
349
|
opts?.sessionLogger?.logStep('classifier_response', {
|
|
238
350
|
subprompts: classifyResult.value,
|
|
239
351
|
});
|
|
240
352
|
const subprompts = classifyResult.value;
|
|
353
|
+
for (const sp of subprompts) {
|
|
354
|
+
this.metrics.classifierIntentCount.add(1, { intent: sp.type });
|
|
355
|
+
}
|
|
241
356
|
const others = subprompts.filter((sp) => sp.type === 'fact' || sp.type === 'state' || sp.type === 'feedback');
|
|
242
357
|
const ragStoreMap = new Map([
|
|
243
358
|
['fact', this.deps.ragStores.facts],
|
|
244
359
|
['feedback', this.deps.ragStores.feedback],
|
|
245
360
|
['state', this.deps.ragStores.state],
|
|
246
361
|
]);
|
|
247
|
-
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
362
|
+
if (others.length > 0) {
|
|
363
|
+
const upsertSpan = this.tracer.startSpan('smart_agent.rag_upsert', {
|
|
364
|
+
parent: parentSpan,
|
|
365
|
+
attributes: { 'rag.upsert_count': others.length },
|
|
366
|
+
});
|
|
367
|
+
await Promise.allSettled(others.map(async (sp) => {
|
|
368
|
+
const s = ragStoreMap.get(sp.type);
|
|
369
|
+
if (s)
|
|
370
|
+
await s.upsert(sp.text, this._buildRagMetadata(), opts);
|
|
371
|
+
}));
|
|
372
|
+
upsertSpan.end();
|
|
373
|
+
}
|
|
252
374
|
const { toolClientMap } = await this._listAllTools(opts);
|
|
253
375
|
return { ok: true, value: { subprompts, processedHistory, toolClientMap } };
|
|
254
376
|
}
|
|
255
|
-
async *_runStreamingToolLoop(_action, _retrieved, initialMessages, toolClientMap, opts,
|
|
377
|
+
async *_runStreamingToolLoop(_action, _retrieved, initialMessages, toolClientMap, opts, parentSpan, sessionId, externalTools, activeTools) {
|
|
378
|
+
const toolLoopSpan = this.tracer.startSpan('smart_agent.tool_loop', {
|
|
379
|
+
parent: parentSpan,
|
|
380
|
+
});
|
|
256
381
|
let toolCallCount = 0;
|
|
257
382
|
let messages = initialMessages;
|
|
258
383
|
const usage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
@@ -260,10 +385,14 @@ export class SmartAgent {
|
|
|
260
385
|
let currentTools = activeTools;
|
|
261
386
|
for (let iteration = 0;; iteration++) {
|
|
262
387
|
if (opts?.signal?.aborted) {
|
|
388
|
+
toolLoopSpan.setStatus('error', 'Aborted');
|
|
389
|
+
toolLoopSpan.end();
|
|
263
390
|
yield { ok: false, error: new OrchestratorError('Aborted', 'ABORTED') };
|
|
264
391
|
return;
|
|
265
392
|
}
|
|
266
393
|
if (iteration >= this.config.maxIterations) {
|
|
394
|
+
toolLoopSpan.addEvent('iteration_limit_reached');
|
|
395
|
+
toolLoopSpan.end();
|
|
267
396
|
yield {
|
|
268
397
|
ok: true,
|
|
269
398
|
value: { content: '', finishReason: 'length', usage },
|
|
@@ -282,12 +411,22 @@ export class SmartAgent {
|
|
|
282
411
|
messages,
|
|
283
412
|
tools: currentTools,
|
|
284
413
|
});
|
|
414
|
+
const llmSpan = this.tracer.startSpan('smart_agent.llm_call', {
|
|
415
|
+
parent: toolLoopSpan,
|
|
416
|
+
attributes: { 'llm.iteration': iteration + 1 },
|
|
417
|
+
});
|
|
418
|
+
this.metrics.llmCallCount.add();
|
|
419
|
+
const llmCallStart = Date.now();
|
|
285
420
|
const stream = this.deps.mainLlm.streamChat(messages, currentTools, opts);
|
|
286
421
|
let content = '';
|
|
287
422
|
let finishReason;
|
|
288
423
|
const toolCallsMap = new Map();
|
|
289
424
|
for await (const chunkResult of stream) {
|
|
290
425
|
if (!chunkResult.ok) {
|
|
426
|
+
llmSpan.setStatus('error', chunkResult.error.message);
|
|
427
|
+
llmSpan.end();
|
|
428
|
+
toolLoopSpan.setStatus('error', chunkResult.error.message);
|
|
429
|
+
toolLoopSpan.end();
|
|
291
430
|
yield {
|
|
292
431
|
ok: false,
|
|
293
432
|
error: new OrchestratorError(chunkResult.error.message, 'LLM_ERROR'),
|
|
@@ -335,8 +474,12 @@ export class SmartAgent {
|
|
|
335
474
|
usage.promptTokens += chunk.usage.promptTokens;
|
|
336
475
|
usage.completionTokens += chunk.usage.completionTokens;
|
|
337
476
|
usage.totalTokens += chunk.usage.totalTokens;
|
|
477
|
+
this.sessionManager.addTokens(chunk.usage.totalTokens);
|
|
338
478
|
}
|
|
339
479
|
}
|
|
480
|
+
llmSpan.setStatus('ok');
|
|
481
|
+
llmSpan.end();
|
|
482
|
+
this.metrics.llmCallLatency.record(Date.now() - llmCallStart);
|
|
340
483
|
const toolCalls = Array.from(toolCallsMap.values()).map((tc) => {
|
|
341
484
|
let args = {};
|
|
342
485
|
try {
|
|
@@ -353,7 +496,23 @@ export class SmartAgent {
|
|
|
353
496
|
finishReason,
|
|
354
497
|
});
|
|
355
498
|
if (finishReason !== 'tool_calls' || toolCalls.length === 0) {
|
|
499
|
+
// Output validation
|
|
500
|
+
const valResult = await this.outputValidator.validate(content, { messages, tools: currentTools }, opts);
|
|
501
|
+
if (valResult.ok && !valResult.value.valid) {
|
|
502
|
+
const correction = valResult.value.correctedContent ?? valResult.value.reason;
|
|
503
|
+
messages = [
|
|
504
|
+
...messages,
|
|
505
|
+
{ role: 'assistant', content },
|
|
506
|
+
{
|
|
507
|
+
role: 'user',
|
|
508
|
+
content: `Your previous response was rejected by validation: ${correction}. Please try again.`,
|
|
509
|
+
},
|
|
510
|
+
];
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
356
513
|
opts?.sessionLogger?.logStep('final_response', { content, usage });
|
|
514
|
+
toolLoopSpan.setStatus('ok');
|
|
515
|
+
toolLoopSpan.end();
|
|
357
516
|
yield {
|
|
358
517
|
ok: true,
|
|
359
518
|
value: { content: '', finishReason: finishReason || 'stop', usage },
|
|
@@ -427,6 +586,8 @@ export class SmartAgent {
|
|
|
427
586
|
continue;
|
|
428
587
|
}
|
|
429
588
|
if (validExternalCalls.length > 0) {
|
|
589
|
+
toolLoopSpan.setStatus('ok');
|
|
590
|
+
toolLoopSpan.end();
|
|
430
591
|
yield {
|
|
431
592
|
ok: true,
|
|
432
593
|
value: { content: '', finishReason: 'tool_calls', usage },
|
|
@@ -449,31 +610,66 @@ export class SmartAgent {
|
|
|
449
610
|
})),
|
|
450
611
|
},
|
|
451
612
|
];
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
613
|
+
// Truncate batch to remaining budget
|
|
614
|
+
const remaining = this.config.maxToolCalls !== undefined
|
|
615
|
+
? this.config.maxToolCalls - toolCallCount
|
|
616
|
+
: internalCalls.length;
|
|
617
|
+
if (remaining <= 0) {
|
|
618
|
+
toolLoopSpan.addEvent('tool_call_limit_reached');
|
|
619
|
+
toolLoopSpan.end();
|
|
620
|
+
yield {
|
|
621
|
+
ok: true,
|
|
622
|
+
value: { content: '', finishReason: 'length', usage },
|
|
623
|
+
};
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
const batch = internalCalls.slice(0, remaining);
|
|
627
|
+
// Yield all progress messages before execution
|
|
628
|
+
for (const tc of batch) {
|
|
461
629
|
yield {
|
|
462
630
|
ok: true,
|
|
463
631
|
value: { content: `\n\n[SmartAgent: Executing ${tc.name}...]\n` },
|
|
464
632
|
};
|
|
633
|
+
}
|
|
634
|
+
// Execute all tool calls concurrently
|
|
635
|
+
const results = await Promise.all(batch.map(async (tc) => {
|
|
465
636
|
opts?.sessionLogger?.logStep(`mcp_call_${tc.name}`, {
|
|
466
637
|
arguments: tc.arguments,
|
|
467
638
|
});
|
|
468
639
|
const client = toolClientMap.get(tc.name);
|
|
469
640
|
if (!client)
|
|
470
|
-
|
|
471
|
-
const
|
|
641
|
+
return { tc, text: '', res: null };
|
|
642
|
+
const toolSpan = this.tracer.startSpan('smart_agent.tool_call', {
|
|
643
|
+
parent: toolLoopSpan,
|
|
644
|
+
attributes: { 'tool.name': tc.name },
|
|
645
|
+
});
|
|
646
|
+
const cached = this.toolCache.get(tc.name, tc.arguments);
|
|
647
|
+
const res = cached
|
|
648
|
+
? (() => {
|
|
649
|
+
this.metrics.toolCacheHitCount.add();
|
|
650
|
+
toolSpan.setAttribute('cache', 'hit');
|
|
651
|
+
return { ok: true, value: cached };
|
|
652
|
+
})()
|
|
653
|
+
: await (async () => {
|
|
654
|
+
const r = await client.callTool(tc.name, tc.arguments, opts);
|
|
655
|
+
if (r.ok)
|
|
656
|
+
this.toolCache.set(tc.name, tc.arguments, r.value);
|
|
657
|
+
return r;
|
|
658
|
+
})();
|
|
472
659
|
const text = !res.ok
|
|
473
660
|
? res.error.message
|
|
474
661
|
: typeof res.value.content === 'string'
|
|
475
662
|
? res.value.content
|
|
476
663
|
: JSON.stringify(res.value.content);
|
|
664
|
+
toolSpan.setStatus(res.ok ? 'ok' : 'error', res.ok ? undefined : text);
|
|
665
|
+
toolSpan.end();
|
|
666
|
+
return { tc, text, res };
|
|
667
|
+
}));
|
|
668
|
+
// Process results: update availability, metrics, messages
|
|
669
|
+
const toolMessages = [];
|
|
670
|
+
for (const { tc, text, res } of results) {
|
|
671
|
+
if (!res)
|
|
672
|
+
continue;
|
|
477
673
|
if (!res.ok && isToolContextUnavailableError(text)) {
|
|
478
674
|
const entry = this.toolAvailabilityRegistry.block(sessionId, tc.name, text);
|
|
479
675
|
currentTools = currentTools.filter((t) => t.name !== tc.name);
|
|
@@ -482,13 +678,18 @@ export class SmartAgent {
|
|
|
482
678
|
blockedUntil: entry.blockedUntil,
|
|
483
679
|
});
|
|
484
680
|
}
|
|
485
|
-
opts?.sessionLogger?.logStep(`mcp_result_${tc.name}`, {
|
|
681
|
+
opts?.sessionLogger?.logStep(`mcp_result_${tc.name}`, {
|
|
682
|
+
result: text,
|
|
683
|
+
});
|
|
486
684
|
toolCallCount++;
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
685
|
+
this.metrics.toolCallCount.add();
|
|
686
|
+
toolMessages.push({
|
|
687
|
+
role: 'tool',
|
|
688
|
+
content: text,
|
|
689
|
+
tool_call_id: tc.id,
|
|
690
|
+
});
|
|
491
691
|
}
|
|
692
|
+
messages = [...messages, ...toolMessages];
|
|
492
693
|
}
|
|
493
694
|
}
|
|
494
695
|
async _listAllTools(opts) {
|