Semestra

Provider types

The seven provider types, what each needs, and what it can do.

TypeBase URLKeyCapabilities
Anthropicfixed (https://api.anthropic.com)requiredchat, tools, vision, structured output
OpenAIfixed (https://api.openai.com/v1)requiredchat, tools, vision, structured output, embedding
Google Geminifixedrequiredchat, tools, vision, structured output, embedding
OpenAI-compatiblerequiredoptionalyou choose (default: chat, tools)
OpenAI Responses APIrequired (https://api.openai.com/v1 for OpenAI)optionalyou choose (default: chat, tools, structured output)
Anthropic-compatiblerequiredoptionalyou choose (default: chat, tools)
Ollamarequiredoptionalyou choose (default: chat, tools, structured output, embedding)

Compatible endpoints

Use the compatible types for any service that speaks the OpenAI Chat Completions, OpenAI Responses or Anthropic Messages format: DeepSeek, OpenRouter, Kimi, GLM, a vLLM or LiteLLM gateway, and so on. Because Semestra cannot know what such an endpoint supports, you tick its capabilities yourself:

  • tools is needed for Sem to act on your data.
  • vision lets it read images.
  • structured output makes extraction use the endpoint's JSON-schema mode; without it, Semestra asks for JSON and validates the answer.
  • embedding enables file search.

For a known service such as DeepSeek or Kimi, the address, model and capabilities are filled in for you and folded under Endpoint settings below the key; open it only to change them.

When you add a compatible endpoint or Ollama you can type one model name; it is assigned to the purposes nothing could serve yet: Sem, reading documents and titles, plus reading images when you ticked vision.

Model parameters

Under Advanced at the bottom of Models, each task can have its own limit on output per request, in tokens. It applies whichever model serves the task, Auto included; leave it empty to use the model's default. Raise it for reading documents if a long syllabus is read only in part. How long Semestra waits for an answer is worked out from this limit, so a higher one lets long tasks wait longer. Search has no output to limit.

  • Reading a document into fields (a syllabus import, scanned pages) runs with reasoning turned off, or as low as the model allows, unless you set a reasoning effort for that purpose.
  • For file search, Semestra embeds queries and documents the way known retrieval models expect: the prefixes of nomic-embed-text, E5, Qwen3 Embedding and EmbeddingGemma, and Gemini's task types, with 768-dimensional Gemini vectors. When this changes for your model, your files are re-indexed after your next search; until then search matches by keyword.
  • A service that takes fewer texts per request (Alibaba Cloud Model Studio takes 10) gets smaller batches automatically.

Requests at a time

Semestra sends at most four requests to one provider at once; the others wait their turn. Background work never takes the last one, so Sem and search do not wait behind it. To change this, open Edit in the provider's ⋯ menu and set Most requests at a time under Advanced. Lower it if the provider often reports too many requests.

Background work (imports, scanned pages, search indexing) waits out a provider's rate limit for up to five minutes; the status bar shows it as waiting. Sem and search give up after a few seconds, so you are not kept waiting.

Private addresses

On a server where SEMESTRA_ALLOW_PRIVATE_EGRESS is false (the hosted version and a plain semestra dev), base URLs that resolve to private, loopback or link-local addresses are refused with "That address points to a private network and can't be used." See Ollama.