mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
Agents: align onPayload callback and OAuth imports
This commit is contained in:
@@ -29,7 +29,7 @@ describe("createAnthropicPayloadLogger", () => {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
const streamFn: StreamFn = ((model, __, options) => {
|
const streamFn: StreamFn = ((model, __, options) => {
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
return {} as never;
|
return {} as never;
|
||||||
}) as StreamFn;
|
}) as StreamFn;
|
||||||
|
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ export function createAnthropicPayloadLogger(params: {
|
|||||||
if (!isAnthropicModel(model)) {
|
if (!isAnthropicModel(model)) {
|
||||||
return streamFn(model, context, options);
|
return streamFn(model, context, options);
|
||||||
}
|
}
|
||||||
const nextOnPayload = (payload: unknown, payloadModel: Parameters<StreamFn>[0]) => {
|
const nextOnPayload = (payload: unknown) => {
|
||||||
const redactedPayload = redactImageDataForDiagnostics(payload);
|
const redactedPayload = redactImageDataForDiagnostics(payload);
|
||||||
record({
|
record({
|
||||||
...base,
|
...base,
|
||||||
@@ -145,7 +145,7 @@ export function createAnthropicPayloadLogger(params: {
|
|||||||
payload: redactedPayload,
|
payload: redactedPayload,
|
||||||
payloadDigest: digest(redactedPayload),
|
payloadDigest: digest(redactedPayload),
|
||||||
});
|
});
|
||||||
return options?.onPayload?.(payload, payloadModel);
|
return options?.onPayload?.(payload);
|
||||||
};
|
};
|
||||||
return streamFn(model, context, {
|
return streamFn(model, context, {
|
||||||
...options,
|
...options,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { OAuthCredentials, OAuthProvider } from "@mariozechner/pi-ai/oauth";
|
import type { OAuthCredentials, OAuthProvider } from "@mariozechner/pi-ai";
|
||||||
import { getOAuthApiKey, getOAuthProviders } from "@mariozechner/pi-ai/oauth";
|
import { getOAuthApiKey, getOAuthProviders } from "@mariozechner/pi-ai";
|
||||||
import { loadConfig, type OpenClawConfig } from "../../config/config.js";
|
import { loadConfig, type OpenClawConfig } from "../../config/config.js";
|
||||||
import { coerceSecretRef } from "../../config/types.secrets.js";
|
import { coerceSecretRef } from "../../config/types.secrets.js";
|
||||||
import { withFileLock } from "../../infra/file-lock.js";
|
import { withFileLock } from "../../infra/file-lock.js";
|
||||||
|
|||||||
@@ -604,7 +604,7 @@ export function createOpenAIWebSocketStreamFn(
|
|||||||
...(prevResponseId ? { previous_response_id: prevResponseId } : {}),
|
...(prevResponseId ? { previous_response_id: prevResponseId } : {}),
|
||||||
...extraParams,
|
...extraParams,
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
session.manager.send(payload as Parameters<OpenAIWebSocketManager["send"]>[0]);
|
session.manager.send(payload as Parameters<OpenAIWebSocketManager["send"]>[0]);
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ describeGeminiLive("pi embedded extra params (gemini live)", () => {
|
|||||||
oneByOneRedPngBase64: string;
|
oneByOneRedPngBase64: string;
|
||||||
includeImage?: boolean;
|
includeImage?: boolean;
|
||||||
prompt: string;
|
prompt: string;
|
||||||
onPayload?: (payload: Record<string, unknown>, model: Model<"google-generative-ai">) => void;
|
onPayload?: (payload: Record<string, unknown>) => void;
|
||||||
}): Promise<{ sawDone: boolean; stopReason?: string; errorMessage?: string }> {
|
}): Promise<{ sawDone: boolean; stopReason?: string; errorMessage?: string }> {
|
||||||
const userContent: Array<
|
const userContent: Array<
|
||||||
{ type: "text"; text: string } | { type: "image"; mimeType: string; data: string }
|
{ type: "text"; text: string } | { type: "image"; mimeType: string; data: string }
|
||||||
@@ -129,11 +129,8 @@ describeGeminiLive("pi embedded extra params (gemini live)", () => {
|
|||||||
apiKey: params.apiKey,
|
apiKey: params.apiKey,
|
||||||
reasoning: "high",
|
reasoning: "high",
|
||||||
maxTokens: 64,
|
maxTokens: 64,
|
||||||
onPayload: (payload, streamModel) => {
|
onPayload: (payload) => {
|
||||||
params.onPayload?.(
|
params.onPayload?.(payload as Record<string, unknown>);
|
||||||
payload as Record<string, unknown>,
|
|
||||||
streamModel as Model<"google-generative-ai">,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
}) {
|
}) {
|
||||||
const payload = params.payload ?? { store: false };
|
const payload = params.payload ?? { store: false };
|
||||||
const baseStreamFn: StreamFn = (model, _context, options) => {
|
const baseStreamFn: StreamFn = (model, _context, options) => {
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
const agent = { streamFn: baseStreamFn };
|
const agent = { streamFn: baseStreamFn };
|
||||||
@@ -233,7 +233,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
}) {
|
}) {
|
||||||
const payload = params.payload ?? {};
|
const payload = params.payload ?? {};
|
||||||
const baseStreamFn: StreamFn = (model, _context, options) => {
|
const baseStreamFn: StreamFn = (model, _context, options) => {
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
const agent = { streamFn: baseStreamFn };
|
const agent = { streamFn: baseStreamFn };
|
||||||
@@ -276,7 +276,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { model: "deepseek/deepseek-r1" };
|
const payload: Record<string, unknown> = { model: "deepseek/deepseek-r1" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -308,7 +308,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = {};
|
const payload: Record<string, unknown> = {};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -332,7 +332,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -357,7 +357,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { reasoning: { max_tokens: 256 } };
|
const payload: Record<string, unknown> = { reasoning: { max_tokens: 256 } };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -381,7 +381,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { reasoning_effort: "medium" };
|
const payload: Record<string, unknown> = { reasoning_effort: "medium" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -588,7 +588,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { thinking: "off" };
|
const payload: Record<string, unknown> = { thinking: "off" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -619,7 +619,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { thinking: "off" };
|
const payload: Record<string, unknown> = { thinking: "off" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -650,7 +650,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = {};
|
const payload: Record<string, unknown> = {};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -674,7 +674,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { tool_choice: "required" };
|
const payload: Record<string, unknown> = { tool_choice: "required" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -699,7 +699,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
const payloads: Record<string, unknown>[] = [];
|
const payloads: Record<string, unknown>[] = [];
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = {};
|
const payload: Record<string, unknown> = {};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -749,7 +749,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
],
|
],
|
||||||
tool_choice: { type: "tool", name: "read" },
|
tool_choice: { type: "tool", name: "read" },
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -793,7 +793,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -832,7 +832,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -896,7 +896,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
@@ -943,7 +943,7 @@ describe("applyExtraParamsToAgent", () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
payloads.push(payload);
|
payloads.push(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ export function createAnthropicToolPayloadCompatibilityWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (
|
if (
|
||||||
payload &&
|
payload &&
|
||||||
typeof payload === "object" &&
|
typeof payload === "object" &&
|
||||||
@@ -298,7 +298,7 @@ export function createAnthropicToolPayloadCompatibilityWrapper(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ function applyAndCapture(params: {
|
|||||||
|
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
captured.headers = options?.headers;
|
captured.headers = options?.headers;
|
||||||
options?.onPayload?.({}, model);
|
options?.onPayload?.({});
|
||||||
return createAssistantMessageEventStream();
|
return createAssistantMessageEventStream();
|
||||||
};
|
};
|
||||||
const agent = { streamFn: baseStreamFn };
|
const agent = { streamFn: baseStreamFn };
|
||||||
@@ -97,7 +97,7 @@ describe("extra-params: Kilocode kilo/auto reasoning", () => {
|
|||||||
|
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
capturedPayload = payload;
|
capturedPayload = payload;
|
||||||
return createAssistantMessageEventStream();
|
return createAssistantMessageEventStream();
|
||||||
};
|
};
|
||||||
@@ -125,7 +125,7 @@ describe("extra-params: Kilocode kilo/auto reasoning", () => {
|
|||||||
|
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = {};
|
const payload: Record<string, unknown> = {};
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
capturedPayload = payload;
|
capturedPayload = payload;
|
||||||
return createAssistantMessageEventStream();
|
return createAssistantMessageEventStream();
|
||||||
};
|
};
|
||||||
@@ -158,7 +158,7 @@ describe("extra-params: Kilocode kilo/auto reasoning", () => {
|
|||||||
|
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
const payload: Record<string, unknown> = { reasoning_effort: "high" };
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
capturedPayload = payload;
|
capturedPayload = payload;
|
||||||
return createAssistantMessageEventStream();
|
return createAssistantMessageEventStream();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ type StreamPayload = {
|
|||||||
|
|
||||||
function runOpenRouterPayload(payload: StreamPayload, modelId: string) {
|
function runOpenRouterPayload(payload: StreamPayload, modelId: string) {
|
||||||
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
const baseStreamFn: StreamFn = (_model, _context, options) => {
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
return createAssistantMessageEventStream();
|
return createAssistantMessageEventStream();
|
||||||
};
|
};
|
||||||
const agent = { streamFn: baseStreamFn };
|
const agent = { streamFn: baseStreamFn };
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ function createGoogleThinkingPayloadWrapper(
|
|||||||
const onPayload = options?.onPayload;
|
const onPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (model.api === "google-generative-ai") {
|
if (model.api === "google-generative-ai") {
|
||||||
sanitizeGoogleThinkingPayload({
|
sanitizeGoogleThinkingPayload({
|
||||||
payload,
|
payload,
|
||||||
@@ -230,7 +230,7 @@ function createGoogleThinkingPayloadWrapper(
|
|||||||
thinkingLevel,
|
thinkingLevel,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return onPayload?.(payload, payloadModel);
|
return onPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -258,12 +258,12 @@ function createZaiToolStreamWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
// Inject tool_stream: true for Z.AI API
|
// Inject tool_stream: true for Z.AI API
|
||||||
(payload as Record<string, unknown>).tool_stream = true;
|
(payload as Record<string, unknown>).tool_stream = true;
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -306,11 +306,11 @@ function createParallelToolCallsWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
(payload as Record<string, unknown>).parallel_tool_calls = enabled;
|
(payload as Record<string, unknown>).parallel_tool_calls = enabled;
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ type ToolStreamCase = {
|
|||||||
function runToolStreamCase(params: ToolStreamCase) {
|
function runToolStreamCase(params: ToolStreamCase) {
|
||||||
const payload: Record<string, unknown> = { model: params.model.id, messages: [] };
|
const payload: Record<string, unknown> = { model: params.model.id, messages: [] };
|
||||||
const baseStreamFn: StreamFn = (model, _context, options) => {
|
const baseStreamFn: StreamFn = (model, _context, options) => {
|
||||||
options?.onPayload?.(payload, model);
|
options?.onPayload?.(payload);
|
||||||
return {} as ReturnType<StreamFn>;
|
return {} as ReturnType<StreamFn>;
|
||||||
};
|
};
|
||||||
const agent = { streamFn: baseStreamFn };
|
const agent = { streamFn: baseStreamFn };
|
||||||
|
|||||||
@@ -53,14 +53,14 @@ export function createSiliconFlowThinkingWrapper(baseStreamFn: StreamFn | undefi
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
const payloadObj = payload as Record<string, unknown>;
|
const payloadObj = payload as Record<string, unknown>;
|
||||||
if (payloadObj.thinking === "off") {
|
if (payloadObj.thinking === "off") {
|
||||||
payloadObj.thinking = null;
|
payloadObj.thinking = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -89,7 +89,7 @@ export function createMoonshotThinkingWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
const payloadObj = payload as Record<string, unknown>;
|
const payloadObj = payload as Record<string, unknown>;
|
||||||
let effectiveThinkingType = normalizeMoonshotThinkingType(payloadObj.thinking);
|
let effectiveThinkingType = normalizeMoonshotThinkingType(payloadObj.thinking);
|
||||||
@@ -106,7 +106,7 @@ export function createMoonshotThinkingWrapper(
|
|||||||
payloadObj.tool_choice = "auto";
|
payloadObj.tool_choice = "auto";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ export function createOpenAIResponsesContextManagementWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
applyOpenAIResponsesPayloadOverrides({
|
applyOpenAIResponsesPayloadOverrides({
|
||||||
payloadObj: payload as Record<string, unknown>,
|
payloadObj: payload as Record<string, unknown>,
|
||||||
@@ -197,7 +197,7 @@ export function createOpenAIResponsesContextManagementWrapper(
|
|||||||
compactThreshold,
|
compactThreshold,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -219,14 +219,14 @@ export function createOpenAIServiceTierWrapper(
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
if (payload && typeof payload === "object") {
|
if (payload && typeof payload === "object") {
|
||||||
const payloadObj = payload as Record<string, unknown>;
|
const payloadObj = payload as Record<string, unknown>;
|
||||||
if (payloadObj.service_tier === undefined) {
|
if (payloadObj.service_tier === undefined) {
|
||||||
payloadObj.service_tier = serviceTier;
|
payloadObj.service_tier = serviceTier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export function createOpenRouterSystemCacheWrapper(baseStreamFn: StreamFn | unde
|
|||||||
const originalOnPayload = options?.onPayload;
|
const originalOnPayload = options?.onPayload;
|
||||||
return underlying(model, context, {
|
return underlying(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
const messages = (payload as Record<string, unknown>)?.messages;
|
const messages = (payload as Record<string, unknown>)?.messages;
|
||||||
if (Array.isArray(messages)) {
|
if (Array.isArray(messages)) {
|
||||||
for (const msg of messages as Array<{ role?: string; content?: unknown }>) {
|
for (const msg of messages as Array<{ role?: string; content?: unknown }>) {
|
||||||
@@ -92,7 +92,7 @@ export function createOpenRouterSystemCacheWrapper(baseStreamFn: StreamFn | unde
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalOnPayload?.(payload, payloadModel);
|
return originalOnPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -111,9 +111,9 @@ export function createOpenRouterWrapper(
|
|||||||
...OPENROUTER_APP_HEADERS,
|
...OPENROUTER_APP_HEADERS,
|
||||||
...options?.headers,
|
...options?.headers,
|
||||||
},
|
},
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
normalizeProxyReasoningPayload(payload, thinkingLevel);
|
normalizeProxyReasoningPayload(payload, thinkingLevel);
|
||||||
return onPayload?.(payload, payloadModel);
|
return onPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -136,9 +136,9 @@ export function createKilocodeWrapper(
|
|||||||
...options?.headers,
|
...options?.headers,
|
||||||
...resolveKilocodeAppHeaders(),
|
...resolveKilocodeAppHeaders(),
|
||||||
},
|
},
|
||||||
onPayload: (payload, payloadModel) => {
|
onPayload: (payload) => {
|
||||||
normalizeProxyReasoningPayload(payload, thinkingLevel);
|
normalizeProxyReasoningPayload(payload, thinkingLevel);
|
||||||
return onPayload?.(payload, payloadModel);
|
return onPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -520,7 +520,7 @@ describe("wrapOllamaCompatNumCtx", () => {
|
|||||||
let payloadSeen: Record<string, unknown> | undefined;
|
let payloadSeen: Record<string, unknown> | undefined;
|
||||||
const baseFn = vi.fn((_model, _context, options) => {
|
const baseFn = vi.fn((_model, _context, options) => {
|
||||||
const payload: Record<string, unknown> = { options: { temperature: 0.1 } };
|
const payload: Record<string, unknown> = { options: { temperature: 0.1 } };
|
||||||
options?.onPayload?.(payload, _model);
|
options?.onPayload?.(payload);
|
||||||
payloadSeen = payload;
|
payloadSeen = payload;
|
||||||
return {} as never;
|
return {} as never;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -228,16 +228,16 @@ export function wrapOllamaCompatNumCtx(baseFn: StreamFn | undefined, numCtx: num
|
|||||||
return (model, context, options) =>
|
return (model, context, options) =>
|
||||||
streamFn(model, context, {
|
streamFn(model, context, {
|
||||||
...options,
|
...options,
|
||||||
onPayload: (payload: unknown, payloadModel) => {
|
onPayload: (payload: unknown) => {
|
||||||
if (!payload || typeof payload !== "object") {
|
if (!payload || typeof payload !== "object") {
|
||||||
return options?.onPayload?.(payload, payloadModel);
|
return options?.onPayload?.(payload);
|
||||||
}
|
}
|
||||||
const payloadRecord = payload as Record<string, unknown>;
|
const payloadRecord = payload as Record<string, unknown>;
|
||||||
if (!payloadRecord.options || typeof payloadRecord.options !== "object") {
|
if (!payloadRecord.options || typeof payloadRecord.options !== "object") {
|
||||||
payloadRecord.options = {};
|
payloadRecord.options = {};
|
||||||
}
|
}
|
||||||
(payloadRecord.options as Record<string, unknown>).num_ctx = numCtx;
|
(payloadRecord.options as Record<string, unknown>).num_ctx = numCtx;
|
||||||
return options?.onPayload?.(payload, payloadModel);
|
return options?.onPayload?.(payload);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -869,13 +869,7 @@ export async function runEmbeddedAttempt(
|
|||||||
runId: params.runId,
|
runId: params.runId,
|
||||||
agentDir,
|
agentDir,
|
||||||
workspaceDir: effectiveWorkspace,
|
workspaceDir: effectiveWorkspace,
|
||||||
// When sandboxing uses a copied workspace (`ro` or `none`), effectiveWorkspace points
|
|
||||||
// at the sandbox copy. Spawned subagents should inherit the real workspace instead.
|
|
||||||
spawnWorkspaceDir:
|
|
||||||
sandbox?.enabled && sandbox.workspaceAccess !== "rw" ? resolvedWorkspace : undefined,
|
|
||||||
config: params.config,
|
config: params.config,
|
||||||
trigger: params.trigger,
|
|
||||||
memoryFlushWritePath: params.memoryFlushWritePath,
|
|
||||||
abortSignal: runAbortController.signal,
|
abortSignal: runAbortController.signal,
|
||||||
modelProvider: params.model.provider,
|
modelProvider: params.model.provider,
|
||||||
modelId: params.modelId,
|
modelId: params.modelId,
|
||||||
@@ -1550,7 +1544,6 @@ export async function runEmbeddedAttempt(
|
|||||||
getMessagingToolSentTargets,
|
getMessagingToolSentTargets,
|
||||||
getSuccessfulCronAdds,
|
getSuccessfulCronAdds,
|
||||||
didSendViaMessagingTool,
|
didSendViaMessagingTool,
|
||||||
didSendDeterministicApprovalPrompt,
|
|
||||||
getLastToolError,
|
getLastToolError,
|
||||||
getUsageTotals,
|
getUsageTotals,
|
||||||
getCompactionCount,
|
getCompactionCount,
|
||||||
@@ -2065,7 +2058,6 @@ export async function runEmbeddedAttempt(
|
|||||||
lastAssistant,
|
lastAssistant,
|
||||||
lastToolError: getLastToolError?.(),
|
lastToolError: getLastToolError?.(),
|
||||||
didSendViaMessagingTool: didSendViaMessagingTool(),
|
didSendViaMessagingTool: didSendViaMessagingTool(),
|
||||||
didSendDeterministicApprovalPrompt: didSendDeterministicApprovalPrompt(),
|
|
||||||
messagingToolSentTexts: getMessagingToolSentTexts(),
|
messagingToolSentTexts: getMessagingToolSentTexts(),
|
||||||
messagingToolSentMediaUrls: getMessagingToolSentMediaUrls(),
|
messagingToolSentMediaUrls: getMessagingToolSentMediaUrls(),
|
||||||
messagingToolSentTargets: getMessagingToolSentTargets(),
|
messagingToolSentTargets: getMessagingToolSentTargets(),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { OAuthCredentials } from "@mariozechner/pi-ai/oauth";
|
import type { OAuthCredentials } from "@mariozechner/pi-ai";
|
||||||
import { loginOpenAICodex } from "@mariozechner/pi-ai/oauth";
|
import { loginOpenAICodex } from "@mariozechner/pi-ai";
|
||||||
import type { RuntimeEnv } from "../runtime.js";
|
import type { RuntimeEnv } from "../runtime.js";
|
||||||
import type { WizardPrompter } from "../wizard/prompts.js";
|
import type { WizardPrompter } from "../wizard/prompts.js";
|
||||||
import { createVpsAwareOAuthHandlers } from "./oauth-flow.js";
|
import { createVpsAwareOAuthHandlers } from "./oauth-flow.js";
|
||||||
|
|||||||
Reference in New Issue
Block a user