@convex-dev/agent 0.1.6 → 0.1.7-alpha.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 (99) hide show
  1. package/README.md +23 -12
  2. package/dist/commonjs/client/_generated/_ignore.d.ts +1 -0
  3. package/dist/commonjs/client/_generated/_ignore.d.ts.map +1 -0
  4. package/dist/commonjs/client/_generated/_ignore.js +3 -0
  5. package/dist/commonjs/client/_generated/_ignore.js.map +1 -0
  6. package/dist/commonjs/client/files.d.ts +57 -0
  7. package/dist/commonjs/client/files.d.ts.map +1 -0
  8. package/dist/commonjs/client/files.js +124 -0
  9. package/dist/commonjs/client/files.js.map +1 -0
  10. package/dist/commonjs/client/index.d.ts +489 -318
  11. package/dist/commonjs/client/index.d.ts.map +1 -1
  12. package/dist/commonjs/client/index.js +652 -550
  13. package/dist/commonjs/client/index.js.map +1 -1
  14. package/dist/commonjs/client/types.d.ts +35 -5
  15. package/dist/commonjs/client/types.d.ts.map +1 -1
  16. package/dist/commonjs/component/_generated/api.d.ts +53 -711
  17. package/dist/commonjs/component/files.d.ts +66 -21
  18. package/dist/commonjs/component/files.d.ts.map +1 -1
  19. package/dist/commonjs/component/files.js +71 -26
  20. package/dist/commonjs/component/files.js.map +1 -1
  21. package/dist/commonjs/component/messages.d.ts +37 -499
  22. package/dist/commonjs/component/messages.d.ts.map +1 -1
  23. package/dist/commonjs/component/messages.js +44 -124
  24. package/dist/commonjs/component/messages.js.map +1 -1
  25. package/dist/commonjs/component/schema.d.ts +951 -3785
  26. package/dist/commonjs/component/schema.d.ts.map +1 -1
  27. package/dist/commonjs/component/schema.js +8 -25
  28. package/dist/commonjs/component/schema.js.map +1 -1
  29. package/dist/commonjs/component/streams.d.ts +3 -3
  30. package/dist/commonjs/mapping.d.ts +28 -19
  31. package/dist/commonjs/mapping.d.ts.map +1 -1
  32. package/dist/commonjs/mapping.js +136 -81
  33. package/dist/commonjs/mapping.js.map +1 -1
  34. package/dist/commonjs/react/toUIMessages.d.ts.map +1 -1
  35. package/dist/commonjs/react/toUIMessages.js +12 -6
  36. package/dist/commonjs/react/toUIMessages.js.map +1 -1
  37. package/dist/commonjs/validators.d.ts +851 -3388
  38. package/dist/commonjs/validators.d.ts.map +1 -1
  39. package/dist/commonjs/validators.js +11 -37
  40. package/dist/commonjs/validators.js.map +1 -1
  41. package/dist/commonjs.tsbuildinfo +1 -1
  42. package/dist/esm/client/_generated/_ignore.d.ts +1 -0
  43. package/dist/esm/client/_generated/_ignore.d.ts.map +1 -0
  44. package/dist/esm/client/_generated/_ignore.js +3 -0
  45. package/dist/esm/client/_generated/_ignore.js.map +1 -0
  46. package/dist/esm/client/files.d.ts +57 -0
  47. package/dist/esm/client/files.d.ts.map +1 -0
  48. package/dist/esm/client/files.js +124 -0
  49. package/dist/esm/client/files.js.map +1 -0
  50. package/dist/esm/client/index.d.ts +489 -318
  51. package/dist/esm/client/index.d.ts.map +1 -1
  52. package/dist/esm/client/index.js +652 -550
  53. package/dist/esm/client/index.js.map +1 -1
  54. package/dist/esm/client/types.d.ts +35 -5
  55. package/dist/esm/client/types.d.ts.map +1 -1
  56. package/dist/esm/component/_generated/api.d.ts +53 -711
  57. package/dist/esm/component/files.d.ts +66 -21
  58. package/dist/esm/component/files.d.ts.map +1 -1
  59. package/dist/esm/component/files.js +71 -26
  60. package/dist/esm/component/files.js.map +1 -1
  61. package/dist/esm/component/messages.d.ts +37 -499
  62. package/dist/esm/component/messages.d.ts.map +1 -1
  63. package/dist/esm/component/messages.js +44 -124
  64. package/dist/esm/component/messages.js.map +1 -1
  65. package/dist/esm/component/schema.d.ts +951 -3785
  66. package/dist/esm/component/schema.d.ts.map +1 -1
  67. package/dist/esm/component/schema.js +8 -25
  68. package/dist/esm/component/schema.js.map +1 -1
  69. package/dist/esm/component/streams.d.ts +3 -3
  70. package/dist/esm/mapping.d.ts +28 -19
  71. package/dist/esm/mapping.d.ts.map +1 -1
  72. package/dist/esm/mapping.js +136 -81
  73. package/dist/esm/mapping.js.map +1 -1
  74. package/dist/esm/react/toUIMessages.d.ts.map +1 -1
  75. package/dist/esm/react/toUIMessages.js +12 -6
  76. package/dist/esm/react/toUIMessages.js.map +1 -1
  77. package/dist/esm/validators.d.ts +851 -3388
  78. package/dist/esm/validators.d.ts.map +1 -1
  79. package/dist/esm/validators.js +11 -37
  80. package/dist/esm/validators.js.map +1 -1
  81. package/dist/esm.tsbuildinfo +1 -1
  82. package/package.json +11 -9
  83. package/src/client/_generated/_ignore.ts +1 -0
  84. package/src/client/files.ts +167 -0
  85. package/src/client/index.test.ts +127 -1
  86. package/src/client/index.ts +970 -812
  87. package/src/client/setup.test.ts +29 -0
  88. package/src/client/types.ts +41 -3
  89. package/src/component/_generated/api.d.ts +53 -711
  90. package/src/component/files.test.ts +130 -0
  91. package/src/component/files.ts +83 -27
  92. package/src/component/messages.test.ts +2 -1
  93. package/src/component/messages.ts +46 -136
  94. package/src/component/schema.ts +7 -28
  95. package/src/mapping.test.ts +163 -0
  96. package/src/mapping.ts +173 -103
  97. package/src/react/deltas.test.ts +4 -1
  98. package/src/react/toUIMessages.ts +12 -6
  99. package/src/validators.ts +33 -47
@@ -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
+ }