Skip to content

Commit

Permalink
[vscode][3/n] Setup Env Variables: Use env template file for new files (
Browse files Browse the repository at this point in the history
#1283)

[vscode][3/n] Setup Env Variables: Use env template file for new files

If the file does not exist, created a template file with some helper
text to help guide people on how to set their environment variables.

Next PR I will handle the use case for when the env file already exists

## Test Plan


https://github.com/lastmile-ai/aiconfig/assets/151060367/4608833c-d64f-4906-a7ed-94af12174c6d

---
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with
[ReviewStack](https://reviewstack.dev/lastmile-ai/aiconfig/pull/1283).
* #1284
* __->__ #1283
* #1280
  • Loading branch information
rossdanlm authored Feb 22, 2024
2 parents b362fd4 + 70a73b0 commit 13a54bc
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 42 deletions.
75 changes: 33 additions & 42 deletions vscode-extension/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export function activate(context: vscode.ExtensionContext) {
vscode.commands.registerCommand(
COMMANDS.SETUP_ENVIRONMENT_VARIABLES,
() => {
setupEnvironmentVariables();
setupEnvironmentVariables(context);
}
)
);
Expand Down Expand Up @@ -730,7 +730,7 @@ async function checkPip() {
* 2) If .env file doesn't exist
* b) Add template file containing helper lines from 1a above
*/
async function setupEnvironmentVariables() {
async function setupEnvironmentVariables(context: vscode.ExtensionContext) {
// Use home dir because env variables should be global. I get the argument
// for having in the workspace dir. I personally feel this is more
// annoying to setup every time you create a new project when using the
Expand All @@ -748,6 +748,8 @@ async function setupEnvironmentVariables() {
} else if (!text.endsWith(".env")) {
return "File path must end in .env file";
}
// TODO: Check that file path is a "/.env" file (linux) or "\.env" (Windows)

// TODO: Check that env path is contained within workspace hierarchy
// (Ex: can't have .env file in a sibling dir otherwise AIConfig
// loadenv can't read it)
Expand All @@ -763,53 +765,42 @@ async function setupEnvironmentVariables() {
}

if (fs.existsSync(envPath)) {
// Append some lines in code to help guide users
// https://ai.google.dev/tutorials/setup
// https://platform.openai.com/api-keys
// Also add HF one
vscode.window.showInformationMessage(
"Env file already exists, will implement next PR"
);
} else {
// File doesn't exist in path
vscode.window.showInformationMessage(
"Env file does not already, will implement next PR"
// Create the .env file from the sample
const envTemplatePath = vscode.Uri.joinPath(
context.extensionUri,
"static",
"env_template.env"
);
}

// // Create the model registry file from the sample
// const sampleModelRegistryPath = vscode.Uri.joinPath(
// context.extensionUri,
// "static",
// "example_aiconfig_model_registry.py"
// );
try {
await vscode.workspace.fs.copy(
envTemplatePath,
vscode.Uri.file(envPath),
{ overwrite: false }
);
} catch (err) {
vscode.window.showErrorMessage(
`Error creating new file ${envTemplatePath}: ${err}`
);
}

// try {
// await vscode.workspace.fs.copy(
// sampleModelRegistryPath,
// vscode.Uri.file(modelRegistryPath),
// { overwrite: false }
// );
// } catch (err) {
// vscode.window.showErrorMessage(
// `Error creating new file ${modelRegistryPath}. Error is ${err}`
// );
// }

// const doc = await vscode.workspace.openTextDocument(modelRegistryPath);
// if (doc) {
// vscode.window.showTextDocument(doc);
// vscode.window.showInformationMessage(
// "Please customize your new model registry."
// );
// }

// let config = vscode.workspace.getConfiguration(EXTENSION_NAME);
// await handleCustomModelRegistryUpdate(
// config,
// aiconfigEditorManager,
// modelRegistryPath
// );
const doc = await vscode.workspace.openTextDocument(envPath);
if (doc) {
vscode.window.showTextDocument(doc, {
preview: false,
// Tried using vscode.ViewColumn.Active but that overrides existing
// walkthrough window
viewColumn: vscode.ViewColumn.Beside,
});
vscode.window.showInformationMessage(
"Please define your environment variables."
);
}
}
}

async function shareAIConfig(
Expand Down
15 changes: 15 additions & 0 deletions vscode-extension/static/env_template.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Uncomment the following lines to set these common env variables for
# accessing generative AI models. If your model requires other env variables
# you can also set those in this file

## Used for models from OpenAI such as Chat GPT and Dall-E
## You can get your api key from https://platform.openai.com/api-keys
# OPENAI_API_KEY=<your key here>

## Used for models from Google such as Gemini and Gemma
## You can get your api key from https://ai.google.dev/tutorials/setup
# GOOGLE_API_KEY=<your key here>

## Used for models hosted on Hugging Face: https://huggingface.co/models
## You can get your token from https://huggingface.co/settings/tokens
# HUGGING_FACE_API_TOKEN=<your_token_here>

0 comments on commit 13a54bc

Please sign in to comment.