UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

77 lines (76 loc) 3.04 kB
import { r as logVerbose } from "./globals-GTrXU4s9.js"; import { t as applyPreparedRuntimeAuthToModel } from "./provider-request-config-0Zg8QIAI.js"; import { c as resolveDefaultModelForAgent } from "./model-selection-CA_65iXi.js"; import { o as requireApiKey } from "./model-auth-runtime-shared-ZF0jyHxm.js"; import { n as completeSimple } from "./stream-4H1GSjKe.js"; import "./model-auth-DVfmdW0b.js"; import { n as resolveModelAsync } from "./model-Cp9whgWq.js"; import { t as prepareModelForSimpleCompletion } from "./simple-completion-transport-B3UDWDI2.js"; import { n as getRuntimeAuthForModel } from "./runtime-model-auth.runtime-Dpe98OV2.js"; //#region src/auto-reply/reply/conversation-label-generator.ts const DEFAULT_MAX_LABEL_LENGTH = 128; const TIMEOUT_MS = 15e3; function isTextContentBlock(block) { return block.type === "text"; } function isCodexSimpleCompletionModel(model) { return model.api === "openai-chatgpt-responses"; } function extractSimpleCompletionError(result) { if (result.stopReason !== "error") return null; return result.errorMessage?.trim() || "unknown error"; } /** Generates a bounded human-readable label for a session, or null on failure. */ async function generateConversationLabel(params) { const { userMessage, prompt, cfg, agentId, agentDir } = params; const maxLength = typeof params.maxLength === "number" && Number.isFinite(params.maxLength) && params.maxLength > 0 ? Math.floor(params.maxLength) : DEFAULT_MAX_LABEL_LENGTH; const modelRef = resolveDefaultModelForAgent({ cfg, agentId }); const resolved = await resolveModelAsync(modelRef.provider, modelRef.model, agentDir, cfg); if (!resolved.model) { logVerbose(`conversation-label-generator: failed to resolve model ${modelRef.provider}/${modelRef.model}`); return null; } const completionModel = prepareModelForSimpleCompletion({ model: resolved.model, cfg }); const runtimeAuth = await getRuntimeAuthForModel({ model: completionModel, cfg, workspaceDir: agentDir }); const apiKey = requireApiKey(runtimeAuth, modelRef.provider); const runtimeModel = applyPreparedRuntimeAuthToModel(completionModel, runtimeAuth); const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS); try { const result = await completeSimple(runtimeModel, { systemPrompt: prompt, messages: [{ role: "user", content: userMessage, timestamp: Date.now() }] }, { apiKey, maxTokens: 100, ...isCodexSimpleCompletionModel(runtimeModel) ? {} : { temperature: .3 }, signal: controller.signal }); const errorMessage = extractSimpleCompletionError(result); if (errorMessage) { logVerbose(`conversation-label-generator: completion failed: ${errorMessage}`); return null; } const text = result.content.filter(isTextContentBlock).map((block) => block.text).join("").trim(); if (!text) return null; return text.slice(0, maxLength); } finally { clearTimeout(timeout); } } //#endregion export { generateConversationLabel as t };