UNPKG

together-ai-sdk

Version:

A typescript SDK for the Together AI API

172 lines (171 loc) 6.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.togetherClient = void 0; const raw_1 = require("./raw"); const caseConverter_1 = require("../utils/caseConverter"); const indexArray_1 = require("../utils/indexArray"); const streamEvents_1 = require("./streamEvents"); /** * The complete together client with all of the endpoints * @param config - a configuration object to use for the client * @returns the client to use to send requests to the Together API */ const togetherClient = (config) => { const chat = async (params) => { const response = await (0, raw_1.rawTogetherRequest)({ ...config, endpoint: 'v1/chat/completions', requestParams: { ...(0, caseConverter_1.camelCase2snakeCase)(params), stream: params.streamCallback !== undefined ? true : undefined } }); if (response.status !== 200) { throw response; } if (params.streamCallback === undefined) { return (0, caseConverter_1.snakeCase2camelCase)(await response.json()); } if (response.body == null) { throw response; } const completeResponse = { model: params.model, object: 'chat.completion', usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 }, choices: (0, indexArray_1.indexArray)(params.n ?? 1).map(i => ({ index: i, message: { role: 'assistant', content: '' } })) }; const reader = response.body.getReader(); await (0, streamEvents_1.streamEvents)(reader, async (event) => { if (event === 'done') { await params.streamCallback?.(event); return; } const data = event; completeResponse.id = data.id; completeResponse.created = data.created; completeResponse.usage = { promptTokens: completeResponse.usage.promptTokens, completionTokens: completeResponse.usage.completionTokens + data.choices.length, totalTokens: completeResponse.usage.totalTokens + data.choices.length }; data.choices.forEach(choice => { completeResponse.choices[choice.index].message.content += choice.delta.content; }); if (data.usage != null) { completeResponse.usage = data.usage; } await params.streamCallback?.(data); }); return { ...completeResponse, choices: completeResponse.choices.map(c => ({ ...c, message: { ...c.message, content: c.message.content.trim() } })) }; }; const language = async (params) => { const response = await (0, raw_1.rawTogetherRequest)({ ...config, endpoint: 'v1/completions', requestParams: { ...(0, caseConverter_1.camelCase2snakeCase)(params), stream: params.streamCallback !== undefined ? true : undefined } }); if (response.status !== 200) { throw response; } if (params.streamCallback === undefined) { return (0, caseConverter_1.snakeCase2camelCase)(await response.json()); } if (response.body == null) { throw response; } const completeResponse = { model: params.model, object: 'language.completion', usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 }, choices: (0, indexArray_1.indexArray)(params.n ?? 1).map(_ => ({ text: '' })), created: Math.floor(Date.now() / 1000) }; const reader = response.body.getReader(); await (0, streamEvents_1.streamEvents)(reader, async (event) => { if (event === 'done') { await params.streamCallback?.(event); return; } const data = event; completeResponse.id = data.id; completeResponse.usage = { promptTokens: completeResponse.usage.promptTokens, completionTokens: completeResponse.usage.completionTokens + data.choices.length, totalTokens: completeResponse.usage.totalTokens + data.choices.length }; data.choices.forEach((choice, i) => { completeResponse.choices[i].text += choice.text; }); if (data.usage != null) { completeResponse.usage = data.usage; } await params.streamCallback?.(data); }); return { ...completeResponse, choices: completeResponse.choices.map(c => ({ ...c, text: c.text.trim() })) }; }; const inference = async (params) => { const response = await (0, raw_1.rawTogetherRequest)({ ...config, endpoint: 'inference', requestParams: { ...(0, caseConverter_1.camelCase2snakeCase)(params), stream: false } }); if (response.status !== 200) { throw response; } return (0, caseConverter_1.snakeCase2camelCase)(await response.json()); }; const code = async (params) => { return await language(params); }; const image = async (params) => { return await inference({ ...params, requestType: 'image-model-inference', seed: params.seed ?? Math.floor(Math.random() * 10000) }); }; const embedding = async (params) => { const response = await (0, raw_1.rawTogetherRequest)({ ...config, endpoint: 'v1/embeddings', requestParams: { ...(0, caseConverter_1.camelCase2snakeCase)(params), stream: false } }); if (response.status !== 200) { throw response; } return (0, caseConverter_1.snakeCase2camelCase)(await response.json()); }; return { chat, language, inference, code, embedding, image }; }; exports.togetherClient = togetherClient;