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
LLMAdapterprotocol 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)
| File | Size | Uploaded | |
|---|---|---|---|
| birdlife_ont_core-0.1.0.tar.gz | 37.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|