UNPKG

@ashnov/hephaestus-cli

Version:

Your AI powered CLI-based coding assistant. Powered by OpenAI davinci models.

73 lines (72 loc) 2.93 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { Spinner } from './../utils/Spinner.js'; import { OpenAIApi, Configuration } from 'openai'; export class OpenAI { constructor(appConfig) { const configuration = new Configuration({ apiKey: appConfig['api-token'], }); this._openai = new OpenAIApi(configuration); this._model = appConfig.model; } checkValidity() { return __awaiter(this, void 0, void 0, function* () { const spinner = new Spinner('Authenticating'); spinner.start(); try { const response = yield this._openai.listModels(); spinner.stop(); return response.status == 200; } catch (e) { spinner.stop(); switch (e.response.status) { case 401: throw new Error('INVALID_TOKEN'); case 429: throw new Error('INTERNAL_DEPENDENCY_BUSY'); default: console.log(e.response.status); throw new Error('OPENAI_SERVICE_DOWN'); } } }); } getTextualResponse(query) { return __awaiter(this, void 0, void 0, function* () { const spinner = new Spinner('Generating response...'); spinner.start(); try { const response = yield this._openai.createCompletion({ model: this._model, prompt: query, max_tokens: 1000, temperature: 0, top_p: 1, }); spinner.stop(); return response.data.choices[0].text; } catch (e) { spinner.stop(); switch (e.response.status) { case 401: throw new Error('INVALID_TOKEN'); case 429: throw new Error('INTERNAL_DEPENDENCY_BUSY'); default: console.log(e.message); throw new Error('OPENAI_SERVICE_DOWN'); } } }); } }