UNPKG

assistant-cloud

Version:

Cloud integration for assistant-ui

109 lines (95 loc) 2.91 kB
import type { ReadonlyJSONObject } from "assistant-stream/utils"; import type { AssistantCloudAPI } from "./AssistantCloudAPI"; import { readCloudArray, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp, } from "./cloudResponse"; export type CloudMessage = { id: string; parent_id: string | null; height: number; created_at: Date; updated_at: Date; format: "aui/v0" | string; content: ReadonlyJSONObject; }; type AssistantCloudThreadMessageListQuery = { format?: string; }; type AssistantCloudThreadMessageListResponse = { messages: CloudMessage[]; }; type AssistantCloudThreadMessageCreateBody = { parent_id: string | null; format: "aui/v0" | string; content: ReadonlyJSONObject; }; type AssistantCloudMessageCreateResponse = { message_id: string; }; type AssistantCloudThreadMessageUpdateBody = { content: ReadonlyJSONObject; }; export const decodeCloudMessage = ( value: unknown, field: string, ): CloudMessage => { const message = readCloudRecord(value, field); return { id: readCloudString(message.id, `${field}.id`), parent_id: readCloudNullableString(message.parent_id, `${field}.parent_id`), height: readCloudInteger(message.height, `${field}.height`), created_at: readCloudTimestamp(message.created_at, `${field}.created_at`), updated_at: readCloudTimestamp(message.updated_at, `${field}.updated_at`), format: readCloudString(message.format, `${field}.format`), content: readCloudJSONObject(message.content, `${field}.content`), }; }; export class AssistantCloudThreadMessages { private cloud: AssistantCloudAPI; constructor(cloud: AssistantCloudAPI) { this.cloud = cloud; } public async list( threadId: string, query?: AssistantCloudThreadMessageListQuery, ): Promise<AssistantCloudThreadMessageListResponse> { const response = readCloudRecord( await this.cloud.makeRequest( `/threads/${encodeURIComponent(threadId)}/messages`, { query }, ), "thread message list response", ); const messages = readCloudArray(response.messages, "messages"); return { messages: messages.map((message, index) => decodeCloudMessage(message, `messages[${index}]`), ), }; } public async create( threadId: string, body: AssistantCloudThreadMessageCreateBody, ): Promise<AssistantCloudMessageCreateResponse> { return this.cloud.makeRequest( `/threads/${encodeURIComponent(threadId)}/messages`, { method: "POST", body }, ); } public async update( threadId: string, messageId: string, body: AssistantCloudThreadMessageUpdateBody, ): Promise<void> { return this.cloud.makeRequest( `/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}`, { method: "PUT", body }, ); } }