@convex-dev/agent 0.1.6 → 0.1.7-alpha.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/README.md +23 -12
- package/dist/commonjs/client/_generated/_ignore.d.ts +1 -0
- package/dist/commonjs/client/_generated/_ignore.d.ts.map +1 -0
- package/dist/commonjs/client/_generated/_ignore.js +3 -0
- package/dist/commonjs/client/_generated/_ignore.js.map +1 -0
- package/dist/commonjs/client/files.d.ts +57 -0
- package/dist/commonjs/client/files.d.ts.map +1 -0
- package/dist/commonjs/client/files.js +124 -0
- package/dist/commonjs/client/files.js.map +1 -0
- package/dist/commonjs/client/index.d.ts +487 -318
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +652 -550
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/client/types.d.ts +35 -5
- package/dist/commonjs/client/types.d.ts.map +1 -1
- package/dist/commonjs/component/_generated/api.d.ts +47 -711
- package/dist/commonjs/component/files.d.ts +66 -21
- package/dist/commonjs/component/files.d.ts.map +1 -1
- package/dist/commonjs/component/files.js +71 -26
- package/dist/commonjs/component/files.js.map +1 -1
- package/dist/commonjs/component/messages.d.ts +31 -499
- package/dist/commonjs/component/messages.d.ts.map +1 -1
- package/dist/commonjs/component/messages.js +45 -125
- package/dist/commonjs/component/messages.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +949 -3785
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +9 -25
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/streams.d.ts +3 -3
- package/dist/commonjs/mapping.d.ts +28 -19
- package/dist/commonjs/mapping.d.ts.map +1 -1
- package/dist/commonjs/mapping.js +136 -81
- package/dist/commonjs/mapping.js.map +1 -1
- package/dist/commonjs/react/toUIMessages.d.ts.map +1 -1
- package/dist/commonjs/react/toUIMessages.js +12 -6
- package/dist/commonjs/react/toUIMessages.js.map +1 -1
- package/dist/commonjs/react/usePaginatedQuery.d.ts.map +1 -1
- package/dist/commonjs/react/usePaginatedQuery.js +0 -19
- package/dist/commonjs/react/usePaginatedQuery.js.map +1 -1
- package/dist/commonjs/validators.d.ts +851 -3388
- package/dist/commonjs/validators.d.ts.map +1 -1
- package/dist/commonjs/validators.js +11 -37
- package/dist/commonjs/validators.js.map +1 -1
- package/dist/commonjs.tsbuildinfo +1 -1
- package/dist/esm/client/_generated/_ignore.d.ts +1 -0
- package/dist/esm/client/_generated/_ignore.d.ts.map +1 -0
- package/dist/esm/client/_generated/_ignore.js +3 -0
- package/dist/esm/client/_generated/_ignore.js.map +1 -0
- package/dist/esm/client/files.d.ts +57 -0
- package/dist/esm/client/files.d.ts.map +1 -0
- package/dist/esm/client/files.js +124 -0
- package/dist/esm/client/files.js.map +1 -0
- package/dist/esm/client/index.d.ts +487 -318
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +652 -550
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/types.d.ts +35 -5
- package/dist/esm/client/types.d.ts.map +1 -1
- package/dist/esm/component/_generated/api.d.ts +47 -711
- package/dist/esm/component/files.d.ts +66 -21
- package/dist/esm/component/files.d.ts.map +1 -1
- package/dist/esm/component/files.js +71 -26
- package/dist/esm/component/files.js.map +1 -1
- package/dist/esm/component/messages.d.ts +31 -499
- package/dist/esm/component/messages.d.ts.map +1 -1
- package/dist/esm/component/messages.js +45 -125
- package/dist/esm/component/messages.js.map +1 -1
- package/dist/esm/component/schema.d.ts +949 -3785
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +9 -25
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/streams.d.ts +3 -3
- package/dist/esm/mapping.d.ts +28 -19
- package/dist/esm/mapping.d.ts.map +1 -1
- package/dist/esm/mapping.js +136 -81
- package/dist/esm/mapping.js.map +1 -1
- package/dist/esm/react/toUIMessages.d.ts.map +1 -1
- package/dist/esm/react/toUIMessages.js +12 -6
- package/dist/esm/react/toUIMessages.js.map +1 -1
- package/dist/esm/react/usePaginatedQuery.d.ts.map +1 -1
- package/dist/esm/react/usePaginatedQuery.js +0 -19
- package/dist/esm/react/usePaginatedQuery.js.map +1 -1
- package/dist/esm/validators.d.ts +851 -3388
- package/dist/esm/validators.d.ts.map +1 -1
- package/dist/esm/validators.js +11 -37
- package/dist/esm/validators.js.map +1 -1
- package/dist/esm.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/src/client/_generated/_ignore.ts +1 -0
- package/src/client/files.ts +167 -0
- package/src/client/index.test.ts +127 -1
- package/src/client/index.ts +970 -812
- package/src/client/setup.test.ts +29 -0
- package/src/client/types.ts +41 -3
- package/src/component/_generated/api.d.ts +47 -711
- package/src/component/files.test.ts +130 -0
- package/src/component/files.ts +83 -27
- package/src/component/messages.test.ts +2 -1
- package/src/component/messages.ts +47 -137
- package/src/component/schema.ts +8 -28
- package/src/mapping.test.ts +163 -0
- package/src/mapping.ts +173 -103
- package/src/react/deltas.test.ts +4 -1
- package/src/react/toUIMessages.ts +12 -6
- package/src/react/usePaginatedQuery.ts +0 -31
- package/src/validators.ts +33 -47
package/src/client/index.test.ts
CHANGED
|
@@ -1,5 +1,98 @@
|
|
|
1
1
|
import { describe, expect, test } from "vitest";
|
|
2
|
-
import { filterOutOrphanedToolMessages, type MessageDoc } from ".";
|
|
2
|
+
import { Agent, filterOutOrphanedToolMessages, type MessageDoc } from ".";
|
|
3
|
+
import type { DataModelFromSchemaDefinition } from "convex/server";
|
|
4
|
+
import {
|
|
5
|
+
anyApi,
|
|
6
|
+
queryGeneric,
|
|
7
|
+
mutationGeneric,
|
|
8
|
+
actionGeneric,
|
|
9
|
+
} from "convex/server";
|
|
10
|
+
import type {
|
|
11
|
+
ApiFromModules,
|
|
12
|
+
ActionBuilder,
|
|
13
|
+
MutationBuilder,
|
|
14
|
+
QueryBuilder,
|
|
15
|
+
} from "convex/server";
|
|
16
|
+
import { v } from "convex/values";
|
|
17
|
+
import { defineSchema } from "convex/server";
|
|
18
|
+
import { MockLanguageModelV1 } from "ai/test";
|
|
19
|
+
import type { LanguageModelV1, LanguageModelV1StreamPart } from "ai";
|
|
20
|
+
import { simulateReadableStream } from "ai";
|
|
21
|
+
import { components, initConvexTest } from "./setup.test";
|
|
22
|
+
|
|
23
|
+
const schema = defineSchema({});
|
|
24
|
+
type DataModel = DataModelFromSchemaDefinition<typeof schema>;
|
|
25
|
+
// type DatabaseReader = GenericDatabaseReader<DataModel>;
|
|
26
|
+
const query = queryGeneric as QueryBuilder<DataModel, "public">;
|
|
27
|
+
const mutation = mutationGeneric as MutationBuilder<DataModel, "public">;
|
|
28
|
+
const action = actionGeneric as ActionBuilder<DataModel, "public">;
|
|
29
|
+
|
|
30
|
+
const agent = new Agent(components.agent, {
|
|
31
|
+
name: "test",
|
|
32
|
+
instructions: "You are a test agent",
|
|
33
|
+
// TODO: get mock model that works in v8
|
|
34
|
+
chat: mockModel(),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const testQuery = query({
|
|
38
|
+
args: { threadId: v.string() },
|
|
39
|
+
handler: async (ctx, args) => {
|
|
40
|
+
return await agent.listMessages(ctx, {
|
|
41
|
+
threadId: args.threadId,
|
|
42
|
+
paginationOpts: {
|
|
43
|
+
cursor: null,
|
|
44
|
+
numItems: 10,
|
|
45
|
+
},
|
|
46
|
+
excludeToolMessages: true,
|
|
47
|
+
statuses: ["success"],
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const createThread = mutation({
|
|
53
|
+
args: {},
|
|
54
|
+
handler: async (ctx) => {
|
|
55
|
+
return await agent.createThread(ctx, {
|
|
56
|
+
userId: "1",
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export const createAndGenerate = action({
|
|
62
|
+
args: {},
|
|
63
|
+
handler: async (ctx) => {
|
|
64
|
+
const { thread } = await agent.createThread(ctx, {
|
|
65
|
+
userId: "1",
|
|
66
|
+
});
|
|
67
|
+
const result = await thread.generateText({
|
|
68
|
+
messages: [{ role: "user", content: "Hello" }],
|
|
69
|
+
});
|
|
70
|
+
return result.text;
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const testApi: ApiFromModules<{
|
|
75
|
+
fns: {
|
|
76
|
+
createAndGenerate: typeof createAndGenerate;
|
|
77
|
+
createThread: typeof createThread;
|
|
78
|
+
testQuery: typeof testQuery;
|
|
79
|
+
};
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
}>["fns"] = anyApi["index.test"] as any;
|
|
82
|
+
|
|
83
|
+
describe("Agent thick client", () => {
|
|
84
|
+
test("should create a thread", async () => {
|
|
85
|
+
const t = initConvexTest(schema);
|
|
86
|
+
const result = await t.mutation(testApi.createThread, {});
|
|
87
|
+
expect(result.threadId).toBeTypeOf("string");
|
|
88
|
+
});
|
|
89
|
+
test("should create a thread and generate text", async () => {
|
|
90
|
+
const t = initConvexTest(schema);
|
|
91
|
+
const result = await t.action(testApi.createAndGenerate, {});
|
|
92
|
+
expect(result).toBeDefined();
|
|
93
|
+
expect(result).toMatch("This is a sample response");
|
|
94
|
+
});
|
|
95
|
+
});
|
|
3
96
|
|
|
4
97
|
describe("filterOutOrphanedToolMessages", () => {
|
|
5
98
|
const call1: MessageDoc = {
|
|
@@ -66,3 +159,36 @@ describe("filterOutOrphanedToolMessages", () => {
|
|
|
66
159
|
expect(filterOutOrphanedToolMessages([response1, call2])).toEqual([call2]);
|
|
67
160
|
});
|
|
68
161
|
});
|
|
162
|
+
|
|
163
|
+
function mockModel(): LanguageModelV1 {
|
|
164
|
+
return new MockLanguageModelV1({
|
|
165
|
+
provider: "mock",
|
|
166
|
+
modelId: "mock",
|
|
167
|
+
doGenerate: async ({ prompt }) => ({
|
|
168
|
+
finishReason: "stop",
|
|
169
|
+
usage: { completionTokens: 10, promptTokens: 3 },
|
|
170
|
+
logprobs: undefined,
|
|
171
|
+
rawCall: { rawPrompt: null, rawSettings: {} },
|
|
172
|
+
text: `This is a sample response to ${JSON.stringify(prompt)}`,
|
|
173
|
+
}),
|
|
174
|
+
doStream: async ({ prompt }) => ({
|
|
175
|
+
stream: simulateReadableStream({
|
|
176
|
+
chunkDelayInMs: 50,
|
|
177
|
+
initialDelayInMs: 100,
|
|
178
|
+
chunks: [
|
|
179
|
+
{
|
|
180
|
+
type: "text-delta",
|
|
181
|
+
textDelta: `This is a sample response to ${JSON.stringify(prompt)}`,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: "finish",
|
|
185
|
+
finishReason: "stop",
|
|
186
|
+
logprobs: undefined,
|
|
187
|
+
usage: { completionTokens: 10, promptTokens: 3 },
|
|
188
|
+
},
|
|
189
|
+
] as LanguageModelV1StreamPart[],
|
|
190
|
+
}),
|
|
191
|
+
rawCall: { rawPrompt: null, rawSettings: {} },
|
|
192
|
+
}),
|
|
193
|
+
});
|
|
194
|
+
}
|