Path: blob/main/extensions/copilot/test/simulation/fixtures/multiFileEdit/issue-8131/extension.ts
13405 views
import * as vscode from 'vscode';1import OpenAI from 'openai';2import * as dotenv from 'dotenv';3import * as path from 'path';45const O1_PARTICIPANT_ID = 'vscode-samples.o1';67interface ICatChatResult extends vscode.ChatResult {8metadata: {9command: string;10}11}1213const logger = vscode.env.createTelemetryLogger({14sendEventData(eventName, data) {15// Capture event telemetry16console.log(`Event: ${eventName}`);17console.log(`Data: ${JSON.stringify(data)}`);18},19sendErrorData(error, data) {20// Capture error telemetry21console.error(`Error: ${error}`);22console.error(`Data: ${JSON.stringify(data)}`);23}24});2526// Initialize OpenAI client272829export function activate(context: vscode.ExtensionContext) {30// Load .env file from the extension's root directory31dotenv.config();3233let openai: OpenAI | undefined;34const handler: vscode.ChatRequestHandler = async (request: vscode.ChatRequest, context: vscode.ChatContext, stream: vscode.ChatResponseStream, token: vscode.CancellationToken): Promise<ICatChatResult> => {35if (!openai) {36let apiKey = process.env.OPENAI_API_KEY;37if (!apiKey) {38apiKey = await vscode.window.showInputBox({39prompt: 'Enter your OpenAI API Key',40ignoreFocusOut: true,41password: true42});4344if (!apiKey) {45stream.markdown('API Key is required to proceed.');46throw new Error('API Key is required');47}48}49openai = new OpenAI({50apiKey51});52}5354try {55const chatCompletion = await openai.chat.completions.create({56model: "o1-preview", // You can change this to the appropriate model57messages: [{ role: "user", content: request.prompt }],58stream: true,59});6061for await (const chunk of chatCompletion) {62if (chunk.choices[0]?.delta?.content) {63stream.markdown(chunk.choices[0].delta.content);64}65}66} catch(err) {67handleError(logger, err, stream);68}6970logger.logUsage('request', { kind: 'o1' });71return { metadata: { command: 'o1_chat' } };72};7374const o1 = vscode.chat.createChatParticipant(O1_PARTICIPANT_ID, handler);75o1.iconPath = vscode.Uri.joinPath(context.extensionUri, 'openai-icon.png');7677context.subscriptions.push(o1);78}7980function handleError(logger: vscode.TelemetryLogger, err: any, stream: vscode.ChatResponseStream): void {81logger.logError(err);8283if (err instanceof Error) {84console.error(err.message);85stream.markdown(`An error occurred: ${err.message}`);86} else {87console.error('An unknown error occurred');88stream.markdown('An unknown error occurred');89}90}9192export function deactivate() { }939495