Skip to content

Commit fbb2080

Browse files
authored
fix: don't use ai aggregators if we have the model ourselves (#2424)
* cleanup: eslint changes * fix: don't use ai aggregators if we have the model ourselves
1 parent 5fdfae6 commit fbb2080

File tree

6 files changed

+34
-9
lines changed

6 files changed

+34
-9
lines changed

eslint.config.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ export const rules = {
5959
'no-use-before-define': ['error', {
6060
'functions': false,
6161
}],
62+
'@stylistic/array-bracket-spacing': ['error', 'never'],
63+
'@stylistic/linebreak-style': ['error', 'unix'],
64+
'no-sequences': [
65+
'error', {
66+
allowInParentheses: false,
67+
},
68+
],
6269
};
6370

6471
const tsRules = {

src/backend/src/services/MeteringService/MeteringService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ export class MeteringService {
566566
]);
567567

568568
const defaultSubscriptionId = defaultSubscriptionEvent.defaultSubscriptionId as unknown as (typeof SUB_POLICIES)[number]['id'] || defaultUserSubscriptionId;
569-
const availablePolicies = [ ...availablePoliciesEvent.availablePolicies, ...SUB_POLICIES ];
569+
const availablePolicies = [...availablePoliciesEvent.availablePolicies, ...SUB_POLICIES];
570570
const userSubscriptionId = userSubscriptionEvent.userSubscriptionId as unknown as typeof SUB_POLICIES[number]['id'] || defaultSubscriptionId;
571571

572572
return availablePolicies.find(({ id }) => id === userSubscriptionId) || availablePolicies.find(({ id }) => id === defaultSubscriptionId)!;

