@microsoft/teams-ai
Version:
SDK focused on building AI based applications for Microsoft Teams.
75 lines • 2.63 kB
JavaScript
;
/**
* @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