32558673c6
Adds intelligent routing system that automatically selects the best agent for user queries based on conversation context. ### Changes: - Added `routerModel` column to workspace table for configurable router LLM selection - Implemented `RouterService` with conversation history analysis and agent matching logic - Created router settings UI in AI Settings page with model dropdown - Removed agent-specific thread associations - threads are now agent-agnostic - Added real-time routing status notification in chat UI with shimmer effect - Removed automatic default assistant agent creation - Renamed GraphQL operations from agent-specific to generic (e.g., `agentChatThreads` → `chatThreads`) --------- Co-authored-by: Félix Malfait <felix.malfait@gmail.com> Co-authored-by: Félix Malfait <felix@twenty.com>
115 lines
4.9 KiB
TypeScript
115 lines
4.9 KiB
TypeScript
import { Module, forwardRef } from '@nestjs/common';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
|
|
import { AiModule } from 'src/engine/core-modules/ai/ai.module';
|
|
import { AuditModule } from 'src/engine/core-modules/audit/audit.module';
|
|
import { TokenModule } from 'src/engine/core-modules/auth/token/token.module';
|
|
import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module';
|
|
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
|
import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity';
|
|
import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module';
|
|
import { FileModule } from 'src/engine/core-modules/file/file.module';
|
|
import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.module';
|
|
import { UserModule } from 'src/engine/core-modules/user/user.module';
|
|
import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
|
import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module';
|
|
import { AgentRoleModule } from 'src/engine/metadata-modules/agent-role/agent-role.module';
|
|
import { AgentChatController } from 'src/engine/metadata-modules/agent/agent-chat.controller';
|
|
import { AiRouterModule } from 'src/engine/metadata-modules/ai-router/ai-router.module';
|
|
import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module';
|
|
import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module';
|
|
import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity';
|
|
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
|
import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module';
|
|
import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module';
|
|
import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module';
|
|
import { WorkflowToolsModule } from 'src/modules/workflow/workflow-tools/workflow-tools.module';
|
|
|
|
import { AgentChatMessagePartEntity } from './agent-chat-message-part.entity';
|
|
import { AgentChatMessageEntity } from './agent-chat-message.entity';
|
|
import { AgentChatThreadEntity } from './agent-chat-thread.entity';
|
|
import { AgentChatResolver } from './agent-chat.resolver';
|
|
import { AgentChatService } from './agent-chat.service';
|
|
import { AgentExecutionService } from './agent-execution.service';
|
|
import { AgentHandoffExecutorService } from './agent-handoff-executor.service';
|
|
import { AgentHandoffToolService } from './agent-handoff-tool.service';
|
|
import { AgentHandoffEntity } from './agent-handoff.entity';
|
|
import { AgentHandoffService } from './agent-handoff.service';
|
|
import { AgentModelConfigService } from './agent-model-config.service';
|
|
import { AgentStreamingService } from './agent-streaming.service';
|
|
import { AgentTitleGenerationService } from './agent-title-generation.service';
|
|
import { AgentToolGeneratorService } from './agent-tool-generator.service';
|
|
import { AgentEntity } from './agent.entity';
|
|
import { AgentResolver } from './agent.resolver';
|
|
import { AgentService } from './agent.service';
|
|
|
|
import { AgentActorContextService } from './services/agent-actor-context.service';
|
|
|
|
@Module({
|
|
imports: [
|
|
TypeOrmModule.forFeature([
|
|
AgentEntity,
|
|
AgentHandoffEntity,
|
|
RoleEntity,
|
|
RoleTargetsEntity,
|
|
AgentChatMessageEntity,
|
|
AgentChatMessagePartEntity,
|
|
AgentChatThreadEntity,
|
|
FileEntity,
|
|
UserWorkspaceEntity,
|
|
]),
|
|
AiModule,
|
|
AgentRoleModule,
|
|
ThrottlerModule,
|
|
AuditModule,
|
|
FeatureFlagModule,
|
|
FileUploadModule,
|
|
FileModule,
|
|
ObjectMetadataModule,
|
|
PermissionsModule,
|
|
AiRouterModule,
|
|
WorkspacePermissionsCacheModule,
|
|
WorkspaceCacheStorageModule,
|
|
TokenModule,
|
|
WorkspaceDomainsModule,
|
|
WorkflowToolsModule,
|
|
forwardRef(() => UserModule),
|
|
UserWorkspaceModule,
|
|
UserRoleModule,
|
|
],
|
|
controllers: [AgentChatController],
|
|
providers: [
|
|
AgentResolver,
|
|
AgentChatResolver,
|
|
AgentService,
|
|
AgentExecutionService,
|
|
AgentModelConfigService,
|
|
AgentToolGeneratorService,
|
|
AgentHandoffToolService,
|
|
AgentChatService,
|
|
AgentStreamingService,
|
|
AgentTitleGenerationService,
|
|
AgentHandoffExecutorService,
|
|
AgentHandoffService,
|
|
AgentActorContextService,
|
|
],
|
|
exports: [
|
|
AgentService,
|
|
AgentExecutionService,
|
|
AgentToolGeneratorService,
|
|
AgentHandoffToolService,
|
|
AgentChatService,
|
|
AgentStreamingService,
|
|
AgentTitleGenerationService,
|
|
TypeOrmModule.forFeature([
|
|
AgentEntity,
|
|
AgentChatMessageEntity,
|
|
AgentChatMessagePartEntity,
|
|
AgentChatThreadEntity,
|
|
]),
|
|
AgentHandoffExecutorService,
|
|
AgentHandoffService,
|
|
],
|
|
})
|
|
export class AgentModule {}
|