Integrate Contextualization API into Azure Data Studio to get better query recommendations from Copilot (#24044)

* Boilerplate for new metadata API endpoint

* Register all server metadata provider

* Fully registers data provider

* Registers metadata provider

* Instantiate metadata service

* Generates server metadata when connection is established

* Allow queryEditorInput to get server metadata

* Minor clean up

* Renames metadata provider and request endpoint

* Corrects documentation block

* Integrates get server metadata request endpoint

* Adjusts GetServerMetadataResult scripts type

* Add back Cargo.toml file

* Fix SQL hygiene error

* reflect changes made in in STS for table metadata

* Adds feature toggle to serverMetadataService

* Places toggle before request to get create scripts

* Fix build check issues

* Minor review changes

* Improves contextualization setting label

* Generalize contextualization service names

* Additional code review changes

* Update extensions/mssql/src/contracts.ts

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>

* Update src/sql/azdata.proposed.d.ts

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>

* Code reivew changes

* Capitalize c in contextualization

* Additional review changes

* Update provider type

* Simplify type and method names

* Unregister MSSQL ServerContextualization provider

---------

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
This commit is contained in:
Lewis Sanchez
2023-08-21 19:54:44 -07:00
committed by GitHub
parent df5693ffd3
commit d5a9c172d1
19 changed files with 336 additions and 10 deletions

View File

@@ -887,12 +887,19 @@ declare module 'azdata' {
export enum DataProviderType {
TableDesignerProvider = 'TableDesignerProvider',
ExecutionPlanProvider = 'ExecutionPlanProvider'
ExecutionPlanProvider = 'ExecutionPlanProvider',
ServerContextualizationProvider = 'ServerContextualizationProvider'
}
export namespace dataprotocol {
export function registerTableDesignerProvider(provider: designers.TableDesignerProvider): vscode.Disposable;
export function registerExecutionPlanProvider(provider: executionPlan.ExecutionPlanProvider): vscode.Disposable;
/**
* Registers a server contextualization provider, which can provide context about a server to extensions like GitHub
* Copilot for improved suggestions.
* @param provider The provider to register
*/
export function registerServerContextualizationProvider(provider: contextualization.ServerContextualizationProvider): vscode.Disposable
}
export namespace designers {
@@ -1773,6 +1780,29 @@ declare module 'azdata' {
}
}
export namespace contextualization {
export interface GetServerContextualizationResult {
/**
* An array containing the generated server context.
*/
context: string[];
}
export interface ServerContextualizationProvider extends DataProvider {
/**
* Generates server context.
* @param ownerUri The URI of the connection to generate context for.
*/
generateServerContextualization(ownerUri: string): void;
/**
* Gets server context, which can be in the form of create scripts but is left up each provider.
* @param ownerUri The URI of the connection to get context for.
*/
getServerContextualization(ownerUri: string): Thenable<GetServerContextualizationResult>;
}
}
/**
* Component to display text with an icon representing the severity
*/