- Added file upload handler to process both multipart and raw file uploads. - Implemented parsing logic for upload requests, including handling file metadata. - Introduced SaveFileDecodedInput structure for handling decoded file uploads. - Created unit tests for file upload parsing and validation. feat: add metadata retry configuration and functionality - Introduced MetadataRetryConfig to the application configuration. - Implemented MetadataRetryer to handle retrying metadata extraction for thoughts. - Added new tool for retrying failed metadata extractions. - Updated thought metadata structure to include status and timestamps for metadata processing. fix: enhance metadata normalization and error handling - Updated metadata normalization functions to track status and errors. - Improved handling of metadata extraction failures during thought updates and captures. - Ensured that metadata status is correctly set during various operations. refactor: streamline file saving logic in FilesTool - Refactored Save method in FilesTool to utilize new SaveDecoded method. - Simplified project and thought ID resolution logic during file saving.
94 lines
2.9 KiB
Go
94 lines
2.9 KiB
Go
package types
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type ThoughtMetadata struct {
|
|
People []string `json:"people"`
|
|
ActionItems []string `json:"action_items"`
|
|
DatesMentioned []string `json:"dates_mentioned"`
|
|
Topics []string `json:"topics"`
|
|
Type string `json:"type"`
|
|
Source string `json:"source"`
|
|
Attachments []ThoughtAttachment `json:"attachments,omitempty"`
|
|
MetadataStatus string `json:"metadata_status,omitempty"`
|
|
MetadataUpdatedAt string `json:"metadata_updated_at,omitempty"`
|
|
MetadataLastAttemptedAt string `json:"metadata_last_attempted_at,omitempty"`
|
|
MetadataError string `json:"metadata_error,omitempty"`
|
|
}
|
|
|
|
type ThoughtAttachment struct {
|
|
FileID uuid.UUID `json:"file_id"`
|
|
Name string `json:"name"`
|
|
MediaType string `json:"media_type"`
|
|
Kind string `json:"kind,omitempty"`
|
|
SizeBytes int64 `json:"size_bytes"`
|
|
SHA256 string `json:"sha256,omitempty"`
|
|
}
|
|
|
|
type StoredFile struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ThoughtID *uuid.UUID `json:"thought_id,omitempty"`
|
|
ProjectID *uuid.UUID `json:"project_id,omitempty"`
|
|
Name string `json:"name"`
|
|
MediaType string `json:"media_type"`
|
|
Kind string `json:"kind"`
|
|
Encoding string `json:"encoding"`
|
|
SizeBytes int64 `json:"size_bytes"`
|
|
SHA256 string `json:"sha256"`
|
|
Content []byte `json:"-"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type StoredFileFilter struct {
|
|
Limit int
|
|
ThoughtID *uuid.UUID
|
|
ProjectID *uuid.UUID
|
|
Kind string
|
|
}
|
|
|
|
type Thought struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Content string `json:"content"`
|
|
Embedding []float32 `json:"embedding,omitempty"`
|
|
Metadata ThoughtMetadata `json:"metadata"`
|
|
ProjectID *uuid.UUID `json:"project_id,omitempty"`
|
|
ArchivedAt *time.Time `json:"archived_at,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type SearchResult struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Content string `json:"content"`
|
|
Metadata ThoughtMetadata `json:"metadata"`
|
|
Similarity float64 `json:"similarity"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type ListFilter struct {
|
|
Limit int
|
|
Type string
|
|
Topic string
|
|
Person string
|
|
Days int
|
|
ProjectID *uuid.UUID
|
|
IncludeArchived bool
|
|
}
|
|
|
|
type ThoughtStats struct {
|
|
TotalCount int `json:"total_count"`
|
|
TypeCounts map[string]int `json:"type_counts"`
|
|
TopTopics []KeyCount `json:"top_topics"`
|
|
TopPeople []KeyCount `json:"top_people"`
|
|
}
|
|
|
|
type KeyCount struct {
|
|
Key string `json:"key"`
|
|
Count int `json:"count"`
|
|
}
|