Merge pull request #3374 from github/robertbrignull/sentToLLMMethods

Add sentToLLM to ModelingStore
This commit is contained in:
Robert
2024-02-20 10:05:27 +00:00
committed by GitHub
7 changed files with 95 additions and 0 deletions

View File

@@ -543,6 +543,11 @@ interface SetInProgressMethodsMessage {
methods: string[]; methods: string[];
} }
interface SetProcessedByAutoModelMethodsMessage {
t: "setProcessedByAutoModelMethods";
methods: string[];
}
interface SwitchModeMessage { interface SwitchModeMessage {
t: "switchMode"; t: "switchMode";
mode: Mode; mode: Mode;
@@ -626,6 +631,7 @@ export type ToModelEditorMessage =
| SetModeledMethodsMessage | SetModeledMethodsMessage
| SetModifiedMethodsMessage | SetModifiedMethodsMessage
| SetInProgressMethodsMessage | SetInProgressMethodsMessage
| SetProcessedByAutoModelMethodsMessage
| RevealMethodMessage | RevealMethodMessage
| SetAccessPathSuggestionsMessage; | SetAccessPathSuggestionsMessage;

View File

@@ -159,6 +159,12 @@ export class AutoModeler {
this.databaseItem, this.databaseItem,
candidateSignatures, candidateSignatures,
); );
// Let the UI know which methods have been sent to the LLM
this.modelingStore.addProcessedByAutoModelMethods(
this.databaseItem,
candidateSignatures,
);
} }
} finally { } finally {
// Clear out in progress methods in case anything went wrong // Clear out in progress methods in case anything went wrong

View File

@@ -835,6 +835,19 @@ export class ModelEditorView extends AbstractWebview<
}), }),
); );
this.push(
this.modelingEvents.onProcessedByAutoModelMethodsChanged(
async (event) => {
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
await this.postMessage({
t: "setProcessedByAutoModelMethods",
methods: Array.from(event.methods),
});
}
},
),
);
this.push( this.push(
this.modelingEvents.onRevealInModelEditor(async (event) => { this.modelingEvents.onRevealInModelEditor(async (event) => {
if (event.dbUri === this.databaseItem.databaseUri.toString()) { if (event.dbUri === this.databaseItem.databaseUri.toString()) {

View File

@@ -42,6 +42,7 @@ interface SelectedMethodChangedEvent {
readonly modeledMethods: readonly ModeledMethod[]; readonly modeledMethods: readonly ModeledMethod[];
readonly isModified: boolean; readonly isModified: boolean;
readonly isInProgress: boolean; readonly isInProgress: boolean;
readonly processedByAutoModel: boolean;
} }
interface InProgressMethodsChangedEvent { interface InProgressMethodsChangedEvent {
@@ -49,6 +50,11 @@ interface InProgressMethodsChangedEvent {
readonly methods: ReadonlySet<string>; readonly methods: ReadonlySet<string>;
} }
interface ProcessedByAutoModelMethodsChangedEvent {
readonly dbUri: string;
readonly methods: ReadonlySet<string>;
}
interface RevealInModelEditorEvent { interface RevealInModelEditorEvent {
dbUri: string; dbUri: string;
method: Method; method: Method;
@@ -69,6 +75,7 @@ export class ModelingEvents extends DisposableObject {
public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>; public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>;
public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>; public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>;
public readonly onInProgressMethodsChanged: AppEvent<InProgressMethodsChangedEvent>; public readonly onInProgressMethodsChanged: AppEvent<InProgressMethodsChangedEvent>;
public readonly onProcessedByAutoModelMethodsChanged: AppEvent<ProcessedByAutoModelMethodsChangedEvent>;
public readonly onRevealInModelEditor: AppEvent<RevealInModelEditorEvent>; public readonly onRevealInModelEditor: AppEvent<RevealInModelEditorEvent>;
public readonly onFocusModelEditor: AppEvent<FocusModelEditorEvent>; public readonly onFocusModelEditor: AppEvent<FocusModelEditorEvent>;
@@ -82,6 +89,7 @@ export class ModelingEvents extends DisposableObject {
private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>; private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>;
private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>; private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>;
private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter<InProgressMethodsChangedEvent>; private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter<InProgressMethodsChangedEvent>;
private readonly onProcessedByAutoModelMethodsChangedEventEmitter: AppEventEmitter<ProcessedByAutoModelMethodsChangedEvent>;
private readonly onRevealInModelEditorEventEmitter: AppEventEmitter<RevealInModelEditorEvent>; private readonly onRevealInModelEditorEventEmitter: AppEventEmitter<RevealInModelEditorEvent>;
private readonly onFocusModelEditorEventEmitter: AppEventEmitter<FocusModelEditorEvent>; private readonly onFocusModelEditorEventEmitter: AppEventEmitter<FocusModelEditorEvent>;
@@ -141,6 +149,12 @@ export class ModelingEvents extends DisposableObject {
this.onInProgressMethodsChanged = this.onInProgressMethodsChanged =
this.onInProgressMethodsChangedEventEmitter.event; this.onInProgressMethodsChangedEventEmitter.event;
this.onProcessedByAutoModelMethodsChangedEventEmitter = this.push(
app.createEventEmitter<ProcessedByAutoModelMethodsChangedEvent>(),
);
this.onProcessedByAutoModelMethodsChanged =
this.onProcessedByAutoModelMethodsChangedEventEmitter.event;
this.onRevealInModelEditorEventEmitter = this.push( this.onRevealInModelEditorEventEmitter = this.push(
app.createEventEmitter<RevealInModelEditorEvent>(), app.createEventEmitter<RevealInModelEditorEvent>(),
); );
@@ -226,6 +240,7 @@ export class ModelingEvents extends DisposableObject {
modeledMethods: ModeledMethod[], modeledMethods: ModeledMethod[],
isModified: boolean, isModified: boolean,
isInProgress: boolean, isInProgress: boolean,
processedByAutoModel: boolean,
) { ) {
this.onSelectedMethodChangedEventEmitter.fire({ this.onSelectedMethodChangedEventEmitter.fire({
databaseItem, databaseItem,
@@ -234,6 +249,7 @@ export class ModelingEvents extends DisposableObject {
modeledMethods, modeledMethods,
isModified, isModified,
isInProgress, isInProgress,
processedByAutoModel,
}); });
} }
@@ -247,6 +263,16 @@ export class ModelingEvents extends DisposableObject {
}); });
} }
public fireProcessedByAutoModelMethodsChangedEvent(
dbUri: string,
methods: ReadonlySet<string>,
) {
this.onProcessedByAutoModelMethodsChangedEventEmitter.fire({
dbUri,
methods,
});
}
public fireRevealInModelEditorEvent(dbUri: string, method: Method) { public fireRevealInModelEditorEvent(dbUri: string, method: Method) {
this.onRevealInModelEditorEventEmitter.fire({ this.onRevealInModelEditorEventEmitter.fire({
dbUri, dbUri,

View File

@@ -14,6 +14,7 @@ interface InternalDbModelingState {
modeledMethods: Record<string, ModeledMethod[]>; modeledMethods: Record<string, ModeledMethod[]>;
modifiedMethodSignatures: Set<string>; modifiedMethodSignatures: Set<string>;
inProgressMethods: Set<string>; inProgressMethods: Set<string>;
processedByAutoModelMethods: Set<string>;
selectedMethod: Method | undefined; selectedMethod: Method | undefined;
selectedUsage: Usage | undefined; selectedUsage: Usage | undefined;
} }
@@ -26,6 +27,7 @@ interface DbModelingState {
readonly modeledMethods: Readonly<Record<string, readonly ModeledMethod[]>>; readonly modeledMethods: Readonly<Record<string, readonly ModeledMethod[]>>;
readonly modifiedMethodSignatures: ReadonlySet<string>; readonly modifiedMethodSignatures: ReadonlySet<string>;
readonly inProgressMethods: ReadonlySet<string>; readonly inProgressMethods: ReadonlySet<string>;
readonly processedByAutoModelMethods: ReadonlySet<string>;
readonly selectedMethod: Method | undefined; readonly selectedMethod: Method | undefined;
readonly selectedUsage: Usage | undefined; readonly selectedUsage: Usage | undefined;
} }
@@ -37,6 +39,7 @@ interface SelectedMethodDetails {
readonly modeledMethods: readonly ModeledMethod[]; readonly modeledMethods: readonly ModeledMethod[];
readonly isModified: boolean; readonly isModified: boolean;
readonly isInProgress: boolean; readonly isInProgress: boolean;
readonly processedByAutoModel: boolean;
} }
export class ModelingStore extends DisposableObject { export class ModelingStore extends DisposableObject {
@@ -59,6 +62,7 @@ export class ModelingStore extends DisposableObject {
mode, mode,
modeledMethods: {}, modeledMethods: {},
modifiedMethodSignatures: new Set(), modifiedMethodSignatures: new Set(),
processedByAutoModelMethods: new Set(),
selectedMethod: undefined, selectedMethod: undefined,
selectedUsage: undefined, selectedUsage: undefined,
inProgressMethods: new Set(), inProgressMethods: new Set(),
@@ -301,6 +305,9 @@ export class ModelingStore extends DisposableObject {
const modeledMethods = dbState.modeledMethods[method.signature] ?? []; const modeledMethods = dbState.modeledMethods[method.signature] ?? [];
const isModified = dbState.modifiedMethodSignatures.has(method.signature); const isModified = dbState.modifiedMethodSignatures.has(method.signature);
const isInProgress = dbState.inProgressMethods.has(method.signature); const isInProgress = dbState.inProgressMethods.has(method.signature);
const processedByAutoModel = dbState.processedByAutoModelMethods.has(
method.signature,
);
this.modelingEvents.fireSelectedMethodChangedEvent( this.modelingEvents.fireSelectedMethodChangedEvent(
dbItem, dbItem,
method, method,
@@ -308,6 +315,7 @@ export class ModelingStore extends DisposableObject {
modeledMethods, modeledMethods,
isModified, isModified,
isInProgress, isInProgress,
processedByAutoModel,
); );
} }
@@ -336,6 +344,18 @@ export class ModelingStore extends DisposableObject {
}); });
} }
public addProcessedByAutoModelMethods(
dbItem: DatabaseItem,
processedByAutoModelMethods: string[],
) {
this.changeProcessedByAutoModelMethods(dbItem, (state) => {
state.processedByAutoModelMethods = new Set([
...state.processedByAutoModelMethods,
...processedByAutoModelMethods,
]);
});
}
public getSelectedMethodDetails(): SelectedMethodDetails | undefined { public getSelectedMethodDetails(): SelectedMethodDetails | undefined {
const dbState = this.getInternalStateForActiveDb(); const dbState = this.getInternalStateForActiveDb();
if (!dbState) { if (!dbState) {
@@ -356,6 +376,9 @@ export class ModelingStore extends DisposableObject {
selectedMethod.signature, selectedMethod.signature,
), ),
isInProgress: dbState.inProgressMethods.has(selectedMethod.signature), isInProgress: dbState.inProgressMethods.has(selectedMethod.signature),
processedByAutoModel: dbState.processedByAutoModelMethods.has(
selectedMethod.signature,
),
}; };
} }
@@ -412,4 +435,18 @@ export class ModelingStore extends DisposableObject {
state.inProgressMethods, state.inProgressMethods,
); );
} }
private changeProcessedByAutoModelMethods(
dbItem: DatabaseItem,
updateState: (state: InternalDbModelingState) => void,
) {
const state = this.getState(dbItem);
updateState(state);
this.modelingEvents.fireProcessedByAutoModelMethodsChangedEvent(
dbItem.databaseUri.toString(),
state.processedByAutoModelMethods,
);
}
} }

View File

@@ -148,6 +148,10 @@ export function ModelEditor({
setInProgressMethods(new Set(msg.methods)); setInProgressMethods(new Set(msg.methods));
break; break;
} }
case "setProcessedByAutoModelMethods": {
// TODO: set state
break;
}
case "revealMethod": case "revealMethod":
setRevealedMethodSignature(msg.methodSignature); setRevealedMethodSignature(msg.methodSignature);
break; break;

View File

@@ -10,6 +10,7 @@ export function createMockModelingEvents({
onModeledMethodsChanged = jest.fn(), onModeledMethodsChanged = jest.fn(),
onModifiedMethodsChanged = jest.fn(), onModifiedMethodsChanged = jest.fn(),
onInProgressMethodsChanged = jest.fn(), onInProgressMethodsChanged = jest.fn(),
onProcessedByAutoModelMethodsChanged = jest.fn(),
onRevealInModelEditor = jest.fn(), onRevealInModelEditor = jest.fn(),
onFocusModelEditor = jest.fn(), onFocusModelEditor = jest.fn(),
}: { }: {
@@ -21,6 +22,7 @@ export function createMockModelingEvents({
onModeledMethodsChanged?: ModelingEvents["onModeledMethodsChanged"]; onModeledMethodsChanged?: ModelingEvents["onModeledMethodsChanged"];
onModifiedMethodsChanged?: ModelingEvents["onModifiedMethodsChanged"]; onModifiedMethodsChanged?: ModelingEvents["onModifiedMethodsChanged"];
onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"]; onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"];
onProcessedByAutoModelMethodsChanged?: ModelingEvents["onProcessedByAutoModelMethodsChanged"];
onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"]; onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"];
onFocusModelEditor?: ModelingEvents["onFocusModelEditor"]; onFocusModelEditor?: ModelingEvents["onFocusModelEditor"];
} = {}): ModelingEvents { } = {}): ModelingEvents {
@@ -33,6 +35,7 @@ export function createMockModelingEvents({
onModeledMethodsChanged, onModeledMethodsChanged,
onModifiedMethodsChanged, onModifiedMethodsChanged,
onInProgressMethodsChanged, onInProgressMethodsChanged,
onProcessedByAutoModelMethodsChanged,
onRevealInModelEditor, onRevealInModelEditor,
onFocusModelEditor, onFocusModelEditor,
}); });