Implement comprehensive collaborative creative system with cross-character memory sharing
Major Features Added: • Cross-character memory sharing with trust-based permissions (Basic 30%, Personal 50%, Intimate 70%, Full 90%) • Complete collaborative creative projects system with MCP integration • Database persistence for all creative project data with proper migrations • Trust evolution system based on interaction quality and relationship development • Memory sharing MCP server with 6 autonomous tools for character decision-making • Creative projects MCP server with 8 tools for autonomous project management • Enhanced character integration with all RAG and MCP capabilities • Demo scripts showcasing memory sharing and creative collaboration workflows System Integration: • Main application now initializes memory sharing and creative managers • Conversation engine upgraded to use EnhancedCharacter objects with full RAG access • Database models added for creative projects, collaborators, contributions, and invitations • Complete prompt construction pipeline enriched with RAG insights and trust data • Characters can now autonomously propose projects, share memories, and collaborate creatively
This commit is contained in:
@@ -10,6 +10,7 @@ import logging
|
||||
from ..database.connection import get_db_session
|
||||
from ..database.models import Character as CharacterModel, Conversation, Message, Memory
|
||||
from ..characters.character import Character
|
||||
from ..characters.enhanced_character import EnhancedCharacter
|
||||
from ..llm.client import llm_client, prompt_manager
|
||||
from ..llm.prompt_manager import advanced_prompt_manager
|
||||
from ..utils.config import get_settings, get_character_settings
|
||||
@@ -50,10 +51,16 @@ class ConversationContext:
|
||||
class ConversationEngine:
|
||||
"""Autonomous conversation engine that manages character interactions"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, vector_store=None, memory_sharing_manager=None, creative_manager=None, mcp_servers=None):
|
||||
self.settings = get_settings()
|
||||
self.character_settings = get_character_settings()
|
||||
|
||||
# RAG and collaboration systems
|
||||
self.vector_store = vector_store
|
||||
self.memory_sharing_manager = memory_sharing_manager
|
||||
self.creative_manager = creative_manager
|
||||
self.mcp_servers = mcp_servers or []
|
||||
|
||||
# Engine state
|
||||
self.state = ConversationState.IDLE
|
||||
self.characters: Dict[str, Character] = {}
|
||||
@@ -392,8 +399,41 @@ class ConversationEngine:
|
||||
character_models = await session.scalars(query)
|
||||
|
||||
for char_model in character_models:
|
||||
character = Character(char_model)
|
||||
await character.initialize(llm_client)
|
||||
# Use EnhancedCharacter if RAG systems are available
|
||||
if self.vector_store and self.memory_sharing_manager:
|
||||
# Find the appropriate MCP servers for this character
|
||||
from ..mcp.self_modification_server import mcp_server
|
||||
from ..mcp.file_system_server import filesystem_server
|
||||
|
||||
# Find creative projects MCP server
|
||||
creative_projects_mcp = None
|
||||
for mcp_srv in self.mcp_servers:
|
||||
if hasattr(mcp_srv, 'creative_manager'):
|
||||
creative_projects_mcp = mcp_srv
|
||||
break
|
||||
|
||||
character = EnhancedCharacter(
|
||||
character_data=char_model,
|
||||
vector_store=self.vector_store,
|
||||
mcp_server=mcp_server,
|
||||
filesystem=filesystem_server,
|
||||
memory_sharing_manager=self.memory_sharing_manager,
|
||||
creative_projects_mcp=creative_projects_mcp
|
||||
)
|
||||
|
||||
# Set character context for MCP servers
|
||||
for mcp_srv in self.mcp_servers:
|
||||
if hasattr(mcp_srv, 'set_character_context'):
|
||||
await mcp_srv.set_character_context(char_model.name)
|
||||
|
||||
await character.initialize(llm_client)
|
||||
logger.info(f"Loaded enhanced character: {character.name}")
|
||||
else:
|
||||
# Fallback to basic character
|
||||
character = Character(char_model)
|
||||
await character.initialize(llm_client)
|
||||
logger.info(f"Loaded basic character: {character.name}")
|
||||
|
||||
self.characters[character.name] = character
|
||||
|
||||
self.stats['characters_active'] = len(self.characters)
|
||||
|
||||
Reference in New Issue
Block a user