Skip to content

Standalone Hooks

ask-widget is more than just a component—it's a collection of headless hooks that you can use to build your own completely custom chat interface.

useChat

Manages chat state, message history, and the streaming lifecycle.

tsx
import { useChat } from 'ask-widget'

const {
  messages,
  isStreaming,
  latency,
  activeStreamId,
  inputValue,
  setInputValue,
  sendMessage,
  clearHistory,
} = useChat({
  initialMessage: "Hi! How can I help?",
  streamResponse: async function* (message) { 
    yield message.toUpperCase() 
  }
})

useSSEStream

Handles the SSE connection, fetch headers, and token parsing from any API.

tsx
import { useSSEStream } from 'ask-widget'

const { streamResponse } = useSSEStream({
  apiUrl: "https://my-api.com",
  apiToken: "...",
  path: "/v1/chat",
  // also takes customizable body builders and chunk extractors
})

<MyCustomUI onSend={(msg) => streamResponse(msg, history)} />

useSession

A simple hook to handle message persistence to localStorage.

tsx
import { useSession } from 'ask-widget'

const { messages, saveMessages, clearSession } = useSession({
  key: "my_chat_session"
})

Released under the MIT License.