together-ai-sdk
Version:
A typescript SDK for the Together AI API
172 lines (171 loc) • 6.43 kB
JavaScript
;
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;