62 lines
1.6 KiB
Elixir
62 lines
1.6 KiB
Elixir
```elixir title="Elixir"
|
|
defmodule MyApp.MetadataEnricher do
|
|
@behaviour Kreuzberg.Plugin.PostProcessor
|
|
|
|
def process(result, _config) do
|
|
enriched_metadata = result.metadata || %{}
|
|
enriched_metadata = Map.put(enriched_metadata, "enriched_at", DateTime.utc_now())
|
|
{:ok, %{result | metadata: enriched_metadata}}
|
|
end
|
|
|
|
def initialize, do: :ok
|
|
def shutdown, do: :ok
|
|
def version, do: "1.0.0"
|
|
end
|
|
|
|
defmodule MyApp.LinkExtractor do
|
|
@behaviour Kreuzberg.Plugin.PostProcessor
|
|
|
|
def process(result, _config) do
|
|
links = extract_links(result.content)
|
|
metadata = result.metadata || %{}
|
|
metadata = Map.put(metadata, "links", links)
|
|
{:ok, %{result | metadata: metadata}}
|
|
end
|
|
|
|
defp extract_links(content) do
|
|
Regex.scan(~r/https?:\/\/\S+/, content)
|
|
|> Enum.map(&List.first/1)
|
|
|> Enum.uniq()
|
|
end
|
|
|
|
def initialize, do: :ok
|
|
def shutdown, do: :ok
|
|
def version, do: "1.0.0"
|
|
end
|
|
|
|
defmodule MyApp.QualityValidator do
|
|
@behaviour Kreuzberg.Plugin.Validator
|
|
|
|
def validate(result) do
|
|
if String.length(result.content) > 100 do
|
|
:ok
|
|
else
|
|
{:error, "Content quality too low"}
|
|
end
|
|
end
|
|
|
|
def should_validate?(_result), do: true
|
|
def priority, do: 5
|
|
def initialize, do: :ok
|
|
def shutdown, do: :ok
|
|
def version, do: "1.0.0"
|
|
end
|
|
|
|
# Register multiple plugins
|
|
Kreuzberg.Plugin.register_post_processor(:metadata_enricher, MyApp.MetadataEnricher)
|
|
Kreuzberg.Plugin.register_post_processor(:link_extractor, MyApp.LinkExtractor)
|
|
Kreuzberg.Plugin.register_validator(MyApp.QualityValidator)
|
|
|
|
IO.puts("Plugins registered successfully")
|
|
```
|