93 lines
2.5 KiB
Markdown
93 lines
2.5 KiB
Markdown
```go title="Go"
|
|
package main
|
|
|
|
import (
|
|
"C"
|
|
"encoding/json"
|
|
"log"
|
|
|
|
"github.com/kreuzberg-dev/kreuzberg/packages/go/v5"
|
|
)
|
|
|
|
//export loggingPostProcessor
|
|
func loggingPostProcessor(resultJSON *C.char) *C.char {
|
|
log.Println("[PostProcessor] Processing extraction result")
|
|
|
|
jsonStr := C.GoString(resultJSON)
|
|
var result map[string]interface{}
|
|
if err := json.Unmarshal([]byte(jsonStr), &result); err != nil {
|
|
log.Printf("[PostProcessor] Error parsing result: %v", err)
|
|
return nil
|
|
}
|
|
|
|
if content, ok := result["content"].(string); ok {
|
|
log.Printf("[PostProcessor] Content length: %d bytes", len(content))
|
|
if len(content) == 0 {
|
|
log.Println("[PostProcessor] Warning: Empty content extracted")
|
|
}
|
|
}
|
|
|
|
if mimeType, ok := result["mime_type"].(string); ok {
|
|
log.Printf("[PostProcessor] Processing %s", mimeType)
|
|
}
|
|
|
|
// Return NULL to indicate success (no modification)
|
|
return nil
|
|
}
|
|
|
|
//export loggingValidator
|
|
func loggingValidator(resultJSON *C.char) *C.char {
|
|
log.Println("[Validator] Validating extraction result")
|
|
|
|
jsonStr := C.GoString(resultJSON)
|
|
var result map[string]interface{}
|
|
if err := json.Unmarshal([]byte(jsonStr), &result); err != nil {
|
|
log.Printf("[Validator] Error parsing result: %v", err)
|
|
errMsg := "Failed to parse validation input"
|
|
return C.CString(errMsg)
|
|
}
|
|
|
|
if content, ok := result["content"].(string); ok {
|
|
log.Printf("[Validator] Content length: %d bytes", len(content))
|
|
if len(content) < 50 {
|
|
log.Println("[Validator] Error: Content below minimum threshold")
|
|
errMsg := "Content too short (minimum 50 characters)"
|
|
return C.CString(errMsg)
|
|
}
|
|
}
|
|
|
|
// Return NULL to indicate validation passed
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
// Register post processor with logging
|
|
if err := kreuzberg.RegisterPostProcessor(
|
|
"logging-processor",
|
|
100, // priority
|
|
(C.PostProcessorCallback)(C.loggingPostProcessor),
|
|
); err != nil {
|
|
log.Fatalf("register post processor failed: %v", err)
|
|
}
|
|
log.Println("[Main] PostProcessor registered with logging enabled")
|
|
|
|
// Register validator with logging
|
|
if err := kreuzberg.RegisterValidator(
|
|
"logging-validator",
|
|
50, // priority
|
|
(C.ValidatorCallback)(C.loggingValidator),
|
|
); err != nil {
|
|
log.Fatalf("register validator failed: %v", err)
|
|
}
|
|
log.Println("[Main] Validator registered with logging enabled")
|
|
|
|
// Extract with logging
|
|
result, err := kreuzberg.ExtractFileSync("document.pdf", nil)
|
|
if err != nil {
|
|
log.Fatalf("extract failed: %v", err)
|
|
}
|
|
|
|
log.Printf("[Main] Extraction complete: %d bytes content", len(result.Content))
|
|
}
|
|
```
|