@langgraph-js/sdk 1.1.6 → 1.1.9

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/ui/index.ts DELETED
@@ -1,182 +0,0 @@
1
- import { LangGraphClient, RenderMessage } from "../src/LangGraphClient";
2
- /** @ts-ignore */
3
- import testResponse from "../test/testResponse.json?raw";
4
- import { createTools } from "./tool";
5
- const main = async () => {
6
- const client = new LangGraphClient({
7
- defaultHeaders: {},
8
- });
9
-
10
- await client.initAssistant("agent");
11
- await client.createThread();
12
- client.onStreamingUpdate((event) => {
13
- updateMessages(client.renderMessage);
14
- });
15
- client.tools.bindTools(createTools());
16
- const messages = await client.sendMessage("你有什么工具", {
17
- _debug: {
18
- // streamResponse: JSON.parse(testResponse),
19
- },
20
- });
21
- console.log(client.graphMessages);
22
- console.log(client.renderMessage);
23
- console.log(client.tokenCounter);
24
- };
25
-
26
- // 声明全局类型
27
- declare global {
28
- interface Window {
29
- main: () => Promise<void>;
30
- }
31
- }
32
-
33
- window.main = main;
34
- // main();
35
-
36
- function getMessageType(message: RenderMessage): string {
37
- if ("type" in message) {
38
- return message.type;
39
- }
40
- return "unknown";
41
- }
42
-
43
- function renderMessage(message: RenderMessage) {
44
- const messageDiv = document.createElement("div");
45
- const messageType = getMessageType(message);
46
- messageDiv.className = `message ${messageType}`;
47
-
48
- const contentDiv = document.createElement("div");
49
- contentDiv.className = "message-content";
50
-
51
- const messageContent = `
52
- <div class="message-header">
53
- <span class="message-role">${getRoleName(messageType)} </span>
54
- <span class="message-role">${
55
- /** @ts-ignore */
56
- message.name || ""
57
- }</span>
58
- ${renderTokenUsage(message.usage_metadata)}
59
- </div>
60
- <p class="message-body">
61
-
62
- <span>
63
- ${message.tool_input || ""}
64
- </span>
65
- <span>
66
- ${message.content}
67
- </span>
68
- </p>
69
- `;
70
-
71
- contentDiv.innerHTML = messageContent;
72
- messageDiv.appendChild(contentDiv);
73
- return messageDiv;
74
- }
75
-
76
- function getRoleName(type: string): string {
77
- switch (type) {
78
- case "human":
79
- return "You";
80
- case "ai":
81
- return "AI Assistant";
82
- case "system":
83
- return "System";
84
- default:
85
- return type;
86
- }
87
- }
88
-
89
- function renderTokenUsage(usage?: { input_tokens?: number; output_tokens?: number; total_tokens?: number }) {
90
- if (!usage) return "";
91
-
92
- return `
93
- <div class="token-usage">
94
- ${usage.input_tokens ? `<span class="token-count">Input: ${usage.input_tokens}</span>` : ""}
95
- ${usage.output_tokens ? `<span class="token-count">Output: ${usage.output_tokens}</span>` : ""}
96
- ${usage.total_tokens ? `<span class="token-count">Total: ${usage.total_tokens}</span>` : ""}
97
- </div>
98
- `;
99
- }
100
-
101
- function renderMessages(messages: RenderMessage[]) {
102
- const container = document.createElement("div");
103
- container.className = "messages-container";
104
-
105
- messages.forEach((message) => {
106
- container.appendChild(renderMessage(message));
107
- });
108
-
109
- return container;
110
- }
111
-
112
- export function updateMessages(messages: RenderMessage[]) {
113
- const messageDiv = document.getElementById("message");
114
- if (!messageDiv) return;
115
-
116
- messageDiv.innerHTML = "";
117
- messageDiv.appendChild(renderMessages(messages));
118
- }
119
-
120
- // 添加样式
121
- const style = document.createElement("style");
122
- style.textContent = `
123
- .messages-container {
124
- display: flex;
125
- flex-direction: column;
126
- gap: 1rem;
127
- padding: 1rem;
128
- }
129
-
130
- .message {
131
- max-width: 80%;
132
- padding: 0.75rem;
133
- border-radius: 0.5rem;
134
- }
135
-
136
- .message.human {
137
- align-self: flex-end;
138
- background-color: #e3f2fd;
139
- }
140
-
141
- .message.ai {
142
- align-self: flex-start;
143
- background-color: #f5f5f5;
144
- }
145
-
146
- .message.system {
147
- align-self: center;
148
- background-color: #fff3e0;
149
- font-style: italic;
150
- }
151
-
152
- .message-header {
153
- margin-bottom: 0.5rem;
154
- font-size: 0.875rem;
155
- color: #666;
156
- display: flex;
157
- justify-content: space-between;
158
- align-items: center;
159
- }
160
-
161
- .message-role {
162
- font-weight: 600;
163
- }
164
-
165
- .message-body {
166
- }
167
-
168
- .token-usage {
169
- display: flex;
170
- gap: 0.5rem;
171
- font-size: 0.75rem;
172
- color: #888;
173
- }
174
-
175
- .token-count {
176
- background-color: rgba(0, 0, 0, 0.05);
177
- padding: 0.125rem 0.375rem;
178
- border-radius: 0.25rem;
179
- }
180
- `;
181
-
182
- document.head.appendChild(style);
package/ui/tool.ts DELETED
@@ -1,55 +0,0 @@
1
- import { z } from "zod";
2
- import { createTool, createFETool } from "../src/tool/createTool";
3
-
4
- export function createTools() {
5
- // 文件操作工具
6
- const fileTool = createTool({
7
- name: "file_operation",
8
- description: "执行文件操作,包括读取和写入",
9
- parameters: {
10
- operation: z.enum(["read", "write"]).describe("操作类型:read-读取文件,write-写入文件"),
11
- filePath: z.string().describe("文件的完整路径"),
12
- content: z.string().optional().describe("写入文件时的内容,仅在 operation 为 write 时需要"),
13
- },
14
- async execute(args) {
15
- return [{ type: "text", text: "执行文件操作" }];
16
- },
17
- });
18
-
19
- // 用户交互工具
20
- const userInteractionTool = createFETool({
21
- name: "user_interaction",
22
- description: "与用户进行交互,包括确认和输入",
23
- parameters: [
24
- {
25
- name: "type",
26
- type: "string",
27
- description: "交互类型:confirm-确认,input-输入",
28
- },
29
- {
30
- name: "message",
31
- type: "string",
32
- description: "向用户展示的信息",
33
- },
34
- {
35
- name: "options",
36
- type: "string[]",
37
- description: "选项列表,仅在 type 为 confirm 时使用",
38
- optional: true,
39
- },
40
- ],
41
- handler: async (args) => {
42
- return {
43
- success: true,
44
- data: {
45
- type: args.type,
46
- message: args.message,
47
- options: args.options || ["确认", "取消"],
48
- },
49
- message: "等待用户响应",
50
- };
51
- },
52
- });
53
-
54
- return [fileTool, userInteractionTool];
55
- }