mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-22 03:51:22 -07:00
feat(routing): Initialize model routing architecture (#8153)
This commit is contained in:
54
packages/core/src/routing/modelRouterService.ts
Normal file
54
packages/core/src/routing/modelRouterService.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2025 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import type { Config } from '../config/config.js';
|
||||
import type {
|
||||
RoutingContext,
|
||||
RoutingDecision,
|
||||
TerminalStrategy,
|
||||
} from './routingStrategy.js';
|
||||
import { DefaultStrategy } from './strategies/defaultStrategy.js';
|
||||
import { CompositeStrategy } from './strategies/compositeStrategy.js';
|
||||
import { FallbackStrategy } from './strategies/fallbackStrategy.js';
|
||||
import { OverrideStrategy } from './strategies/overrideStrategy.js';
|
||||
|
||||
/**
|
||||
* A centralized service for making model routing decisions.
|
||||
*/
|
||||
export class ModelRouterService {
|
||||
private config: Config;
|
||||
private strategy: TerminalStrategy;
|
||||
|
||||
constructor(config: Config) {
|
||||
this.config = config;
|
||||
this.strategy = this.initializeDefaultStrategy();
|
||||
}
|
||||
|
||||
private initializeDefaultStrategy(): TerminalStrategy {
|
||||
// Initialize the composite strategy with the desired priority order.
|
||||
// The strategies are ordered in order of highest priority.
|
||||
return new CompositeStrategy(
|
||||
[new FallbackStrategy(), new OverrideStrategy(), new DefaultStrategy()],
|
||||
'agent-router',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines which model to use for a given request context.
|
||||
*
|
||||
* @param context The full context of the request.
|
||||
* @returns A promise that resolves to a RoutingDecision.
|
||||
*/
|
||||
async route(context: RoutingContext): Promise<RoutingDecision> {
|
||||
const decision = await this.strategy.route(
|
||||
context,
|
||||
this.config,
|
||||
this.config.getBaseLlmClient(),
|
||||
);
|
||||
|
||||
return decision;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user