box-node-sdk
Version:
Official SDK for Box Platform APIs
330 lines • 13.8 kB
JavaScript
import { deserializeAiResponseFull } from '../schemas/aiResponseFull.js';
import { serializeAiAsk } from '../schemas/aiAsk.js';
import { deserializeAiResponse } from '../schemas/aiResponse.js';
import { serializeAiTextGen } from '../schemas/aiTextGen.js';
import { deserializeAiAgent } from '../schemas/aiAgent.js';
import { serializeAiExtract } from '../schemas/aiExtract.js';
import { deserializeAiExtractStructuredResponse } from '../schemas/aiExtractStructuredResponse.js';
import { serializeAiExtractStructured } from '../schemas/aiExtractStructured.js';
import { BoxSdkError } from '../box/errors.js';
import { NetworkSession } from '../networking/network.js';
import { FetchOptions } from '../networking/fetchOptions.js';
import { prepareParams } from '../internal/utils.js';
import { toString } from '../internal/utils.js';
import { sdIsString } from '../serialization/json.js';
export class CreateAiAskOptionals {
headers = new CreateAiAskHeaders({});
cancellationToken = void 0;
constructor(fields) {
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
}
}
export class CreateAiTextGenOptionals {
headers = new CreateAiTextGenHeaders({});
cancellationToken = void 0;
constructor(fields) {
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
}
}
export class GetAiAgentDefaultConfigOptionals {
headers = new GetAiAgentDefaultConfigHeaders({});
cancellationToken = void 0;
constructor(fields) {
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
}
}
export class CreateAiExtractOptionals {
headers = new CreateAiExtractHeaders({});
cancellationToken = void 0;
constructor(fields) {
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
}
}
export class CreateAiExtractStructuredOptionals {
headers = new CreateAiExtractStructuredHeaders({});
cancellationToken = void 0;
constructor(fields) {
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
}
}
export class CreateAiAskHeaders {
/**
* Extra headers that will be included in the HTTP request. */
extraHeaders = {};
constructor(fields) {
if (fields.extraHeaders !== undefined) {
this.extraHeaders = fields.extraHeaders;
}
}
}
export class CreateAiTextGenHeaders {
/**
* Extra headers that will be included in the HTTP request. */
extraHeaders = {};
constructor(fields) {
if (fields.extraHeaders !== undefined) {
this.extraHeaders = fields.extraHeaders;
}
}
}
export class GetAiAgentDefaultConfigHeaders {
/**
* Extra headers that will be included in the HTTP request. */
extraHeaders = {};
constructor(fields) {
if (fields.extraHeaders !== undefined) {
this.extraHeaders = fields.extraHeaders;
}
}
}
export class CreateAiExtractHeaders {
/**
* Extra headers that will be included in the HTTP request. */
extraHeaders = {};
constructor(fields) {
if (fields.extraHeaders !== undefined) {
this.extraHeaders = fields.extraHeaders;
}
}
}
export class CreateAiExtractStructuredHeaders {
/**
* Extra headers that will be included in the HTTP request. */
extraHeaders = {};
constructor(fields) {
if (fields.extraHeaders !== undefined) {
this.extraHeaders = fields.extraHeaders;
}
}
}
export class AiManager {
auth;
networkSession = new NetworkSession({});
constructor(fields) {
if (fields.auth !== undefined) {
this.auth = fields.auth;
}
if (fields.networkSession !== undefined) {
this.networkSession = fields.networkSession;
}
}
/**
* Sends an AI request to supported LLMs and returns an answer specifically focused on the user's question given the provided context.
*
* You can ask a question about a single file, several files, or the entire contents of a Box Hub. To search across and ask questions about everything in a Box Hub, send a single item with `type` set to `hubs` and the Hub's ID as the `id`. Box AI answers the question using the indexed content of all files in that Hub.
*
* Asking questions about a Box Hub requires Box AI for Hubs to be enabled in the Admin Console before the Hub is created, so that its content is indexed.
* @param {AiAsk} requestBody Request body of createAiAsk method
* @param {CreateAiAskOptionalsInput} optionalsInput
* @returns {Promise<undefined | AiResponseFull>}
*/
async createAiAsk(requestBody, optionalsInput = {}) {
const optionals = new CreateAiAskOptionals({
headers: optionalsInput.headers,
cancellationToken: optionalsInput.cancellationToken,
});
const headers = optionals.headers;
const cancellationToken = optionals.cancellationToken;
const headersMap = prepareParams({ ...{}, ...headers.extraHeaders });
const response = await this.networkSession.networkClient.fetch(new FetchOptions({
url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/ai/ask'),
method: 'POST',
headers: headersMap,
data: serializeAiAsk(requestBody),
contentType: 'application/json',
responseFormat: 'json',
auth: this.auth,
networkSession: this.networkSession,
cancellationToken: cancellationToken,
}));
if (toString(response.status) == '204') {
return void 0;
}
return {
...deserializeAiResponseFull(response.data),
rawData: response.data,
};
}
/**
* Sends an AI request to supported Large Language Models (LLMs) and returns generated text based on the provided prompt.
* @param {AiTextGen} requestBody Request body of createAiTextGen method
* @param {CreateAiTextGenOptionalsInput} optionalsInput
* @returns {Promise<AiResponse>}
*/
async createAiTextGen(requestBody, optionalsInput = {}) {
const optionals = new CreateAiTextGenOptionals({
headers: optionalsInput.headers,
cancellationToken: optionalsInput.cancellationToken,
});
const headers = optionals.headers;
const cancellationToken = optionals.cancellationToken;
const headersMap = prepareParams({ ...{}, ...headers.extraHeaders });
const response = await this.networkSession.networkClient.fetch(new FetchOptions({
url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/ai/text_gen'),
method: 'POST',
headers: headersMap,
data: serializeAiTextGen(requestBody),
contentType: 'application/json',
responseFormat: 'json',
auth: this.auth,
networkSession: this.networkSession,
cancellationToken: cancellationToken,
}));
return {
...deserializeAiResponse(response.data),
rawData: response.data,
};
}
/**
* Get the AI agent default config.
* @param {GetAiAgentDefaultConfigQueryParams} queryParams Query parameters of getAiAgentDefaultConfig method
* @param {GetAiAgentDefaultConfigOptionalsInput} optionalsInput
* @returns {Promise<AiAgent>}
*/
async getAiAgentDefaultConfig(queryParams, optionalsInput = {}) {
const optionals = new GetAiAgentDefaultConfigOptionals({
headers: optionalsInput.headers,
cancellationToken: optionalsInput.cancellationToken,
});
const headers = optionals.headers;
const cancellationToken = optionals.cancellationToken;
const queryParamsMap = prepareParams({
['mode']: toString(queryParams.mode),
['language']: toString(queryParams.language),
['model']: toString(queryParams.model),
});
const headersMap = prepareParams({ ...{}, ...headers.extraHeaders });
const response = await this.networkSession.networkClient.fetch(new FetchOptions({
url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/ai_agent_default'),
method: 'GET',
params: queryParamsMap,
headers: headersMap,
responseFormat: 'json',
auth: this.auth,
networkSession: this.networkSession,
cancellationToken: cancellationToken,
}));
return {
...deserializeAiAgent(response.data),
rawData: response.data,
};
}
/**
* Sends an AI request to supported Large Language Models (LLMs) and extracts metadata in form of key-value pairs.
* In this request, both the prompt and the output can be freeform.
* Metadata template setup before sending the request is not required.
* @param {AiExtract} requestBody Request body of createAiExtract method
* @param {CreateAiExtractOptionalsInput} optionalsInput
* @returns {Promise<AiResponse>}
*/
async createAiExtract(requestBody, optionalsInput = {}) {
const optionals = new CreateAiExtractOptionals({
headers: optionalsInput.headers,
cancellationToken: optionalsInput.cancellationToken,
});
const headers = optionals.headers;
const cancellationToken = optionals.cancellationToken;
const headersMap = prepareParams({ ...{}, ...headers.extraHeaders });
const response = await this.networkSession.networkClient.fetch(new FetchOptions({
url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/ai/extract'),
method: 'POST',
headers: headersMap,
data: serializeAiExtract(requestBody),
contentType: 'application/json',
responseFormat: 'json',
auth: this.auth,
networkSession: this.networkSession,
cancellationToken: cancellationToken,
}));
return {
...deserializeAiResponse(response.data),
rawData: response.data,
};
}
/**
* Sends an AI request to supported Large Language Models (LLMs) and returns extracted metadata as a set of key-value pairs.
*
* To define the extraction structure, provide either a metadata template or a list of fields. To learn more about creating templates, see [Creating metadata templates in the Admin Console](https://support.box.com/hc/en-us/articles/360044194033-Customizing-Metadata-Templates)
* or use the [metadata template API](https://developer.box.com/guides/metadata/templates/create).
*
* This endpoint also supports [Enhanced Extract Agent](https://developer.box.com/guides/box-ai/ai-tutorials/extract-metadata-structured#enhanced-extract-agent).
*
* For information about supported file formats and languages, see the [Extract metadata from file (structured)](https://developer.box.com/guides/box-ai/ai-tutorials/extract-metadata-structured) API guide.
* @param {AiExtractStructured} requestBody Request body of createAiExtractStructured method
* @param {CreateAiExtractStructuredOptionalsInput} optionalsInput
* @returns {Promise<AiExtractStructuredResponse>}
*/
async createAiExtractStructured(requestBody, optionalsInput = {}) {
const optionals = new CreateAiExtractStructuredOptionals({
headers: optionalsInput.headers,
cancellationToken: optionalsInput.cancellationToken,
});
const headers = optionals.headers;
const cancellationToken = optionals.cancellationToken;
const headersMap = prepareParams({ ...{}, ...headers.extraHeaders });
const response = await this.networkSession.networkClient.fetch(new FetchOptions({
url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/ai/extract_structured'),
method: 'POST',
headers: headersMap,
data: serializeAiExtractStructured(requestBody),
contentType: 'application/json',
responseFormat: 'json',
auth: this.auth,
networkSession: this.networkSession,
cancellationToken: cancellationToken,
}));
return {
...deserializeAiExtractStructuredResponse(response.data),
rawData: response.data,
};
}
}
export function serializeGetAiAgentDefaultConfigQueryParamsModeField(val) {
return val;
}
export function deserializeGetAiAgentDefaultConfigQueryParamsModeField(val) {
if (val == 'ask') {
return val;
}
if (val == 'text_gen') {
return val;
}
if (val == 'extract') {
return val;
}
if (val == 'extract_structured') {
return val;
}
if (sdIsString(val)) {
return val;
}
throw new BoxSdkError({
message: "Can't deserialize GetAiAgentDefaultConfigQueryParamsModeField",
});
}
//# sourceMappingURL=ai.js.map