feat(models): add background task model override config and runtime wiring
This commit is contained in:
@@ -2,12 +2,13 @@ import { randomUUID } from 'crypto';
|
||||
import type { SessionManager } from '../session/manager.js';
|
||||
import type { ModelClient } from '../models/types.js';
|
||||
import type { ModelRouter, ModelTier } from '../models/router.js';
|
||||
import { createClientFromConfig } from '../daemon/models.js';
|
||||
import type { Config, ModelConfig, ModelProvider } from '../config/index.js';
|
||||
import type { ToolRegistry } from '../tools/registry.js';
|
||||
import type { ToolExecutor } from '../tools/executor.js';
|
||||
import { AgentOrchestrator, type DelegationConfig } from '../backends/native/orchestrator.js';
|
||||
import type { ToolUseEvent } from '../backends/native/agent.js';
|
||||
import type { MemoryStore } from '../memory/store.js';
|
||||
import type { Config } from '../config/index.js';
|
||||
import { summarizeSessionOnEnd, type SessionEndSummaryConfig } from '../session/endSummary.js';
|
||||
|
||||
export interface SessionBridgeConfig {
|
||||
@@ -284,6 +285,7 @@ export class SessionBridge {
|
||||
tool_summarisation: config?.agents.delegation.tool_summarisation ?? 'fast',
|
||||
complex_reasoning: config?.agents.delegation.complex_reasoning ?? 'complex',
|
||||
};
|
||||
const backgroundModelOverrides = this.buildBackgroundModelOverrides();
|
||||
|
||||
agent = new AgentOrchestrator({
|
||||
modelRouter: this.config.modelClient as ModelRouter,
|
||||
@@ -293,6 +295,7 @@ export class SessionBridge {
|
||||
toolExecutor: this.config.toolExecutor,
|
||||
primaryTier,
|
||||
delegation: delegationConfig,
|
||||
backgroundModelOverrides,
|
||||
maxDelegationDepth: config?.agents.max_delegation_depth ?? 3,
|
||||
maxIterations: config?.agents.max_iterations,
|
||||
compaction: config?.compaction.enabled ? {
|
||||
@@ -337,4 +340,77 @@ export class SessionBridge {
|
||||
}
|
||||
return agent;
|
||||
}
|
||||
|
||||
private buildBackgroundModelOverrides(): Partial<Record<keyof DelegationConfig, {
|
||||
client: ModelClient;
|
||||
label: string;
|
||||
fallbackTier: ModelTier;
|
||||
}>> {
|
||||
const runtimeConfig = this.config.config;
|
||||
const overrides: Partial<Record<keyof DelegationConfig, {
|
||||
client: ModelClient;
|
||||
label: string;
|
||||
fallbackTier: ModelTier;
|
||||
}>> = {};
|
||||
if (!runtimeConfig) {
|
||||
return overrides;
|
||||
}
|
||||
|
||||
const providerConfigs = this.buildProviderConfigMap(runtimeConfig);
|
||||
const configured = runtimeConfig.agents?.background_models ?? {};
|
||||
const tasks: Array<keyof DelegationConfig> = [
|
||||
'compaction',
|
||||
'memory_extraction',
|
||||
'classification',
|
||||
'tool_summarisation',
|
||||
'complex_reasoning',
|
||||
];
|
||||
|
||||
for (const task of tasks) {
|
||||
const entry = configured[task];
|
||||
if (!entry || entry.enabled === false) {
|
||||
continue;
|
||||
}
|
||||
const template = providerConfigs[entry.provider];
|
||||
try {
|
||||
const client = createClientFromConfig(
|
||||
template
|
||||
? { ...template, provider: entry.provider, model: entry.model }
|
||||
: { provider: entry.provider, model: entry.model },
|
||||
);
|
||||
overrides[task] = {
|
||||
client,
|
||||
label: `${entry.provider}/${entry.model}`,
|
||||
fallbackTier: entry.fallback_tier,
|
||||
};
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
`[Flynn:gateway] Failed to initialize background model override for ${task} ` +
|
||||
`(${entry.provider}/${entry.model}): ${error instanceof Error ? error.message : String(error)}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return overrides;
|
||||
}
|
||||
|
||||
private buildProviderConfigMap(config: Config): Partial<Record<ModelProvider, ModelConfig>> {
|
||||
const providerConfigs: Partial<Record<ModelProvider, ModelConfig>> = {};
|
||||
const modelConfigs: ModelConfig[] = [
|
||||
config.models.default,
|
||||
...(config.models.fast ? [config.models.fast] : []),
|
||||
...(config.models.complex ? [config.models.complex] : []),
|
||||
...(config.models.local ? [config.models.local] : []),
|
||||
...Object.values(config.models.local_providers ?? {}),
|
||||
];
|
||||
|
||||
for (const modelConfig of modelConfigs) {
|
||||
providerConfigs[modelConfig.provider] = modelConfig;
|
||||
if (modelConfig.fallback) {
|
||||
providerConfigs[modelConfig.fallback.provider] = modelConfig.fallback;
|
||||
}
|
||||
}
|
||||
|
||||
return providerConfigs;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user