Skip to main content

Serapeum Core

Serapeum Core is the provider-agnostic foundation for the Serapeum ecosystem. It defines the core LLM abstractions, prompt templates, structured-output parsers, and tool-execution utilities used by integration packages (OpenAI, Ollama, etc.).

If you are implementing a new LLM backend or want a consistent set of models and helpers for prompts, output parsing, and tool calling, this is the package to use.

Highlights

  • Unified LLM interfaces for chat/completions, streaming, and async variants.
  • Prompt templates for string and chat workflows with variable mapping utilities.
  • Structured output parsing with Pydantic models and JSON schema hints.
  • Tool metadata, schema generation, and safe tool execution utilities.
  • Orchestrators for tool calling and structured outputs.

Package layout

  • serapeum.core.base.llms: Base interfaces and data models (messages, chunks, responses, metadata).
  • serapeum.core.llms: High-level LLM class with predict/stream helpers and structured output utilities.
  • serapeum.core.prompts: Prompt templates for text and chat models.
  • serapeum.core.output_parsers: Parsers for structured outputs (e.g., Pydantic).
  • serapeum.core.tools: Tool metadata, tool interfaces, and tool execution.
  • serapeum.core.llms.orchestrators: Higher-level programs for structured outputs and function-calling orchestration.
  • serapeum.core.utils: JSON/schema helpers and async utilities.
  • serapeum.core.configs: Global configuration singleton (Configs).
  • serapeum.core.chat: Agent response container with streaming helpers.

Installation

From the repo root:

cd libs/core
python -m pip install -e .

Python 3.11+ is required.

Quick start

1) Build a minimal LLM implementation

from serapeum.core.llms import LLM, CompletionResponse, Metadata
from serapeum.core.prompts import PromptTemplate


class EchoLLM(LLM):
  metadata = Metadata.model_construct(is_chat_model=False)

  def chat(self, messages, stream=False, **kwargs):
    raise NotImplementedError()

  async def achat(self, messages, stream=False, **kwargs):
    raise NotImplementedError()

  def complete(self, prompt, formatted=False, stream=False, **kwargs):
    if stream:
      raise NotImplementedError()
    return CompletionResponse(text=prompt, delta=prompt)

  async def acomplete(self, prompt, formatted=False, stream=False, **kwargs):
    if stream:
      raise NotImplementedError()
    return CompletionResponse(text=prompt, delta=prompt)


llm = EchoLLM()
prompt = PromptTemplate("Hello, {name}!")
result = llm.predict(prompt, name="Serapeum")
print(result)

2) Parse structured outputs with Pydantic

from pydantic import BaseModel
from serapeum.core.output_parsers import PydanticParser
from serapeum.core.prompts import PromptTemplate


class Greeting(BaseModel):
    message: str


parser = PydanticParser(output_cls=Greeting)
prompt = PromptTemplate(
    'Return JSON like {"message": "<text>"}. Text: {text}',
    output_parser=parser,
)

# With a real LLM backend, this returns a validated Greeting model.
# result = llm.predict(prompt, text="Hello")

3) Define tools and execute them safely

from serapeum.core.tools import BaseTool, ToolMetadata, ToolOutput, ToolExecutor


class EchoTool(BaseTool):
    @property
    def metadata(self) -> ToolMetadata:
        return ToolMetadata(description="Echo input", name="echo")

    def __call__(self, input_values: dict) -> ToolOutput:
        return ToolOutput(tool_name="echo", content=input_values.get("input", ""))


tool = EchoTool()
executor = ToolExecutor()
output = executor.execute(tool, {"input": "hi"})
print(output.content)

Core concepts

LLM interface and orchestration

  • BaseLLM defines the provider contract for chat/completion endpoints, streaming, and async variants.
  • LLM builds on BaseLLM with helpers for prompt formatting, prediction, and structured output modes.
  • FunctionCallingLLM extends LLM with tool-calling helper methods.

Prompts

Use PromptTemplate for string prompts and ChatPromptTemplate for message templates. Both support template variable mappings and optional output parsers.

Output parsers

PydanticParser injects a compact JSON schema into prompts and parses LLM output into validated Pydantic models. output_parsers.utils also provides markdown JSON/code extraction helpers.

Tools and schemas

  • ToolMetadata produces OpenAI-style tool specs and JSON schema for tool inputs.
  • CallableTool (in serapeum.core.tools.callable_tool) can wrap functions or Pydantic models into tool definitions.
  • ToolExecutor runs tools safely with optional auto-unpacking and error normalization.

Structured programs

  • TextCompletionLLM runs a prompt + parser + LLM pipeline to return Pydantic outputs for completion-style models.
  • ToolOrchestratingLLM uses function-calling models to produce structured outputs via tools.

Configuration

serapeum.core.configs.Configs is a small global configuration holder. You can set a default LLM instance and control structured output mode:

from serapeum.core.configs import Configs
from serapeum.core.types import StructuredOutputMode


Configs.llm = llm
Configs.structured_output_mode = StructuredOutputMode.OPENAI

Links

Metadata

Release files for serapeum-core 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for serapeum-core 0.5.0
File Size Uploaded
serapeum_core-0.5.0.tar.gz 104.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for serapeum-core 0.5.0
File Interpreter ABI Platform
serapeum_core-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 230.0 kB

Release files / serapeum_core-0.5.0.tar.gz

Download URL serapeum_core-0.5.0.tar.gz
Size 104.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3c895c31f73e281dc866221088ad0988578af61853e3d7367379e0b43047afa8
BLAKE2b-256 checksum
How to use checksums
ece115b677b3cc0d606f36bc89bea7158c00a4d5bbff883994ec0410975d963b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / serapeum_core-0.5.0-py3-none-any.whl

Download URL serapeum_core-0.5.0-py3-none-any.whl
Size 125.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3a4baa82f850ee278f5c4910acbb79a8d676d9f6e5325ffec7ca3fa1583c5e84
BLAKE2b-256 checksum
How to use checksums
a360668c8200ded5ff77999c1b603226417472b8ca32f76687f35eaf1b36cc07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page