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: 30, completion: 60 }, | |
'32k': { prompt: 60, completion: 120 }, | |
'4k': { prompt: 1.5, completion: 2 }, | |
'16k': { prompt: 3, completion: 4 }, | |
}; | |
/** | |
* Retrieves the key associated with a given model name. | |
* | |
* @param {string} model - The model name to match. | |
* @returns {string|undefined} The key corresponding to the model name, or undefined if no match is found. | |
*/ | |
const getValueKey = (model) => { | |
const modelName = matchModelName(model); | |
if (!modelName) { | |
return undefined; | |
} | |
if (modelName.includes('gpt-3.5-turbo-16k')) { | |
return '16k'; | |
} else if (modelName.includes('gpt-3.5')) { | |
return '4k'; | |
} else if (modelName.includes('gpt-4-32k')) { | |
return '32k'; | |
} else if (modelName.includes('gpt-4')) { | |
return '8k'; | |
} | |
return undefined; | |
}; | |
/** | |
* Retrieves the multiplier for a given value key and token type. If no value key is provided, | |
* it attempts to derive it from the model name. | |
* | |
* @param {Object} params - The parameters for the function. | |
* @param {string} [params.valueKey] - The key corresponding to the model name. | |
* @param {string} [params.tokenType] - The type of token (e.g., 'prompt' or 'completion'). | |
* @param {string} [params.model] - The model name to derive the value key from if not provided. | |
* @returns {number} The multiplier for the given parameters, or a default value if not found. | |
*/ | |
const getMultiplier = ({ valueKey, tokenType, model }) => { | |
if (valueKey && tokenType) { | |
return tokenValues[valueKey][tokenType] ?? defaultRate; | |
} | |
if (!tokenType || !model) { | |
return 1; | |
} | |
valueKey = getValueKey(model); | |
if (!valueKey) { | |
return defaultRate; | |
} | |
// If we got this far, and values[tokenType] is undefined somehow, return a rough average of default multipliers | |
return tokenValues[valueKey][tokenType] ?? defaultRate; | |
}; | |
module.exports = { tokenValues, getValueKey, getMultiplier, defaultRate }; | |