- Updated the `CHAT_STORAGE_DESIGN.md` to define the `ChatStore` and `AssistantStore` interfaces, providing clear operations for managing chats, messages, resumes, and assistants. - Introduced new methods for creating, retrieving, updating, and deleting chats and assistants, along with batch operations for messages and resumes. - Enhanced the documentation to clarify the responsibilities of each store interface and the associated data structures, ensuring better understanding for future development. - Revised related functions and tests to support the new design, reinforcing the integrity and performance of chat interactions and assistant management.
159 lines
4.6 KiB
Go
159 lines
4.6 KiB
Go
package mongo
|
|
|
|
import "github.com/yaoapp/yao/agent/store/types"
|
|
|
|
// Mongo represents a MongoDB-based conversation storage
|
|
type Mongo struct{}
|
|
|
|
// NewMongo create a new mongo store
|
|
func NewMongo() types.Store {
|
|
return &Mongo{}
|
|
}
|
|
|
|
// =============================================================================
|
|
// Chat Management
|
|
// =============================================================================
|
|
|
|
// CreateChat creates a new chat session
|
|
func (m *Mongo) CreateChat(chat *types.Chat) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// GetChat retrieves a single chat by ID
|
|
func (m *Mongo) GetChat(chatID string) (*types.Chat, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// UpdateChat updates chat fields
|
|
func (m *Mongo) UpdateChat(chatID string, updates map[string]interface{}) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// DeleteChat deletes a chat and its associated messages
|
|
func (m *Mongo) DeleteChat(chatID string) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// ListChats retrieves a paginated list of chats with optional grouping
|
|
func (m *Mongo) ListChats(filter types.ChatFilter) (*types.ChatList, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// =============================================================================
|
|
// Message Management
|
|
// =============================================================================
|
|
|
|
// SaveMessages batch saves messages for a chat
|
|
func (m *Mongo) SaveMessages(chatID string, messages []*types.Message) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// GetMessages retrieves messages for a chat with filtering
|
|
func (m *Mongo) GetMessages(chatID string, filter types.MessageFilter) ([]*types.Message, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// UpdateMessage updates a single message
|
|
func (m *Mongo) UpdateMessage(messageID string, updates map[string]interface{}) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// DeleteMessages deletes specific messages from a chat
|
|
func (m *Mongo) DeleteMessages(chatID string, messageIDs []string) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// =============================================================================
|
|
// Resume Management (only called on failure/interrupt)
|
|
// =============================================================================
|
|
|
|
// SaveResume batch saves resume records
|
|
func (m *Mongo) SaveResume(records []*types.Resume) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// GetResume retrieves all resume records for a chat
|
|
func (m *Mongo) GetResume(chatID string) ([]*types.Resume, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// GetLastResume retrieves the last resume record for a chat
|
|
func (m *Mongo) GetLastResume(chatID string) (*types.Resume, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// GetResumeByStackID retrieves resume records for a specific stack
|
|
func (m *Mongo) GetResumeByStackID(stackID string) ([]*types.Resume, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// GetStackPath returns the stack path from root to the given stack
|
|
func (m *Mongo) GetStackPath(stackID string) ([]string, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// DeleteResume deletes all resume records for a chat
|
|
func (m *Mongo) DeleteResume(chatID string) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// =============================================================================
|
|
// Assistant Management
|
|
// =============================================================================
|
|
|
|
// SaveAssistant saves assistant information
|
|
func (m *Mongo) SaveAssistant(assistant *types.AssistantModel) (string, error) {
|
|
// TODO: implement
|
|
return assistant.ID, nil
|
|
}
|
|
|
|
// UpdateAssistant updates specific fields of an assistant
|
|
func (m *Mongo) UpdateAssistant(assistantID string, updates map[string]interface{}) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// DeleteAssistant deletes an assistant
|
|
func (m *Mongo) DeleteAssistant(assistantID string) error {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// GetAssistants retrieves a list of assistants
|
|
func (m *Mongo) GetAssistants(filter types.AssistantFilter, locale ...string) (*types.AssistantList, error) {
|
|
// TODO: implement
|
|
return &types.AssistantList{}, nil
|
|
}
|
|
|
|
// GetAssistantTags retrieves all unique tags from assistants with filtering
|
|
func (m *Mongo) GetAssistantTags(filter types.AssistantFilter, locale ...string) ([]types.Tag, error) {
|
|
// TODO: implement
|
|
return []types.Tag{}, nil
|
|
}
|
|
|
|
// GetAssistant retrieves a single assistant by ID
|
|
func (m *Mongo) GetAssistant(assistantID string, fields []string, locale ...string) (*types.AssistantModel, error) {
|
|
// TODO: implement
|
|
return nil, nil
|
|
}
|
|
|
|
// DeleteAssistants deletes assistants based on filter conditions
|
|
func (m *Mongo) DeleteAssistants(filter types.AssistantFilter) (int64, error) {
|
|
// TODO: implement
|
|
return 0, nil
|
|
}
|