src/backend/src/services/MeteringService/costMaps/elevenlabsCostMap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
export const ELEVENLABS_COST_MAP = {
99
'elevenlabs:eleven_multilingual_v2:character': 18000 * 0.9, // using scale costs per additional char * 0.9
1010
'elevenlabs:eleven_turbo_v2_5:character': 18000 * 0.9, // using scale costs per additional char * 0.9
11+
'elevenlabs:eleven_turbo_v2:character': 18000 * 0.9, // using scale costs per additional char * 0.9
1112
'elevenlabs:eleven_flash_v2_5:character': 9000 * 0.9, // using scale costs per additional char * 0.9
1213
'elevenlabs:eleven_v3:character': 18000 * 0.9, // using scale costs per additional char * 0.9
1314
'elevenlabs:eleven_multilingual_sts_v2:second': 300000 * 0.9, // using scale costs unit * 0.9

src/backend/src/services/ai/chat/AIChatService.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import { createId as cuid2 } from '@paralleldrive/cuid2';
2121
import { PassThrough } from 'stream';
2222
import { APIError } from '../../../api/APIError.js';
23+
import { redisClient } from '../../../clients/redis/redisSingleton.js';
2324
import { ErrorService } from '../../../modules/core/ErrorService.js';
2425
import { Context } from '../../../util/context.js';
2526
import BaseService from '../../BaseService.js';
@@ -45,7 +46,6 @@ import { OpenRouterProvider } from './providers/OpenRouterProvider/OpenRouterPro
4546
import { TogetherAIProvider } from './providers/TogetherAiProvider/TogetherAIProvider.js';
4647
import { IChatModel, IChatProvider, ICompleteArguments } from './providers/types.js';
4748
import { XAIProvider } from './providers/XAIProvider/XAIProvider.js';
48-
import { redisClient } from '../../../clients/redis/redisSingleton.js';
4949

5050
// Maximum number of fallback attempts when a model fails, including the first attempt
5151
const MAX_FALLBACKS = 3 + 1; // includes first attempt
@@ -150,14 +150,14 @@ export class AIChatService extends BaseService {
150150
if ( xaiConfig && xaiConfig.apiKey ) {
151151
this.#providers['xai'] = new XAIProvider(xaiConfig, this.meteringService);
152152
}
153-
const togetherConfig = this.config.providers?.['together-ai'] || this.global_config?.services?.['together-ai'];
154-
if ( togetherConfig && togetherConfig.apiKey ) {
155-
this.#providers['together-ai'] = new TogetherAIProvider(togetherConfig, this.meteringService);
156-
}
157153
const openrouterConfig = this.config.providers?.['openrouter'] || this.global_config?.services?.['openrouter'];
158154
if ( openrouterConfig && openrouterConfig.apiKey ) {
159155
this.#providers['openrouter'] = new OpenRouterProvider(openrouterConfig, this.meteringService);
160156
}
157+
const togetherConfig = this.config.providers?.['together-ai'] || this.global_config?.services?.['together-ai'];
158+
if ( togetherConfig && togetherConfig.apiKey ) {
159+
this.#providers['together-ai'] = new TogetherAIProvider(togetherConfig, this.meteringService);
160+
}
161161

162162
// ollama if local instance detected
163163

@@ -221,6 +221,23 @@ export class AIChatService extends BaseService {
221221
model.aliases = [model.puterId];
222222
}
223223
}
224+
225+
let exists = false;
226+
if ( model.aliases ) {
227+
for ( let alias of model.aliases ) {
228+
if ( this.#modelIdMap[alias] && this.#modelIdMap[alias] !== this.#modelIdMap[model.id] ) {
229+
if ( providerName === 'together-ai' || providerName === 'openrouter' ) {
230+
delete this.#modelIdMap[model.id];
231+
exists = true;
232+
break;
233+
}
234+
}
235+
}
236+
}
237+
if ( exists ) {
238+
continue;
239+
}
240+
224241
if ( model.aliases ) {
225242
for ( let alias of model.aliases ) {
226243
alias = alias.trim().toLowerCase();
@@ -674,7 +691,7 @@ export class AIChatService extends BaseService {
674691
if ( targetModel.id.startsWith('openrouter:') || targetModel.id.startsWith('togetherai:') ) {
675692
[aiProvider, modelToSearch] = targetModel.id.replace('openrouter:', '').replace('togetherai:', '').toLowerCase().split('/');
676693
} else {
677-
[aiProvider, modelToSearch] = targetModel.provider!.toLowerCase().replace('gemini', 'google').replace('openai-completion', 'openai').replace('openai-responses', 'openai'), targetModel.id.toLowerCase();
694+
[aiProvider, modelToSearch] = [targetModel.provider!.toLowerCase().replace('gemini', 'google').replace('openai-completion', 'openai').replace('openai-responses', 'openai'), targetModel.id.toLowerCase()];
678695
}
679696

680697
const potentialMatches = models.filter(model => {

src/backend/src/services/ai/chat/providers/ClaudeProvider/ClaudeProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ export class ClaudeProvider implements IChatProvider {
244244
return 'container_upload';
245245
})();
246246

247-
delete task.contentPart.puter_path,
247+
delete task.contentPart.puter_path;
248248
task.contentPart.type = contentBlockTypeForFileBasedOnMime;
249249
task.contentPart.source = {
250250
type: 'file',

src/backend/src/services/ai/chat/providers/ClaudeProvider/models.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export const CLAUDE_MODELS: IChatModel[] = [
44
{
55
puterId: 'anthropic:anthropic/claude-opus-4-6',
66
id: 'claude-opus-4-6',
7-
aliases: ['claude-opus-4-6-latest', 'claude-opus-4.6', 'anthropic/claude-opus-4-6'],
7+
aliases: ['claude-opus-4-6-latest', 'claude-opus-4.6', 'claude-opus-4-6', 'anthropic/claude-opus-4-6'],
88
name: 'Claude Opus 4.6',
99
costs_currency: 'usd-cents',
1010
input_cost_key: 'input_tokens',

0 commit comments

Comments
 (0)