@drax/ai-back 3.42.0 → 3.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/agents/DraxAgent.js +2 -0
  2. package/dist/controllers/AIGenericController.js +22 -0
  3. package/dist/controllers/DraxAgentController.js +22 -0
  4. package/dist/index.js +4 -2
  5. package/dist/providers/ai/GoogleAiProvider.js +4 -1
  6. package/dist/providers/ai/OllamaAiProvider.js +4 -1
  7. package/dist/providers/ai/OpenAiProvider.js +4 -1
  8. package/dist/services/PromptAudioService.js +68 -0
  9. package/dist/tools/BuildContextTool.js +267 -0
  10. package/package.json +3 -3
  11. package/src/agents/DraxAgent.ts +2 -0
  12. package/src/controllers/AIGenericController.ts +24 -0
  13. package/src/controllers/DraxAgentController.ts +24 -0
  14. package/src/index.ts +16 -0
  15. package/src/interfaces/IAIProvider.ts +38 -1
  16. package/src/interfaces/IDraxAgent.ts +4 -0
  17. package/src/providers/ai/GoogleAiProvider.ts +4 -1
  18. package/src/providers/ai/OllamaAiProvider.ts +4 -1
  19. package/src/providers/ai/OpenAiProvider.ts +4 -1
  20. package/src/services/PromptAudioService.ts +87 -0
  21. package/src/tools/BuildContextTool.ts +388 -0
  22. package/test/BuildContextTool.test.ts +183 -0
  23. package/test/DraxAgent.test.ts +64 -0
  24. package/test/PromptAudioService.test.ts +115 -0
  25. package/tsconfig.tsbuildinfo +1 -1
  26. package/types/agents/DraxAgent.d.ts.map +1 -1
  27. package/types/controllers/AIGenericController.d.ts.map +1 -1
  28. package/types/controllers/DraxAgentController.d.ts.map +1 -1
  29. package/types/index.d.ts +6 -3
  30. package/types/index.d.ts.map +1 -1
  31. package/types/interfaces/IAIProvider.d.ts +32 -1
  32. package/types/interfaces/IAIProvider.d.ts.map +1 -1
  33. package/types/interfaces/IDraxAgent.d.ts +3 -1
  34. package/types/interfaces/IDraxAgent.d.ts.map +1 -1
  35. package/types/providers/ai/GoogleAiProvider.d.ts.map +1 -1
  36. package/types/providers/ai/OllamaAiProvider.d.ts.map +1 -1
  37. package/types/providers/ai/OpenAiProvider.d.ts.map +1 -1
  38. package/types/services/PromptAudioService.d.ts +9 -0
  39. package/types/services/PromptAudioService.d.ts.map +1 -0
  40. package/types/tools/BuildContextTool.d.ts +33 -0
  41. package/types/tools/BuildContextTool.d.ts.map +1 -0
package/src/index.ts CHANGED
@@ -27,6 +27,7 @@ import {BuilderTool} from "./tools/BuilderTool.js";
27
27
  import {KnowledgeService} from "./services/KnowledgeService.js";
28
28
  import {AILogService} from "./services/AILogService.js";
29
29
  import {TTSGenericService} from "./services/TTSGenericService.js";
30
+ import {PromptAudioService} from "./services/PromptAudioService.js";
30
31
  import AILogPermissions from "./permissions/AILogPermissions.js";
31
32
  import AgentPermissions from "./permissions/AgentPermissions.js";
32
33
  import AgentSessionPermissions from "./permissions/AgentSessionPermissions.js";
@@ -44,12 +45,16 @@ import TTSRoutes from "./routes/TTSRoutes.js";
44
45
  import DraxAgentRoutes from "./routes/DraxAgentRoutes.js";
45
46
  import AgentSessionRoutes from "./routes/AgentSessionRoutes.js";
46
47
  import {DraxAgent} from "./agents/DraxAgent.js";
