Selected component engine (#1562)
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Enable the Dyad Engine to prioritize a user-selected component by flagging the file as focused and sending codebase files per request. Keeps full context when the engine is on; falls back to path-scoped context when it’s off. - **New Features** - Mark the selected component file as focused when the engine is enabled. - Send codebase files to the engine via dyadFiles, applied to dyad_options unless disabled. - Maintain full chatContext with engine; restrict to the selected file path only when engine is off. - **Refactors** - Removed files from getModelClient and provider APIs; file transport moved into request payload. - Stream handlers now pass files to model calls and include dyadDisableFiles/dyadFiles in the request. - Added focused flag to CodebaseFile. <!-- End of auto-generated description by cubic. --> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Sends codebase files per request to the Dyad Engine, focuses the selected component when smart context is enabled, and refactors model client/provider APIs to remove file parameters. > > - **Engine integration**: > - Send codebase files per request via `dyadFiles` in provider options; propagate through `simpleStreamText` and `dyad-engine` options. > - Add `isSmartContextEnabled` from `get_model_client` and gate context behavior accordingly. > - **Selected component focus**: > - When smart context is on and a component is selected, mark its file as `focused` in `CodebaseFile` and avoid broad smart context includes; allow on-demand reads. > - When smart context is off, restrict `chatContext` to the selected file path. > - **Refactors**: > - Remove `files` parameter from `getModelClient` and Dyad provider; move file transport into request body. > - Update `llm_engine_provider` to read `dyadFiles` from request and populate `dyad_options.files` unless `dyadDisableFiles`. > - Extend `CodebaseFile` with optional `focused` flag; thread `files` through `chat_stream_handlers` calls. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 022b26d0197ab5b5d4f5b589f45bc230de36e0e5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This commit is contained in:
@@ -52,19 +52,15 @@ export interface ModelClient {
|
||||
builtinProviderId?: string;
|
||||
}
|
||||
|
||||
interface File {
|
||||
path: string;
|
||||
content: string;
|
||||
}
|
||||
|
||||
const logger = log.scope("getModelClient");
|
||||
export async function getModelClient(
|
||||
model: LargeLanguageModel,
|
||||
settings: UserSettings,
|
||||
files?: File[],
|
||||
// files?: File[],
|
||||
): Promise<{
|
||||
modelClient: ModelClient;
|
||||
isEngineEnabled?: boolean;
|
||||
isSmartContextEnabled?: boolean;
|
||||
}> {
|
||||
const allProviders = await getLanguageModelProviders();
|
||||
|
||||
@@ -84,6 +80,7 @@ export async function getModelClient(
|
||||
// IMPORTANT: some providers like OpenAI have an empty string gateway prefix,
|
||||
// so we do a nullish and not a truthy check here.
|
||||
if (providerConfig.gatewayPrefix != null || dyadEngineUrl) {
|
||||
const enableSmartFilesContext = settings.enableProSmartFilesContextMode;
|
||||
const provider = createDyadEngine({
|
||||
apiKey: dyadApiKey,
|
||||
baseURL: dyadEngineUrl ?? "https://engine.dyad.sh/v1",
|
||||
@@ -93,7 +90,7 @@ export async function getModelClient(
|
||||
settings.selectedChatMode === "ask"
|
||||
? false
|
||||
: settings.enableProLazyEditsMode,
|
||||
enableSmartFilesContext: settings.enableProSmartFilesContextMode,
|
||||
enableSmartFilesContext,
|
||||
// Keep in sync with getCurrentValue in ProModeSelector.tsx
|
||||
smartContextMode: settings.proSmartContextOption ?? "balanced",
|
||||
enableWebSearch: settings.enableProWebSearch,
|
||||
@@ -112,15 +109,14 @@ export async function getModelClient(
|
||||
// Do not use free variant (for openrouter).
|
||||
const modelName = model.name.split(":free")[0];
|
||||
const autoModelClient = {
|
||||
model: provider(`${providerConfig.gatewayPrefix || ""}${modelName}`, {
|
||||
files,
|
||||
}),
|
||||
model: provider(`${providerConfig.gatewayPrefix || ""}${modelName}`),
|
||||
builtinProviderId: model.provider,
|
||||
};
|
||||
|
||||
return {
|
||||
modelClient: autoModelClient,
|
||||
isEngineEnabled: true,
|
||||
isSmartContextEnabled: enableSmartFilesContext,
|
||||
};
|
||||
} else {
|
||||
logger.warn(
|
||||
@@ -176,7 +172,6 @@ export async function getModelClient(
|
||||
name: autoModel.name,
|
||||
},
|
||||
settings,
|
||||
files,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user