Configuration Analysis: Module Install vs Recipe Configuration
Overviewβ
This document analyzes the configuration files in the LLM Platform to determine what should be moved into module config/install
directories (for automatic import when modules are enabled) versus what should remain in recipes (for site-specific customization).
Analysis Principlesβ
Module Install Config (config/install/
)β
Should contain:
- Core module functionality configuration
- Default field definitions and content types
- Essential user roles and permissions
- Basic module settings
- Entity type definitions
- Required taxonomy vocabularies
- Core views and forms
Recipe Config (recipes/*/config/install/
)β
Should contain:
- Site-specific customizations
- Business logic configuration
- Integration settings between modules
- Custom content and blocks
- Advanced workflows and automation
- Environment-specific settings
Detailed Analysisβ
1. LLM Module Configurationβ
β
Should Move to Module Install (web/modules/contrib/llm/config/install/
)β
Core Entity Types:
node.type.ai_conversation.yml
- Core content typenode.type.ai_model.yml
- Core content typenode.type.ai_workflow.yml
- Core content typenode.type.ai_dataset.yml
- Core content typenode.type.ai_agent.yml
- Core content type
Field Definitions:
field.storage.node.field_ai_provider.yml
- Core fieldfield.storage.node.field_agent_configuration.yml
- Core fieldfield.storage.node.field_api_key_reference.yml
- Core fieldfield.storage.node.field_agent_owner.yml
- Core fieldfield.storage.node.field_system_prompt.yml
- Core fieldfield.storage.node.field_agent_model.yml
- Core fieldfield.storage.node.field_agent_capabilities.yml
- Core field
Core Settings:
llm.ai_integration_settings.yml
- Core module settingsllm.ai_provider_registry.yml
- Core provider configurationllm.migration_config.yml
- Core migration settings
User Roles:
user.role.llm_analyst.yml
- Core roleuser.role.llm_developer.yml
- Core roleuser.role.ai_content_editor.yml
- Core roleuser.role.ai_content_moderator.yml
- Core role
Taxonomy Vocabularies:
taxonomy.vocabulary.ai_providers.yml
- Core vocabularytaxonomy.vocabulary.ai_agent_tags.yml
- Core vocabularytaxonomy.vocabulary.business_units.yml
- Core vocabularytaxonomy.vocabulary.vector_categories.yml
- Core vocabularytaxonomy.vocabulary.ai_dataset_categories.yml
- Core vocabulary
Core Views:
views.view.llm_conversations.yml
- Core viewviews.view.ai_usage_dashboard.yml
- Core viewviews.view.enterprise_analytics_dashboard.yml
- Core view
β Should Remain in Recipe (recipes/llm_platform/config/install/
)β
Site-Specific Settings:
llm.settings.yml
- Contains site-specific provider preferences and routing rulesllm.enterprise_features.yml
- Enterprise-specific featuresllm.key_management.yml
- Site-specific key managementllm.litellm_settings.yml
- Site-specific LiteLLM configurationllm.qdrant_settings.yml
- Site-specific vector database settingsllm.unified_providers.yml
- Site-specific provider unification
Custom Content:
node.1.yml
- Site-specific homepage contentnode.node.llm_platform_homepage.yml
- Site-specific homepageblock.block.llm_homepage_hero.yml
- Site-specific hero blockblock.block.llm_platform_features.yml
- Site-specific features blockblock.block.llm_platform_statistics.yml
- Site-specific statistics block
Integration Configuration:
ai.settings.yml
- AI module integration settingsai_vdb_provider_milvus.settings.yml
- Vector database integrationalternative_services.settings.yml
- Alternative services integrationapi_normalizer.settings.yml
- API normalizer integrationrecipe_onboarding.settings.yml
- Recipe onboarding integration
2. MCP Registry Module Configurationβ
β
Should Move to Module Install (web/modules/contrib/mcp_registry/config/install/
)β
Core Entity Types:
media.type.mcp_server.yml
- Core media type
Field Definitions:
field.storage.mcp_session.transport_type.yml
- Core fieldfield.storage.mcp_session.authentication_method.yml
- Core fieldfield.storage.mcp_session.ai_provider.yml
- Core field
Core Settings:
mcp_registry.settings.yml
- Core module settings (but needs cleanup)mcp_registry.pulsemcp_settings.yml
- Core PulseMCP settings
User Roles:
user.role.mcp_admin.yml
- Core role
Taxonomy Vocabularies:
taxonomy.vocabulary.mcp_transport_types.yml
- Core vocabularytaxonomy.vocabulary.mcp_authentication_methods.yml
- Core vocabularytaxonomy.vocabulary.llm_platform_providers.yml
- Core vocabularytaxonomy.vocabulary.compliance_frameworks.yml
- Core vocabulary
Core Views:
views.view.mcp_servers_list.yml
- Core viewviews.view.mcp_sessions.yml
- Core viewviews.view.mcp_dashboard.yml
- Core viewviews.view.mcp_metrics_dashboard.yml
- Core viewviews.view.mcp_activity_dashboard.yml
- Core viewviews.view.mcp_admin_dashboard.yml
- Core viewviews.view.mcp_sessions_overview.yml
- Core view
Workflows:
workflows.workflow.mcp_server_lifecycle.yml
- Core workflow
Search API:
search_api.server.database.yml
- Core search server
β Should Remain in Recipe (recipes/llm_platform/config/install/
)β
Site-Specific Settings:
mcp_registry.vector_settings.yml
- Site-specific vector search settings
Integration Configuration:
http_client_manager.http_client_config.mcp_registry_client.yml
- HTTP client integration
3. System Configurationβ
β Should Move to Module Installβ
Core System Settings:
system.performance.yml
- Core performance settingssystem.logging.yml
- Core logging settingssystem.queue.yml
- Core queue settingssystem.theme.yml
- Core theme settings
β Should Remain in Recipeβ
Site-Specific Settings:
system.site.yml
- Site name, email, etc.
4. ECA Workflowsβ
β Should Move to Module Installβ
Core Workflows:
eca.model.ai_conversation_workflow.yml
- Core conversation workfloweca.model.ai_workflow_automation.yml
- Core workflow automation
β Should Remain in Recipeβ
Site-Specific Workflows:
eca.model.ai_content_workflow.yml
- Site-specific content workfloweca.model.ai_agent_deployment.yml
- Site-specific agent deploymenteca.model.enhanced_ai_automation.yml
- Site-specific automationeca.model.mcp_server_orchestration.yml
- Site-specific orchestration
Service Configuration Issuesβ
Configuration Refactoring Statusβ
The platform has undergone comprehensive configuration refactoring to address:
Module Dependency Issuesβ
- Problem: Circular dependencies between modules
- Solution: Separated core configuration from site-specific settings
- Status: β Complete
Field Encrypt Compatibilityβ
- Problem: Compatibility issues with encrypted fields
- Solution: Updated field encryption configuration
- Status: β Complete
Service Configuration Issuesβ
- Problem: Service container configuration conflicts
- Solution: Refactored service definitions and dependencies
- Status: β Complete
Recommended Actionsβ
1. Move to Module Install Filesβ
LLM Module:
# Move these from recipes/llm_platform/config/install/ to web/modules/contrib/llm/config/install/
cp recipes/llm_platform/config/install/node.type.ai_conversation.yml web/modules/contrib/llm/config/install/
cp recipes/llm_platform/config/install/node.type.ai_model.yml web/modules/contrib/llm/config/install/
cp recipes/llm_platform/config/install/node.type.ai_workflow.yml web/modules/contrib/llm/config/install/
cp recipes/llm_platform/config/install/field.storage.node.field_ai_provider.yml web/modules/contrib/llm/config/install/
cp recipes/llm_platform/config/install/field.field.node.ai_conversation.field_ai_provider.yml web/modules/contrib/llm/config/install/
MCP Registry Module:
# Move these from recipes/llm_platform/config/install/ to web/modules/contrib/mcp_registry/config/install/
cp recipes/llm_platform/config/install/media.type.mcp_server.yml web/modules/contrib/mcp_registry/config/install/
2. Clean Up Module Install Filesβ
Remove Site-Specific Config from Module Install:
LLM Module:
- Remove
llm.settings.yml
(contains site-specific provider preferences) - Remove
llm.enterprise_features.yml
(enterprise-specific) - Remove
llm.key_management.yml
(site-specific) - Remove
llm.litellm_settings.yml
(site-specific) - Remove
llm.qdrant_settings.yml
(site-specific)
MCP Registry Module:
- Clean up
mcp_registry.settings.yml
to remove site-specific settings - Keep only core functionality settings
3. Update Module Dependenciesβ
Ensure that when modules are enabled, they automatically import their core configuration:
LLM Module:
# In llm.info.yml, ensure these are listed as dependencies
dependencies:
- drupal:system
- drupal:user
- drupal:field
- drupal:views
- drupal:jsonapi
- drupal:rest
- drupal:serialization
- drupal:workflows
- drupal:content_moderation
- drupal:datetime
- drupal:options
- drupal:dynamic_entity_reference
- ai:ai
- key:key
- eca:eca
- eca:eca_base
- eca:eca_content
- search_api:search_api
- search_api:search_api_db
- mcp_registry:mcp_registry
MCP Registry Module:
# In mcp_registry.info.yml, ensure these are listed as dependencies
dependencies:
- drupal:system
- drupal:user
- drupal:node
- drupal:taxonomy
- drupal:views
- drupal:rest
- mcp:mcp
- search_api:search_api
- search_api:search_api_db
- eca:eca
- eca:eca_base
- eca:eca_queue
- http_client_manager:http_client_manager
- migrate_plus:migrate_plus
Benefits of This Approachβ
- Automatic Configuration: Core functionality is automatically configured when modules are enabled
- Site Customization: Site-specific settings remain in recipes for easy customization
- Maintainability: Clear separation between core module functionality and site-specific configuration
- Reusability: Modules can be used across different sites with different configurations
- Testing: Core functionality can be tested independently of site-specific settings
Implementation Stepsβ
- Audit Current Configuration: Review all config files and categorize them
- Move Core Config: Move essential configuration to module install directories
- Clean Up Module Config: Remove site-specific settings from module install files
- Update Dependencies: Ensure proper module dependencies are declared
- Test Installation: Verify that modules install correctly with core configuration
- Document Changes: Update documentation to reflect the new configuration structure
Conclusionβ
This separation makes the modules more maintainable and reusable while allowing for site-specific customization through recipes. The core functionality is automatically configured when modules are enabled, while advanced features and site-specific settings can be applied through recipes.
The configuration refactoring has successfully resolved module dependency issues, service configuration conflicts, and field encryption compatibility problems, resulting in a more robust and maintainable platform architecture.