Files
fil/docs/snippets/go/llm/structured_extraction.md
Henrik Jess Nielsen b4c07d3693
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s
Nomad changes
2026-06-01 23:40:55 +02:00

1.0 KiB

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))
	}
}