UNPKG

assistant-cloud

Version:

Cloud integration for assistant-ui

95 lines (86 loc) 2.64 kB
import type { AssistantCloudAPI } from "./AssistantCloudAPI"; import type { SamplingCallData } from "./instrumentMcpSampling"; import { AssistantStream, PlainTextDecoder } from "assistant-stream"; type AssistantCloudRunsStreamBody = { thread_id: string; assistant_id: "system/thread_title"; messages: readonly unknown[]; // TODO type }; type ReportToolCall = { tool_name: string; tool_call_id: string; tool_args?: string; tool_result?: string; tool_source?: "mcp" | "frontend" | "backend"; start_ms?: number; end_ms?: number; sampling_calls?: SamplingCallData[]; }; // NOTE: Keep this payload shape aligned with the strict runtime validator in // assistant-cloud: apps/aui-cloud-api/src/endpoints/runs/create.ts // (createRunSchema). New telemetry fields must be added in both repos together. export type AssistantCloudRunReport = { thread_id: string; status: "completed" | "incomplete" | "error"; total_steps?: number; tool_calls?: ReportToolCall[]; steps?: { input_tokens?: number; output_tokens?: number; reasoning_tokens?: number; cached_input_tokens?: number; tool_calls?: ReportToolCall[]; start_ms?: number; end_ms?: number; }[]; input_tokens?: number; output_tokens?: number; reasoning_tokens?: number; cached_input_tokens?: number; model_id?: string; provider_type?: string; duration_ms?: number; output_text?: string; metadata?: Record<string, unknown>; }; export class AssistantCloudRuns { private cloud: AssistantCloudAPI; constructor(cloud: AssistantCloudAPI) { this.cloud = cloud; } public __internal_getAssistantOptions(assistantId: string) { return { api: `${this.cloud._baseUrl}/v1/runs/stream`, headers: async () => { const headers = await this.cloud._auth.getAuthHeaders(); if (!headers) throw new Error("Authorization failed"); return { ...headers, Accept: "text/plain", }; }, body: { assistant_id: assistantId, response_format: "vercel-ai-data-stream/v1", thread_id: "unstable_todo", }, }; } public async stream( body: AssistantCloudRunsStreamBody, ): Promise<AssistantStream> { const response = await this.cloud.makeRawRequest("/runs/stream", { method: "POST", headers: { Accept: "text/plain", }, body, }); return AssistantStream.fromResponse(response, new PlainTextDecoder()); } public async report( body: AssistantCloudRunReport, ): Promise<{ run_id: string }> { return this.cloud.makeRequest("/runs", { method: "POST", body }); } }