UNPKG

@microsoft/teams-ai

Version:

SDK focused on building AI based applications for Microsoft Teams.

75 lines 2.63 kB
"use strict"; /** * @module teams-ai */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIClient = void 0; // eslint-disable-next-line import/named const axios_1 = __importDefault(require("axios")); /** * @private */ class OpenAIClient { _httpClient; DefaultEndpoint = 'https://api.openai.com'; UserAgent = 'Microsoft Teams Conversational AI SDK'; constructor(options) { this.options = options; // Cleanup and validate endpoint if (options.endpoint) { options.endpoint = options.endpoint.trim(); if (options.endpoint.endsWith('/')) { options.endpoint = options.endpoint.substring(0, options.endpoint.length - 1); } } // Validate API key if (!options.apiKey) { throw new Error(`OpenAIClient initialized without an 'apiKey'.`); } // Create client and set headers this._httpClient = axios_1.default.create({ validateStatus: (status) => status < 400 || status == 429 }); } options; createChatCompletion(request) { const url = `${this.options.endpoint ?? this.DefaultEndpoint}/v1/chat/completions`; return this.post(url, request); } createEmbedding(request) { const url = `${this.options.endpoint ?? this.DefaultEndpoint}/v1/embeddings`; return this.post(url, request); } createModeration(request) { const url = `${this.options.endpoint ?? this.DefaultEndpoint}/v1/moderations`; return this.post(url, request); } addRequestHeaders(headers, options) { headers['Authorization'] = `Bearer ${options.apiKey}`; if (options.organization) { headers['OpenAI-Organization'] = options.organization; } } async post(url, body) { // Initialize request headers const requestHeaders = { 'Content-Type': 'application/json', 'User-Agent': this.UserAgent }; this.addRequestHeaders(requestHeaders, this.options); // Send request const { status, statusText, data, headers } = await this._httpClient.post(url, body, { headers: requestHeaders }); return { status, statusText, data, headers: headers }; } } exports.OpenAIClient = OpenAIClient; //# sourceMappingURL=OpenAIClient.js.map