yao/openapi/kb/kb.go
Max 862733d1f4 Refactor document management handlers to improve request validation and async processing
- Introduced a Validator interface and a validateRequest function to streamline request validation across handlers.
- Added checkKBInstance function to ensure the knowledge base instance is initialized before processing requests.
- Implemented handleAsync function to manage asynchronous processing for file and text addition.
- Updated AddFile and AddText functions to utilize the new validation and async handling logic.
- Added async variants for AddFile and AddText to support non-blocking operations.
- Enhanced AddURL and its async variant with similar validation and processing improvements.
2025-08-12 11:41:48 +08:00

67 lines
2.4 KiB
Go

package kb
import (
"github.com/gin-gonic/gin"
"github.com/yaoapp/kun/log"
"github.com/yaoapp/yao/kb"
"github.com/yaoapp/yao/openapi/oauth/types"
)
// Attach attaches the Knowledge Base API to the router
func Attach(group *gin.RouterGroup, oauth types.OAuth) {
// Validate the GraphRag instance
if kb.Instance == nil {
log.Warn("[OpenAPI] GraphRag instance is not set, please check the configuration")
return
}
// Protect all endpoints with OAuth
group.Use(oauth.Guard)
// Collection Management
group.POST("/collections", CreateCollection)
group.DELETE("/collections/:collectionID", RemoveCollection)
group.GET("/collections/:collectionID/exists", CollectionExists)
group.GET("/collections", GetCollections)
group.PUT("/collections/:collectionID/metadata", UpdateCollectionMetadata)
// Document Management
group.POST("/collections/:collectionID/documents/file", AddFile)
group.POST("/collections/:collectionID/documents/file/async", AddFileAsync)
group.POST("/collections/:collectionID/documents/text", AddText)
group.POST("/collections/:collectionID/documents/text/async", AddTextAsync)
group.POST("/collections/:collectionID/documents/url", AddURL)
group.POST("/collections/:collectionID/documents/url/async", AddURLAsync)
group.GET("/documents", ListDocuments)
group.GET("/documents/scroll", ScrollDocuments)
group.GET("/documents/:docID", GetDocument)
group.DELETE("/documents", RemoveDocs)
// Segment Management
group.POST("/documents/:docID/segments", AddSegments)
group.PUT("/segments", UpdateSegments)
group.DELETE("/segments", RemoveSegments)
group.DELETE("/documents/:docID/segments", RemoveSegmentsByDocID)
group.GET("/segments", GetSegments)
group.GET("/segments/:segmentID", GetSegment)
group.GET("/documents/:docID/segments", ListSegments)
group.GET("/documents/:docID/segments/scroll", ScrollSegments)
// Segment Voting, Scoring, Weighting
group.PUT("/segments/vote", UpdateVote)
group.PUT("/segments/score", UpdateScore)
group.PUT("/segments/weight", UpdateWeight)
// Search Management
group.POST("/search", Search)
group.POST("/search/multi", MultiSearch)
// Collection Backup and Restore
group.POST("/collections/:collectionID/backup", Backup)
group.POST("/collections/:collectionID/restore", Restore)
// Provider Management (Chunking, Converter, Embedding, Extractor, Fetcher ...)
group.GET("/providers/:providerType", GetProviders)
group.GET("/providers/:providerType/:providerID/schema", GetProviderSchema)
}