Skip to main content

Everything in between human- and machine-readable syndromes.

Project description

open-syndrome-python

PyPI - Version Test

Installation

You can install it from PyPI or Docker. By default, the conversion features use Ollama running locally. Cloud providers (OpenAI, Anthropic, Mistral, DeepSeek, Gemini) are also supported and require only an API key.

From PyPi, install the package with pip install opensyndrome. Then run it with opensyndrome --help.

From Docker, you can run the following command to build the image, tagged opensyndrome:

docker build -t opensyndrome .

Run the container interactively, removing it when it exits

docker run --rm -it opensyndrome

To read a .env file, mount it:

docker run --rm -it \
  -v "$(pwd)/.env:/app/.env:ro" \
  opensyndrome

To name the container and keep it around:

docker run --name opensyndrome-cli -it opensyndrome

Usage

First, download the schema and definitions in order to work with the CLI locally.

opensyndrome download schema
opensyndrome download definitions

The files will be placed in the folder .open_syndrome in $HOME.

Providers and configuration

The provider and model can be set via environment variables so you don't have to pass them on every command:

OPENSYNDROME_PROVIDER=ollama   # ollama (default), openai, anthropic, mistral, deepseek, gemini
OPENSYNDROME_MODEL=mistral     # overrides the provider's default model

Copy .env.example to .env and fill in the relevant values:

Provider Required env var Default model
ollama — (runs locally) mistral
openai OPENAI_API_KEY gpt-4o
anthropic ANTHROPIC_API_KEY claude-3-haiku-20240307
mistral MISTRAL_API_KEY mistral-large-latest
deepseek DEEPSEEK_API_KEY deepseek-chat
gemini GEMINI_API_KEY gemini-1.5-flash

For Ollama, the model must be pulled before use: ollama pull mistral. You can also override the Ollama base URL with OLLAMA_BASE_URL (default: http://localhost:11434).

Ollama models tested: llama3.2, mistral, deepseek-r1. Known to not work well with structured output: qwen2.5-coder.

Convert a human-readable syndrome definition to a machine-readable JSON

If you do not pass -hr or -hf, an editor will open for you to enter the definition.

# see some examples from ECDC: https://www.ecdc.europa.eu/en/all-topics/eu-case-definitions

# pass the definition as inline text
opensyndrome convert -hr "Any person with pneumonia"

# pass the definition from a TXT file
opensyndrome convert -hf definition.txt

# use a specific provider and model
opensyndrome convert -hr "Any person with pneumonia" --provider openai --model gpt-4o

# to have the JSON translated to a specific language and edit it just after conversion
opensyndrome convert --language "Português do Brasil" --edit

# include a validation step after conversion
opensyndrome convert --validate

Enrich ontology IDs on a JSON definition

The enrich command populates ontology_id fields on criteria nodes and sets the @context to the OpenSyndrome JSON-LD context URL. It queries EBI OLS4 by default, or text2term as an alternative mapper.

# enrich an existing JSON definition (uses OLS4 by default)
opensyndrome enrich definition.json

# use text2term instead (requires: pip install opensyndrome[text2term])
opensyndrome enrich definition.json --mapper text2term

# review and adjust the result in an editor before printing
opensyndrome enrich definition.json --edit

# enrich and validate in one step
opensyndrome enrich definition.json --validate

You can also enrich directly after conversion:

opensyndrome convert -hr "Any person with fever and rash" --enrich-ontology
opensyndrome convert -hr "Any person with fever and rash" --enrich-ontology --mapper text2term

Convert a machine-readable JSON syndrome definition to a human-readable format

opensyndrome humanize <path-to-json-file>
opensyndrome humanize <path-to-json-file> --provider anthropic
opensyndrome humanize <path-to-json-file> --model mistral-large-latest --language "Português do Brasil"

Validate a machine-readable JSON syndrome definition

opensyndrome validate <path-to-json-file>

Development

To get started with development, you need to have uv installed.

Install dependencies

uv sync

To include the optional text2term mapper (and its bioregistry dependency) so the full test suite runs without skips:

uv sync --all-extras

Generate Ollama-compatible JSON

You only need to do this if you are a maintainer adding a new OSI schema or updating an existing one.

Since Ollama requires a specific, more simple, JSON format, we need to generate an Ollama-compatible schema. To do this, we use datamodel-code-generator to generate a Pydantic schema. Run the following command to update it:

make ollama_schema

It will create a schema.py file in the root of the project. Be careful when editing this file manually.

Citing & Authors

If you find this repository helpful, feel free to cite our publication: The Open Syndrome Definition

@misc{ferreira2025opensyndromedefinition,
      title={The Open Syndrome Definition},
      author={Ana Paula Gomes Ferreira and Aleksandar Anžel and Izabel Oliva Marcilio de Souza and Helen Hughes and Alex J Elliot and Jude Dzevela Kong and Madlen Schranz and Alexander Ullrich and Georges Hattab},
      year={2025},
      eprint={2509.25434},
      archivePrefix={arXiv},
      primaryClass={cs.AI},
      url={https://arxiv.org/abs/2509.25434},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opensyndrome-0.4.0.tar.gz (197.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opensyndrome-0.4.0-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

Details for the file opensyndrome-0.4.0.tar.gz.

File metadata

  • Download URL: opensyndrome-0.4.0.tar.gz
  • Upload date:
  • Size: 197.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opensyndrome-0.4.0.tar.gz
Algorithm Hash digest
SHA256 681df960c4c952cdf0219b28685327e8c59ba0cad3b704ef1c65ee29986d94d4
MD5 bc3e0a366aa189ad40cab1c492f492f0
BLAKE2b-256 6c71dd1c542a2f862a640549046bb990950b06988efa4ba8af03ea8c8f271683

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensyndrome-0.4.0.tar.gz:

Publisher: release.yml on OpenSyndrome/open-syndrome-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opensyndrome-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: opensyndrome-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opensyndrome-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5284d7e8a7348c2074d5ef82ec9fb88eea43914b5c9df890a605d20a97dfc635
MD5 088f65e07f288f02745295a86e2fe024
BLAKE2b-256 76d0fcfdc7c8ab75b70f731efc2637e032043c3792ce76d1241dc8ad21e862e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensyndrome-0.4.0-py3-none-any.whl:

Publisher: release.yml on OpenSyndrome/open-syndrome-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page