runtime
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chineseassistant-ui Runtime
assistant-ui 运行时
Always consult assistant-ui.com/llms.txt for latest API.
请始终参考assistant-ui.com/llms.txt获取最新API。
References
参考文档
- ./references/local-runtime.md -- useLocalRuntime deep dive
- ./references/external-store.md -- useExternalStoreRuntime deep dive
- ./references/thread-list.md -- Thread list management
- ./references/state-hooks.md -- State access hooks
- ./references/types.md -- Type definitions
- ./references/local-runtime.md -- useLocalRuntime 深度解析
- ./references/external-store.md -- useExternalStoreRuntime 深度解析
- ./references/thread-list.md -- 线程列表管理
- ./references/state-hooks.md -- 状态访问钩子
- ./references/types.md -- 类型定义
Runtime Hierarchy
运行时层级结构
AssistantRuntime
├── ThreadListRuntime (thread management)
│ ├── ThreadListItemRuntime (per-thread item)
│ └── ...
└── ThreadRuntime (current thread)
├── ComposerRuntime (input state)
└── MessageRuntime[] (per-message)
└── MessagePartRuntime[] (per-content-part)AssistantRuntime
├── ThreadListRuntime (thread management)
│ ├── ThreadListItemRuntime (per-thread item)
│ └── ...
└── ThreadRuntime (current thread)
├── ComposerRuntime (input state)
└── MessageRuntime[] (per-message)
└── MessagePartRuntime[] (per-content-part)State Access (Modern API)
状态访问(现代API)
tsx
import { useAssistantApi, useAssistantState, useAssistantEvent } from "@assistant-ui/react";
function ChatControls() {
const api = useAssistantApi();
const messages = useAssistantState(s => s.thread.messages);
const isRunning = useAssistantState(s => s.thread.isRunning);
useAssistantEvent("message-added", (e) => {
console.log("New message:", e.message);
});
return (
<div>
<button onClick={() => api.thread().append({
role: "user",
content: [{ type: "text", text: "Hello!" }],
})}>
Send
</button>
{isRunning && (
<button onClick={() => api.thread().cancelRun()}>Cancel</button>
)}
</div>
);
}tsx
import { useAssistantApi, useAssistantState, useAssistantEvent } from "@assistant-ui/react";
function ChatControls() {
const api = useAssistantApi();
const messages = useAssistantState(s => s.thread.messages);
const isRunning = useAssistantState(s => s.thread.isRunning);
useAssistantEvent("message-added", (e) => {
console.log("New message:", e.message);
});
return (
<div>
<button onClick={() => api.thread().append({
role: "user",
content: [{ type: "text", text: "Hello!" }],
})}>
Send
</button>
{isRunning && (
<button onClick={() => api.thread().cancelRun()}>Cancel</button>
)}
</div>
);
}Thread Operations
线程操作
tsx
const api = useAssistantApi();
const thread = api.thread();
// Append message
thread.append({ role: "user", content: [{ type: "text", text: "Hello" }] });
// Cancel generation
thread.cancelRun();
// Get current state
const state = thread.getState(); // { messages, isRunning, ... }tsx
const api = useAssistantApi();
const thread = api.thread();
// Append message
thread.append({ role: "user", content: [{ type: "text", text: "Hello" }] });
// Cancel generation
thread.cancelRun();
// Get current state
const state = thread.getState(); // { messages, isRunning, ... }Message Operations
消息操作
tsx
const message = api.thread().message(0); // By index
message.edit({ role: "user", content: [{ type: "text", text: "Updated" }] });
message.reload();tsx
const message = api.thread().message(0); // By index
message.edit({ role: "user", content: [{ type: "text", text: "Updated" }] });
message.reload();Events
事件
tsx
useAssistantEvent("thread-started", () => {});
useAssistantEvent("thread-ended", () => {});
useAssistantEvent("message-added", ({ message }) => {});
useAssistantEvent("run-started", () => {});
useAssistantEvent("run-ended", () => {});tsx
useAssistantEvent("thread-started", () => {});
useAssistantEvent("thread-ended", () => {});
useAssistantEvent("message-added", ({ message }) => {});
useAssistantEvent("run-started", () => {});
useAssistantEvent("run-ended", () => {});Capabilities
功能支持
tsx
const caps = useAssistantState(s => s.thread.capabilities);
// { cancel, edit, reload, copy, speak, attachments }tsx
const caps = useAssistantState(s => s.thread.capabilities);
// { cancel, edit, reload, copy, speak, attachments }Quick Reference
快速参考
tsx
// Get messages
const messages = useAssistantState(s => s.thread.messages);
// Check running state
const isRunning = useAssistantState(s => s.thread.isRunning);
// Append message
api.thread().append({ role: "user", content: [{ type: "text", text: "Hi" }] });
// Cancel generation
api.thread().cancelRun();
// Edit message
api.thread().message(index).edit({ ... });
// Reload message
api.thread().message(index).reload();tsx
// Get messages
const messages = useAssistantState(s => s.thread.messages);
// Check running state
const isRunning = useAssistantState(s => s.thread.isRunning);
// Append message
api.thread().append({ role: "user", content: [{ type: "text", text: "Hi" }] });
// Cancel generation
api.thread().cancelRun();
// Edit message
api.thread().message(index).edit({ ... });
// Reload message
api.thread().message(index).reload();Common Gotchas
常见问题
"Cannot read property of undefined"
- Ensure hooks are called inside
AssistantRuntimeProvider
State not updating
- Use selectors with to prevent unnecessary re-renders
useAssistantState
Messages array empty
- Check runtime is configured
- Verify API response format
"Cannot read property of undefined"
- 确保在内部调用钩子
AssistantRuntimeProvider
State not updating
- 使用的选择器来避免不必要的重渲染
useAssistantState
Messages array empty
- 检查运行时是否已配置
- 验证API响应格式