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 = {
|
const SMART_AUTO_MODEL = {
|
||||||
id: "auto",
|
id: "auto",
|
||||||
modelId: "auto",
|
modelId: "auto",
|
||||||
displayName: "Agent模式",
|
displayName: !isVideoWorkspace && !isWorkspacePresentation ? "自动选择" : "Agent模式",
|
||||||
avatarUrl: modelsData?.agentModel?.avatarUrl || null,
|
avatarUrl: modelsData?.agentModel?.avatarUrl || null,
|
||||||
sortOrder: -999,
|
sortOrder: -999,
|
||||||
providerType: "auto",
|
providerType: "auto",
|
||||||
@ -5931,6 +5931,10 @@ export function CanvasChatPanel({
|
|||||||
),
|
),
|
||||||
[visualModels]
|
[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 currentModel = allModels.find((model) => model.id === selectedModelId);
|
||||||
const atlasVideoReferenceLimit =
|
const atlasVideoReferenceLimit =
|
||||||
currentModel?.providerType === "atlascloud"
|
currentModel?.providerType === "atlascloud"
|
||||||
@ -7943,7 +7947,10 @@ export function CanvasChatPanel({
|
|||||||
selectedChatModel: currentModelIdRef.current,
|
selectedChatModel: currentModelIdRef.current,
|
||||||
});
|
});
|
||||||
const effectiveSelectedChatModel = requestPolicy.effectiveSelectedChatModel;
|
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
|
(model) => model.id === effectiveSelectedChatModel
|
||||||
);
|
);
|
||||||
const requestIsVideoModel = isCanvasVideoModel(requestModel);
|
const requestIsVideoModel = isCanvasVideoModel(requestModel);
|
||||||
@ -7960,12 +7967,12 @@ export function CanvasChatPanel({
|
|||||||
agentPresetId:
|
agentPresetId:
|
||||||
effectiveComposerMode === "agent" &&
|
effectiveComposerMode === "agent" &&
|
||||||
effectiveAgentEntryMode === "preset" &&
|
effectiveAgentEntryMode === "preset" &&
|
||||||
selectedAgentPreset?.id
|
requestPreset?.id
|
||||||
? selectedAgentPreset.id
|
? requestPreset.id
|
||||||
: undefined,
|
: undefined,
|
||||||
selectedChatModel: effectiveSelectedChatModel,
|
selectedChatModel: effectiveSelectedChatModel,
|
||||||
selectedImageModel: effectiveComposerMode === "agent" && isCanvasImageModel(allModels.find(model => model.id === currentModelIdRef.current))
|
selectedImageModel: effectiveComposerMode === "agent" && selectedImage?.id !== "auto" && isCanvasImageModel(selectedImage)
|
||||||
? currentModelIdRef.current : undefined,
|
? selectedImage!.id : undefined,
|
||||||
composerMode: effectiveComposerMode,
|
composerMode: effectiveComposerMode,
|
||||||
workspaceVariant: isVideoWorkspace ? "video" : "canvas",
|
workspaceVariant: isVideoWorkspace ? "video" : "canvas",
|
||||||
selectedVisibilityType: "private",
|
selectedVisibilityType: "private",
|
||||||
@ -7991,7 +7998,7 @@ export function CanvasChatPanel({
|
|||||||
const useAgent = shouldUseCanvasAgentRuntime(preparedBody);
|
const useAgent = shouldUseCanvasAgentRuntime(preparedBody);
|
||||||
// Persist references before the isolated Agent reads the owned canvas.
|
// Persist references before the isolated Agent reads the owned canvas.
|
||||||
// Transport admission is already guarded against duplicate sends.
|
// Transport admission is already guarded against duplicate sends.
|
||||||
if (useAgent && onBeforeAgentRequest && !(await onBeforeAgentRequest())) {
|
if (useAgent && requestSettings.beforeAgentRequest && !(await requestSettings.beforeAgentRequest())) {
|
||||||
throw new Error("画布保存未完成,未开始 Agent 任务,请稍后重试。");
|
throw new Error("画布保存未完成,未开始 Agent 任务,请稍后重试。");
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user