agentModels.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { StorageEnum } from '../base/enums';
  2. import { createStorage } from '../base/base';
  3. import type { BaseStorage } from '../base/types';
  4. import type { AgentNameEnum } from './types';
  5. // Interface for a single model configuration
  6. export interface ModelConfig {
  7. provider: string;
  8. modelName: string;
  9. }
  10. // Interface for storing multiple agent model configurations
  11. export interface AgentModelRecord {
  12. agents: Record<AgentNameEnum, ModelConfig>;
  13. }
  14. export type AgentModelStorage = BaseStorage<AgentModelRecord> & {
  15. setAgentModel: (agent: AgentNameEnum, config: ModelConfig) => Promise<void>;
  16. getAgentModel: (agent: AgentNameEnum) => Promise<ModelConfig | undefined>;
  17. resetAgentModel: (agent: AgentNameEnum) => Promise<void>;
  18. hasAgentModel: (agent: AgentNameEnum) => Promise<boolean>;
  19. getConfiguredAgents: () => Promise<AgentNameEnum[]>;
  20. getAllAgentModels: () => Promise<Record<AgentNameEnum, ModelConfig>>;
  21. };
  22. const storage = createStorage<AgentModelRecord>(
  23. 'agent-models',
  24. { agents: {} as Record<AgentNameEnum, ModelConfig> },
  25. {
  26. storageEnum: StorageEnum.Local,
  27. liveUpdate: true,
  28. },
  29. );
  30. function validateModelConfig(config: ModelConfig) {
  31. if (!config.provider || !config.modelName) {
  32. throw new Error('Provider and model name must be specified');
  33. }
  34. }
  35. export const agentModelStore: AgentModelStorage = {
  36. ...storage,
  37. setAgentModel: async (agent: AgentNameEnum, config: ModelConfig) => {
  38. validateModelConfig(config);
  39. await storage.set(current => ({
  40. agents: {
  41. ...current.agents,
  42. [agent]: config,
  43. },
  44. }));
  45. },
  46. getAgentModel: async (agent: AgentNameEnum) => {
  47. const data = await storage.get();
  48. return data.agents[agent];
  49. },
  50. resetAgentModel: async (agent: AgentNameEnum) => {
  51. await storage.set(current => {
  52. const newAgents = { ...current.agents };
  53. delete newAgents[agent];
  54. return { agents: newAgents };
  55. });
  56. },
  57. hasAgentModel: async (agent: AgentNameEnum) => {
  58. const data = await storage.get();
  59. return agent in data.agents;
  60. },
  61. getConfiguredAgents: async () => {
  62. const data = await storage.get();
  63. return Object.keys(data.agents) as AgentNameEnum[];
  64. },
  65. getAllAgentModels: async () => {
  66. const data = await storage.get();
  67. return data.agents;
  68. },
  69. };