Skip to content

Commit f90fafb

Browse files
authored
Merge pull request #6303 from uinstinct/no-results-instruction
improve: instruct model when no context results were retrieved
2 parents 52a19cd + a94da7a commit f90fafb

File tree

12 files changed

+38
-6
lines changed

12 files changed

+38
-6
lines changed

core/context/providers/_context-providers.vitest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ async function getContextProviderExtras(
5050
llm: config.modelsByRole.chat[0],
5151
reranker: config.selectedModelByRole.rerank,
5252
selectedCode: [],
53+
isInAgentMode: true,
5354
};
5455
}
5556

core/context/retrieval/retrieval.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,19 @@ export async function retrieveContextItemsFromEmbeddings(
7979

8080
if (results.length === 0) {
8181
if (extras.config.disableIndexing) {
82-
void extras.ide.showToast("warning", "No results found.");
83-
return [];
84-
} else {
8582
void extras.ide.showToast(
8683
"warning",
87-
"No results found. If you think this is an error, re-index your codebase.",
84+
"No results found (Indexing disabled).",
8885
);
89-
// TODO - add "re-index" option to warning message which clears and reindexes codebase
86+
return [];
87+
}
88+
if (extras.isInAgentMode) {
89+
return [
90+
{
91+
...INSTRUCTIONS_BASE_ITEM,
92+
content: "No results were found. Try using other tools.",
93+
},
94+
];
9095
}
9196
return [];
9297
}

core/core.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ export class Core {
10711071
query: string;
10721072
fullInput: string;
10731073
selectedCode: RangeInFile[];
1074+
isInAgentMode: boolean;
10741075
}>,
10751076
) => {
10761077
const { config } = await this.configHandler.loadConfig();
@@ -1115,6 +1116,7 @@ export class Core {
11151116
reranker: config.selectedModelByRole.rerank,
11161117
fetch: (url, init) =>
11171118
fetchwithRequestOptions(url, init, config.requestOptions),
1119+
isInAgentMode: msg.data.isInAgentMode,
11181120
});
11191121

11201122
void Telemetry.capture(

core/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ export interface ContextProviderExtras {
187187
ide: IDE;
188188
selectedCode: RangeInFile[];
189189
fetch: FetchFunction;
190+
isInAgentMode: boolean;
190191
}
191192

192193
export interface LoadSubmenuItemsArgs {

core/protocol/core.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export type ToCoreFromIdeOrWebviewProtocol = {
116116
query: string;
117117
fullInput: string;
118118
selectedCode: RangeInFile[];
119+
isInAgentMode: boolean;
119120
},
120121
ContextItemWithId[],
121122
];

core/tools/implementations/codebaseTool.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const codebaseToolImpl: ToolImpl = async (args, extras) => {
2323
ide: extras.ide,
2424
selectedCode: [] as RangeInFile[],
2525
fetch: extras.fetch,
26+
isInAgentMode: true, // always true in tool call
2627
};
2728

2829
// Use the existing retrieval function to get context items

extensions/vscode/src/quickEdit/ContextProvidersQuickPick.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export async function getContextProvidersString(
4848
selectedCode: [],
4949
fetch: (url, init) =>
5050
fetchwithRequestOptions(url, init, config.requestOptions),
51+
isInAgentMode: false,
5152
});
5253
}) || [],
5354
)

