Files
Enterprise-Knowledge-Base/internal/application/service/llmcontext/memory_storage.go
T
wizardchen 266b9a5943 feat: Enhance chat and knowledge base functionalities with multi-KB support
- Updated agentChat API to accept optional knowledge_base_ids and agent_enabled parameters.
- Introduced getSession API to retrieve session details.
- Modified useStream to validate knowledge_base_ids for agent-chat requests and prepare POST body accordingly.
- Enhanced createKnowledgeBase API to include additional configuration options.
- Refactored chat routing to remove knowledge base ID from the chat path, allowing for dynamic knowledge base selection.
- Improved session management by preventing duplicate session entries in the menu store.
- Updated UI components for better session handling and display.
- Added context management for agent conversations to improve state persistence across sessions.
2025-11-06 21:12:26 +08:00

66 lines
1.8 KiB
Go

package llmcontext
import (
"context"
"sync"
"github.com/Tencent/WeKnora/internal/logger"
"github.com/Tencent/WeKnora/internal/models/chat"
)
// memoryStorage implements ContextStorage using in-memory storage
type memoryStorage struct {
sessions map[string][]chat.Message
mu sync.RWMutex
}
// NewMemoryStorage creates a new memory-based storage
func NewMemoryStorage() ContextStorage {
return &memoryStorage{
sessions: make(map[string][]chat.Message),
}
}
// Save saves messages for a session to memory
func (ms *memoryStorage) Save(ctx context.Context, sessionID string, messages []chat.Message) error {
ms.mu.Lock()
defer ms.mu.Unlock()
// Make a copy to avoid external modifications
messageCopy := make([]chat.Message, len(messages))
copy(messageCopy, messages)
ms.sessions[sessionID] = messageCopy
logger.Debugf(ctx, "[MemoryStorage][Session-%s] Saved %d messages to memory", sessionID, len(messages))
return nil
}
// Load loads messages for a session from memory
func (ms *memoryStorage) Load(ctx context.Context, sessionID string) ([]chat.Message, error) {
ms.mu.RLock()
defer ms.mu.RUnlock()
messages, exists := ms.sessions[sessionID]
if !exists {
logger.Debugf(ctx, "[MemoryStorage][Session-%s] No context found in memory", sessionID)
return []chat.Message{}, nil
}
// Return a copy to avoid external modifications
messageCopy := make([]chat.Message, len(messages))
copy(messageCopy, messages)
logger.Debugf(ctx, "[MemoryStorage][Session-%s] Loaded %d messages from memory", sessionID, len(messages))
return messageCopy, nil
}
// Delete deletes all messages for a session from memory
func (ms *memoryStorage) Delete(ctx context.Context, sessionID string) error {
ms.mu.Lock()
defer ms.mu.Unlock()
delete(ms.sessions, sessionID)
logger.Debugf(ctx, "[MemoryStorage][Session-%s] Deleted context from memory", sessionID)
return nil
}