Skip to content

Commit 3b30f22

Browse files
Merge pull request #3374 from github/robertbrignull/sentToLLMMethods
Add sentToLLM to ModelingStore
2 parents 7cd43cd + 67f46b7 commit 3b30f22

File tree

7 files changed

+95
-0
lines changed

7 files changed

+95
-0
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,11 @@ interface SetInProgressMethodsMessage {
543543
methods: string[];
544544
}
545545

546+
interface SetProcessedByAutoModelMethodsMessage {
547+
t: "setProcessedByAutoModelMethods";
548+
methods: string[];
549+
}
550+
546551
interface SwitchModeMessage {
547552
t: "switchMode";
548553
mode: Mode;
@@ -626,6 +631,7 @@ export type ToModelEditorMessage =
626631
| SetModeledMethodsMessage
627632
| SetModifiedMethodsMessage
628633
| SetInProgressMethodsMessage
634+
| SetProcessedByAutoModelMethodsMessage
629635
| RevealMethodMessage
630636
| SetAccessPathSuggestionsMessage;
631637

extensions/ql-vscode/src/model-editor/auto-modeler.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ export class AutoModeler {
159159
this.databaseItem,
160160
candidateSignatures,
161161
);
162+
163+
// Let the UI know which methods have been sent to the LLM
164+
this.modelingStore.addProcessedByAutoModelMethods(
165+
this.databaseItem,
166+
candidateSignatures,
167+
);
162168
}
163169
} finally {
164170
// Clear out in progress methods in case anything went wrong

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,19 @@ export class ModelEditorView extends AbstractWebview<
835835
}),
836836
);
837837

