@recombine-ai/platform 0.4.0 → 0.5.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/build/bosun-app/backend/server.js +1 -1
- package/build/bosun-app/backend/server.js.map +2 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BEtU89l8.js → BfQeNRSV.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BfQeNRSV.js.br +3 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BfQeNRSV.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BVp4hYzT.js → BwC8XjMu.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BwC8XjMu.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BwC8XjMu.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{zpyNGpfC.js → CKcQhCJC.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CKcQhCJC.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CKcQhCJC.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BOj6p3qj.js → DWlUaO0d.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DWlUaO0d.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DWlUaO0d.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{CNWRsnQ2.js → dqHFzkrz.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/dqHFzkrz.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/dqHFzkrz.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/{app.DJfhEB0w.js → app.D21MRecj.js} +2 -2
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.D21MRecj.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.D21MRecj.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CfsLMJez.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CfsLMJez.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CfsLMJez.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{0.BrSNCmq3.js → 0.DTw_tt3s.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.DTw_tt3s.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.DTw_tt3s.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{1.br7GI-g3.js → 1.llCYq9Hg.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.llCYq9Hg.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.llCYq9Hg.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{10.BI2Z0Is-.js → 10.D9R5gFET.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.D9R5gFET.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.D9R5gFET.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{17.BpaLQSZh.js → 17.BJPfWzEW.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BJPfWzEW.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BJPfWzEW.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{18.CYbvSJai.js → 18.vMqDwRaL.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.vMqDwRaL.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.vMqDwRaL.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{2.BYBSEm-Y.js → 2.DqYksi1m.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DqYksi1m.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DqYksi1m.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{3.BuP4tAto.js → 3.DY4cCysm.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.DY4cCysm.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.DY4cCysm.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{4.Dlg932RB.js → 4.CT5azNVy.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.CT5azNVy.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.CT5azNVy.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{5.BWt6bVnz.js → 5.D3K2hLe5.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.D3K2hLe5.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.D3K2hLe5.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{6.DL1bd1xV.js → 6.C50_01kw.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.C50_01kw.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.C50_01kw.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{8.BJXaarvf.js → 8.BDWagOdA.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BDWagOdA.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BDWagOdA.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{9.DZnil4g8.js → 9.DjkNtG73.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DjkNtG73.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DjkNtG73.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/version.json +1 -1
- package/build/bosun-app/frontend/client/_app/version.json.br +0 -0
- package/build/bosun-app/frontend/client/_app/version.json.gz +0 -0
- package/build/bosun-app/frontend/handler.js +4 -4
- package/build/bosun-app/frontend/index.js +4 -4
- package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-Bu4L_cnE.js → internal.js-CZxAejkO.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-Bu4L_cnE.js.map → internal.js-CZxAejkO.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/{handler-Caqo1h-B.js → handler-Jnrg3wPg.js} +3 -3
- package/build/bosun-app/frontend/server/chunks/{handler-Caqo1h-B.js.map → handler-Jnrg3wPg.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/{index.js-B6JFIJIn.js → index.js-CHqxWZDr.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/{index.js-B6JFIJIn.js.map → index.js-CHqxWZDr.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/{manifest.js-BQmpznei.js → manifest.js-DmcqihPV.js} +14 -14
- package/build/bosun-app/frontend/server/chunks/{manifest.js-BQmpznei.js.map → manifest.js-DmcqihPV.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{0.js-DFPCfgZg.js → 0.js-AzmZoy1E.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{0.js-DFPCfgZg.js.map → 0.js-AzmZoy1E.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{1.js-BujyKhW9.js → 1.js-DHw5LmcV.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{1.js-BujyKhW9.js.map → 1.js-DHw5LmcV.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{10.js-Dbiu4FpX.js → 10.js-Bma8SASV.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{10.js-Dbiu4FpX.js.map → 10.js-Bma8SASV.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{17.js-9Acvxo6X.js → 17.js-CDQ0obMk.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{17.js-9Acvxo6X.js.map → 17.js-CDQ0obMk.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{18.js-D294qrHb.js → 18.js-3gRfKzfa.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{18.js-D294qrHb.js.map → 18.js-3gRfKzfa.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{2.js-DiVDZRco.js → 2.js-BxBjD7OX.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{2.js-DiVDZRco.js.map → 2.js-BxBjD7OX.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{3.js-DiaPSM0a.js → 3.js-bfS0t-8E.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{3.js-DiaPSM0a.js.map → 3.js-bfS0t-8E.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{4.js-DQhC-gZ_.js → 4.js--eSSRL0B.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{4.js-DQhC-gZ_.js.map → 4.js--eSSRL0B.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{5.js-C3vjOcSE.js → 5.js-D6sqQZLO.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{5.js-C3vjOcSE.js.map → 5.js-D6sqQZLO.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{6.js-DpCeETlI.js → 6.js-DAEsXANu.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{6.js-DpCeETlI.js.map → 6.js-DAEsXANu.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{8.js-BjNCuX0D.js → 8.js-CaZXsO-L.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{8.js-BjNCuX0D.js.map → 8.js-CaZXsO-L.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/{9.js-BuUuEII0.js → 9.js-B8aSYLuv.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{9.js-BuUuEII0.js.map → 9.js-B8aSYLuv.js.map} +1 -1
- package/build/core/{make-text-platform.d.ts → get-text-platform.d.ts} +3 -3
- package/build/core/get-text-platform.d.ts.map +1 -0
- package/build/core/{make-text-platform.js → get-text-platform.js} +7 -3
- package/build/core/{make-voice-platform.d.ts → get-voice-platform.d.ts} +3 -3
- package/build/core/get-voice-platform.d.ts.map +1 -0
- package/build/core/{make-voice-platform.js → get-voice-platform.js} +7 -3
- package/build/core/index.d.ts +4 -4
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +2 -2
- package/build/engine/interfaces/other.d.ts +1 -1
- package/build/engine/interfaces/other.d.ts.map +1 -1
- package/build/engine/stream/get-client.d.ts.map +1 -1
- package/build/engine/stream/get-client.js +8 -102
- package/build/text-agent-handlers/incoming-message.d.ts +3 -2
- package/build/text-agent-handlers/incoming-message.d.ts.map +1 -1
- package/build/text-agent-handlers/incoming-message.js +8 -10
- package/build/text-agent-handlers/index.d.ts +1 -1
- package/build/text-agent-handlers/index.d.ts.map +1 -1
- package/build/text-agent-handlers/instrument.d.ts +0 -1
- package/build/text-agent-handlers/instrument.d.ts.map +1 -1
- package/build/text-agent-handlers/instrument.js +5 -5
- package/build/text-agent-handlers/jobs-handler.d.ts +3 -2
- package/build/text-agent-handlers/jobs-handler.d.ts.map +1 -1
- package/build/text-agent-handlers/jobs-handler.js +12 -9
- package/build/text-agent-handlers/jobs.d.ts +1 -1
- package/build/text-agent-handlers/jobs.d.ts.map +1 -1
- package/build/text-agent-handlers/ports.d.ts +2 -4
- package/build/text-agent-handlers/ports.d.ts.map +1 -1
- package/build/text-agent-handlers/ports.js +12 -0
- package/build/voice-agent-api/voice-http.d.ts.map +1 -1
- package/build/voice-agent-api/voice-http.js +9 -26
- package/package.json +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BEtU89l8.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BEtU89l8.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOj6p3qj.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOj6p3qj.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BVp4hYzT.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BVp4hYzT.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CNWRsnQ2.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CNWRsnQ2.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/zpyNGpfC.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/zpyNGpfC.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.DJfhEB0w.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.DJfhEB0w.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BrSNCmq3.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BrSNCmq3.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.br7GI-g3.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.br7GI-g3.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BI2Z0Is-.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BI2Z0Is-.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BpaLQSZh.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BpaLQSZh.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CYbvSJai.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CYbvSJai.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BYBSEm-Y.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BYBSEm-Y.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BuP4tAto.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BuP4tAto.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.Dlg932RB.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.Dlg932RB.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.BWt6bVnz.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.BWt6bVnz.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DL1bd1xV.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DL1bd1xV.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BJXaarvf.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BJXaarvf.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DZnil4g8.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DZnil4g8.js.gz +0 -0
- package/build/core/make-text-platform.d.ts.map +0 -1
- package/build/core/make-voice-platform.d.ts.map +0 -1
|
@@ -3,7 +3,7 @@ import { ContextCache } from '../context-cache';
|
|
|
3
3
|
import { LlmAdapter, Scheduler } from '../engine';
|
|
4
4
|
import type { ITelescope } from '../telescope';
|
|
5
5
|
import { IModels, TextPlatform } from './platform';
|
|
6
|
-
export interface
|
|
6
|
+
export interface TextPlatformOptions<TContext extends object> {
|
|
7
7
|
telescope: ITelescope;
|
|
8
8
|
scheduler: Scheduler;
|
|
9
9
|
promptBasePath: string;
|
|
@@ -11,5 +11,5 @@ export interface MakeTextPlatformOptions<TContext extends object> {
|
|
|
11
11
|
contextCache?: ContextCache<TContext>;
|
|
12
12
|
nunjucksEnv?: nunjucks.Environment;
|
|
13
13
|
}
|
|
14
|
-
export declare function
|
|
15
|
-
//# sourceMappingURL=
|
|
14
|
+
export declare function getTextPlatform<TContext extends object, TModels extends IModels>(models: TModels, options: TextPlatformOptions<TContext>): TextPlatform<TContext, TModels>;
|
|
15
|
+
//# sourceMappingURL=get-text-platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-text-platform.d.ts","sourceRoot":"","sources":["../../src/core/get-text-platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAA;AAEpE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAiC,MAAM,WAAW,CAAA;AAEhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIlD,MAAM,WAAW,mBAAmB,CAAC,QAAQ,SAAS,MAAM;IACxD,SAAS,EAAE,UAAU,CAAA;IAErB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IAEtB,iBAAiB,EAAE,UAAU,CAAA;IAE7B,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAErC,WAAW,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAA;CACrC;AAUD,wBAAgB,eAAe,CAAC,QAAQ,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,EAC5E,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GACvC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAGjC"}
|
|
@@ -3,9 +3,14 @@ import createLogger from '../dockyard';
|
|
|
3
3
|
import { createAIEngine, createLocalFS } from '../engine';
|
|
4
4
|
import { createSlotBooker } from '../steps';
|
|
5
5
|
const logger = createLogger();
|
|
6
|
-
|
|
6
|
+
let platform;
|
|
7
|
+
export function getTextPlatform(models, options) {
|
|
8
|
+
platform ??= makeTextPlatform(models, options);
|
|
9
|
+
return platform;
|
|
10
|
+
}
|
|
11
|
+
function makeTextPlatform(models, options) {
|
|
7
12
|
const { telescope, scheduler, promptBasePath, slotBookerAdapter, contextCache = createInMemoryCache(), nunjucksEnv, } = options;
|
|
8
|
-
|
|
13
|
+
return {
|
|
9
14
|
scheduler,
|
|
10
15
|
contextCache,
|
|
11
16
|
ai: createAIEngine({
|
|
@@ -23,5 +28,4 @@ export function makeTextPlatform(models, options) {
|
|
|
23
28
|
}),
|
|
24
29
|
...models,
|
|
25
30
|
};
|
|
26
|
-
return platform;
|
|
27
31
|
}
|
|
@@ -4,7 +4,7 @@ import { LlmAdapter } from '../engine';
|
|
|
4
4
|
import type { ITelescope } from '../telescope';
|
|
5
5
|
import { TimeoutsState } from '../timeout-manager';
|
|
6
6
|
import { IModels, VoicePlatform } from './platform';
|
|
7
|
-
export interface
|
|
7
|
+
export interface VoicePlatformOptions<TContext extends object> {
|
|
8
8
|
telescope: ITelescope;
|
|
9
9
|
callControl: CallControl;
|
|
10
10
|
slotBookerAdapter: LlmAdapter;
|
|
@@ -12,5 +12,5 @@ export interface MakeVoicePlatformOptions<TContext extends object> {
|
|
|
12
12
|
timeoutsCache?: ContextCache<TimeoutsState>;
|
|
13
13
|
promptBasePath?: string;
|
|
14
14
|
}
|
|
15
|
-
export declare function
|
|
16
|
-
//# sourceMappingURL=
|
|
15
|
+
export declare function getVoicePlatform<TContext extends object, TModels extends IModels>(models: TModels, options: VoicePlatformOptions<TContext>): VoicePlatform<TContext, TModels>;
|
|
16
|
+
//# sourceMappingURL=get-voice-platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-voice-platform.d.ts","sourceRoot":"","sources":["../../src/core/get-voice-platform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAA;AAEpE,OAAO,EAAE,UAAU,EAAgE,MAAM,WAAW,CAAA;AAEpG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAkB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAInD,MAAM,WAAW,oBAAoB,CAAC,QAAQ,SAAS,MAAM;IACzD,SAAS,EAAE,UAAU,CAAA;IAErB,WAAW,EAAE,WAAW,CAAA;IAExB,iBAAiB,EAAE,UAAU,CAAA;IAE7B,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAErC,aAAa,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IAE3C,cAAc,CAAC,EAAE,MAAM,CAAA;CAC1B;AAUD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,EAC7E,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACxC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAGlC"}
|
|
@@ -5,7 +5,12 @@ import { createAIEngine, createAIStreamEngine, createLocalFS } from '../engine';
|
|
|
5
5
|
import { createSlotBooker } from '../steps';
|
|
6
6
|
import { TimeoutManager } from '../timeout-manager';
|
|
7
7
|
const logger = createLogger();
|
|
8
|
-
|
|
8
|
+
let platform;
|
|
9
|
+
export function getVoicePlatform(models, options) {
|
|
10
|
+
platform ??= makeVoicePlatform(models, options);
|
|
11
|
+
return platform;
|
|
12
|
+
}
|
|
13
|
+
function makeVoicePlatform(models, options) {
|
|
9
14
|
const { telescope, callControl, slotBookerAdapter, contextCache = createInMemoryCache(), timeoutsCache = createInMemoryCache(), promptBasePath = path.join(process.cwd(), '/src/agents'), } = options;
|
|
10
15
|
const streamAi = createAIStreamEngine({
|
|
11
16
|
stepRegistry: { addStep: () => { } },
|
|
@@ -23,7 +28,7 @@ export function makeVoicePlatform(models, options) {
|
|
|
23
28
|
specificInstructionsBasePath: promptBasePath,
|
|
24
29
|
llmAdapter: slotBookerAdapter,
|
|
25
30
|
});
|
|
26
|
-
|
|
31
|
+
return {
|
|
27
32
|
ai,
|
|
28
33
|
fs: createLocalFS({ basePath: promptBasePath }),
|
|
29
34
|
logger,
|
|
@@ -35,7 +40,6 @@ export function makeVoicePlatform(models, options) {
|
|
|
35
40
|
telescope,
|
|
36
41
|
...models,
|
|
37
42
|
};
|
|
38
|
-
return platform;
|
|
39
43
|
}
|
|
40
44
|
const loggingStepRegistry = {
|
|
41
45
|
addStep: (step) => {
|
package/build/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { BasePlatform, IModels, OmnichannelPlatform, TextPlatform, VoicePlatform, } from './platform';
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
4
|
-
export {
|
|
5
|
-
export type {
|
|
2
|
+
export { getVoicePlatform } from './get-voice-platform';
|
|
3
|
+
export type { VoicePlatformOptions } from './get-voice-platform';
|
|
4
|
+
export { getTextPlatform } from './get-text-platform';
|
|
5
|
+
export type { TextPlatformOptions } from './get-text-platform';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,YAAY,EACZ,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,aAAa,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,YAAY,EACZ,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,aAAa,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/build/core/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { getVoicePlatform } from './get-voice-platform';
|
|
2
|
+
export { getTextPlatform } from './get-text-platform';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { Logger } from '../../dockyard';
|
|
2
2
|
export type ScheduleAction = (delay: Date, phone: string) => Promise<void>;
|
|
3
3
|
export interface Scheduler {
|
|
4
|
-
registerAction: (actionName: string, action: (phone: string) => Promise<unknown>) => ScheduleAction;
|
|
4
|
+
registerAction: (agentId: string, actionName: string, action: (phone: string) => Promise<unknown>) => ScheduleAction;
|
|
5
5
|
clearAllPendingActions: (phone: string) => Promise<unknown>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=other.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../../src/engine/interfaces/other.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../../src/engine/interfaces/other.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAG1E,MAAM,WAAW,SAAS;IAQtB,cAAc,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAC1C,cAAc,CAAA;IAKnB,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-client.d.ts","sourceRoot":"","sources":["../../../src/engine/stream/get-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-client.d.ts","sourceRoot":"","sources":["../../../src/engine/stream/get-client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,UAAU,WAAW;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,YAAY;IAClB,MAAM,EAAE,MAAM,CAAA;CACjB;AAeD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,eASjE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,UAMnE"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import OpenAI, { AzureOpenAI } from 'openai';
|
|
2
|
-
import {
|
|
2
|
+
import { Agent } from 'undici';
|
|
3
|
+
const dispatcher = new Agent({
|
|
4
|
+
keepAliveTimeout: 120_000,
|
|
5
|
+
headersTimeout: 30_000,
|
|
6
|
+
bodyTimeout: 60_000,
|
|
7
|
+
});
|
|
3
8
|
export function getAzureClient(logger, config) {
|
|
4
9
|
logger.debug(`getting azure client: ${config.endpoint}, v: ${config.apiVersion}`);
|
|
5
10
|
return new AzureOpenAI({
|
|
@@ -7,112 +12,13 @@ export function getAzureClient(logger, config) {
|
|
|
7
12
|
apiVersion: config.apiVersion,
|
|
8
13
|
endpoint: config.endpoint,
|
|
9
14
|
deployment: config.deployment,
|
|
10
|
-
|
|
15
|
+
fetchOptions: { dispatcher },
|
|
11
16
|
});
|
|
12
17
|
}
|
|
13
18
|
export function getOpenAiClient(logger, config) {
|
|
14
19
|
logger.debug(`getting OpenAi client.`);
|
|
15
20
|
return new OpenAI({
|
|
16
21
|
apiKey: config.apiKey,
|
|
17
|
-
|
|
22
|
+
fetchOptions: { dispatcher },
|
|
18
23
|
});
|
|
19
24
|
}
|
|
20
|
-
function getOptimizedFetch(logger, url) {
|
|
21
|
-
const defaultHeaders = {
|
|
22
|
-
'content-type': 'application/json',
|
|
23
|
-
accept: 'application/json',
|
|
24
|
-
connection: 'keep-alive',
|
|
25
|
-
};
|
|
26
|
-
const httpClient = new HttpClient(url, {
|
|
27
|
-
keepAliveTimeout: 120_000,
|
|
28
|
-
keepAliveMaxTimeout: 300_000,
|
|
29
|
-
pipelining: 10,
|
|
30
|
-
connect: {
|
|
31
|
-
noDelay: true,
|
|
32
|
-
keepAlive: true,
|
|
33
|
-
rejectUnauthorized: false,
|
|
34
|
-
},
|
|
35
|
-
maxCachedSessions: 100,
|
|
36
|
-
headersTimeout: 30000,
|
|
37
|
-
bodyTimeout: 60000,
|
|
38
|
-
});
|
|
39
|
-
process.on('SIGTERM', () => {
|
|
40
|
-
void httpClient.close();
|
|
41
|
-
});
|
|
42
|
-
process.on('SIGINT', () => {
|
|
43
|
-
void httpClient.close();
|
|
44
|
-
});
|
|
45
|
-
async function customFetch(url, options = {}) {
|
|
46
|
-
const requestUrl = url instanceof Request ? url.url : url.toString();
|
|
47
|
-
const method = options.method || 'GET';
|
|
48
|
-
logger.debug('Optimized Fetch', { method, url });
|
|
49
|
-
const originalHeaders = options.headers instanceof Headers
|
|
50
|
-
? Object.fromEntries(options.headers.entries())
|
|
51
|
-
: options.headers;
|
|
52
|
-
const headers = {
|
|
53
|
-
...defaultHeaders,
|
|
54
|
-
...(originalHeaders || {}),
|
|
55
|
-
};
|
|
56
|
-
const response = await httpClient.request({
|
|
57
|
-
path: new URL(requestUrl).pathname + new URL(requestUrl).search,
|
|
58
|
-
method,
|
|
59
|
-
headers,
|
|
60
|
-
body: options.body,
|
|
61
|
-
origin: new URL(requestUrl).origin,
|
|
62
|
-
});
|
|
63
|
-
const responseHeaders = new Headers();
|
|
64
|
-
Object.entries(response.headers).forEach(([key, value]) => {
|
|
65
|
-
if (Array.isArray(value)) {
|
|
66
|
-
value.forEach((v) => responseHeaders.append(key, v));
|
|
67
|
-
}
|
|
68
|
-
else if (value !== undefined) {
|
|
69
|
-
responseHeaders.append(key, value);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
if (response.statusCode === 429) {
|
|
73
|
-
logger.debug('LLM provider returned 429', { url: requestUrl });
|
|
74
|
-
}
|
|
75
|
-
let canceled = false;
|
|
76
|
-
return new Response(new ReadableStream({
|
|
77
|
-
cancel() {
|
|
78
|
-
canceled = true;
|
|
79
|
-
},
|
|
80
|
-
start(controller) {
|
|
81
|
-
response.body.on('data', (chunk) => {
|
|
82
|
-
if (canceled)
|
|
83
|
-
return;
|
|
84
|
-
try {
|
|
85
|
-
controller.enqueue(chunk);
|
|
86
|
-
}
|
|
87
|
-
catch (e) {
|
|
88
|
-
logger.error(e);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
response.body.on('end', () => {
|
|
92
|
-
if (canceled)
|
|
93
|
-
return;
|
|
94
|
-
try {
|
|
95
|
-
controller.close();
|
|
96
|
-
}
|
|
97
|
-
catch (e) {
|
|
98
|
-
logger.error(e);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
response.body.on('error', (err) => {
|
|
102
|
-
if (canceled)
|
|
103
|
-
return;
|
|
104
|
-
try {
|
|
105
|
-
controller.error(err);
|
|
106
|
-
}
|
|
107
|
-
catch (e) {
|
|
108
|
-
logger.error(e);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
}), {
|
|
113
|
-
status: response.statusCode,
|
|
114
|
-
headers: responseHeaders,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return customFetch;
|
|
118
|
-
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { Logger } from '../dockyard';
|
|
2
2
|
import type { Event } from './event';
|
|
3
|
-
import type {
|
|
3
|
+
import type { AgentRegistry, ChatLockStore, GetTextAgent, JobRunner } from './ports';
|
|
4
4
|
export interface IncomingMessageOptions<TMeta> {
|
|
5
5
|
registry: AgentRegistry;
|
|
6
6
|
chatLocks: ChatLockStore;
|
|
7
|
-
|
|
7
|
+
scheduler: JobRunner;
|
|
8
|
+
getTextAgent: GetTextAgent<TMeta>;
|
|
8
9
|
parseMetadata: (event: Event) => Event<TMeta>;
|
|
9
10
|
logger: Logger;
|
|
10
11
|
delays?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incoming-message.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/incoming-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"incoming-message.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/incoming-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAY,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAa9F,MAAM,WAAW,sBAAsB,CAAC,KAAK;IACzC,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,aAAa,CAAA;IAExB,SAAS,EAAE,SAAS,CAAA;IAEpB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3F;AAOD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,IAmI1C,OAAO,KAAK,KAAG,OAAO,CAAC,IAAI,CAAC,CAW3E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cacheTextAgents } from './ports';
|
|
1
2
|
const DEFAULT_MESSAGE_DELAY_SECONDS = 60;
|
|
2
3
|
const DEFAULT_WEBCHAT_DELAY_SECONDS = 30;
|
|
3
4
|
const DEFAULT_TIME_LIMIT_SECONDS = 14 * 60;
|
|
@@ -6,27 +7,24 @@ const isAfter = (date, dateToCompare) => date.getTime() > dateToCompare.getTime(
|
|
|
6
7
|
const differenceInMilliseconds = (later, earlier) => later.getTime() - earlier.getTime();
|
|
7
8
|
const differenceInSeconds = (later, earlier) => Math.trunc(differenceInMilliseconds(later, earlier) / 1000);
|
|
8
9
|
export function createIncomingMessageHandler(options) {
|
|
9
|
-
const { registry, chatLocks,
|
|
10
|
+
const { registry, chatLocks, scheduler, parseMetadata, logger, delays = {} } = options;
|
|
11
|
+
const getTextAgent = cacheTextAgents(options.getTextAgent);
|
|
10
12
|
const messageDelaySeconds = delays.messageSeconds ?? DEFAULT_MESSAGE_DELAY_SECONDS;
|
|
11
13
|
const webchatDelaySeconds = delays.webchatSeconds ?? DEFAULT_WEBCHAT_DELAY_SECONDS;
|
|
12
14
|
const timeLimitSeconds = delays.timeLimitSeconds ?? DEFAULT_TIME_LIMIT_SECONDS;
|
|
13
|
-
async function
|
|
15
|
+
async function getAgent(conversationId) {
|
|
14
16
|
const agentRecord = await registry.getAgent(conversationId);
|
|
15
17
|
if (!agentRecord) {
|
|
16
18
|
throw new Error(`incoming-message, agent not found for ${conversationId}`);
|
|
17
19
|
}
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
throw new Error(`incoming-message, agent creator not found for ${agentRecord.agentId}`);
|
|
21
|
-
}
|
|
22
|
-
const { agent, scheduler } = await agentCreator(conversationId, agentRecord.agentId);
|
|
23
|
-
return { agent, scheduler, agentRecord };
|
|
20
|
+
const agent = await getTextAgent(agentRecord.agentId);
|
|
21
|
+
return { agent, agentRecord };
|
|
24
22
|
}
|
|
25
23
|
async function handleChatMessage(event) {
|
|
26
24
|
logger.debug('incoming-message.handleChatMessage, handling message', {
|
|
27
25
|
conversationId: event.conversationId,
|
|
28
26
|
});
|
|
29
|
-
const { agent,
|
|
27
|
+
const { agent, agentRecord } = await getAgent(event.conversationId);
|
|
30
28
|
let shouldContinue = true;
|
|
31
29
|
try {
|
|
32
30
|
if (!(await agent.isAssigned(event.conversationId))) {
|
|
@@ -70,7 +68,7 @@ export function createIncomingMessageHandler(options) {
|
|
|
70
68
|
conversationId: event.conversationId,
|
|
71
69
|
});
|
|
72
70
|
const currentLock = chatLock ?? (await chatLocks.getChatLock(event.conversationId));
|
|
73
|
-
const { agent,
|
|
71
|
+
const { agent, agentRecord } = await getAgent(event.conversationId);
|
|
74
72
|
if (currentLock)
|
|
75
73
|
logger.debug('incoming-message.handleMessageOnLockRelease, is chat lock expired', {
|
|
76
74
|
isExpired: isAfter(new Date(), currentLock.expiresAt),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { CHANNEL_TYPES } from './event';
|
|
2
2
|
export type { ChannelType, Event } from './event';
|
|
3
3
|
export type { Job, JobInput, JobsPersistence } from './jobs';
|
|
4
|
-
export type {
|
|
4
|
+
export type { AgentRecord, AgentRegistry, ChatLock, ChatLockStore, GetTextAgent, HandlerResponse, JobRunner, } from './ports';
|
|
5
5
|
export { createIncomingMessageHandler } from './incoming-message';
|
|
6
6
|
export type { IncomingMessageOptions } from './incoming-message';
|
|
7
7
|
export { createJobsHandler } from './jobs-handler';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACjD,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAC5D,YAAY,EACR,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACjD,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAC5D,YAAY,EACR,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,eAAe,EACf,SAAS,GACZ,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AACnE,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -4,7 +4,6 @@ import type { Event } from './event';
|
|
|
4
4
|
export interface InstrumentTextAgentOptions<TMeta> {
|
|
5
5
|
telescope: ITelescope;
|
|
6
6
|
agent: TextAgent<TMeta>;
|
|
7
|
-
fallbackConversationId: string;
|
|
8
7
|
messagingProvider?: MonitoringProvider;
|
|
9
8
|
onEvent?: (event: Event<TMeta>) => Promise<void>;
|
|
10
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/instrument.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAElE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,WAAW,0BAA0B,CAAC,KAAK;IAC7C,SAAS,EAAE,UAAU,CAAA;IACrB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IAEvB,
|
|
1
|
+
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/instrument.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAElE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,WAAW,0BAA0B,CAAC,KAAK;IAC7C,SAAS,EAAE,UAAU,CAAA;IACrB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IAEvB,iBAAiB,CAAC,EAAE,kBAAkB,CAAA;IAEtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACnD;AAaD,wBAAgB,mBAAmB,CAAC,KAAK,EACrC,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC,GAC3C,SAAS,CAAC,KAAK,CAAC,CAoClB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { emitConversationalTrace, textEventTrace } from '../telescope';
|
|
2
2
|
export function instrumentTextAgent(options) {
|
|
3
|
-
const { telescope, agent,
|
|
3
|
+
const { telescope, agent, messagingProvider, onEvent } = options;
|
|
4
4
|
const observation = (conversationId) => ({ conversationId, messagingProvider });
|
|
5
5
|
async function traceReceivedMessage(event) {
|
|
6
6
|
if (event.kind !== 'message')
|
|
7
7
|
return;
|
|
8
|
-
await emitConversationalTrace(telescope.getConversationalTracer(), textEventTrace(event.conversationId
|
|
8
|
+
await emitConversationalTrace(telescope.getConversationalTracer(), textEventTrace(event.conversationId, 'received-message', event.body ?? ''));
|
|
9
9
|
}
|
|
10
10
|
return {
|
|
11
11
|
name: agent.name,
|
|
@@ -15,13 +15,13 @@ export function instrumentTextAgent(options) {
|
|
|
15
15
|
await onEvent?.(event);
|
|
16
16
|
await traceReceivedMessage(event);
|
|
17
17
|
return agent.reactOnMessage(event);
|
|
18
|
-
}, observation(event.conversationId
|
|
18
|
+
}, observation(event.conversationId)),
|
|
19
19
|
onChatReady: async (id, meta) => telescope.runObservation(() => agent.onChatReady(id, meta), observation(id)),
|
|
20
20
|
respondToMessage: async (event) => telescope.runObservation(async () => {
|
|
21
21
|
await onEvent?.(event);
|
|
22
22
|
return agent.respondToMessage(event);
|
|
23
|
-
}, observation(event.conversationId
|
|
23
|
+
}, observation(event.conversationId)),
|
|
24
24
|
isAssigned: async (id) => telescope.runObservation(() => agent.isAssigned(id), observation(id)),
|
|
25
|
-
onFatalError: async (error, id) => telescope.runObservation(() => agent.onFatalError(error, id), observation(id
|
|
25
|
+
onFatalError: async (error, id) => telescope.runObservation(() => agent.onFatalError(error, id), observation(id)),
|
|
26
26
|
};
|
|
27
27
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Logger } from '../dockyard';
|
|
2
2
|
import type { JobInput } from './jobs';
|
|
3
|
-
import type {
|
|
3
|
+
import type { AgentRegistry, GetTextAgent, HandlerResponse, JobRunner } from './ports';
|
|
4
4
|
export interface JobsHandlerOptions<TMeta> {
|
|
5
5
|
registry: AgentRegistry;
|
|
6
|
-
|
|
6
|
+
scheduler: JobRunner;
|
|
7
|
+
getTextAgent: GetTextAgent<TMeta>;
|
|
7
8
|
logger: Logger;
|
|
8
9
|
}
|
|
9
10
|
export declare function createJobsHandler<TMeta>(options: JobsHandlerOptions<TMeta>): (input: JobInput) => Promise<HandlerResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs-handler.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/jobs-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"jobs-handler.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/jobs-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGtF,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACrC,QAAQ,EAAE,aAAa,CAAA;IAEvB,SAAS,EAAE,SAAS,CAAA;IAEpB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;CACjB;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAIvC,OAAO,QAAQ,KAAG,OAAO,CAAC,eAAe,CAAC,CAuB7E"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { handlerResponse } from './ports';
|
|
1
|
+
import { cacheTextAgents, handlerResponse } from './ports';
|
|
2
2
|
export function createJobsHandler(options) {
|
|
3
|
-
const { registry,
|
|
3
|
+
const { registry, scheduler, logger } = options;
|
|
4
|
+
const getTextAgent = cacheTextAgents(options.getTextAgent);
|
|
4
5
|
return async function handleJob(input) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
let agent;
|
|
7
|
+
try {
|
|
8
|
+
agent = await getTextAgent(input.agentId);
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
logger.error('jobs, unknown agentId', { agentId: input.agentId, err });
|
|
12
|
+
return handlerResponse(400, { message: `Unknown agentId: ${input.agentId}` });
|
|
9
13
|
}
|
|
10
|
-
const { scheduler, agent } = await agentCreator(input.conversationId, input.workflowId);
|
|
11
14
|
if (await agent.isAssigned(input.conversationId)) {
|
|
12
15
|
try {
|
|
13
16
|
await scheduler.runJob(input);
|
|
@@ -15,11 +18,11 @@ export function createJobsHandler(options) {
|
|
|
15
18
|
catch (err) {
|
|
16
19
|
await agent.onFatalError(String(err), input.conversationId);
|
|
17
20
|
await scheduler.clearAllPendingActions(input.conversationId);
|
|
18
|
-
await registry.deleteAgent(input.conversationId, input.
|
|
21
|
+
await registry.deleteAgent(input.conversationId, input.agentId);
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
else {
|
|
22
|
-
await registry.deleteAgent(input.conversationId, input.
|
|
25
|
+
await registry.deleteAgent(input.conversationId, input.agentId);
|
|
23
26
|
await scheduler.clearAllPendingActions(input.conversationId);
|
|
24
27
|
}
|
|
25
28
|
return handlerResponse(200, { message: 'OK' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/jobs.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAG;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACtB;AAKD,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/jobs.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAG;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACtB;AAKD,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,uBAAuB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;CACtE"}
|
|
@@ -24,10 +24,8 @@ export interface ChatLockStore {
|
|
|
24
24
|
export interface JobRunner extends Scheduler {
|
|
25
25
|
runJob(input: JobInput): Promise<unknown>;
|
|
26
26
|
}
|
|
27
|
-
export type
|
|
28
|
-
|
|
29
|
-
scheduler: JobRunner;
|
|
30
|
-
}>;
|
|
27
|
+
export type GetTextAgent<TMeta> = (agentId: string) => Promise<TextAgent<TMeta>>;
|
|
28
|
+
export declare function cacheTextAgents<TMeta>(getTextAgent: GetTextAgent<TMeta>): GetTextAgent<TMeta>;
|
|
31
29
|
export type HandlerResponse = {
|
|
32
30
|
statusCode: number;
|
|
33
31
|
body: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAGtC,MAAM,WAAW,WAAW;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAClB;AAGD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC7D,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAGD,MAAM,WAAW,QAAQ;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IAE7D,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/E,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxD;AAGD,MAAM,WAAW,SAAU,SAAQ,SAAS;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5C;AAGD,MAAM,MAAM,YAAY,CAAC,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/text-agent-handlers/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAGtC,MAAM,WAAW,WAAW;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAClB;AAGD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC7D,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAGD,MAAM,WAAW,QAAQ;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IAE7D,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/E,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxD;AAGD,MAAM,WAAW,SAAU,SAAQ,SAAS;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5C;AAGD,MAAM,MAAM,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;AAGhF,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAW7F;AAGD,MAAM,MAAM,eAAe,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,eAAe,CAEjB"}
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export function cacheTextAgents(getTextAgent) {
|
|
2
|
+
const agents = new Map();
|
|
3
|
+
return (agentId) => {
|
|
4
|
+
let agent = agents.get(agentId);
|
|
5
|
+
if (!agent) {
|
|
6
|
+
agent = getTextAgent(agentId);
|
|
7
|
+
agents.set(agentId, agent);
|
|
8
|
+
agent.catch(() => agents.delete(agentId));
|
|
9
|
+
}
|
|
10
|
+
return agent;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
1
13
|
export function handlerResponse(statusCode, body) {
|
|
2
14
|
return { statusCode, body: JSON.stringify(body) };
|
|
3
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-http.d.ts","sourceRoot":"","sources":["../../src/voice-agent-api/voice-http.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAA;AAOrE,OAAO,QAAQ,SAAS,CAAC;IACrB,UAAU,cAAc;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC3B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB;CACJ;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IAChE,SAAS,EAAE,UAAU,CAAA;IAErB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,aAAa,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,KAAK,CAAA;IAE5D,mBAAmB,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK;QACzD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IAED,WAAW,EAAE,WAAW,CAAA;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtF,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,EACpC,aAAa,EACb,SAAS,EACT,OAAO,EACP,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,GACnB,EAAE,iBAAiB,CAAC,KAAK,CAAC;;
|
|
1
|
+
{"version":3,"file":"voice-http.d.ts","sourceRoot":"","sources":["../../src/voice-agent-api/voice-http.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAA;AAOrE,OAAO,QAAQ,SAAS,CAAC;IACrB,UAAU,cAAc;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC3B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB;CACJ;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IAChE,SAAS,EAAE,UAAU,CAAA;IAErB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,aAAa,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,KAAK,CAAA;IAE5D,mBAAmB,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK;QACzD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IAED,WAAW,EAAE,WAAW,CAAA;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IAEtF,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,EACpC,aAAa,EACb,SAAS,EACT,OAAO,EACP,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,GACnB,EAAE,iBAAiB,CAAC,KAAK,CAAC;;EA8b1B"}
|
|
@@ -280,33 +280,16 @@ export function voiceHttpConnect({ getVoiceAgent, telescope, onStart, hostsToPre
|
|
|
280
280
|
started = true;
|
|
281
281
|
await prewarmDNS();
|
|
282
282
|
}
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
const agent = agentForCall[req.callId];
|
|
288
|
-
if (agent && callHandledBy[req.callId] === req.agentName) {
|
|
289
|
-
return agent;
|
|
290
|
-
}
|
|
291
|
-
let loadingAgent = agentLoadingForCall[req.callId];
|
|
292
|
-
if (loadingAgent === undefined || callHandledBy[req.callId] !== req.agentName) {
|
|
283
|
+
const agents = new Map();
|
|
284
|
+
function getAgent(req) {
|
|
285
|
+
let agent = agents.get(req.agentName);
|
|
286
|
+
if (!agent) {
|
|
293
287
|
logger.debug('Loading agent', { agentName: req.agentName });
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
try {
|
|
299
|
-
const loadedAgent = await loadingAgent;
|
|
300
|
-
if (callHandledBy[req.callId] === req.agentName) {
|
|
301
|
-
agentForCall[req.callId] = loadedAgent;
|
|
302
|
-
}
|
|
303
|
-
return loadedAgent;
|
|
304
|
-
}
|
|
305
|
-
finally {
|
|
306
|
-
if (agentLoadingForCall[req.callId] === loadingAgent) {
|
|
307
|
-
delete agentLoadingForCall[req.callId];
|
|
308
|
-
}
|
|
288
|
+
agent = getVoiceAgent(req.agentName);
|
|
289
|
+
agents.set(req.agentName, agent);
|
|
290
|
+
agent.catch(() => agents.delete(req.agentName));
|
|
309
291
|
}
|
|
292
|
+
return agent;
|
|
310
293
|
}
|
|
311
294
|
async function prewarmDNS() {
|
|
312
295
|
const dnsLookup = promisify(dns.lookup);
|
|
@@ -331,7 +314,7 @@ export function voiceHttpConnect({ getVoiceAgent, telescope, onStart, hostsToPre
|
|
|
331
314
|
const conversation = {
|
|
332
315
|
conversationId,
|
|
333
316
|
medium: 'phone',
|
|
334
|
-
agentId:
|
|
317
|
+
agentId: req.agentName || undefined,
|
|
335
318
|
region,
|
|
336
319
|
phoneNumber: phoneNumber ?? req.phoneNumber,
|
|
337
320
|
createdAt: Date.now(),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@recombine-ai/platform",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "The Recombine platform: engine, telescope, dockyard, call control, the voice agent API, and the Bosun bindings in one package",
|
|
6
6
|
"license": "EULA",
|
|
7
7
|
"author": "recombine.ai",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|