- useChat: build chat UIs with streaming, tools, and reconnection
- useCompletion: simple text completions with streaming
- Chat: Solid-backed
AbstractChatstate adapter
References: useChat docs, useCompletion docs.
bun add ai-sdk-solidOr
bun add ai-sdk-solidOr
bun add ai-sdk-solidimport { useChat } from "ai-sdk-solid";
function ChatUI() {
const chat = useChat({
// Uses AI SDK DefaultChatTransport hitting /api/chat by default
// Or pass a custom transport
// transport: new MyTransport(),
// resume: true, // optionally resume an interrupted stream
});
let input!: HTMLInputElement;
return (
<form
onSubmit={(e) => {
e.preventDefault();
chat.sendMessage({ text: input.value });
input.value = "";
}}
>
<div>status: {chat.status()}</div>
<For each={chat.messages}>{(m) => <pre>{JSON.stringify(m)}</pre>}</For>
<input ref={input} type="text" />
<button type="submit">Send</button>
</form>
);
}What you get back from useChat:
id,messages,status,errorsendMessage,regenerate,stop,resumeStream,addToolResult,clearErrorsetMessagesfor local optimistic edits
import { useCompletion } from "ai-sdk-solid";
function CompletionBox() {
const {
input,
setInput,
completion,
isLoading,
handleSubmit,
} = useCompletion({ api: "/api/completion" });
return (
<form onSubmit={handleSubmit}>
<textarea value={input()} onInput={(e) => setInput(e.currentTarget.value)} />
<button disabled={isLoading()}>Go</button>
<pre>{completion()}</pre>
</form>
);
}Chatuses Solid stores under the hood;messagesis reconciled byid.useCompletionexposes Solid-first handlers:handleInputChangeusesonInput, andsetInputis a simple setter.
API mirrors the AI SDK where possible; only small ergonomic tweaks were made for Solid. See upstream docs for deeper details: useChat, useCompletion.
There’s a minimal Solid app in example/.
Apache-2.0