mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00

* feat: update PaLM icons * feat: add additional google models * POC: formatting inputs for Vertex AI streaming * refactor: move endpoints services outside of /routes dir to /services/Endpoints * refactor: shorten schemas import * refactor: rename PALM to GOOGLE * feat: make Google editable endpoint * feat: reusable Ask and Edit controllers based off Anthropic * chore: organize imports/logic * fix(parseConvo): include examples in googleSchema * fix: google only allows odd number of messages to be sent * fix: pass proxy to AnthropicClient * refactor: change `google` altName to `Google` * refactor: update getModelMaxTokens and related functions to handle maxTokensMap with nested endpoint model key/values * refactor: google Icon and response sender changes (Codey and Google logo instead of PaLM in all cases) * feat: google support for maxTokensMap * feat: google updated endpoints with Ask/Edit controllers, buildOptions, and initializeClient * feat(GoogleClient): now builds prompt for text models and supports real streaming from Vertex AI through langchain * chore(GoogleClient): remove comments, left before for reference in git history * docs: update google instructions (WIP) * docs(apis_and_tokens.md): add images to google instructions * docs: remove typo apis_and_tokens.md * Update apis_and_tokens.md * feat(Google): use default settings map, fully support context for both text and chat models, fully support examples for chat models * chore: update more PaLM references to Google * chore: move playwright out of workflows to avoid failing tests
274 lines
6.6 KiB
JavaScript
274 lines
6.6 KiB
JavaScript
const formatGoogleInputs = require('./formatGoogleInputs');
|
|
|
|
describe('formatGoogleInputs', () => {
|
|
it('formats message correctly', () => {
|
|
const input = {
|
|
messages: [
|
|
{
|
|
content: 'hi',
|
|
author: 'user',
|
|
},
|
|
],
|
|
context: 'context',
|
|
examples: [
|
|
{
|
|
input: {
|
|
author: 'user',
|
|
content: 'user input',
|
|
},
|
|
output: {
|
|
author: 'bot',
|
|
content: 'bot output',
|
|
},
|
|
},
|
|
],
|
|
parameters: {
|
|
temperature: 0.2,
|
|
topP: 0.8,
|
|
topK: 40,
|
|
maxOutputTokens: 1024,
|
|
},
|
|
};
|
|
|
|
const expectedOutput = {
|
|
struct_val: {
|
|
messages: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
content: {
|
|
string_val: ['hi'],
|
|
},
|
|
author: {
|
|
string_val: ['user'],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
context: {
|
|
string_val: ['context'],
|
|
},
|
|
examples: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
input: {
|
|
struct_val: {
|
|
author: {
|
|
string_val: ['user'],
|
|
},
|
|
content: {
|
|
string_val: ['user input'],
|
|
},
|
|
},
|
|
},
|
|
output: {
|
|
struct_val: {
|
|
author: {
|
|
string_val: ['bot'],
|
|
},
|
|
content: {
|
|
string_val: ['bot output'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
parameters: {
|
|
struct_val: {
|
|
temperature: {
|
|
float_val: 0.2,
|
|
},
|
|
topP: {
|
|
float_val: 0.8,
|
|
},
|
|
topK: {
|
|
int_val: 40,
|
|
},
|
|
maxOutputTokens: {
|
|
int_val: 1024,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = formatGoogleInputs(input);
|
|
expect(JSON.stringify(result)).toEqual(JSON.stringify(expectedOutput));
|
|
});
|
|
|
|
it('formats real payload parts', () => {
|
|
const input = {
|
|
instances: [
|
|
{
|
|
context: 'context',
|
|
examples: [
|
|
{
|
|
input: {
|
|
author: 'user',
|
|
content: 'user input',
|
|
},
|
|
output: {
|
|
author: 'bot',
|
|
content: 'user output',
|
|
},
|
|
},
|
|
],
|
|
messages: [
|
|
{
|
|
author: 'user',
|
|
content: 'hi',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
parameters: {
|
|
candidateCount: 1,
|
|
maxOutputTokens: 1024,
|
|
temperature: 0.2,
|
|
topP: 0.8,
|
|
topK: 40,
|
|
},
|
|
};
|
|
const expectedOutput = {
|
|
struct_val: {
|
|
instances: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
context: { string_val: ['context'] },
|
|
examples: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
input: {
|
|
struct_val: {
|
|
author: { string_val: ['user'] },
|
|
content: { string_val: ['user input'] },
|
|
},
|
|
},
|
|
output: {
|
|
struct_val: {
|
|
author: { string_val: ['bot'] },
|
|
content: { string_val: ['user output'] },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
messages: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
author: { string_val: ['user'] },
|
|
content: { string_val: ['hi'] },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
parameters: {
|
|
struct_val: {
|
|
candidateCount: { int_val: 1 },
|
|
maxOutputTokens: { int_val: 1024 },
|
|
temperature: { float_val: 0.2 },
|
|
topP: { float_val: 0.8 },
|
|
topK: { int_val: 40 },
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = formatGoogleInputs(input);
|
|
expect(JSON.stringify(result)).toEqual(JSON.stringify(expectedOutput));
|
|
});
|
|
|
|
it('helps create valid payload parts', () => {
|
|
const instances = {
|
|
context: 'context',
|
|
examples: [
|
|
{
|
|
input: {
|
|
author: 'user',
|
|
content: 'user input',
|
|
},
|
|
output: {
|
|
author: 'bot',
|
|
content: 'user output',
|
|
},
|
|
},
|
|
],
|
|
messages: [
|
|
{
|
|
author: 'user',
|
|
content: 'hi',
|
|
},
|
|
],
|
|
};
|
|
|
|
const expectedInstances = {
|
|
struct_val: {
|
|
context: { string_val: ['context'] },
|
|
examples: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
input: {
|
|
struct_val: {
|
|
author: { string_val: ['user'] },
|
|
content: { string_val: ['user input'] },
|
|
},
|
|
},
|
|
output: {
|
|
struct_val: {
|
|
author: { string_val: ['bot'] },
|
|
content: { string_val: ['user output'] },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
messages: {
|
|
list_val: [
|
|
{
|
|
struct_val: {
|
|
author: { string_val: ['user'] },
|
|
content: { string_val: ['hi'] },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|
|
|
|
const parameters = {
|
|
candidateCount: 1,
|
|
maxOutputTokens: 1024,
|
|
temperature: 0.2,
|
|
topP: 0.8,
|
|
topK: 40,
|
|
};
|
|
const expectedParameters = {
|
|
struct_val: {
|
|
candidateCount: { int_val: 1 },
|
|
maxOutputTokens: { int_val: 1024 },
|
|
temperature: { float_val: 0.2 },
|
|
topP: { float_val: 0.8 },
|
|
topK: { int_val: 40 },
|
|
},
|
|
};
|
|
|
|
const instancesResult = formatGoogleInputs(instances);
|
|
const parametersResult = formatGoogleInputs(parameters);
|
|
expect(JSON.stringify(instancesResult)).toEqual(JSON.stringify(expectedInstances));
|
|
expect(JSON.stringify(parametersResult)).toEqual(JSON.stringify(expectedParameters));
|
|
});
|
|
});
|