mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-03-12 11:02:37 +01:00
📦 refactor: Consolidate DB models, encapsulating Mongoose usage in data-schemas (#11830)
* chore: move database model methods to /packages/data-schemas * chore: add TypeScript ESLint rule to warn on unused variables * refactor: model imports to streamline access - Consolidated model imports across various files to improve code organization and reduce redundancy. - Updated imports for models such as Assistant, Message, Conversation, and others to a unified import path. - Adjusted middleware and service files to reflect the new import structure, ensuring functionality remains intact. - Enhanced test files to align with the new import paths, maintaining test coverage and integrity. * chore: migrate database models to packages/data-schemas and refactor all direct Mongoose Model usage outside of data-schemas * test: update agent model mocks in unit tests - Added `getAgent` mock to `client.test.js` to enhance test coverage for agent-related functionality. - Removed redundant `getAgent` and `getAgents` mocks from `openai.spec.js` and `responses.unit.spec.js` to streamline test setup and reduce duplication. - Ensured consistency in agent mock implementations across test files. * fix: update types in data-schemas * refactor: enhance type definitions in transaction and spending methods - Updated type definitions in `checkBalance.ts` to use specific request and response types. - Refined `spendTokens.ts` to utilize a new `SpendTxData` interface for better clarity and type safety. - Improved transaction handling in `transaction.ts` by introducing `TransactionResult` and `TxData` interfaces, ensuring consistent data structures across methods. - Adjusted unit tests in `transaction.spec.ts` to accommodate new type definitions and enhance robustness. * refactor: streamline model imports and enhance code organization - Consolidated model imports across various controllers and services to a unified import path, improving code clarity and reducing redundancy. - Updated multiple files to reflect the new import structure, ensuring all functionalities remain intact. - Enhanced overall code organization by removing duplicate import statements and optimizing the usage of model methods. * feat: implement loadAddedAgent and refactor agent loading logic - Introduced `loadAddedAgent` function to handle loading agents from added conversations, supporting multi-convo parallel execution. - Created a new `load.ts` file to encapsulate agent loading functionalities, including `loadEphemeralAgent` and `loadAgent`. - Updated the `index.ts` file to export the new `load` module instead of the deprecated `loadAgent`. - Enhanced type definitions and improved error handling in the agent loading process. - Adjusted unit tests to reflect changes in the agent loading structure and ensure comprehensive coverage. * refactor: enhance balance handling with new update interface - Introduced `IBalanceUpdate` interface to streamline balance update operations across the codebase. - Updated `upsertBalanceFields` method signatures in `balance.ts`, `transaction.ts`, and related tests to utilize the new interface for improved type safety. - Adjusted type imports in `balance.spec.ts` to include `IBalanceUpdate`, ensuring consistency in balance management functionalities. - Enhanced overall code clarity and maintainability by refining type definitions related to balance operations. * feat: add unit tests for loadAgent functionality and enhance agent loading logic - Introduced comprehensive unit tests for the `loadAgent` function, covering various scenarios including null and empty agent IDs, loading of ephemeral agents, and permission checks. - Enhanced the `initializeClient` function by moving `getConvoFiles` to the correct position in the database method exports, ensuring proper functionality. - Improved test coverage for agent loading, including handling of non-existent agents and user permissions. * chore: reorder memory method exports for consistency - Moved `deleteAllUserMemories` to the correct position in the exported memory methods, ensuring a consistent and logical order of method exports in `memory.ts`.
This commit is contained in:
parent
23f669687b
commit
41e877a280
182 changed files with 8525 additions and 8038 deletions
|
|
@ -1,6 +1,6 @@
|
|||
import { createSessionMethods, DEFAULT_REFRESH_TOKEN_EXPIRY, type SessionMethods } from './session';
|
||||
import { createTokenMethods, type TokenMethods } from './token';
|
||||
import { createRoleMethods, type RoleMethods } from './role';
|
||||
import { createRoleMethods, type RoleMethods, type RoleDeps } from './role';
|
||||
import { createUserMethods, DEFAULT_SESSION_EXPIRY, type UserMethods } from './user';
|
||||
|
||||
export { DEFAULT_REFRESH_TOKEN_EXPIRY, DEFAULT_SESSION_EXPIRY };
|
||||
|
|
@ -21,7 +21,34 @@ import { createAccessRoleMethods, type AccessRoleMethods } from './accessRole';
|
|||
import { createUserGroupMethods, type UserGroupMethods } from './userGroup';
|
||||
import { createAclEntryMethods, type AclEntryMethods } from './aclEntry';
|
||||
import { createShareMethods, type ShareMethods } from './share';
|
||||
/* Tier 1 — Simple CRUD */
|
||||
import { createActionMethods, type ActionMethods } from './action';
|
||||
import { createAssistantMethods, type AssistantMethods } from './assistant';
|
||||
import { createBannerMethods, type BannerMethods } from './banner';
|
||||
import { createToolCallMethods, type ToolCallMethods } from './toolCall';
|
||||
import { createCategoriesMethods, type CategoriesMethods } from './categories';
|
||||
import { createPresetMethods, type PresetMethods } from './preset';
|
||||
/* Tier 2 — Moderate (service deps injected) */
|
||||
import { createConversationTagMethods, type ConversationTagMethods } from './conversationTag';
|
||||
import { createMessageMethods, type MessageMethods } from './message';
|
||||
import { createConversationMethods, type ConversationMethods } from './conversation';
|
||||
/* Tier 3 — Complex (heavier injection) */
|
||||
import {
|
||||
createTxMethods,
|
||||
type TxMethods,
|
||||
type TxDeps,
|
||||
tokenValues,
|
||||
cacheTokenValues,
|
||||
premiumTokenValues,
|
||||
defaultRate,
|
||||
} from './tx';
|
||||
import { createTransactionMethods, type TransactionMethods } from './transaction';
|
||||
import { createSpendTokensMethods, type SpendTokensMethods } from './spendTokens';
|
||||
import { createPromptMethods, type PromptMethods, type PromptDeps } from './prompt';
|
||||
/* Tier 5 — Agent */
|
||||
import { createAgentMethods, type AgentMethods, type AgentDeps } from './agent';
|
||||
|
||||
export { tokenValues, cacheTokenValues, premiumTokenValues, defaultRate };
|
||||
|
||||
export type AllMethods = UserMethods &
|
||||
SessionMethods &
|
||||
|
|
@ -38,18 +65,101 @@ export type AllMethods = UserMethods &
|
|||
ShareMethods &
|
||||
AccessRoleMethods &
|
||||
PluginAuthMethods &
|
||||
TransactionMethods;
|
||||
ActionMethods &
|
||||
AssistantMethods &
|
||||
BannerMethods &
|
||||
ToolCallMethods &
|
||||
CategoriesMethods &
|
||||
PresetMethods &
|
||||
ConversationTagMethods &
|
||||
MessageMethods &
|
||||
ConversationMethods &
|
||||
TxMethods &
|
||||
TransactionMethods &
|
||||
SpendTokensMethods &
|
||||
PromptMethods &
|
||||
AgentMethods;
|
||||
|
||||
/** Dependencies injected from the api layer into createMethods */
|
||||
export interface CreateMethodsDeps {
|
||||
/** Matches a model name to a canonical key. From @librechat/api. */
|
||||
matchModelName?: (model: string, endpoint?: string) => string | undefined;
|
||||
/** Finds the first key in values whose key is a substring of model. From @librechat/api. */
|
||||
findMatchingPattern?: (model: string, values: Record<string, unknown>) => string | undefined;
|
||||
/** Removes all ACL permissions for a resource. From PermissionService. */
|
||||
removeAllPermissions?: (params: { resourceType: string; resourceId: unknown }) => Promise<void>;
|
||||
/** Returns a cache store for the given key. From getLogStores. */
|
||||
getCache?: RoleDeps['getCache'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates all database methods for all collections
|
||||
* @param mongoose - Mongoose instance
|
||||
* @param deps - Optional dependencies injected from the api layer
|
||||
*/
|
||||
export function createMethods(mongoose: typeof import('mongoose')): AllMethods {
|
||||
export function createMethods(
|
||||
mongoose: typeof import('mongoose'),
|
||||
deps: CreateMethodsDeps = {},
|
||||
): AllMethods {
|
||||
// Tier 3: tx methods need matchModelName and findMatchingPattern
|
||||
const txDeps: TxDeps = {
|
||||
matchModelName: deps.matchModelName ?? (() => undefined),
|
||||
findMatchingPattern: deps.findMatchingPattern ?? (() => undefined),
|
||||
};
|
||||
const txMethods = createTxMethods(mongoose, txDeps);
|
||||
|
||||
// Tier 3: transaction methods need tx's getMultiplier/getCacheMultiplier
|
||||
const transactionMethods = createTransactionMethods(mongoose, {
|
||||
getMultiplier: txMethods.getMultiplier,
|
||||
getCacheMultiplier: txMethods.getCacheMultiplier,
|
||||
});
|
||||
|
||||
// Tier 3: spendTokens methods need transaction methods
|
||||
const spendTokensMethods = createSpendTokensMethods(mongoose, {
|
||||
createTransaction: transactionMethods.createTransaction,
|
||||
createStructuredTransaction: transactionMethods.createStructuredTransaction,
|
||||
});
|
||||
|
||||
const messageMethods = createMessageMethods(mongoose);
|
||||
|
||||
const conversationMethods = createConversationMethods(mongoose, {
|
||||
getMessages: messageMethods.getMessages,
|
||||
deleteMessages: messageMethods.deleteMessages,
|
||||
});
|
||||
|
||||
// ACL entry methods (used internally for removeAllPermissions)
|
||||
const aclEntryMethods = createAclEntryMethods(mongoose);
|
||||
|
||||
// Internal removeAllPermissions: use deleteAclEntries from aclEntryMethods
|
||||
// instead of requiring it as an external dep from PermissionService
|
||||
const removeAllPermissions =
|
||||
deps.removeAllPermissions ??
|
||||
(async ({ resourceType, resourceId }: { resourceType: string; resourceId: unknown }) => {
|
||||
await aclEntryMethods.deleteAclEntries({ resourceType, resourceId });
|
||||
});
|
||||
|
||||
const promptDeps: PromptDeps = { removeAllPermissions };
|
||||
const promptMethods = createPromptMethods(mongoose, promptDeps);
|
||||
|
||||
// Role methods with optional cache injection
|
||||
const roleDeps: RoleDeps = { getCache: deps.getCache };
|
||||
const roleMethods = createRoleMethods(mongoose, roleDeps);
|
||||
|
||||
// Tier 1: action methods (created as variable for agent dependency)
|
||||
const actionMethods = createActionMethods(mongoose);
|
||||
|
||||
// Tier 5: agent methods need removeAllPermissions + getActions
|
||||
const agentDeps: AgentDeps = {
|
||||
removeAllPermissions,
|
||||
getActions: actionMethods.getActions,
|
||||
};
|
||||
const agentMethods = createAgentMethods(mongoose, agentDeps);
|
||||
|
||||
return {
|
||||
...createUserMethods(mongoose),
|
||||
...createSessionMethods(mongoose),
|
||||
...createTokenMethods(mongoose),
|
||||
...createRoleMethods(mongoose),
|
||||
...roleMethods,
|
||||
...createKeyMethods(mongoose),
|
||||
...createFileMethods(mongoose),
|
||||
...createMemoryMethods(mongoose),
|
||||
|
|
@ -58,10 +168,27 @@ export function createMethods(mongoose: typeof import('mongoose')): AllMethods {
|
|||
...createMCPServerMethods(mongoose),
|
||||
...createAccessRoleMethods(mongoose),
|
||||
...createUserGroupMethods(mongoose),
|
||||
...createAclEntryMethods(mongoose),
|
||||
...aclEntryMethods,
|
||||
...createShareMethods(mongoose),
|
||||
...createPluginAuthMethods(mongoose),
|
||||
...createTransactionMethods(mongoose),
|
||||
/* Tier 1 */
|
||||
...actionMethods,
|
||||
...createAssistantMethods(mongoose),
|
||||
...createBannerMethods(mongoose),
|
||||
...createToolCallMethods(mongoose),
|
||||
...createCategoriesMethods(mongoose),
|
||||
...createPresetMethods(mongoose),
|
||||
/* Tier 2 */
|
||||
...createConversationTagMethods(mongoose),
|
||||
...messageMethods,
|
||||
...conversationMethods,
|
||||
/* Tier 3 */
|
||||
...txMethods,
|
||||
...transactionMethods,
|
||||
...spendTokensMethods,
|
||||
...promptMethods,
|
||||
/* Tier 5 */
|
||||
...agentMethods,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -81,5 +208,18 @@ export type {
|
|||
ShareMethods,
|
||||
AccessRoleMethods,
|
||||
PluginAuthMethods,
|
||||
ActionMethods,
|
||||
AssistantMethods,
|
||||
BannerMethods,
|
||||
ToolCallMethods,
|
||||
CategoriesMethods,
|
||||
PresetMethods,
|
||||
ConversationTagMethods,
|
||||
MessageMethods,
|
||||
ConversationMethods,
|
||||
TxMethods,
|
||||
TransactionMethods,
|
||||
SpendTokensMethods,
|
||||
PromptMethods,
|
||||
AgentMethods,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue