1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { StorageEnum } from '../base/enums';
- import { createStorage } from '../base/base';
- import type { BaseStorage } from '../base/types';
- import { type AgentNameEnum, type LLMProviderEnum, llmProviderModelNames } from './types';
- // Interface for a single model configuration
- export interface ModelConfig {
- provider: LLMProviderEnum;
- modelName: string;
- }
- // Interface for storing multiple agent model configurations
- export interface AgentModelRecord {
- agents: Record<AgentNameEnum, ModelConfig>;
- }
- export type AgentModelStorage = BaseStorage<AgentModelRecord> & {
- setAgentModel: (agent: AgentNameEnum, config: ModelConfig) => Promise<void>;
- getAgentModel: (agent: AgentNameEnum) => Promise<ModelConfig | undefined>;
- resetAgentModel: (agent: AgentNameEnum) => Promise<void>;
- hasAgentModel: (agent: AgentNameEnum) => Promise<boolean>;
- getConfiguredAgents: () => Promise<AgentNameEnum[]>;
- getAllAgentModels: () => Promise<Record<AgentNameEnum, ModelConfig>>;
- };
- const storage = createStorage<AgentModelRecord>(
- 'agent-models',
- { agents: {} as Record<AgentNameEnum, ModelConfig> },
- {
- storageEnum: StorageEnum.Local,
- liveUpdate: true,
- },
- );
- function validateModelConfig(config: ModelConfig) {
- if (!config.provider || !config.modelName) {
- throw new Error('Provider and model name must be specified');
- }
- const validModels = llmProviderModelNames[config.provider];
- if (!validModels.includes(config.modelName)) {
- throw new Error(`Invalid model "${config.modelName}" for provider "${config.provider}"`);
- }
- }
- export const agentModelStore: AgentModelStorage = {
- ...storage,
- setAgentModel: async (agent: AgentNameEnum, config: ModelConfig) => {
- validateModelConfig(config);
- await storage.set(current => ({
- agents: {
- ...current.agents,
- [agent]: config,
- },
- }));
- },
- getAgentModel: async (agent: AgentNameEnum) => {
- const data = await storage.get();
- return data.agents[agent];
- },
- resetAgentModel: async (agent: AgentNameEnum) => {
- await storage.set(current => {
- const newAgents = { ...current.agents };
- delete newAgents[agent];
- return { agents: newAgents };
- });
- },
- hasAgentModel: async (agent: AgentNameEnum) => {
- const data = await storage.get();
- return agent in data.agents;
- },
- getConfiguredAgents: async () => {
- const data = await storage.get();
- return Object.keys(data.agents) as AgentNameEnum[];
- },
- getAllAgentModels: async () => {
- const data = await storage.get();
- return data.agents;
- },
- };
|