Mark which models are eligible for turbo edits (#172)

This commit is contained in:
Will Chen
2025-05-15 16:02:42 -07:00
committed by GitHub
parent 16e1dd7fc4
commit 09fc028f94
5 changed files with 38 additions and 22 deletions

View File

@@ -0,0 +1,22 @@
import { LargeLanguageModel } from "@/lib/schemas";
import { LanguageModel } from "../ipc_types";
import { getLanguageModels } from "../shared/language_model_helpers";
export async function findLanguageModel(
model: LargeLanguageModel,
): Promise<LanguageModel | undefined> {
const models = await getLanguageModels({
providerId: model.provider,
});
if (model.customModelId) {
const customModel = models.find(
(m) => m.type === "custom" && m.id === model.customModelId,
);
if (customModel) {
return customModel;
}
}
return models.find((m) => m.apiName === model.name);
}

View File

@@ -12,6 +12,7 @@ import { getLanguageModelProviders } from "../shared/language_model_helpers";
import { LanguageModelProvider } from "../ipc_types";
import { llmErrorStore } from "@/main/llm_error_store";
import { createDyadEngine } from "./llm_engine_provider";
import { findLanguageModel } from "./findLanguageModel";
const dyadLocalEngine = process.env.DYAD_LOCAL_ENGINE;
const dyadGatewayUrl = process.env.DYAD_GATEWAY_URL;
@@ -99,7 +100,14 @@ export async function getModelClient(
// Check if the selected provider supports Dyad Pro (has a gateway prefix) OR
// we're using local engine.
if (providerConfig.gatewayPrefix || dyadLocalEngine) {
const provider = settings.enableProLazyEditsMode
const languageModel = await findLanguageModel(model);
// Currently engine is only used for turbo edits.
const isEngineEnabled = Boolean(
settings.enableProLazyEditsMode &&
languageModel?.type === "cloud" &&
languageModel?.supportsTurboEdits,
);
const provider = isEngineEnabled
? createDyadEngine({
apiKey: dyadApiKey,
baseURL: dyadLocalEngine ?? "https://engine.dyad.sh/v1",
@@ -109,9 +117,7 @@ export async function getModelClient(
baseURL: dyadGatewayUrl ?? "https://llm-gateway.dyad.sh/v1",
});
logger.info(
`Using Dyad Pro API key. engine_enabled=${settings.enableProLazyEditsMode}`,
);
logger.info(`Using Dyad Pro API key. engine_enabled=${isEngineEnabled}`);
// Do not use free variant (for openrouter).
const modelName = model.name.split(":free")[0];
const autoModelClient = {

View File

@@ -2,7 +2,7 @@ import { LargeLanguageModel } from "@/lib/schemas";
import { readSettings } from "../../main/settings";
import { Message } from "../ipc_types";
import { getLanguageModels } from "../shared/language_model_helpers";
import { findLanguageModel } from "./findLanguageModel";
// Estimate tokens (4 characters per token)
export const estimateTokens = (text: string): number => {
@@ -31,20 +31,3 @@ export async function getMaxTokens(model: LargeLanguageModel) {
const modelOption = await findLanguageModel(model);
return modelOption?.maxOutputTokens || DEFAULT_MAX_TOKENS;
}
async function findLanguageModel(model: LargeLanguageModel) {
const models = await getLanguageModels({
providerId: model.provider,
});
if (model.customModelId) {
const customModel = models.find(
(m) => m.type === "custom" && m.id === model.customModelId,
);
if (customModel) {
return customModel;
}
}
return models.find((m) => m.apiName === model.name);
}