@@ -13,6 +13,8 @@ export interface PromptArgsBase {
1313 } ;
1414 context ?: vscode . ChatContext ;
1515 connectionNames ?: string [ ] ;
16+ databaseName ?: string ;
17+ collectionName ?: string ;
1618}
1719
1820export interface UserPromptResponse {
@@ -163,16 +165,27 @@ export abstract class PromptBase<TArgs extends PromptArgsBase> {
163165 protected getHistoryMessages ( {
164166 connectionNames,
165167 context,
168+ databaseName,
169+ collectionName,
166170 } : {
167171 connectionNames ?: string [ ] ; // Used to scrape the connecting messages from the history.
168172 context ?: vscode . ChatContext ;
173+ databaseName ?: string ;
174+ collectionName ?: string ;
169175 } ) : vscode . LanguageModelChatMessage [ ] {
170176 const messages : vscode . LanguageModelChatMessage [ ] = [ ] ;
171177
172178 if ( ! context ) {
173179 return [ ] ;
174180 }
175181
182+ let previousItem :
183+ | vscode . ChatRequestTurn
184+ | vscode . ChatResponseTurn
185+ | undefined = undefined ;
186+
187+ const namespaceIsKnown =
188+ databaseName !== undefined && collectionName !== undefined ;
176189 for ( const historyItem of context . history ) {
177190 if ( historyItem instanceof vscode . ChatRequestTurn ) {
178191 if (
@@ -181,9 +194,21 @@ export abstract class PromptBase<TArgs extends PromptArgsBase> {
181194 ) {
182195 // When the message is empty or a connection name then we skip it.
183196 // It's probably going to be the response to the connect step.
197+ previousItem = historyItem ;
184198 continue ;
185199 }
186200
201+ if ( previousItem instanceof vscode . ChatResponseTurn ) {
202+ const responseIntent = ( previousItem . result as ChatResult ) . metadata
203+ ?. intent ;
204+
205+ // If the namespace is already known, skip responses to prompts asking for it.
206+ if ( responseIntent === 'askForNamespace' && namespaceIsKnown ) {
207+ previousItem = historyItem ;
208+ continue ;
209+ }
210+ }
211+
187212 // eslint-disable-next-line new-cap
188213 messages . push ( vscode . LanguageModelChatMessage . User ( historyItem . prompt ) ) ;
189214 }
@@ -206,11 +231,17 @@ export abstract class PromptBase<TArgs extends PromptArgsBase> {
206231 'emptyRequest' ,
207232 'askToConnect' ,
208233 ] ;
209- if (
210- responseTypesToSkip . indexOf (
211- ( historyItem . result as ChatResult ) ?. metadata ?. intent
212- ) > - 1
213- ) {
234+
235+ const responseType = ( historyItem . result as ChatResult ) ?. metadata
236+ ?. intent ;
237+ if ( responseTypesToSkip . includes ( responseType ) ) {
238+ previousItem = historyItem ;
239+ continue ;
240+ }
241+
242+ // If the namespace is already known, skip including prompts asking for it.
243+ if ( responseType === 'askForNamespace' && namespaceIsKnown ) {
244+ previousItem = historyItem ;
214245 continue ;
215246 }
216247
@@ -232,6 +263,7 @@ export abstract class PromptBase<TArgs extends PromptArgsBase> {
232263 // eslint-disable-next-line new-cap
233264 messages . push ( vscode . LanguageModelChatMessage . Assistant ( message ) ) ;
234265 }
266+ previousItem = historyItem ;
235267 }
236268
237269 return messages ;
0 commit comments