Skip to main content

birdlife-ont-core

Core extraction engine, protocols, and adapters for observation-note-tagger.

Installation

pip install birdlife-ont-core

v0.1.0: Ships with OllamaAdapter (free, local LLM). Claude/OpenAI adapters coming in v0.2 — or implement your own via the LLMAdapter protocol below.

Protocols (Extension Points)

Build custom adapters by implementing these protocols:

LLMAdapter

from ont_core.adapters import LLMAdapter
from ont_core.schemas import ExtractionResult


class MyLLMAdapter:
    """Implements LLMAdapter protocol."""

    @property
    def name(self) -> str:
        return "my-llm"

    @property
    def model_version(self) -> str:
        return "v1.0"

    async def extract(self, note: str, species: str) -> ExtractionResult:
        # Your extraction logic
        ...

Parser

from ont_core.parsers import Parser, ParsedObservation
from pathlib import Path
from collections.abc import Iterator


class MyParser:
    """Implements Parser protocol."""

    @property
    def name(self) -> str:
        return "my-format"

    @property
    def file_pattern(self) -> str:
        return "*.myformat"

    def validate_file(self, path: Path) -> bool: ...

    def parse(self, path: Path) -> Iterator[ParsedObservation]: ...

    def count_rows(self, path: Path) -> int: ...

Validator

from ont_core.validators import Validator, ValidationResult
from ont_core.schemas import ExtractionResult


class MyValidator:
    """Implements Validator protocol."""

    def validate(self, result: ExtractionResult, note: str) -> ValidationResult:
        # Your validation logic
        ...

Built-in Adapters

OllamaAdapter (local LLM)

from ont_core.adapters import OllamaAdapter
from ont_core.config import OllamaConfig

adapter = OllamaAdapter()  # Uses OLLAMA_* env vars

# Or with explicit config
adapter = OllamaAdapter(OllamaConfig(base_url="http://localhost:11434", model="qwen2.5:7b"))

result = await adapter.extract(
    note="Singing male on territory, 2 fledglings nearby", species="European Robin"
)

Factory Pattern

Use the factory for config-driven wiring:

from ont_core.factory import create_llm_adapter, create_extractor

# Adapter selection via ONT_LLM_ADAPTER env var
adapter = create_llm_adapter()

# Full extractor with repositories
extractor = await create_extractor()

Environment Variables

# Backend selection
ONT_LLM_ADAPTER=ollama     # ollama (v0.1), claude/openai coming in v0.2
ONT_VALIDATOR=grounding    # grounding | composite | none
ONT_REPO_BACKEND=postgres  # postgres | memory

# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5:7b

Roadmap

  • v0.1.0 (current): OllamaAdapter, ingest pipeline, extraction engine, validation
  • v0.2.0: Claude and OpenAI adapters, GraphQL API
  • v0.3.0: Integration tests, documentation site

License

MIT

Metadata

Release files for birdlife-ont-core 0.1.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 birdlife-ont-core 0.1.0
File Size Uploaded
birdlife_ont_core-0.1.0.tar.gz 37.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for birdlife-ont-core 0.1.0
File Interpreter ABI Platform
birdlife_ont_core-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 78.2 kB

Release files / birdlife_ont_core-0.1.0.tar.gz

Download URL birdlife_ont_core-0.1.0.tar.gz
Size 37.3 kB
Tags Source
SHA-256 checksum
How to use checksums
dcd7acf2d706b9d9edcb16a1d96cdd07869aba0dc63c643006f3b30145c95059
BLAKE2b-256 checksum
How to use checksums
68bdc86294e48435ced17463841bf294a4474977abe4843976b67e22f937c5bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / birdlife_ont_core-0.1.0-py3-none-any.whl

Download URL birdlife_ont_core-0.1.0-py3-none-any.whl
Size 40.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6487822f08fab3aa91a0fa3d7654080cb45e2769e719c8ff495bcf33346b16ce
BLAKE2b-256 checksum
How to use checksums
54e6700f0d652e8ddcdbaef00fadf088a590d3619036e283543b1aebb48348b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release history Release notifications | RSS feed

This release

0.1.0 This release

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