@langgraph-js/sdk 1.1.4 → 1.1.6
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/.env +0 -0
- package/LICENSE +201 -201
- package/README.md +163 -163
- package/dist/LangGraphClient.js +5 -5
- package/dist/ui-store/createChatStore.d.ts +1 -0
- package/dist/ui-store/createChatStore.js +17 -0
- package/index.html +12 -12
- package/package.json +1 -1
- package/src/LangGraphClient.ts +469 -469
- package/src/SpendTime.ts +29 -29
- package/src/ToolManager.ts +100 -100
- package/src/index.ts +5 -5
- package/src/tool/copilotkit-actions.ts +72 -72
- package/src/tool/createTool.ts +78 -78
- package/src/tool/index.ts +2 -2
- package/src/tool/utils.ts +158 -158
- package/src/ui-store/UnionStore.ts +20 -20
- package/src/ui-store/createChatStore.ts +167 -153
- package/src/ui-store/index.ts +2 -2
- package/test/testResponse.json +5418 -5418
- package/tsconfig.json +112 -112
- package/ui/index.ts +182 -182
- package/ui/tool.ts +55 -55
package/src/tool/utils.ts
CHANGED
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* copy and modify from copilotkit
|
|
3
|
-
* https://github.com/copilotkit/copilotkit
|
|
4
|
-
*
|
|
5
|
-
* MIT License
|
|
6
|
-
*/
|
|
7
|
-
import { z, ZodRawShape } from "zod";
|
|
8
|
-
import { Parameter } from "./copilotkit-actions";
|
|
9
|
-
|
|
10
|
-
export type JSONSchemaString = {
|
|
11
|
-
type: "string";
|
|
12
|
-
description?: string;
|
|
13
|
-
enum?: string[];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export type JSONSchemaNumber = {
|
|
17
|
-
type: "number";
|
|
18
|
-
description?: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export type JSONSchemaBoolean = {
|
|
22
|
-
type: "boolean";
|
|
23
|
-
description?: string;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export type JSONSchemaObject = {
|
|
27
|
-
type: "object";
|
|
28
|
-
properties?: Record<string, JSONSchema>;
|
|
29
|
-
required?: string[];
|
|
30
|
-
description?: string;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export type JSONSchemaArray = {
|
|
34
|
-
type: "array";
|
|
35
|
-
items: JSONSchema;
|
|
36
|
-
description?: string;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type JSONSchema = JSONSchemaString | JSONSchemaNumber | JSONSchemaBoolean | JSONSchemaObject | JSONSchemaArray;
|
|
40
|
-
|
|
41
|
-
export function actionParametersToJsonSchema(actionParameters: Parameter[]): JSONSchema {
|
|
42
|
-
// Create the parameters object based on the argumentAnnotations
|
|
43
|
-
let parameters: { [key: string]: any } = {};
|
|
44
|
-
for (let parameter of actionParameters || []) {
|
|
45
|
-
parameters[parameter.name] = convertAttribute(parameter);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let requiredParameterNames: string[] = [];
|
|
49
|
-
for (let arg of actionParameters || []) {
|
|
50
|
-
if (arg.required !== false) {
|
|
51
|
-
requiredParameterNames.push(arg.name);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Create the ChatCompletionFunctions object
|
|
56
|
-
return {
|
|
57
|
-
type: "object",
|
|
58
|
-
properties: parameters,
|
|
59
|
-
required: requiredParameterNames,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function convertAttribute(attribute: Parameter): JSONSchema {
|
|
64
|
-
switch (attribute.type) {
|
|
65
|
-
case "string":
|
|
66
|
-
return {
|
|
67
|
-
type: "string",
|
|
68
|
-
description: attribute.description,
|
|
69
|
-
...(attribute.enum && { enum: attribute.enum }),
|
|
70
|
-
};
|
|
71
|
-
case "number":
|
|
72
|
-
case "boolean":
|
|
73
|
-
return {
|
|
74
|
-
type: attribute.type,
|
|
75
|
-
description: attribute.description,
|
|
76
|
-
};
|
|
77
|
-
case "object":
|
|
78
|
-
case "object[]":
|
|
79
|
-
const properties = attribute.attributes?.reduce(
|
|
80
|
-
(acc, attr) => {
|
|
81
|
-
acc[attr.name] = convertAttribute(attr);
|
|
82
|
-
return acc;
|
|
83
|
-
},
|
|
84
|
-
{} as Record<string, any>
|
|
85
|
-
);
|
|
86
|
-
const required = attribute.attributes?.filter((attr) => attr.required !== false).map((attr) => attr.name);
|
|
87
|
-
if (attribute.type === "object[]") {
|
|
88
|
-
return {
|
|
89
|
-
type: "array",
|
|
90
|
-
items: {
|
|
91
|
-
type: "object",
|
|
92
|
-
...(properties && { properties }),
|
|
93
|
-
...(required && required.length > 0 && { required }),
|
|
94
|
-
},
|
|
95
|
-
description: attribute.description,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
type: "object",
|
|
100
|
-
description: attribute.description,
|
|
101
|
-
...(properties && { properties }),
|
|
102
|
-
...(required && required.length > 0 && { required }),
|
|
103
|
-
};
|
|
104
|
-
default:
|
|
105
|
-
// Handle arrays of primitive types and undefined attribute.type
|
|
106
|
-
if (attribute.type?.endsWith("[]")) {
|
|
107
|
-
const itemType = attribute.type.slice(0, -2);
|
|
108
|
-
return {
|
|
109
|
-
type: "array",
|
|
110
|
-
items: { type: itemType as any },
|
|
111
|
-
description: attribute.description,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
// Fallback for undefined type or any other unexpected type
|
|
115
|
-
return {
|
|
116
|
-
type: "string",
|
|
117
|
-
description: attribute.description,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function convertJsonSchemaToZodRawShape(jsonSchema: any): ZodRawShape {
|
|
123
|
-
const spec: { [key: string]: z.ZodSchema } = {};
|
|
124
|
-
for (const [key, value] of Object.entries(jsonSchema.properties)) {
|
|
125
|
-
spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
|
|
126
|
-
}
|
|
127
|
-
return spec;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean): z.ZodSchema {
|
|
131
|
-
if (jsonSchema.type === "object") {
|
|
132
|
-
const spec: { [key: string]: z.ZodSchema } = {};
|
|
133
|
-
|
|
134
|
-
if (!jsonSchema.properties || !Object.keys(jsonSchema.properties).length) {
|
|
135
|
-
return !required ? z.object(spec).optional() : z.object(spec);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
for (const [key, value] of Object.entries(jsonSchema.properties)) {
|
|
139
|
-
spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
|
|
140
|
-
}
|
|
141
|
-
let schema = z.object(spec).describe(jsonSchema.description);
|
|
142
|
-
return required ? schema : schema.optional();
|
|
143
|
-
} else if (jsonSchema.type === "string") {
|
|
144
|
-
let schema = z.string().describe(jsonSchema.description);
|
|
145
|
-
return required ? schema : schema.optional();
|
|
146
|
-
} else if (jsonSchema.type === "number") {
|
|
147
|
-
let schema = z.number().describe(jsonSchema.description);
|
|
148
|
-
return required ? schema : schema.optional();
|
|
149
|
-
} else if (jsonSchema.type === "boolean") {
|
|
150
|
-
let schema = z.boolean().describe(jsonSchema.description);
|
|
151
|
-
return required ? schema : schema.optional();
|
|
152
|
-
} else if (jsonSchema.type === "array") {
|
|
153
|
-
let itemSchema = convertJsonSchemaToZodSchema(jsonSchema.items, true);
|
|
154
|
-
let schema = z.array(itemSchema).describe(jsonSchema.description);
|
|
155
|
-
return required ? schema : schema.optional();
|
|
156
|
-
}
|
|
157
|
-
throw new Error("Invalid JSON schema");
|
|
158
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* copy and modify from copilotkit
|
|
3
|
+
* https://github.com/copilotkit/copilotkit
|
|
4
|
+
*
|
|
5
|
+
* MIT License
|
|
6
|
+
*/
|
|
7
|
+
import { z, ZodRawShape } from "zod";
|
|
8
|
+
import { Parameter } from "./copilotkit-actions";
|
|
9
|
+
|
|
10
|
+
export type JSONSchemaString = {
|
|
11
|
+
type: "string";
|
|
12
|
+
description?: string;
|
|
13
|
+
enum?: string[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type JSONSchemaNumber = {
|
|
17
|
+
type: "number";
|
|
18
|
+
description?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type JSONSchemaBoolean = {
|
|
22
|
+
type: "boolean";
|
|
23
|
+
description?: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type JSONSchemaObject = {
|
|
27
|
+
type: "object";
|
|
28
|
+
properties?: Record<string, JSONSchema>;
|
|
29
|
+
required?: string[];
|
|
30
|
+
description?: string;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type JSONSchemaArray = {
|
|
34
|
+
type: "array";
|
|
35
|
+
items: JSONSchema;
|
|
36
|
+
description?: string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type JSONSchema = JSONSchemaString | JSONSchemaNumber | JSONSchemaBoolean | JSONSchemaObject | JSONSchemaArray;
|
|
40
|
+
|
|
41
|
+
export function actionParametersToJsonSchema(actionParameters: Parameter[]): JSONSchema {
|
|
42
|
+
// Create the parameters object based on the argumentAnnotations
|
|
43
|
+
let parameters: { [key: string]: any } = {};
|
|
44
|
+
for (let parameter of actionParameters || []) {
|
|
45
|
+
parameters[parameter.name] = convertAttribute(parameter);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let requiredParameterNames: string[] = [];
|
|
49
|
+
for (let arg of actionParameters || []) {
|
|
50
|
+
if (arg.required !== false) {
|
|
51
|
+
requiredParameterNames.push(arg.name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Create the ChatCompletionFunctions object
|
|
56
|
+
return {
|
|
57
|
+
type: "object",
|
|
58
|
+
properties: parameters,
|
|
59
|
+
required: requiredParameterNames,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function convertAttribute(attribute: Parameter): JSONSchema {
|
|
64
|
+
switch (attribute.type) {
|
|
65
|
+
case "string":
|
|
66
|
+
return {
|
|
67
|
+
type: "string",
|
|
68
|
+
description: attribute.description,
|
|
69
|
+
...(attribute.enum && { enum: attribute.enum }),
|
|
70
|
+
};
|
|
71
|
+
case "number":
|
|
72
|
+
case "boolean":
|
|
73
|
+
return {
|
|
74
|
+
type: attribute.type,
|
|
75
|
+
description: attribute.description,
|
|
76
|
+
};
|
|
77
|
+
case "object":
|
|
78
|
+
case "object[]":
|
|
79
|
+
const properties = attribute.attributes?.reduce(
|
|
80
|
+
(acc, attr) => {
|
|
81
|
+
acc[attr.name] = convertAttribute(attr);
|
|
82
|
+
return acc;
|
|
83
|
+
},
|
|
84
|
+
{} as Record<string, any>
|
|
85
|
+
);
|
|
86
|
+
const required = attribute.attributes?.filter((attr) => attr.required !== false).map((attr) => attr.name);
|
|
87
|
+
if (attribute.type === "object[]") {
|
|
88
|
+
return {
|
|
89
|
+
type: "array",
|
|
90
|
+
items: {
|
|
91
|
+
type: "object",
|
|
92
|
+
...(properties && { properties }),
|
|
93
|
+
...(required && required.length > 0 && { required }),
|
|
94
|
+
},
|
|
95
|
+
description: attribute.description,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
type: "object",
|
|
100
|
+
description: attribute.description,
|
|
101
|
+
...(properties && { properties }),
|
|
102
|
+
...(required && required.length > 0 && { required }),
|
|
103
|
+
};
|
|
104
|
+
default:
|
|
105
|
+
// Handle arrays of primitive types and undefined attribute.type
|
|
106
|
+
if (attribute.type?.endsWith("[]")) {
|
|
107
|
+
const itemType = attribute.type.slice(0, -2);
|
|
108
|
+
return {
|
|
109
|
+
type: "array",
|
|
110
|
+
items: { type: itemType as any },
|
|
111
|
+
description: attribute.description,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Fallback for undefined type or any other unexpected type
|
|
115
|
+
return {
|
|
116
|
+
type: "string",
|
|
117
|
+
description: attribute.description,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function convertJsonSchemaToZodRawShape(jsonSchema: any): ZodRawShape {
|
|
123
|
+
const spec: { [key: string]: z.ZodSchema } = {};
|
|
124
|
+
for (const [key, value] of Object.entries(jsonSchema.properties)) {
|
|
125
|
+
spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
|
|
126
|
+
}
|
|
127
|
+
return spec;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean): z.ZodSchema {
|
|
131
|
+
if (jsonSchema.type === "object") {
|
|
132
|
+
const spec: { [key: string]: z.ZodSchema } = {};
|
|
133
|
+
|
|
134
|
+
if (!jsonSchema.properties || !Object.keys(jsonSchema.properties).length) {
|
|
135
|
+
return !required ? z.object(spec).optional() : z.object(spec);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
for (const [key, value] of Object.entries(jsonSchema.properties)) {
|
|
139
|
+
spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
|
|
140
|
+
}
|
|
141
|
+
let schema = z.object(spec).describe(jsonSchema.description);
|
|
142
|
+
return required ? schema : schema.optional();
|
|
143
|
+
} else if (jsonSchema.type === "string") {
|
|
144
|
+
let schema = z.string().describe(jsonSchema.description);
|
|
145
|
+
return required ? schema : schema.optional();
|
|
146
|
+
} else if (jsonSchema.type === "number") {
|
|
147
|
+
let schema = z.number().describe(jsonSchema.description);
|
|
148
|
+
return required ? schema : schema.optional();
|
|
149
|
+
} else if (jsonSchema.type === "boolean") {
|
|
150
|
+
let schema = z.boolean().describe(jsonSchema.description);
|
|
151
|
+
return required ? schema : schema.optional();
|
|
152
|
+
} else if (jsonSchema.type === "array") {
|
|
153
|
+
let itemSchema = convertJsonSchemaToZodSchema(jsonSchema.items, true);
|
|
154
|
+
let schema = z.array(itemSchema).describe(jsonSchema.description);
|
|
155
|
+
return required ? schema : schema.optional();
|
|
156
|
+
}
|
|
157
|
+
throw new Error("Invalid JSON schema");
|
|
158
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { atom, PreinitializedWritableAtom, StoreValue } from "nanostores";
|
|
2
|
-
export type UnionStore<T extends { data: Record<string, PreinitializedWritableAtom<any>>; mutations: Record<string, any> }> = {
|
|
3
|
-
[k in keyof T["data"]]: StoreValue<T["data"][k]>;
|
|
4
|
-
} & T["mutations"];
|
|
5
|
-
|
|
6
|
-
export const useUnionStore = <T extends { data: Record<string, any>; mutations: Record<string, any> }>(
|
|
7
|
-
store: T,
|
|
8
|
-
useStore: (store: PreinitializedWritableAtom<any>) => StoreValue<T["data"][keyof T["data"]]>
|
|
9
|
-
): UnionStore<T> => {
|
|
10
|
-
const data: any = Object.fromEntries(
|
|
11
|
-
Object.entries(store.data as any).map(([key, value]) => {
|
|
12
|
-
return [key, useStore(value as any)];
|
|
13
|
-
})
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
...data,
|
|
18
|
-
...store.mutations,
|
|
19
|
-
};
|
|
20
|
-
};
|
|
1
|
+
import { atom, PreinitializedWritableAtom, StoreValue } from "nanostores";
|
|
2
|
+
export type UnionStore<T extends { data: Record<string, PreinitializedWritableAtom<any>>; mutations: Record<string, any> }> = {
|
|
3
|
+
[k in keyof T["data"]]: StoreValue<T["data"][k]>;
|
|
4
|
+
} & T["mutations"];
|
|
5
|
+
|
|
6
|
+
export const useUnionStore = <T extends { data: Record<string, any>; mutations: Record<string, any> }>(
|
|
7
|
+
store: T,
|
|
8
|
+
useStore: (store: PreinitializedWritableAtom<any>) => StoreValue<T["data"][keyof T["data"]]>
|
|
9
|
+
): UnionStore<T> => {
|
|
10
|
+
const data: any = Object.fromEntries(
|
|
11
|
+
Object.entries(store.data as any).map(([key, value]) => {
|
|
12
|
+
return [key, useStore(value as any)];
|
|
13
|
+
})
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
...data,
|
|
18
|
+
...store.mutations,
|
|
19
|
+
};
|
|
20
|
+
};
|