Skip to main content

Providers

OKT uses the strategy/adapter pattern for external integrations. All providers are transport-agnostic (live in internal/providers/) and are registered in backend/cmd/app/api.go.

Search providers

backend/internal/providers/search/ — the SearchProvider interface:

type SearchProvider interface {
Search(ctx, query, opts) ([]SearchResult, error)
ID() string
}
ProviderFileDescription
serpersearch/serper.goGoogle web search (Serper API)
openalexsearch/openalex.goAcademic works (OpenAlex)

Each is env-gated (SERPER_API_KEY, OPENALEX_EMAIL). Repos can disable individual providers via per-repo settings.

Fetch resolution providers

backend/internal/providers/fetch/ — the ResolutionProvider interface. The FetchStrategy (fetch/strategy.go:192) chains them:

ProviderFileWhat it does
fetchfetch/http_fetch.go:150Plain HTTP + Trafilatura
unpaywallfetch/unpaywall.goDOI open-access lookup
tlsfetch/tls_impersonation.goCustom TLS fingerprint
flaresolverrfetch/flaresolverr.goHeadless browser

Provider order: static host overrides first, then chain order. Each has a 60s timeout. If a provider returns insufficient content (< 200 chars), the chain falls through to a heavier tier. See Knowledge Flow > Source Extraction.

Content parsers

backend/internal/providers/content_parsing/:

  • TrafilaturaParser — default, extracts main content from HTML.
  • FitzPDFParser — MuPDF-backed PDF parsing.

AI providers

backend/internal/providers/ai/ — the EmbeddingProvider, ChatProvider, and MultiModalProvider interfaces:

ProviderPurpose
ollamaLocal Ollama (chat + embedding)
ollama_cloudOllama Cloud
openrouterOpenRouter (chat, embedding, multimodal)

Decomposition providers

backend/internal/providers/decomposition/:

  • SimpleChunkingProvider — 2000-rune sliding window.
  • AIFactExtractionProvider — LLM fact extraction (text).
  • ImageFactExtractionProvider — multimodal fact extraction (images).
  • ConceptExtractor — LLM concept + context extraction.
  • AliasProvider — LLM canonical name + alias generation.

Summarization & synthesis providers

  • AISummarizationProvider (internal/providers/summarization/) — per-concept summary slices.
  • AISynthesisProvider (internal/providers/synthesis/) — canonical-name group synthesis + image picker.

Ontology source

backend/internal/providers/ontology/ — the embedded DBpedia L3 class list (dbpedia_l3.json). This is the default context vocabulary for concept extraction. Refresh via just dbpedia-pull.

Storage

backend/internal/providers/storage/ — filesystem or S3 for source assets (inline images, PDF page renders, full PDF bodies).

Registering a new provider

  1. Implement the interface in internal/providers/search/<name>.go or internal/providers/fetch/<name>.go.
  2. Register it in backend/cmd/app/api.go and pass it to handler.NewSource(...) (attached via h.SetSource(...)).