838+
this.push(
839+
this.modelingEvents.onProcessedByAutoModelMethodsChanged(
840+
async (event) => {
841+
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
842+
await this.postMessage({
843+
t: "setProcessedByAutoModelMethods",
844+
methods: Array.from(event.methods),
845+
});
846+
}
847+
},
848+
),
849+
);
850+
838851
this.push(
839852
this.modelingEvents.onRevealInModelEditor(async (event) => {
840853
if (event.dbUri === this.databaseItem.databaseUri.toString()) {

extensions/ql-vscode/src/model-editor/modeling-events.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,19 @@ interface SelectedMethodChangedEvent {
4242
readonly modeledMethods: readonly ModeledMethod[];
4343
readonly isModified: boolean;
4444
readonly isInProgress: boolean;
45+
readonly processedByAutoModel: boolean;
4546
}
4647

4748
interface InProgressMethodsChangedEvent {
4849
readonly dbUri: string;
4950
readonly methods: ReadonlySet<string>;
5051
}
5152

53+
interface ProcessedByAutoModelMethodsChangedEvent {
54+
readonly dbUri: string;
55+
readonly methods: ReadonlySet<string>;
56+
}
57+
5258
interface RevealInModelEditorEvent {
5359
dbUri: string;
5460
method: Method;
@@ -69,6 +75,7 @@ export class ModelingEvents extends DisposableObject {
6975
public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>;
7076
public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>;
7177
public readonly onInProgressMethodsChanged: AppEvent<InProgressMethodsChangedEvent>;
78+
public readonly onProcessedByAutoModelMethodsChanged: AppEvent<ProcessedByAutoModelMethodsChangedEvent>;
7279
public readonly onRevealInModelEditor: AppEvent<RevealInModelEditorEvent>;
7380
public readonly onFocusModelEditor: AppEvent<FocusModelEditorEvent>;
7481

@@ -82,6 +89,7 @@ export class ModelingEvents extends DisposableObject {
8289
private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>;
8390
private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>;
8491
private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter<InProgressMethodsChangedEvent>;
92+
private readonly onProcessedByAutoModelMethodsChangedEventEmitter: AppEventEmitter<ProcessedByAutoModelMethodsChangedEvent>;
8593
private readonly onRevealInModelEditorEventEmitter: AppEventEmitter<RevealInModelEditorEvent>;
8694
private readonly onFocusModelEditorEventEmitter: AppEventEmitter<FocusModelEditorEvent>;
8795

@@ -141,6 +149,12 @@ export class ModelingEvents extends DisposableObject {
141149
this.onInProgressMethodsChanged =
142150
this.onInProgressMethodsChangedEventEmitter.event;
143151

152+
this.onProcessedByAutoModelMethodsChangedEventEmitter = this.push(
153+
app.createEventEmitter<ProcessedByAutoModelMethodsChangedEvent>(),
154+
);
155+
this.onProcessedByAutoModelMethodsChanged =
156+
this.onProcessedByAutoModelMethodsChangedEventEmitter.event;
157+
144158
this.onRevealInModelEditorEventEmitter = this.push(
145159
app.createEventEmitter<RevealInModelEditorEvent>(),
146160
);
@@ -226,6 +240,7 @@ export class ModelingEvents extends DisposableObject {
226240
modeledMethods: ModeledMethod[],
227241
isModified: boolean,
228242
isInProgress: boolean,
243+
processedByAutoModel: boolean,
229244
) {
230245
this.onSelectedMethodChangedEventEmitter.fire({
231246
databaseItem,
@@ -234,6 +249,7 @@ export class ModelingEvents extends DisposableObject {
234249
modeledMethods,
235250
isModified,
236251
isInProgress,
252+
processedByAutoModel,
237253
});
238254
}
239255

@@ -247,6 +263,16 @@ export class ModelingEvents extends DisposableObject {
247263
});
248264
}
249265

266+
public fireProcessedByAutoModelMethodsChangedEvent(
267+
dbUri: string,
268+
methods: ReadonlySet<string>,
269+
) {
270+
this.onProcessedByAutoModelMethodsChangedEventEmitter.fire({
271+
dbUri,
272+
methods,
273+
});
274+
}
275+
250276
public fireRevealInModelEditorEvent(dbUri: string, method: Method) {
251277
this.onRevealInModelEditorEventEmitter.fire({
252278
dbUri,

extensions/ql-vscode/src/model-editor/modeling-store.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface InternalDbModelingState {
1414
modeledMethods: Record<string, ModeledMethod[]>;
1515
modifiedMethodSignatures: Set<string>;
1616
inProgressMethods: Set<string>;
17+
processedByAutoModelMethods: Set<string>;
1718
selectedMethod: Method | undefined;
1819
selectedUsage: Usage | undefined;
1920
}
@@ -26,6 +27,7 @@ interface DbModelingState {
2627
readonly modeledMethods: Readonly<Record<string, readonly ModeledMethod[]>>;
2728
readonly modifiedMethodSignatures: ReadonlySet<string>;
2829
readonly inProgressMethods: ReadonlySet<string>;
30+
readonly processedByAutoModelMethods: ReadonlySet<string>;
2931
readonly selectedMethod: Method | undefined;
3032
readonly selectedUsage: Usage | undefined;
3133
}
@@ -37,6 +39,7 @@ interface SelectedMethodDetails {
3739
readonly modeledMethods: readonly ModeledMethod[];
3840
readonly isModified: boolean;
3941
readonly isInProgress: boolean;
42+
readonly processedByAutoModel: boolean;
4043
}
4144

4245
export class ModelingStore extends DisposableObject {
@@ -59,6 +62,7 @@ export class ModelingStore extends DisposableObject {
5962
mode,
6063
modeledMethods: {},
6164
modifiedMethodSignatures: new Set(),
65+
processedByAutoModelMethods: new Set(),
6266
selectedMethod: undefined,
6367
selectedUsage: undefined,
6468
inProgressMethods: new Set(),
@@ -301,13 +305,17 @@ export class ModelingStore extends DisposableObject {
301305
const modeledMethods = dbState.modeledMethods[method.signature] ?? [];
302306
const isModified = dbState.modifiedMethodSignatures.has(method.signature);
303307
const isInProgress = dbState.inProgressMethods.has(method.signature);
308+
const processedByAutoModel = dbState.processedByAutoModelMethods.has(
309+
method.signature,
310+
);
304311
this.modelingEvents.fireSelectedMethodChangedEvent(
305312
dbItem,
306313
method,
307314
usage,
308315
modeledMethods,
309316
isModified,
310317
isInProgress,
318+
processedByAutoModel,
311319
);
312320
}
313321

@@ -336,6 +344,18 @@ export class ModelingStore extends DisposableObject {
336344
});
337345
}
338346

347+
public addProcessedByAutoModelMethods(
348+
dbItem: DatabaseItem,
349+
processedByAutoModelMethods: string[],
350+
) {
351+
this.changeProcessedByAutoModelMethods(dbItem, (state) => {
352+
state.processedByAutoModelMethods = new Set([
353+
...state.processedByAutoModelMethods,
354+
...processedByAutoModelMethods,
355+
]);
356+
});
357+
}
358+
339359
public getSelectedMethodDetails(): SelectedMethodDetails | undefined {
340360
const dbState = this.getInternalStateForActiveDb();
341361
if (!dbState) {
@@ -356,6 +376,9 @@ export class ModelingStore extends DisposableObject {
356376
selectedMethod.signature,
357377
),
358378
isInProgress: dbState.inProgressMethods.has(selectedMethod.signature),
379+
processedByAutoModel: dbState.processedByAutoModelMethods.has(
380+
selectedMethod.signature,
381+
),
359382
};
360383
}
361384

@@ -412,4 +435,18 @@ export class ModelingStore extends DisposableObject {
412435
state.inProgressMethods,
413436
);
414437
}
438+
439+
private changeProcessedByAutoModelMethods(
440+
dbItem: DatabaseItem,
441+
updateState: (state: InternalDbModelingState) => void,
442+
) {
443+
const state = this.getState(dbItem);
444+
445+
updateState(state);
446+
447+
this.modelingEvents.fireProcessedByAutoModelMethodsChangedEvent(
448+
dbItem.databaseUri.toString(),
449+
state.processedByAutoModelMethods,
450+
);
451+
}
415452
}

extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ export function ModelEditor({
148148
setInProgressMethods(new Set(msg.methods));
149149
break;
150150
}
151+
case "setProcessedByAutoModelMethods": {
152+
// TODO: set state
153+
break;
154+
}
151155
case "revealMethod":
152156
setRevealedMethodSignature(msg.methodSignature);
153157
break;

extensions/ql-vscode/test/__mocks__/model-editor/modelingEventsMock.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export function createMockModelingEvents({
1010
onModeledMethodsChanged = jest.fn(),
1111
onModifiedMethodsChanged = jest.fn(),
1212
onInProgressMethodsChanged = jest.fn(),
13+
onProcessedByAutoModelMethodsChanged = jest.fn(),
1314
onRevealInModelEditor = jest.fn(),
1415
onFocusModelEditor = jest.fn(),
1516
}: {
@@ -21,6 +22,7 @@ export function createMockModelingEvents({
2122
onModeledMethodsChanged?: ModelingEvents["onModeledMethodsChanged"];
2223
onModifiedMethodsChanged?: ModelingEvents["onModifiedMethodsChanged"];
2324
onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"];
25+
onProcessedByAutoModelMethodsChanged?: ModelingEvents["onProcessedByAutoModelMethodsChanged"];
2426
onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"];
2527
onFocusModelEditor?: ModelingEvents["onFocusModelEditor"];
2628
} = {}): ModelingEvents {
@@ -33,6 +35,7 @@ export function createMockModelingEvents({
3335
onModeledMethodsChanged,
3436
onModifiedMethodsChanged,
3537
onInProgressMethodsChanged,
38+
onProcessedByAutoModelMethodsChanged,
3639
onRevealInModelEditor,
3740
onFocusModelEditor,
3841
});

0 commit comments

Comments
 (0)