@loopstack/ai-module 0.18.0-rc.0 → 0.18.0-rc.1
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/services/ai-messages-helper.service.d.ts +3 -3
- package/dist/services/ai-messages-helper.service.js.map +1 -1
- package/dist/tools/ai-generate-object.tool.js +15 -6
- package/dist/tools/ai-generate-object.tool.js.map +1 -1
- package/dist/tools/ai-generate-text.tool.js +11 -3
- package/dist/tools/ai-generate-text.tool.js.map +1 -1
- package/package.json +4 -4
- package/src/services/ai-messages-helper.service.ts +9 -6
- package/src/tools/ai-generate-object.tool.ts +32 -14
- package/src/tools/ai-generate-text.tool.ts +15 -6
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UIDataTypes, UIMessage, UITools } from 'ai';
|
|
2
2
|
import { DocumentEntity } from '@loopstack/common';
|
|
3
3
|
export declare class AiMessagesHelperService {
|
|
4
4
|
private searchMessages;
|
|
5
5
|
getMessages(documents: DocumentEntity[], args: {
|
|
6
|
-
messages?:
|
|
6
|
+
messages?: Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[];
|
|
7
7
|
messagesSearchTag?: string;
|
|
8
|
-
}):
|
|
8
|
+
}): Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[];
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-messages-helper.service.js","sourceRoot":"","sources":["../../src/services/ai-messages-helper.service.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ai-messages-helper.service.js","sourceRoot":"","sources":["../../src/services/ai-messages-helper.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAKrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAC1B,cAAc,CACpB,SAA2B,EAC3B,GAAW;QAEX,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;aAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC7D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAA+D,CAAC,CAAC;IACjG,CAAC;IAED,WAAW,CACT,SAA2B,EAC3B,IAAuG;QAEvG,IAAI,QAAQ,GAAuE,IAAI,CAAC,QAAQ,CAAC;QACjG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACtB,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAA;AAtBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAsBnC"}
|
|
@@ -33,15 +33,21 @@ let AiGenerateObject = class AiGenerateObject extends core_1.ToolBase {
|
|
|
33
33
|
}
|
|
34
34
|
async execute(args, ctx, parent) {
|
|
35
35
|
const model = this.aiProviderModelHelperService.getProviderModel(args.llm);
|
|
36
|
-
const options = {
|
|
36
|
+
const options = {
|
|
37
|
+
messages: [],
|
|
38
|
+
};
|
|
37
39
|
if (args.prompt) {
|
|
38
|
-
options.
|
|
40
|
+
options.messages.push({
|
|
41
|
+
role: 'user',
|
|
42
|
+
content: args.prompt,
|
|
43
|
+
});
|
|
39
44
|
}
|
|
40
45
|
else {
|
|
41
|
-
|
|
46
|
+
const messages = this.aiMessagesHelperService.getMessages(ctx.state.getMetadata('documents'), {
|
|
42
47
|
messages: args.messages,
|
|
43
48
|
messagesSearchTag: args.messagesSearchTag,
|
|
44
49
|
});
|
|
50
|
+
options.messages = await (0, ai_1.convertToModelMessages)(messages);
|
|
45
51
|
}
|
|
46
52
|
const document = parent.getDocument(args.response.document);
|
|
47
53
|
if (!document) {
|
|
@@ -53,16 +59,19 @@ let AiGenerateObject = class AiGenerateObject extends core_1.ToolBase {
|
|
|
53
59
|
}
|
|
54
60
|
options.schema = responseSchema;
|
|
55
61
|
const response = await this.handleGenerateObject(model, options);
|
|
62
|
+
console.log(response);
|
|
56
63
|
return {
|
|
57
|
-
data: response.
|
|
64
|
+
data: response.output,
|
|
58
65
|
};
|
|
59
66
|
}
|
|
60
67
|
async handleGenerateObject(model, options) {
|
|
61
68
|
const startTime = performance.now();
|
|
62
69
|
try {
|
|
63
|
-
|
|
70
|
+
console.log(options.schema);
|
|
71
|
+
return (0, ai_1.generateText)({
|
|
64
72
|
model,
|
|
65
|
-
|
|
73
|
+
messages: options.messages,
|
|
74
|
+
...(options.schema ? { output: ai_1.Output.object({ schema: options.schema }) } : {}),
|
|
66
75
|
});
|
|
67
76
|
}
|
|
68
77
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generate-object.tool.js","sourceRoot":"","sources":["../../src/tools/ai-generate-object.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"ai-generate-object.tool.js","sourceRoot":"","sources":["../../src/tools/ai-generate-object.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,16 +34,24 @@ let AiGenerateText = class AiGenerateText extends core_1.ToolBase {
|
|
|
34
34
|
}
|
|
35
35
|
async execute(args, ctx, parent) {
|
|
36
36
|
const model = this.aiProviderModelHelperService.getProviderModel(args.llm);
|
|
37
|
-
const options = {
|
|
37
|
+
const options = {
|
|
38
|
+
messages: [],
|
|
39
|
+
};
|
|
38
40
|
options.tools = args.tools ? this.aiToolsHelperService.getTools(args.tools, parent) : undefined;
|
|
39
41
|
if (args.prompt) {
|
|
40
|
-
options.
|
|
42
|
+
options.messages.push({
|
|
43
|
+
role: 'user',
|
|
44
|
+
content: args.prompt,
|
|
45
|
+
});
|
|
41
46
|
}
|
|
42
47
|
else {
|
|
43
|
-
|
|
48
|
+
const messages = this.aiMessagesHelperService.getMessages(ctx.state.getMetadata('documents'), {
|
|
44
49
|
messages: args.messages,
|
|
45
50
|
messagesSearchTag: args.messagesSearchTag,
|
|
46
51
|
});
|
|
52
|
+
options.messages = await (0, ai_1.convertToModelMessages)(messages, {
|
|
53
|
+
tools: options.tools,
|
|
54
|
+
});
|
|
47
55
|
}
|
|
48
56
|
const uiMessage = await this.handleGenerateText(model, options);
|
|
49
57
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-generate-text.tool.js","sourceRoot":"","sources":["../../src/tools/ai-generate-text.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"ai-generate-text.tool.js","sourceRoot":"","sources":["../../src/tools/ai-generate-text.tool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"openai",
|
|
11
11
|
"tool"
|
|
12
12
|
],
|
|
13
|
-
"version": "0.18.0-rc.
|
|
13
|
+
"version": "0.18.0-rc.1",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Jakob Klippel",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"@ai-sdk/anthropic": "^3.0.23",
|
|
35
35
|
"@ai-sdk/openai": "^3.0.19",
|
|
36
36
|
"@ai-sdk/provider-utils": "^4.0.9",
|
|
37
|
-
"@loopstack/common": "^0.18.0-rc.
|
|
38
|
-
"@loopstack/core": "^0.18.0-rc.
|
|
39
|
-
"@loopstack/core-ui-module": "^0.18.0-rc.
|
|
37
|
+
"@loopstack/common": "^0.18.0-rc.2",
|
|
38
|
+
"@loopstack/core": "^0.18.0-rc.2",
|
|
39
|
+
"@loopstack/core-ui-module": "^0.18.0-rc.1",
|
|
40
40
|
"@nestjs/common": "^11.1.12",
|
|
41
41
|
"@nestjs/config": "^4.0.2",
|
|
42
42
|
"@nestjs/core": "^11.1.12",
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import { ModelMessage } from '@ai-sdk/provider-utils';
|
|
2
1
|
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { UIDataTypes, UIMessage, UITools } from 'ai';
|
|
3
3
|
import { DocumentEntity } from '@loopstack/common';
|
|
4
4
|
|
|
5
5
|
@Injectable()
|
|
6
6
|
export class AiMessagesHelperService {
|
|
7
|
-
private searchMessages(
|
|
7
|
+
private searchMessages(
|
|
8
|
+
documents: DocumentEntity[],
|
|
9
|
+
tag: string,
|
|
10
|
+
): Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[] {
|
|
8
11
|
return documents
|
|
9
12
|
.filter((document) => document.tags?.includes(tag))
|
|
10
13
|
.sort((a, b) => a.createdAt.valueOf() - b.createdAt.valueOf())
|
|
11
|
-
.map((document) => document.content as
|
|
14
|
+
.map((document) => document.content as Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>);
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
getMessages(
|
|
15
18
|
documents: DocumentEntity[],
|
|
16
|
-
args: { messages?:
|
|
17
|
-
):
|
|
18
|
-
let messages:
|
|
19
|
+
args: { messages?: Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[]; messagesSearchTag?: string },
|
|
20
|
+
): Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[] {
|
|
21
|
+
let messages: Omit<UIMessage<unknown, UIDataTypes, UITools>, 'id'>[] | undefined = args.messages;
|
|
19
22
|
if (!messages?.length) {
|
|
20
23
|
messages = this.searchMessages(documents, args.messagesSearchTag ?? 'message');
|
|
21
24
|
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { ModelMessage } from '@ai-sdk/provider-utils';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
GenerateTextResult,
|
|
4
|
+
LanguageModel,
|
|
5
|
+
Output,
|
|
6
|
+
ToolSet,
|
|
7
|
+
UIMessage,
|
|
8
|
+
convertToModelMessages,
|
|
9
|
+
generateText,
|
|
10
|
+
} from 'ai';
|
|
3
11
|
import { z } from 'zod';
|
|
4
12
|
import { BlockConfig, ToolResult, WithArguments } from '@loopstack/common';
|
|
5
13
|
import { ToolBase, WorkflowBase } from '@loopstack/core';
|
|
@@ -36,18 +44,24 @@ export class AiGenerateObject extends ToolBase<AiGenerateObjectArgsType> {
|
|
|
36
44
|
const model = this.aiProviderModelHelperService.getProviderModel(args.llm);
|
|
37
45
|
|
|
38
46
|
const options: {
|
|
39
|
-
|
|
40
|
-
messages?: ModelMessage[];
|
|
47
|
+
messages: ModelMessage[];
|
|
41
48
|
schema?: z.ZodSchema;
|
|
42
|
-
} = {
|
|
49
|
+
} = {
|
|
50
|
+
messages: [],
|
|
51
|
+
};
|
|
43
52
|
|
|
44
53
|
if (args.prompt) {
|
|
45
|
-
options.
|
|
54
|
+
options.messages.push({
|
|
55
|
+
role: 'user',
|
|
56
|
+
content: args.prompt,
|
|
57
|
+
} as ModelMessage);
|
|
46
58
|
} else {
|
|
47
|
-
|
|
48
|
-
messages: args.messages as
|
|
59
|
+
const messages = this.aiMessagesHelperService.getMessages(ctx.state.getMetadata('documents'), {
|
|
60
|
+
messages: args.messages as unknown as UIMessage[],
|
|
49
61
|
messagesSearchTag: args.messagesSearchTag,
|
|
50
62
|
});
|
|
63
|
+
|
|
64
|
+
options.messages = await convertToModelMessages(messages);
|
|
51
65
|
}
|
|
52
66
|
|
|
53
67
|
const document: Block | undefined = parent.getDocument(args.response.document);
|
|
@@ -63,25 +77,29 @@ export class AiGenerateObject extends ToolBase<AiGenerateObjectArgsType> {
|
|
|
63
77
|
|
|
64
78
|
const response = await this.handleGenerateObject(model, options);
|
|
65
79
|
|
|
80
|
+
console.log(response);
|
|
81
|
+
|
|
66
82
|
return {
|
|
67
|
-
data: response.
|
|
83
|
+
data: response.output,
|
|
68
84
|
};
|
|
69
85
|
}
|
|
70
86
|
|
|
71
87
|
private async handleGenerateObject(
|
|
72
88
|
model: LanguageModel,
|
|
73
89
|
options: {
|
|
74
|
-
|
|
75
|
-
messages?: ModelMessage[];
|
|
90
|
+
messages: ModelMessage[];
|
|
76
91
|
schema?: z.ZodSchema;
|
|
77
92
|
},
|
|
78
|
-
): Promise<
|
|
93
|
+
): Promise<GenerateTextResult<ToolSet, any>> {
|
|
79
94
|
const startTime = performance.now();
|
|
80
95
|
try {
|
|
81
|
-
|
|
96
|
+
console.log(options.schema);
|
|
97
|
+
|
|
98
|
+
return generateText({
|
|
82
99
|
model,
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
messages: options.messages,
|
|
101
|
+
...(options.schema ? { output: Output.object({ schema: options.schema }) } : {}),
|
|
102
|
+
});
|
|
85
103
|
} catch (error) {
|
|
86
104
|
const errorResponseTime = performance.now() - startTime;
|
|
87
105
|
console.error(`Request failed after ${errorResponseTime}ms:`, error);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ModelMessage } from '@ai-sdk/provider-utils';
|
|
2
2
|
import { Injectable } from '@nestjs/common';
|
|
3
|
-
import { LanguageModel, UIMessage, createUIMessageStream, streamText } from 'ai';
|
|
3
|
+
import { LanguageModel, ToolSet, UIMessage, convertToModelMessages, createUIMessageStream, streamText } from 'ai';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { BlockConfig, ToolResult, WithArguments } from '@loopstack/common';
|
|
6
6
|
import { ToolBase, WorkflowBase } from '@loopstack/core';
|
|
@@ -37,19 +37,28 @@ export class AiGenerateText extends ToolBase<AiGenerateTextArgsType> {
|
|
|
37
37
|
|
|
38
38
|
const options: {
|
|
39
39
|
prompt?: string;
|
|
40
|
-
messages
|
|
40
|
+
messages: ModelMessage[];
|
|
41
41
|
tools?: Record<string, unknown>;
|
|
42
|
-
} = {
|
|
42
|
+
} = {
|
|
43
|
+
messages: [],
|
|
44
|
+
};
|
|
43
45
|
|
|
44
46
|
options.tools = args.tools ? this.aiToolsHelperService.getTools(args.tools, parent) : undefined;
|
|
45
47
|
|
|
46
48
|
if (args.prompt) {
|
|
47
|
-
options.
|
|
49
|
+
options.messages.push({
|
|
50
|
+
role: 'user',
|
|
51
|
+
content: args.prompt,
|
|
52
|
+
} as ModelMessage);
|
|
48
53
|
} else {
|
|
49
|
-
|
|
50
|
-
messages: args.messages as
|
|
54
|
+
const messages = this.aiMessagesHelperService.getMessages(ctx.state.getMetadata('documents'), {
|
|
55
|
+
messages: args.messages as unknown as UIMessage[],
|
|
51
56
|
messagesSearchTag: args.messagesSearchTag,
|
|
52
57
|
});
|
|
58
|
+
|
|
59
|
+
options.messages = await convertToModelMessages(messages, {
|
|
60
|
+
tools: options.tools as ToolSet,
|
|
61
|
+
});
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
const uiMessage = await this.handleGenerateText(model, options);
|