48
+ import {BuildContextTool} from "./tools/BuildContextTool.js";
47
49
  import type {IAILogRepository} from "./interfaces/IAILogRepository.js";
48
50
  import type {
49
51
  IAIProvider,
50
52
  IPromptContentPart,
51
53
  IPromptContentPartImage,
52
54
  IPromptContentPartText,
55
+ IPromptAudioParams,
56
+ IPromptAudioResponse,
57
+ IPromptAudioResponseMeta,
53
58
  IPromptImage,
54
59
  IPromptImageDetail,
55
60
  IPromptMessage,
@@ -76,6 +81,10 @@ import type {
76
81
  ToolBuilderOptions,
77
82
  ToolBuilderService
78
83
  } from "./interfaces/IBuilderTool.js";
84
+ import type {
85
+ BuildContextToolContext,
86
+ BuildContextToolOptions,
87
+ } from "./tools/BuildContextTool.js";
79
88
  import type {
80
89
  DraxAgentControllerOptions
81
90
  } from "./interfaces/IDraxAgentController.js";
@@ -108,6 +117,9 @@ export type {
108
117
  IPromptContentPart,
109
118
  IPromptContentPartImage,
110
119
  IPromptContentPartText,
120
+ IPromptAudioParams,
121
+ IPromptAudioResponse,
122
+ IPromptAudioResponseMeta,
111
123
  IPromptResponse,
112
124
  ITTSProvider,
113
125
  ITTSParams,
@@ -120,6 +132,8 @@ export type {
120
132
  ToolBuilderMethod,
121
133
  ToolBuilderOptions,
122
134
  ToolBuilderService,
135
+ BuildContextToolContext,
136
+ BuildContextToolOptions,
123
137
  DraxAgentControllerOptions,
124
138
  DraxAgentFastifyRoutesOptions,
125
139
  DraxAgentConfig,
@@ -162,10 +176,12 @@ export {
162
176
  DeepSeekAiProvider,
163
177
  ElevenLabsTTSProvider,
164
178
  BuilderTool,
179
+ BuildContextTool,
165
180
  //Service
166
181
  KnowledgeService,
167
182
  AILogService,
168
183
  TTSGenericService,
184
+ PromptAudioService,
169
185
  //Permissions
170
186
  AILogPermissions,
171
187
  AgentPermissions,
@@ -1,4 +1,5 @@
1
1
  import { ZodSchema } from 'zod'
2
+ import type {ITTSVoiceSettings} from "./ITTSProvider.js";
2
3
 
3
4
  type Role = 'user' | 'assistant' | 'system';
4
5
 
@@ -74,6 +75,38 @@ interface IPromptParams {
74
75
  userAgent?: string,
75
76
  tenant?: string | null,
76
77
  user?: string | null,
78
+ audioResponse?: boolean | IPromptAudioParams,
79
+ }
80
+
81
+ interface IPromptAudioParams {
82
+ enabled?: boolean,
83
+ provider?: string,
84
+ voiceId?: string,
85
+ model?: string,
86
+ outputFormat?: string,
87
+ voiceSettings?: ITTSVoiceSettings,
88
+ previousText?: string,
89
+ nextText?: string,
90
+ languageCode?: string,
91
+ seed?: number,
92
+ operationTitle?: string,
93
+ operationGroup?: string,
94
+ }
95
+
96
+ interface IPromptAudioResponseMeta {
97
+ provider: string,
98
+ model: string,
99
+ voiceId: string,
100
+ outputFormat?: string,
101
+ size: number,
102
+ time: number,
103
+ }
104
+
105
+ interface IPromptAudioResponse {
106
+ audio: string,
107
+ contentType: string,
108
+ encoding: 'base64',
109
+ meta: IPromptAudioResponseMeta,
77
110
  }
78
111
 
79
112
  interface IPromptResponse {
@@ -81,7 +114,8 @@ interface IPromptResponse {
81
114
  tokens: number,
82
115
  inputTokens: number,
83
116
  outputTokens: number,
84
- time: number
117
+ time: number,
118
+ audio?: IPromptAudioResponse,
85
119
  }
86
120
 
87
121
  interface IAIProvider {
@@ -92,6 +126,9 @@ export type {
92
126
  IAIProvider,
93
127
  IPromptParams,
94
128
  IPromptResponse,
129
+ IPromptAudioParams,
130
+ IPromptAudioResponse,
131
+ IPromptAudioResponseMeta,
95
132
  IPromptMessage,
96
133
  IPromptMemory,
97
134
  IPromptTool,
@@ -1,5 +1,7 @@
1
1
  import type {
2
2
  IAIProvider,
3
+ IPromptAudioParams,
4
+ IPromptAudioResponse,
3
5
  IPromptContentPart,
4
6
  IPromptImage,
5
7
  IPromptMemory,
@@ -67,6 +69,7 @@ interface DraxAgentMessageInput extends DraxAgentSessionInput {
67
69
  toolMaxIterations?: number;
68
70
  operationTitle?: string;
69
71
  operationGroup?: string;
72
+ audioResponse?: boolean | IPromptAudioParams;
70
73
  }
71
74
 
72
75
  interface DraxAgentMessageOutput {
@@ -79,6 +82,7 @@ interface DraxAgentMessageOutput {
79
82
  inputTokens: number;
80
83
  outputTokens: number;
81
84
  time: number;
85
+ audio?: IPromptAudioResponse;
82
86
  }
83
87
 
84
88
  interface DraxAgentSession {
@@ -17,6 +17,7 @@ import type {
17
17
  } from "../../interfaces/IAIProvider.js";
18
18
  import type {AILogService} from "../../services/AILogService.js";
19
19
  import type {IAILogBase} from "@drax/ai-share";
20
+ import PromptAudioService from "../../services/PromptAudioService.js";
20
21
 
21
22
  class GoogleAiProvider implements IAIProvider{
22
23
  protected _apiKey: string
@@ -446,6 +447,7 @@ class GoogleAiProvider implements IAIProvider{
446
447
  const endTime = performance.now()
447
448
  const time = endTime - startTime
448
449
  const endedAt = new Date()
450
+ const audio = await PromptAudioService.build(input, output)
449
451
 
450
452
  await this.registerPromptLog(input, {
451
453
  model,
@@ -464,7 +466,8 @@ class GoogleAiProvider implements IAIProvider{
464
466
  tokens,
465
467
  inputTokens,
466
468
  outputTokens,
467
- time
469
+ time,
470
+ ...(audio ? {audio} : {}),
468
471
  }
469
472
  } catch (e: any) {
470
473
  const endedAt = new Date()
@@ -9,6 +9,7 @@ import type {
9
9
  } from "../../interfaces/IAIProvider.js";
10
10
  import type {AILogService} from "../../services/AILogService.js";
11
11
  import type {IAILogBase} from "@drax/ai-share";
12
+ import PromptAudioService from "../../services/PromptAudioService.js";
12
13
 
13
14
  type OllamaMessage = {
14
15
  role: "system" | "user" | "assistant" | "tool",
@@ -426,6 +427,7 @@ class OllamaAiProvider implements IAIProvider{
426
427
  const endTime = performance.now()
427
428
  const time = endTime - startTime
428
429
  const endedAt = new Date()
430
+ const audio = await PromptAudioService.build(input, output)
429
431
 
430
432
  await this.registerPromptLog(input, {
431
433
  model,
@@ -444,7 +446,8 @@ class OllamaAiProvider implements IAIProvider{
444
446
  tokens,
445
447
  inputTokens,
446
448
  outputTokens,
447
- time
449
+ time,
450
+ ...(audio ? {audio} : {}),
448
451
  }
449
452
  } catch (e: any) {
450
453
  const endedAt = new Date()
@@ -10,6 +10,7 @@ import type {
10
10
  } from "../../interfaces/IAIProvider.js";
11
11
  import type {AILogService} from "../../services/AILogService.js";
12
12
  import type {IAILogBase} from "@drax/ai-share";
13
+ import PromptAudioService from "../../services/PromptAudioService.js";
13
14
 
14
15
  class OpenAiProvider implements IAIProvider{
15
16
  protected _apiKey: string
@@ -358,6 +359,7 @@ class OpenAiProvider implements IAIProvider{
358
359
  const endTime = performance.now()
359
360
  const time = endTime - startTime
360
361
  const endedAt = new Date()
362
+ const audio = await PromptAudioService.build(input, output)
361
363
 
362
364
  await this.registerPromptLog(input, {
363
365
  model,
@@ -376,7 +378,8 @@ class OpenAiProvider implements IAIProvider{
376
378
  tokens,
377
379
  inputTokens,
378
380
  outputTokens,
379
- time
381
+ time,
382
+ ...(audio ? {audio} : {}),
380
383
  }
381
384
  } catch (e: any) {
382
385
  const endedAt = new Date()
@@ -0,0 +1,87 @@
1
+ import TTSProviderFactory from "../factory/tts/TTSProviderFactory.js";
2
+ import type {IPromptAudioParams, IPromptAudioResponse, IPromptParams} from "../interfaces/IAIProvider.js";
3
+
4
+ class PromptAudioService {
5
+
6
+ static audioParams(input: IPromptParams): IPromptAudioParams | null {
7
+ if(!input.audioResponse){
8
+ return null
9
+ }
10
+
11
+ if(input.audioResponse === true){
12
+ return {}
13
+ }
14
+
15
+ if(input.audioResponse.enabled === false){
16
+ return null
17
+ }
18
+
19
+ return input.audioResponse
20
+ }
21
+
22
+ static outputToText(output: unknown): string {
23
+ if(typeof output === "string"){
24
+ return output
25
+ }
26
+
27
+ if(output === null || output === undefined){
28
+ return ""
29
+ }
30
+
31
+ return JSON.stringify(output)
32
+ }
33
+
34
+ static async build(input: IPromptParams, output: unknown): Promise<IPromptAudioResponse | undefined> {
35
+ const audioParams = PromptAudioService.audioParams(input)
36
+
37
+ if(!audioParams){
38
+ return undefined
39
+ }
40
+
41
+ const text = PromptAudioService.outputToText(output).trim()
42
+
43
+ if(!text){
44
+ return undefined
45
+ }
46
+
47
+ const providerName = audioParams.provider ?? "ElevenLabs"
48
+ const ttsProvider = TTSProviderFactory.instance(providerName)
49
+ const response = await ttsProvider.textToSpeech({
50
+ text,
51
+ voiceId: audioParams.voiceId,
52
+ model: audioParams.model,
53
+ outputFormat: audioParams.outputFormat,
54
+ voiceSettings: audioParams.voiceSettings,
55
+ previousText: audioParams.previousText,
56
+ nextText: audioParams.nextText,
57
+ languageCode: audioParams.languageCode,
58
+ seed: audioParams.seed,
59
+ operationTitle: audioParams.operationTitle ?? input.operationTitle,
60
+ operationGroup: audioParams.operationGroup ?? input.operationGroup,
61
+ ip: input.ip,
62
+ userAgent: input.userAgent,
63
+ tenant: input.tenant,
64
+ user: input.user,
65
+ })
66
+
67
+ return {
68
+ audio: response.audio.toString("base64"),
69
+ contentType: response.contentType,
70
+ encoding: "base64",
71
+ meta: {
72
+ provider: response.provider,
73
+ model: response.model,
74
+ voiceId: response.voiceId,
75
+ outputFormat: response.outputFormat,
76
+ size: response.size,
77
+ time: response.time,
78
+ },
79
+ }
80
+ }
81
+
82
+ }
83
+
84
+ export default PromptAudioService
85
+ export {
86
+ PromptAudioService,
87
+ }