UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

135 lines (134 loc) 5.58 kB
import { r as __exportAll } from "./rolldown-runtime-Dr7-SnC6.js"; import { n as validateToolCall, t as validateToolArguments } from "./validation-CJZtym2g.js"; import { i as streamSimple, n as completeSimple, r as stream, t as complete } from "./stream-Ci9pOvq7.js"; import { r as resolveEnvNodeProxyUrlForTarget, t as createFixedNodeProxyAgentPair } from "./node-proxy-agent-Dh7ZolpU.js"; import { calculateCost, clampThinkingLevel as clampThinkingLevel$1, getApiProvider, getApiProviders, getEnvApiKey as getEnvApiKey$1, parseStreamingJson as parseStreamingJson$1, sanitizeSurrogates as sanitizeSurrogates$1 } from "@openclaw/ai/internal/runtime"; import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning, transformMessages } from "@openclaw/ai/internal/shared"; //#region packages/llm-core/src/utils/event-stream.ts /** Generic async-iterable event stream with a separately awaited final result. */ var EventStream = class { constructor(isComplete, extractResult) { this.queue = []; this.queueHead = 0; this.waiting = []; this.done = false; this.resultSettled = false; this.isComplete = isComplete; this.extractResult = extractResult; this.finalResultPromise = new Promise((resolve, reject) => { this.resolveFinalResult = resolve; this.rejectFinalResult = reject; }); } push(event) { if (this.done) return; if (this.isComplete(event)) { this.done = true; this.resultSettled = true; this.resolveFinalResult(this.extractResult(event)); } const waiter = this.waiting.shift(); if (waiter) waiter({ value: event, done: false }); else this.queue.push(event); } end(result) { this.done = true; if (result !== void 0) { this.resultSettled = true; this.resolveFinalResult(result); } else if (!this.resultSettled) { this.resultSettled = true; this.finalResultPromise.catch(() => {}); this.rejectFinalResult(/* @__PURE__ */ new Error("event stream ended without a terminal event or final result")); } while (this.waiting.length > 0) { const waiter = this.waiting.shift(); if (!waiter) break; waiter({ value: void 0, done: true }); } } async *[Symbol.asyncIterator]() { while (true) if (this.queueHead < this.queue.length) { const event = this.queue[this.queueHead]; this.queue[this.queueHead] = void 0; this.queueHead += 1; if (this.queueHead >= 1024 && this.queueHead * 2 >= this.queue.length) { this.queue = this.queue.slice(this.queueHead); this.queueHead = 0; } yield event; } else if (this.done) return; else { const result = await new Promise((resolve) => { this.waiting.push(resolve); }); if (result.done) return; yield result.value; } } result() { return this.finalResultPromise; } }; /** Assistant-message event stream that resolves on done/error terminal events. */ var AssistantMessageEventStream = class extends EventStream { constructor() { super((event) => event.type === "done" || event.type === "error", (event) => { if (event.type === "done") return event.message; else if (event.type === "error") return event.error; throw new Error("Unexpected event type for final result"); }); } }; /** Creates an assistant-message stream for provider and plugin adapters. */ function createAssistantMessageEventStream() { return new AssistantMessageEventStream(); } //#endregion //#region packages/ai/src/provider-types.ts const PROVIDER_CONTEXT_HANDOFF = Symbol("providerContextHandoff"); /** Resolves provider-only context without widening the canonical call contract. */ async function resolveProviderContext(context, options) { return options?.[PROVIDER_CONTEXT_HANDOFF]?.() ?? context; } //#endregion //#region src/llm/utils/node-http-proxy.ts /** Builds fixed HTTP and HTTPS proxy agents for a target URL, when env proxy config applies. */ function createHttpProxyAgentsForTarget(targetUrl) { const proxyUrl = resolveEnvNodeProxyUrlForTarget(targetUrl); if (!proxyUrl) return; return createFixedNodeProxyAgentPair(proxyUrl); } //#endregion //#region src/plugin-sdk/llm.ts var llm_exports = /* @__PURE__ */ __exportAll({ AssistantMessageEventStream: () => AssistantMessageEventStream, adjustMaxTokensForThinking: () => adjustMaxTokensForThinking, buildBaseOptions: () => buildBaseOptions, calculateCost: () => calculateCost, clampReasoning: () => clampReasoning, clampThinkingLevel: () => clampThinkingLevel$1, complete: () => complete, completeSimple: () => completeSimple, createAssistantMessageEventStream: () => createAssistantMessageEventStream, createHttpProxyAgentsForTarget: () => createHttpProxyAgentsForTarget, getApiProvider: () => getApiProvider, getApiProviders: () => getApiProviders, getEnvApiKey: () => getEnvApiKey$1, parseStreamingJson: () => parseStreamingJson$1, resolveProviderContext: () => resolveProviderContext, sanitizeSurrogates: () => sanitizeSurrogates$1, stream: () => stream, streamSimple: () => streamSimple, transformMessages: () => transformMessages, validateToolArguments: () => validateToolArguments, validateToolCall: () => validateToolCall }); //#endregion export { createAssistantMessageEventStream as _, clampThinkingLevel$1 as a, getEnvApiKey$1 as c, sanitizeSurrogates$1 as d, transformMessages as f, AssistantMessageEventStream as g, resolveProviderContext as h, clampReasoning as i, llm_exports as l, PROVIDER_CONTEXT_HANDOFF as m, buildBaseOptions as n, getApiProvider as o, createHttpProxyAgentsForTarget as p, calculateCost as r, getApiProviders as s, adjustMaxTokensForThinking as t, parseStreamingJson$1 as u };