fix(canvas): capture current image model and canvas save callback at Agent admission
This commit is contained in:
parent
4ee3e369c6
commit
0ab68d28ba
@ -5822,7 +5822,7 @@ export function CanvasChatPanel({
|
||||
const SMART_AUTO_MODEL = {
|
||||
id: "auto",
|
||||
modelId: "auto",
|
||||
displayName: "Agent模式",
|
||||
displayName: !isVideoWorkspace && !isWorkspacePresentation ? "自动选择" : "Agent模式",
|
||||
avatarUrl: modelsData?.agentModel?.avatarUrl || null,
|
||||
sortOrder: -999,
|
||||
providerType: "auto",
|
||||
@ -5931,6 +5931,10 @@ export function CanvasChatPanel({
|
||||
),
|
||||
[visualModels]
|
||||
);
|
||||
// The chat transport is created once by useChat. Read changing controls and
|
||||
// the loaded catalog through refs instead of its first-render closure.
|
||||
const composerRequestSettingsRef = useRef({ models: allModels, preset: selectedAgentPreset, beforeAgentRequest: onBeforeAgentRequest });
|
||||
composerRequestSettingsRef.current = { models: allModels, preset: selectedAgentPreset, beforeAgentRequest: onBeforeAgentRequest };
|
||||
const currentModel = allModels.find((model) => model.id === selectedModelId);
|
||||
const atlasVideoReferenceLimit =
|
||||
currentModel?.providerType === "atlascloud"
|
||||
@ -7943,7 +7947,10 @@ export function CanvasChatPanel({
|
||||
selectedChatModel: currentModelIdRef.current,
|
||||
});
|
||||
const effectiveSelectedChatModel = requestPolicy.effectiveSelectedChatModel;
|
||||
const requestModel = allModels.find(
|
||||
const requestSettings = composerRequestSettingsRef.current;
|
||||
const requestPreset = requestSettings.preset;
|
||||
const selectedImage = requestSettings.models.find(model => model.id === currentModelIdRef.current);
|
||||
const requestModel = requestSettings.models.find(
|
||||
(model) => model.id === effectiveSelectedChatModel
|
||||
);
|
||||
const requestIsVideoModel = isCanvasVideoModel(requestModel);
|
||||
@ -7960,12 +7967,12 @@ export function CanvasChatPanel({
|
||||
agentPresetId:
|
||||
effectiveComposerMode === "agent" &&
|
||||
effectiveAgentEntryMode === "preset" &&
|
||||
selectedAgentPreset?.id
|
||||
? selectedAgentPreset.id
|
||||
requestPreset?.id
|
||||
? requestPreset.id
|
||||
: undefined,
|
||||
selectedChatModel: effectiveSelectedChatModel,
|
||||
selectedImageModel: effectiveComposerMode === "agent" && isCanvasImageModel(allModels.find(model => model.id === currentModelIdRef.current))
|
||||
? currentModelIdRef.current : undefined,
|
||||
selectedImageModel: effectiveComposerMode === "agent" && selectedImage?.id !== "auto" && isCanvasImageModel(selectedImage)
|
||||
? selectedImage!.id : undefined,
|
||||
composerMode: effectiveComposerMode,
|
||||
workspaceVariant: isVideoWorkspace ? "video" : "canvas",
|
||||
selectedVisibilityType: "private",
|
||||
@ -7991,7 +7998,7 @@ export function CanvasChatPanel({
|
||||
const useAgent = shouldUseCanvasAgentRuntime(preparedBody);
|
||||
// Persist references before the isolated Agent reads the owned canvas.
|
||||
// Transport admission is already guarded against duplicate sends.
|
||||
if (useAgent && onBeforeAgentRequest && !(await onBeforeAgentRequest())) {
|
||||
if (useAgent && requestSettings.beforeAgentRequest && !(await requestSettings.beforeAgentRequest())) {
|
||||
throw new Error("画布保存未完成,未开始 Agent 任务,请稍后重试。");
|
||||
}
|
||||
return {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user