mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 16:30:15 +01:00
fix(getMultiplier): correct rate for gpt-4 context
This commit is contained in:
parent
ce966419f7
commit
599d70f1de
2 changed files with 14 additions and 11 deletions
|
|
@ -1,12 +1,13 @@
|
|||
const { matchModelName } = require('../utils');
|
||||
const defaultRate = 6;
|
||||
|
||||
/**
|
||||
* Mapping of model token sizes to their respective multipliers for prompt and completion.
|
||||
* @type {Object.<string, {prompt: number, completion: number}>}
|
||||
*/
|
||||
const tokenValues = {
|
||||
'8k': { prompt: 3, completion: 6 },
|
||||
'32k': { prompt: 6, completion: 12 },
|
||||
'8k': { prompt: 30, completion: 60 },
|
||||
'32k': { prompt: 60, completion: 120 },
|
||||
'4k': { prompt: 1.5, completion: 2 },
|
||||
'16k': { prompt: 3, completion: 4 },
|
||||
};
|
||||
|
|
@ -48,7 +49,7 @@ const getValueKey = (model) => {
|
|||
*/
|
||||
const getMultiplier = ({ valueKey, tokenType, model }) => {
|
||||
if (valueKey && tokenType) {
|
||||
return tokenValues[valueKey][tokenType] ?? 4.5;
|
||||
return tokenValues[valueKey][tokenType] ?? defaultRate;
|
||||
}
|
||||
|
||||
if (!tokenType || !model) {
|
||||
|
|
@ -57,11 +58,11 @@ const getMultiplier = ({ valueKey, tokenType, model }) => {
|
|||
|
||||
valueKey = getValueKey(model);
|
||||
if (!valueKey) {
|
||||
return 4.5;
|
||||
return defaultRate;
|
||||
}
|
||||
|
||||
// If we got this far, and values[tokenType] is undefined somehow, return a rough average of default multipliers
|
||||
return tokenValues[valueKey][tokenType] ?? 4.5;
|
||||
return tokenValues[valueKey][tokenType] ?? defaultRate;
|
||||
};
|
||||
|
||||
module.exports = { tokenValues, getValueKey, getMultiplier };
|
||||
module.exports = { tokenValues, getValueKey, getMultiplier, defaultRate };
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const { getValueKey, getMultiplier } = require('./tx');
|
||||
const { getValueKey, getMultiplier, defaultRate } = require('./tx');
|
||||
|
||||
describe('getValueKey', () => {
|
||||
it('should return "16k" for model name containing "gpt-3.5-turbo-16k"', () => {
|
||||
|
|
@ -28,8 +28,8 @@ describe('getMultiplier', () => {
|
|||
expect(getMultiplier({ valueKey: '8k', tokenType: 'completion' })).toBe(6);
|
||||
});
|
||||
|
||||
it('should return 4.5 if tokenType is provided but not found in tokenValues', () => {
|
||||
expect(getMultiplier({ valueKey: '8k', tokenType: 'unknownType' })).toBe(4.5);
|
||||
it('should return defaultRate if tokenType is provided but not found in tokenValues', () => {
|
||||
expect(getMultiplier({ valueKey: '8k', tokenType: 'unknownType' })).toBe(defaultRate);
|
||||
});
|
||||
|
||||
it('should derive the valueKey from the model if not provided', () => {
|
||||
|
|
@ -41,7 +41,9 @@ describe('getMultiplier', () => {
|
|||
expect(getMultiplier({ model: 'gpt-4-some-other-info' })).toBe(1);
|
||||
});
|
||||
|
||||
it('should return 4.5 if derived valueKey does not match any known patterns', () => {
|
||||
expect(getMultiplier({ tokenType: 'prompt', model: 'gpt-5-some-other-info' })).toBe(4.5);
|
||||
it('should return defaultRate if derived valueKey does not match any known patterns', () => {
|
||||
expect(getMultiplier({ tokenType: 'prompt', model: 'gpt-5-some-other-info' })).toBe(
|
||||
defaultRate,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue