@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.
- package/dist/agents/DraxAgent.js +2 -0
- package/dist/controllers/AIGenericController.js +22 -0
- package/dist/controllers/DraxAgentController.js +22 -0
- package/dist/index.js +4 -2
- package/dist/providers/ai/GoogleAiProvider.js +4 -1
- package/dist/providers/ai/OllamaAiProvider.js +4 -1
- package/dist/providers/ai/OpenAiProvider.js +4 -1
- package/dist/services/PromptAudioService.js +68 -0
- package/dist/tools/BuildContextTool.js +267 -0
- package/package.json +3 -3
- package/src/agents/DraxAgent.ts +2 -0
- package/src/controllers/AIGenericController.ts +24 -0
- package/src/controllers/DraxAgentController.ts +24 -0
- package/src/index.ts +16 -0
- package/src/interfaces/IAIProvider.ts +38 -1
- package/src/interfaces/IDraxAgent.ts +4 -0
- package/src/providers/ai/GoogleAiProvider.ts +4 -1
- package/src/providers/ai/OllamaAiProvider.ts +4 -1
- package/src/providers/ai/OpenAiProvider.ts +4 -1
- package/src/services/PromptAudioService.ts +87 -0
- package/src/tools/BuildContextTool.ts +388 -0
- package/test/BuildContextTool.test.ts +183 -0
- package/test/DraxAgent.test.ts +64 -0
- package/test/PromptAudioService.test.ts +115 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/types/agents/DraxAgent.d.ts.map +1 -1
- package/types/controllers/AIGenericController.d.ts.map +1 -1
- package/types/controllers/DraxAgentController.d.ts.map +1 -1
- package/types/index.d.ts +6 -3
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/IAIProvider.d.ts +32 -1
- package/types/interfaces/IAIProvider.d.ts.map +1 -1
- package/types/interfaces/IDraxAgent.d.ts +3 -1
- package/types/interfaces/IDraxAgent.d.ts.map +1 -1
- package/types/providers/ai/GoogleAiProvider.d.ts.map +1 -1
- package/types/providers/ai/OllamaAiProvider.d.ts.map +1 -1
- package/types/providers/ai/OpenAiProvider.d.ts.map +1 -1
- package/types/services/PromptAudioService.d.ts +9 -0
- package/types/services/PromptAudioService.d.ts.map +1 -0
- package/types/tools/BuildContextTool.d.ts +33 -0
- 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
|
+
}
|