Skip to content

Commit

Permalink
Merge branch '293-feat-remove-the-generative-ai-js-dependency' into f…
Browse files Browse the repository at this point in the history
…ix/ide-fixes
  • Loading branch information
wadhia-yash committed Jun 17, 2024
2 parents 619694a + 74a6fc3 commit 7710d08
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 9 deletions.
12 changes: 3 additions & 9 deletions vscode/src/providers/chat_view_provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import { SetupManager, SetupStep } from "../utilities/setup-manager/setup-manage
import { ContextualCodeProvider } from "../utilities/contextual-code";
import { Auth } from "../utilities/auth/auth";
import { StorageManager } from "../utilities/storage-manager";
import { AxiosRequestConfig, AxiosResponse } from "axios";
import { makeAuthorizedHttpRequest } from "../repository/http-utils";
import axios, { AxiosRequestConfig, AxiosResponse } from "axios";
import { makeAuthorizedHttpRequest, validateApiKey } from "../repository/http-utils";

export class FlutterGPTViewProvider implements vscode.WebviewViewProvider {
public static readonly viewType = "dash.chatView";
Expand Down Expand Up @@ -150,7 +150,6 @@ export class FlutterGPTViewProvider implements vscode.WebviewViewProvider {
case "validate":
{
webviewView.webview.postMessage({ type: "showValidationLoader" });
this.aiRepo = this.initGemini(data.value);
await this._validateApiKey(data.value);
webviewView.webview.postMessage({ type: "hideValidationLoader" });
break;
Expand Down Expand Up @@ -608,19 +607,14 @@ export class FlutterGPTViewProvider implements vscode.WebviewViewProvider {

private async _validateApiKey(apiKey: string) {
try {
await this.aiRepo?.validateApiKey(apiKey);
await validateApiKey(apiKey);
this._view?.webview.postMessage({ type: 'apiKeyValidation', value: 'Gemini API Key is valid' });
} catch (error) {
console.log('gemini api error', error);
this._view?.webview.postMessage({ type: 'apiKeyValidation', value: 'Gemini API Key is invalid' });
}
}


private initGemini(apiKey: string): GeminiRepository {
return new GeminiRepository(apiKey);
}

private async getResponse(prompt: string) {
if (!this._view) {
await vscode.commands.executeCommand('dash.chatView.focus');
Expand Down
37 changes: 37 additions & 0 deletions vscode/src/repository/http-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,43 @@ export async function refreshAccessToken(refreshToken: string, context: vscode.E
}
}

export async function validateApiKey(apiKey: string) {
try {
let data = JSON.stringify({
"contents": [
{
"parts": [
{
"text": "Test"
}
]
}
]
});

let config: AxiosRequestConfig = {
method: 'post',
url: `https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${apiKey}`,
headers: {
'Content-Type': 'application/json'
},
data: data
};

const response: AxiosResponse = await axios.request(config);
return response.data;
} catch (error: any) {
// Check if the error is related to an invalid API key
if (error &&
error.response?.data?.error?.message &&
error.response?.data?.error?.message?.includes('API key not valid')) {
throw new Error('API key is not valid. Please pass a valid API key.');
} else {
// Handle other errors internally (optional: log them for debugging)
console.error('gemini api error', error);
}
}
}

export async function downloadFile(url: string, destinationPath: string, onProgress: (progress: number) => void): Promise<void> {
/// First download on a temp path. This prevents from converting partial downloaded files (due to interruption) into executables.
Expand Down

0 comments on commit 7710d08

Please sign in to comment.