Skip to content

Commit cc8d25e

Browse files
committed
Updates
1 parent a0d7fa7 commit cc8d25e

File tree

4 files changed

+22
-65
lines changed

4 files changed

+22
-65
lines changed

src/client/api.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import { ApiForPylance } from './pylanceApi';
2727
import { getTelemetryReporter } from './telemetry';
2828
import { TensorboardExtensionIntegration } from './tensorBoard/tensorboardIntegration';
2929
import { getDebugpyPath } from './debugger/pythonDebugger';
30-
import { registerApi } from './envExt/api.internal';
3130

3231
export function buildApi(
3332
ready: Promise<void>,
@@ -62,12 +61,6 @@ export function buildApi(
6261
jupyter: {
6362
registerHooks(): void;
6463
};
65-
/**
66-
* Internal API just for Python Env Extension untill the API is stabilized.
67-
*/
68-
pythonEnvironment: {
69-
registerApi: typeof registerApi;
70-
};
7164
/**
7265
* Internal API just for Tensorboard, hence don't include in the official types.
7366
*/
@@ -124,9 +117,6 @@ export function buildApi(
124117
jupyter: {
125118
registerHooks: () => jupyterIntegration.integrateWithJupyterExtension(),
126119
},
127-
pythonEnvironment: {
128-
registerApi: registerApi,
129-
},
130120
tensorboard: {
131121
registerHooks: () => tensorboardIntegration.integrateWithTensorboardExtension(),
132122
},

src/client/chat/getPythonEnvTool.ts

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ import { getEnvironmentDetails, getToolResponseIfNotebook, IResourceReference, r
2020
import { resolveFilePath } from './utils';
2121
import { getPythonPackagesResponse } from './listPackagesTool';
2222
import { ITerminalHelper } from '../common/terminal/types';
23-
import { isPrivateApiRegistered, listPackages, useEnvExtension } from '../envExt/api.internal';
24-
import { traceError } from '../logging';
23+
import { getEnvExtApi, useEnvExtension } from '../envExt/api.internal';
2524

2625
export class GetEnvironmentInfoTool implements LanguageModelTool<IResourceReference> {
2726
private readonly terminalExecutionService: TerminalCodeExecutionProvider;
@@ -60,22 +59,20 @@ export class GetEnvironmentInfoTool implements LanguageModelTool<IResourceRefere
6059
}
6160

6261
let packages = '';
63-
if (useEnvExtension() && isPrivateApiRegistered()) {
64-
try {
65-
const pkgs = await listPackages(resourcePath, token);
66-
if (pkgs && pkgs.length > 0) {
67-
// Installed Python packages, each in the format <name> or <name> (<version>). The version may be omitted if unknown. Returns an empty array if no packages are installed.
68-
const response = [
69-
'Below is a list of the Python packages, each in the format <name> or <name> (<version>). The version may be omitted if unknown: ',
70-
];
71-
pkgs.forEach((pkg) => {
72-
const version = pkg.version;
73-
response.push(version ? `- ${pkg.name} (${version})` : `- ${pkg.name}`);
74-
});
75-
packages = response.join('\n');
76-
}
77-
} catch (ex) {
78-
traceError(`Error invoking list_install_python_package_ex tool: ${ex}`);
62+
if (useEnvExtension()) {
63+
const api = await getEnvExtApi();
64+
const env = await api.getEnvironment(resourcePath);
65+
const pkgs = env ? await api.getPackages(env) : [];
66+
if (pkgs && pkgs.length > 0) {
67+
// Installed Python packages, each in the format <name> or <name> (<version>). The version may be omitted if unknown. Returns an empty array if no packages are installed.
68+
const response = [
69+
'Below is a list of the Python packages, each in the format <name> or <name> (<version>). The version may be omitted if unknown: ',
70+
];
71+
pkgs.forEach((pkg) => {
72+
const version = pkg.version;
73+
response.push(version ? `- ${pkg.name} (${version})` : `- ${pkg.name}`);
74+
});
75+
packages = response.join('\n');
7976
}
8077
}
8178
if (!packages) {

src/client/chat/installPackagesTool.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { resolveFilePath } from './utils';
2525
import { IModuleInstaller } from '../common/installer/types';
2626
import { ModuleInstallerType } from '../pythonEnvironments/info';
2727
import { IDiscoveryAPI } from '../pythonEnvironments/base/locator';
28-
import { installPackages, isPrivateApiRegistered, useEnvExtension } from '../envExt/api.internal';
28+
import { getEnvExtApi, useEnvExtension } from '../envExt/api.internal';
2929

3030
export interface IInstallPackageArgs extends IResourceReference {
3131
packageList: string[];
@@ -51,8 +51,12 @@ export class InstallPackagesTool implements LanguageModelTool<IInstallPackageArg
5151
return notebookResponse;
5252
}
5353

54-
if (useEnvExtension() && isPrivateApiRegistered()) {
55-
await installPackages(resourcePath, options.input.packageList, token);
54+
if (useEnvExtension()) {
55+
const api = await getEnvExtApi();
56+
const env = await api.getEnvironment(resourcePath);
57+
if (env) {
58+
await raceCancellationError(api.installPackages(env, options.input.packageList), token);
59+
}
5660
const resultMessage = `Successfully installed ${packagePlurality}: ${options.input.packageList.join(', ')}`;
5761
return new LanguageModelToolResult([new LanguageModelTextPart(resultMessage)]);
5862
}

src/client/envExt/api.internal.ts

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -155,37 +155,3 @@ export function registerEnvExtFeatures(
155155
);
156156
}
157157
}
158-
159-
type PrivateApi = {
160-
listPackages: (resource: Uri | undefined, token: CancellationToken) => Promise<Package[] | undefined>;
161-
installPackages: (resource: Uri | undefined, packages: string[], token: CancellationToken) => Promise<void>;
162-
};
163-
164-
let privateApi: PrivateApi | undefined;
165-
export function registerApi(api: {
166-
listPackages: (resource: Uri | undefined, token: CancellationToken) => Promise<Package[] | undefined>;
167-
installPackages: (resource: Uri | undefined, packages: string[], token: CancellationToken) => Promise<void>;
168-
}): void {
169-
privateApi = api;
170-
}
171-
172-
export function isPrivateApiRegistered(): boolean {
173-
return !!privateApi;
174-
}
175-
176-
export function listPackages(resource: Uri | undefined, token: CancellationToken): Promise<Package[] | undefined> {
177-
if (privateApi) {
178-
return privateApi.listPackages(resource, token);
179-
}
180-
return Promise.resolve(undefined);
181-
}
182-
export function installPackages(
183-
resource: Uri | undefined,
184-
packages: string[],
185-
token: CancellationToken,
186-
): Promise<void> {
187-
if (privateApi) {
188-
return privateApi.installPackages(resource, packages, token);
189-
}
190-
return Promise.resolve();
191-
}

0 commit comments

Comments
 (0)