48 lines
1.0 KiB
Markdown
48 lines
1.0 KiB
Markdown
```go title="Go"
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/kreuzberg-dev/kreuzberg/packages/go/v5"
|
|
)
|
|
|
|
func main() {
|
|
schema, err := json.Marshal(map[string]any{
|
|
"type": "object",
|
|
"properties": map[string]any{
|
|
"title": map[string]string{"type": "string"},
|
|
"authors": map[string]any{"type": "array", "items": map[string]string{"type": "string"}},
|
|
"date": map[string]string{"type": "string"},
|
|
},
|
|
"required": []string{"title", "authors", "date"},
|
|
"additionalProperties": false,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("marshal schema: %v", err)
|
|
}
|
|
|
|
config := kreuzberg.ExtractionConfig{
|
|
StructuredExtraction: &kreuzberg.StructuredExtractionConfig{
|
|
Schema: schema,
|
|
SchemaName: "PaperMetadata",
|
|
Strict: true,
|
|
Llm: kreuzberg.LlmConfig{
|
|
Model: "openai/gpt-4o-mini",
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := kreuzberg.ExtractFile("paper.pdf", nil, config)
|
|
if err != nil {
|
|
log.Fatalf("extract: %v", err)
|
|
}
|
|
|
|
if result.StructuredOutput != nil {
|
|
fmt.Println(string(*result.StructuredOutput))
|
|
}
|
|
}
|
|
```
|