import {Settings} from "@/contexts/settings"; import {LogAction} from "@/contexts/log"; export async function* streamAPI( prompt: string, settings: Settings, log: LogAction, ): AsyncGenerator { log(`Fetching ${settings.postCount} posts from Beam API…`); const response = await fetch(new URL(settings.apiURL), { method: "POST", headers: { "Content-Type": "application/json", "Accept": "text/event-stream", "Authorization": `Bearer ${settings.apiKey}` }, body: JSON.stringify({ "prompt": prompt, "posts_count": settings.postCount, "temperature": settings.temperature, }), }); if (!response.ok) { const message = `Failed to fetch API (${response.status} ${response.statusText}): ${await response.text()}`; log(message); throw new Error(message); } log("Reading HTTP stream…"); try { const decoder = new TextDecoder(); for await (const chunk of response.body) { const text = decoder.decode(chunk, { stream: true }); yield text; } log("Stream reading completed."); } catch(e) { log("Error while reading the HTTP stream.") } }