🤖 feat: GPT-4.1 (#6880)

* fix: Agent Builder setting not applying in useSideNavLinks

* fix: Remove unused type imports in useSideNavLinks

* feat: gpt-4.1

* fix: Update getCacheMultiplier and getMultiplier tests to use dynamic token values

* feat: Add gpt-4.1 to the list of vision models

* chore: Bump version of librechat-data-provider to 0.7.792
This commit is contained in:
Danny Avila 2025-04-14 14:55:59 -04:00 committed by GitHub
parent 64bd373bc8
commit 52b3ed54ca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 224 additions and 48 deletions

View file

@ -14,6 +14,9 @@ const openAIModels = {
'gpt-4-1106': 127500, // -500 from max
'gpt-4-0125': 127500, // -500 from max
'gpt-4.5': 127500, // -500 from max
'gpt-4.1': 1047576,
'gpt-4.1-mini': 1047576,
'gpt-4.1-nano': 1047576,
'gpt-4o': 127500, // -500 from max
'gpt-4o-mini': 127500, // -500 from max
'gpt-4o-2024-05-13': 127500, // -500 from max

View file

@ -113,6 +113,43 @@ describe('getModelMaxTokens', () => {
);
});
test('should return correct tokens for gpt-4.1 matches', () => {
expect(getModelMaxTokens('gpt-4.1')).toBe(maxTokensMap[EModelEndpoint.openAI]['gpt-4.1']);
expect(getModelMaxTokens('gpt-4.1-preview')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1'],
);
expect(getModelMaxTokens('openai/gpt-4.1')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1'],
);
expect(getModelMaxTokens('gpt-4.1-2024-08-06')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1'],
);
});
test('should return correct tokens for gpt-4.1-mini matches', () => {
expect(getModelMaxTokens('gpt-4.1-mini')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-mini'],
);
expect(getModelMaxTokens('gpt-4.1-mini-preview')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-mini'],
);
expect(getModelMaxTokens('openai/gpt-4.1-mini')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-mini'],
);
});
test('should return correct tokens for gpt-4.1-nano matches', () => {
expect(getModelMaxTokens('gpt-4.1-nano')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-nano'],
);
expect(getModelMaxTokens('gpt-4.1-nano-preview')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-nano'],
);
expect(getModelMaxTokens('openai/gpt-4.1-nano')).toBe(
maxTokensMap[EModelEndpoint.openAI]['gpt-4.1-nano'],
);
});
test('should return correct tokens for Anthropic models', () => {
const models = [
'claude-2.1',
@ -355,6 +392,25 @@ describe('matchModelName', () => {
expect(matchModelName('gpt-4-0125-vision-preview')).toBe('gpt-4-0125');
});
it('should return the closest matching key for gpt-4.1 matches', () => {
expect(matchModelName('openai/gpt-4.1')).toBe('gpt-4.1');
expect(matchModelName('gpt-4.1-preview')).toBe('gpt-4.1');
expect(matchModelName('gpt-4.1-2024-08-06')).toBe('gpt-4.1');
expect(matchModelName('gpt-4.1-2024-08-06-0718')).toBe('gpt-4.1');
});
it('should return the closest matching key for gpt-4.1-mini matches', () => {
expect(matchModelName('openai/gpt-4.1-mini')).toBe('gpt-4.1-mini');
expect(matchModelName('gpt-4.1-mini-preview')).toBe('gpt-4.1-mini');
expect(matchModelName('gpt-4.1-mini-2024-08-06')).toBe('gpt-4.1-mini');
});
it('should return the closest matching key for gpt-4.1-nano matches', () => {
expect(matchModelName('openai/gpt-4.1-nano')).toBe('gpt-4.1-nano');
expect(matchModelName('gpt-4.1-nano-preview')).toBe('gpt-4.1-nano');
expect(matchModelName('gpt-4.1-nano-2024-08-06')).toBe('gpt-4.1-nano');
});
// Tests for Google models
it('should return the exact model name if it exists in maxTokensMap - Google models', () => {
expect(matchModelName('text-bison-32k', EModelEndpoint.google)).toBe('text-bison-32k');