Skip to content

@tasco/ai

Phần chạy ở client: chat streaming qua BFF. Phần server, prompt và eval nằm ở các subpath /server, /prompts, /eval. Hướng dẫn: AI trong sản phẩm.

Hàm

createSseParser()

ts
function createSseParser(onEvent): object;

Parser SSE (Server-Sent Events) tối giản cho stream chat-completions. Chunk mạng có thể cắt giữa chừng một event — parser giữ phần dư trong buffer và chỉ emit khi đủ một event trọn vẹn (ngăn cách bằng dòng trống).

Tham số

Tham sốKiểu
onEvent(data) => void

Trả về

object

TênKiểu
feed()(chunk) => void
flush()() => void

extractDeltaContent()

ts
function extractDeltaContent(raw): string | null;

Rút delta text từ một event chat-completions dạng OpenAI-compatible (LiteLLM và đa số gateway đều theo chuẩn này). Trả null với [DONE], JSON hỏng, hoặc chunk không có nội dung (vd chunk metadata đầu stream).

Tham số

Tham sốKiểu
rawstring

Trả về

string | null


useAiChat()

ts
function useAiChat(options?): object;

Chat streaming với AI gateway qua BFF — client không bao giờ giữ API key. Chỉ dùng client-side (page mặc định CSR); response đọc dạng SSE, nội dung assistant được cập nhật dần vào message cuối để UI render theo thời gian thực.

Tham số

Tham sốKiểu
optionsUseAiChatOptions

Trả về

TênKiểuMô tả
abort()() => voidDừng stream đang chạy (giữ phần nội dung đã nhận).
errorRef<AppError | null, AppError | null>Lỗi của lần gửi gần nhất (đã quy về AppError); null khi không có lỗi.
messagesRef<ChatMessage[], ChatMessage[]>Hội thoại hiển thị (không gồm system prompt); message assistant cuối được cập nhật dần khi stream.
reset()() => voidXoá hội thoại, đưa state về ban đầu.
send()(content) => Promise<void>Gửi một câu hỏi; bỏ qua khi đang stream hoặc nội dung rỗng. Lỗi ghi vào error, không ném ra.
statusRef<ChatStatus, ChatStatus>'streaming' trong lúc nhận câu trả lời — UI nên khoá ô nhập theo trạng thái này.

Interface

ChatMessage

Một message trong hội thoại.

Thuộc tính

Thuộc tínhKiểuMô tả
contentstringNội dung văn bản; message assistant đang stream được nối dần vào đây.
roleChatRoleAi nói câu này.

UseAiChatOptions

Tuỳ chọn của useAiChat.

Thuộc tính

Thuộc tínhKiểuMô tả
endpoint?stringEndpoint BFF (Nitro) proxy tới AI gateway. Mặc định '/api/ai/chat'.
fetch?{ (input, init?): Promise<Response>; (input, init?): Promise<Response>; }fetch tuỳ biến (phục vụ test). Mặc định globalThis.fetch.
model?stringModel gửi kèm request — BFF có thể override/chặn theo allowlist.
system?stringSystem prompt chèn đầu hội thoại khi gửi (không nằm trong messages hiển thị).

Kiểu

ChatRole

ts
type ChatRole = "system" | "user" | "assistant";

Vai trò message trong hội thoại chat (theo chuẩn OpenAI-compatible).


ChatStatus

ts
type ChatStatus = "idle" | "streaming" | "error";

Trạng thái vòng đời của một phiên chat streaming.