Project Files
src / strategies / StrategyFactory.ts
import { ModelStrategy } from "./ModelStrategy";
import { BaseGeminiStrategy } from "./BaseGeminiStrategy";
import { GeminiThinkingStrategy } from "./GeminiThinkingStrategy";
import { GeminiImageThinkingStrategy } from "./GeminiImageThinkingStrategy";
import { detectCapabilities } from "../capabilities";
export class StrategyFactory {
static getStrategy(modelName: string): ModelStrategy {
// gemini-3-pro-image-preview has strict thought-signature constraints for image parts.
// In LM Studio's tool-call auto-continue loop, we must suppress vision promotion on the
// tool-result replay turn to avoid mismatched signatures.
if (modelName === "gemini-3-pro-image-preview") {
return new GeminiImageThinkingStrategy();
}
const caps = detectCapabilities(modelName);
if (caps.supportsThinking) {
return new GeminiThinkingStrategy();
}
return new BaseGeminiStrategy();
}
}