@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.
Files changed (106) 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 +487 -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 +47 -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 +31 -499
  22. package/dist/commonjs/component/messages.d.ts.map +1 -1
  23. package/dist/commonjs/component/messages.js +45 -125
  24. package/dist/commonjs/component/messages.js.map +1 -1
  25. package/dist/commonjs/component/schema.d.ts +949 -3785
  26. package/dist/commonjs/component/schema.d.ts.map +1 -1
  27. package/dist/commonjs/component/schema.js +9 -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/react/usePaginatedQuery.d.ts.map +1 -1
  38. package/dist/commonjs/react/usePaginatedQuery.js +0 -19
  39. package/dist/commonjs/react/usePaginatedQuery.js.map +1 -1
  40. package/dist/commonjs/validators.d.ts +851 -3388
  41. package/dist/commonjs/validators.d.ts.map +1 -1
  42. package/dist/commonjs/validators.js +11 -37
  43. package/dist/commonjs/validators.js.map +1 -1
  44. package/dist/commonjs.tsbuildinfo +1 -1
  45. package/dist/esm/client/_generated/_ignore.d.ts +1 -0
  46. package/dist/esm/client/_generated/_ignore.d.ts.map +1 -0
  47. package/dist/esm/client/_generated/_ignore.js +3 -0
  48. package/dist/esm/client/_generated/_ignore.js.map +1 -0
  49. package/dist/esm/client/files.d.ts +57 -0
  50. package/dist/esm/client/files.d.ts.map +1 -0
  51. package/dist/esm/client/files.js +124 -0
  52. package/dist/esm/client/files.js.map +1 -0
  53. package/dist/esm/client/index.d.ts +487 -318
  54. package/dist/esm/client/index.d.ts.map +1 -1
  55. package/dist/esm/client/index.js +652 -550
  56. package/dist/esm/client/index.js.map +1 -1
  57. package/dist/esm/client/types.d.ts +35 -5
  58. package/dist/esm/client/types.d.ts.map +1 -1
  59. package/dist/esm/component/_generated/api.d.ts +47 -711
  60. package/dist/esm/component/files.d.ts +66 -21
  61. package/dist/esm/component/files.d.ts.map +1 -1
  62. package/dist/esm/component/files.js +71 -26
  63. package/dist/esm/component/files.js.map +1 -1
  64. package/dist/esm/component/messages.d.ts +31 -499
  65. package/dist/esm/component/messages.d.ts.map +1 -1
  66. package/dist/esm/component/messages.js +45 -125
  67. package/dist/esm/component/messages.js.map +1 -1
  68. package/dist/esm/component/schema.d.ts +949 -3785
  69. package/dist/esm/component/schema.d.ts.map +1 -1
  70. package/dist/esm/component/schema.js +9 -25
  71. package/dist/esm/component/schema.js.map +1 -1
  72. package/dist/esm/component/streams.d.ts +3 -3
  73. package/dist/esm/mapping.d.ts +28 -19
  74. package/dist/esm/mapping.d.ts.map +1 -1
  75. package/dist/esm/mapping.js +136 -81
  76. package/dist/esm/mapping.js.map +1 -1
  77. package/dist/esm/react/toUIMessages.d.ts.map +1 -1
  78. package/dist/esm/react/toUIMessages.js +12 -6
  79. package/dist/esm/react/toUIMessages.js.map +1 -1
  80. package/dist/esm/react/usePaginatedQuery.d.ts.map +1 -1
  81. package/dist/esm/react/usePaginatedQuery.js +0 -19
  82. package/dist/esm/react/usePaginatedQuery.js.map +1 -1
  83. package/dist/esm/validators.d.ts +851 -3388
  84. package/dist/esm/validators.d.ts.map +1 -1
  85. package/dist/esm/validators.js +11 -37
  86. package/dist/esm/validators.js.map +1 -1
  87. package/dist/esm.tsbuildinfo +1 -1
  88. package/package.json +11 -9
  89. package/src/client/_generated/_ignore.ts +1 -0
  90. package/src/client/files.ts +167 -0
  91. package/src/client/index.test.ts +127 -1
  92. package/src/client/index.ts +970 -812
  93. package/src/client/setup.test.ts +29 -0
  94. package/src/client/types.ts +41 -3
  95. package/src/component/_generated/api.d.ts +47 -711
  96. package/src/component/files.test.ts +130 -0
  97. package/src/component/files.ts +83 -27
  98. package/src/component/messages.test.ts +2 -1
  99. package/src/component/messages.ts +47 -137
  100. package/src/component/schema.ts +8 -28
  101. package/src/mapping.test.ts +163 -0
  102. package/src/mapping.ts +173 -103
  103. package/src/react/deltas.test.ts +4 -1
  104. package/src/react/toUIMessages.ts +12 -6
  105. package/src/react/usePaginatedQuery.ts +0 -31
  106. 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
+ }