gui/src/components/mainInput/AtMentionDropdown/index.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
vscQuickInputBackground,
2626
} from "../..";
2727
import { IdeMessengerContext } from "../../../context/IdeMessenger";
28+
import { useAppSelector } from "../../../redux/hooks";
2829
import { setDialogMessage, setShowDialog } from "../../../redux/slices/uiSlice";
2930
import { fontSize } from "../../../util";
3031
import FileIcon from "../../FileIcon";
@@ -159,6 +160,9 @@ const AtMentionDropdown = forwardRef((props: AtMentionDropdownProps, ref) => {
159160
const dispatch = useDispatch();
160161

161162
const ideMessenger = useContext(IdeMessengerContext);
163+
const isInAgentMode = useAppSelector(
164+
(store) => store.session.mode === "agent",
165+
);
162166

163167
const [selectedIndex, setSelectedIndex] = useState(0);
164168

@@ -187,6 +191,7 @@ const AtMentionDropdown = forwardRef((props: AtMentionDropdownProps, ref) => {
187191
query,
188192
fullInput: "",
189193
selectedCode,
194+
isInAgentMode,
190195
},
191196
);
192197

gui/src/components/mainInput/TipTapEditor/utils/renderPromptv1.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export async function getRenderedV1Prompt(
2626
name,
2727
query: "",
2828
selectedCode,
29+
isInAgentMode: false,
2930
});
3031
if (response.status === "success") {
3132
return response.content.map((item) => item.content).join("\n\n");

gui/src/components/mainInput/TipTapEditor/utils/resolveEditorContent.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
import { stripImages } from "core/util/messageContent";
1313
import { IIdeMessenger } from "../../../../context/IdeMessenger";
1414
import { setIsGatheringContext } from "../../../../redux/slices/sessionSlice";
15+
import { RootState } from "../../../../redux/store";
1516
import { processEditorContent } from "./processEditorContent";
1617
import { renderSlashCommandPrompt } from "./renderSlashCommand";
1718
import { GetContextRequest } from "./types";
@@ -23,6 +24,7 @@ interface ResolveEditorContentInput {
2324
defaultContextProviders: DefaultContextProvider[];
2425
availableSlashCommands: SlashCommandDescWithSource[];
2526
dispatch: Dispatch;
27+
getState: () => RootState;
2628
}
2729

2830
interface ResolveEditorContentOutput {
@@ -48,6 +50,7 @@ export async function resolveEditorContent({
4850
defaultContextProviders,
4951
availableSlashCommands,
5052
dispatch,
53+
getState,
5154
}: ResolveEditorContentInput): Promise<ResolveEditorContentOutput> {
5255
const {
5356
parts,
@@ -87,6 +90,7 @@ export async function resolveEditorContent({
8790
defaultContextProviders,
8891
parts: slashedParts,
8992
selectedCode,
93+
getState,
9094
});
9195

9296
if (shouldGatherContext) {
@@ -111,13 +115,15 @@ async function gatherContextItems({
111115
defaultContextProviders,
112116
parts,
113117
selectedCode,
118+
getState,
114119
}: {
115120
contextRequests: GetContextRequest[];
116121
modifiers: InputModifiers;
117122
ideMessenger: IIdeMessenger;
118123
defaultContextProviders: DefaultContextProvider[];
119124
parts: MessagePart[];
120125
selectedCode: RangeInFile[];
126+
getState: () => RootState;
121127
}): Promise<ContextItemWithId[]> {
122128
const defaultRequests: GetContextRequest[] = defaultContextProviders.map(
123129
(def) => ({
@@ -139,13 +145,16 @@ async function gatherContextItems({
139145
);
140146
let contextItems: ContextItemWithId[] = [];
141147

148+
const isInAgentMode = getState().session.mode === "agent";
149+
142150
// Process context item attributes
143151
for (const item of deduplicatedInputs) {
144152
const result = await ideMessenger.request("context/getContextItems", {
145153
name: item.provider,
146154
query: item.query ?? "",
147155
fullInput: stripImages(parts),
148156
selectedCode,
157+
isInAgentMode,
149158
});
150159
if (result.status === "success") {
151160
contextItems.push(...result.content);
@@ -162,6 +171,7 @@ async function gatherContextItems({
162171
query: "",
163172
fullInput: stripImages(parts),
164173
selectedCode,
174+
isInAgentMode,
165175
});
166176

167177
if (result.status === "success") {
@@ -181,6 +191,7 @@ async function gatherContextItems({
181191
query: "non-mention-usage",
182192
fullInput: "",
183193
selectedCode: [],
194+
isInAgentMode,
184195
},
185196
);
186197
if (currentFileResponse.status === "success") {

0 commit comments

Comments
 (0)