assistant-cloud
Version:
Cloud integration for assistant-ui
89 lines (88 loc) • 4.15 kB
JavaScript
import { readCloudArray, readCloudEnum, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudNumber, readCloudRecord, readCloudString, readCloudTimestamp } from "./cloudResponse.js";
// src/AssistantCloudThreadMessages.ts
const RUN_STATUSES = ["running", "ended"];
const decodeCloudMessageRun = (value, field) => {
if (value === void 0 || value === null) return void 0;
const run = readCloudRecord(value, field);
return {
status: readCloudEnum(run.status, `${field}.status`, RUN_STATUSES),
last_heartbeat_ms_ago: readCloudNumber(run.last_heartbeat_ms_ago, `${field}.last_heartbeat_ms_ago`)
};
};
/** Reads the lease fields of a response that granted or renewed one. */
const decodeCloudRunLease = (response) => ({
lease_id: readCloudString(response.lease_id, "lease_id"),
heartbeat_interval_ms: readCloudNumber(response.heartbeat_interval_ms, "heartbeat_interval_ms")
});
const MESSAGE_FEEDBACK_TYPES = ["positive", "negative"];
const decodeCloudMessage = (value, field) => {
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`),
external_id: readCloudNullableString(message.external_id ?? null, `${field}.external_id`),
...message.run !== void 0 && message.run !== null ? { run: decodeCloudMessageRun(message.run, `${field}.run`) } : void 0
};
};
var AssistantCloudThreadMessages = class {
cloud;
constructor(cloud) {
this.cloud = cloud;
}
async list(threadId, query) {
const response = readCloudRecord(await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages`, { query }), "thread message list response");
return { messages: readCloudArray(response.messages, "messages").map((message, index) => decodeCloudMessage(message, `messages[${index}]`)) };
}
async create(threadId, body) {
const response = readCloudRecord(await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages`, {
method: "POST",
body: {
parent_id: body.parent_id,
format: body.format,
content: body.content,
...body.external_id !== void 0 ? { external_id: body.external_id } : void 0,
...body.parent_external_id !== void 0 ? { parent_external_id: body.parent_external_id } : void 0,
...body.open_run ? { open_run: true } : void 0,
...body.lease_id !== void 0 ? { lease_id: body.lease_id } : void 0
}
}), "thread message create response");
return {
message_id: readCloudString(response.message_id, "message_id"),
...response.lease_id !== void 0 ? { run: decodeCloudRunLease(response) } : void 0
};
}
async update(threadId, messageId, body) {
return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}`, {
method: "PUT",
body
});
}
async delete(threadId, messageIds) {
return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages`, {
method: "DELETE",
body: { message_ids: messageIds }
});
}
async feedback(threadId, messageId, body) {
const comment = body.comment?.trim();
const response = readCloudRecord(await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}/feedback`, {
method: "POST",
body: {
type: body.type,
...comment ? { comment } : void 0
}
}), "thread message feedback response");
return {
feedback_id: readCloudString(response.feedback_id, "feedback_id"),
type: readCloudEnum(response.type, "type", MESSAGE_FEEDBACK_TYPES),
..."comment" in response ? { comment: readCloudNullableString(response.comment, "comment") } : void 0
};
}
};
export { AssistantCloudThreadMessages, decodeCloudMessage };
//# sourceMappingURL=AssistantCloudThreadMessages.js.map