fix: use correct thinking variant when sending review flow messages
This commit is contained in:
@@ -12,10 +12,11 @@ import {
|
|||||||
withReviewSessionMarker,
|
withReviewSessionMarker,
|
||||||
} from '@/lib/sessionReviewMetadata';
|
} from '@/lib/sessionReviewMetadata';
|
||||||
import { useConfigStore } from '@/stores/useConfigStore';
|
import { useConfigStore } from '@/stores/useConfigStore';
|
||||||
import { useContextStore } from '@/stores/contextStore';
|
|
||||||
import { useGlobalSessionsStore } from '@/stores/useGlobalSessionsStore';
|
import { useGlobalSessionsStore } from '@/stores/useGlobalSessionsStore';
|
||||||
import { useUIStore } from '@/stores/useUIStore';
|
import { useUIStore } from '@/stores/useUIStore';
|
||||||
import { optimisticSend, patchSessionMetadata, waitForConnectionOrThrow } from '@/sync/session-actions';
|
import { optimisticSend, patchSessionMetadata, waitForConnectionOrThrow } from '@/sync/session-actions';
|
||||||
|
import { useSelectionStore } from '@/sync/selection-store';
|
||||||
|
import { useSessionUIStore } from '@/sync/session-ui-store';
|
||||||
import { getSyncMessages, getSyncParts, registerSessionDirectory } from '@/sync/sync-refs';
|
import { getSyncMessages, getSyncParts, registerSessionDirectory } from '@/sync/sync-refs';
|
||||||
import { markPendingUserSendAnimation } from '@/lib/userSendAnimation';
|
import { markPendingUserSendAnimation } from '@/lib/userSendAnimation';
|
||||||
|
|
||||||
@@ -74,23 +75,36 @@ const waitForAssistantText = async (sessionID: string, directory: string, afterC
|
|||||||
};
|
};
|
||||||
|
|
||||||
const resolveModelContext = (sessionID: string): SessionModelContext | null => {
|
const resolveModelContext = (sessionID: string): SessionModelContext | null => {
|
||||||
const context = useContextStore.getState();
|
const selection = useSelectionStore.getState();
|
||||||
const config = useConfigStore.getState();
|
const config = useConfigStore.getState();
|
||||||
const agent = context.getSessionAgentSelection(sessionID) || config.currentAgentName || undefined;
|
const lastChoice = useSessionUIStore.getState().getLastUserChoice(sessionID);
|
||||||
const sessionModel = context.getSessionModelSelection(sessionID);
|
const agent = selection.getSessionAgentSelection(sessionID) || lastChoice?.agent || config.currentAgentName || undefined;
|
||||||
const agentModel = agent ? context.getAgentModelForSession(sessionID, agent) : null;
|
const sessionModel = selection.getSessionModelSelection(sessionID);
|
||||||
const selectedModel = agentModel || sessionModel || (config.currentProviderId && config.currentModelId
|
const agentModel = agent ? selection.getAgentModelForSession(sessionID, agent) : null;
|
||||||
|
const lastChoiceModel = lastChoice?.providerID && lastChoice.modelID
|
||||||
|
? { providerId: lastChoice.providerID, modelId: lastChoice.modelID }
|
||||||
|
: null;
|
||||||
|
const selectedModel = agentModel || sessionModel || lastChoiceModel || (config.currentProviderId && config.currentModelId
|
||||||
? { providerId: config.currentProviderId, modelId: config.currentModelId }
|
? { providerId: config.currentProviderId, modelId: config.currentModelId }
|
||||||
: null);
|
: null);
|
||||||
if (!selectedModel?.providerId || !selectedModel?.modelId) return null;
|
if (!selectedModel?.providerId || !selectedModel?.modelId) return null;
|
||||||
const variant = agent
|
// Variants are model-specific; only reuse one resolved for the same model.
|
||||||
? context.getAgentModelVariantForSession(sessionID, agent, selectedModel.providerId, selectedModel.modelId) || config.currentVariant || undefined
|
const selectionVariant = agent
|
||||||
: config.currentVariant || undefined;
|
? selection.getAgentModelVariantForSession(sessionID, agent, selectedModel.providerId, selectedModel.modelId)
|
||||||
|
: undefined;
|
||||||
|
const lastChoiceVariant = lastChoiceModel
|
||||||
|
&& lastChoiceModel.providerId === selectedModel.providerId
|
||||||
|
&& lastChoiceModel.modelId === selectedModel.modelId
|
||||||
|
? lastChoice?.variant
|
||||||
|
: undefined;
|
||||||
|
const configVariant = config.currentProviderId === selectedModel.providerId && config.currentModelId === selectedModel.modelId
|
||||||
|
? config.currentVariant
|
||||||
|
: undefined;
|
||||||
return {
|
return {
|
||||||
providerID: selectedModel.providerId,
|
providerID: selectedModel.providerId,
|
||||||
modelID: selectedModel.modelId,
|
modelID: selectedModel.modelId,
|
||||||
agent,
|
agent,
|
||||||
variant,
|
variant: selectionVariant || lastChoiceVariant || configVariant || undefined,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -103,6 +117,13 @@ const sendPlainMessage = async (
|
|||||||
): Promise<void> => {
|
): Promise<void> => {
|
||||||
const resolved = modelContext ?? resolveModelContext(sessionID);
|
const resolved = modelContext ?? resolveModelContext(sessionID);
|
||||||
if (!resolved) throw new Error('Select a model before sending review flow messages');
|
if (!resolved) throw new Error('Select a model before sending review flow messages');
|
||||||
|
const selection = useSelectionStore.getState();
|
||||||
|
selection.saveSessionModelSelection(sessionID, resolved.providerID, resolved.modelID);
|
||||||
|
if (resolved.agent) {
|
||||||
|
selection.saveSessionAgentSelection(sessionID, resolved.agent);
|
||||||
|
selection.saveAgentModelForSession(sessionID, resolved.agent, resolved.providerID, resolved.modelID);
|
||||||
|
selection.saveAgentModelVariantForSession(sessionID, resolved.agent, resolved.providerID, resolved.modelID, resolved.variant);
|
||||||
|
}
|
||||||
markPendingUserSendAnimation(sessionID);
|
markPendingUserSendAnimation(sessionID);
|
||||||
await optimisticSend({
|
await optimisticSend({
|
||||||
sessionId: sessionID,
|
sessionId: sessionID,
|
||||||
@@ -198,6 +219,8 @@ export const startReviewFlow = async (input: StartReviewFlowInput): Promise<void
|
|||||||
await sendPlainMessage(reviewSession.id, input.directory, reviewPrompt, {
|
await sendPlainMessage(reviewSession.id, input.directory, reviewPrompt, {
|
||||||
providerID: input.providerID,
|
providerID: input.providerID,
|
||||||
modelID: input.modelID,
|
modelID: input.modelID,
|
||||||
|
agent: input.agent,
|
||||||
|
variant: input.variant,
|
||||||
});
|
});
|
||||||
openReviewSessionPanel(input.directory, reviewSession);
|
openReviewSessionPanel(input.directory, reviewSession);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user