Files
web_app/src/core/ChatClientApi.js

46 lines
1.3 KiB
JavaScript

import { ApiHttpClient } from "./ApiHttpClient.js";
export class ChatClientApi {
constructor(http = new ApiHttpClient(), pollMs = 700, timeoutMs = 120000) {
this.http = http;
this.pollMs = pollMs;
this.timeoutMs = timeoutMs;
}
async createDialog(ragSessionId) {
const response = await this.http.request("/api/chat/dialogs", {
method: "POST",
body: JSON.stringify({ rag_session_id: ragSessionId })
});
return response.dialog_session_id;
}
async sendMessage(payload) {
const queued = await this.http.request("/api/chat/messages", {
method: "POST",
body: JSON.stringify({
dialog_session_id: payload.dialog_session_id,
rag_session_id: payload.rag_session_id,
message: payload.message,
attachments: payload.attachments || []
})
});
const taskId = queued.task_id;
const started = Date.now();
while (Date.now() - started < this.timeoutMs) {
const status = await this.http.request(`/api/tasks/${encodeURIComponent(taskId)}`);
if (status.status === "done") return status;
if (status.status === "error") {
throw new Error(status.error?.desc || "Task failed");
}
await this.#sleep(this.pollMs);
}
throw new Error("Task polling timeout");
}
#sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
}