Skip to main content

Open Science Assistant (OSA)

An extensible AI assistant platform for open science projects, built with LangGraph/LangChain and FastAPI.

Overview

OSA provides domain-specific AI assistants for open science tools with:

  • HED Assistant: Hierarchical Event Descriptors for neuroimaging annotation
  • BIDS Assistant: Brain Imaging Data Structure
  • EEGLAB Assistant: EEG analysis toolbox
  • NEMAR Assistant: BIDS-formatted EEG, MEG, and iEEG dataset discovery

Features:

  • YAML-driven community registry - add a new assistant with just a config file
  • Modular tool system for document retrieval, validation, and code execution
  • Multi-source knowledge bases (GitHub, OpenALEX, Discourse forums, mailing lists)
  • Embeddable chat widget for any website
  • Production-ready observability via LangFuse

Installation

# From PyPI
pip install open-science-assistant

# Or with uv (recommended)
uv pip install open-science-assistant

Development Setup

# Clone and install in development mode
git clone https://github.com/OpenScience-Collective/osa.git
cd osa
uv sync --extra dev

# Install pre-commit hooks
uv run pre-commit install

Quick Start

CLI Usage

# Set up your API key
# Anthropic (what the platform itself runs on): https://console.anthropic.com/settings/keys
# OpenRouter (still supported for BYOK): https://openrouter.ai/keys
osa init

# Ask the HED assistant a question
osa ask -a hed "What is HED?"

# Start an interactive chat session
osa chat -a hed

# Show all commands
osa --help

API Server

Requires server dependencies: pip install 'open-science-assistant[server]'

# Start the API server
osa serve

# Or with uvicorn directly
uv run uvicorn src.api.main:app --reload --port 38528

Configuration

# Show current config
osa config show

# Set API keys for BYOK (Bring Your Own Key)
osa config set --anthropic-key sk-ant-...
osa config set --openrouter-key sk-or-v1-...

# Override API URL per-command
osa ask -a hed "What is HED?" --api-url https://api.osc.earth/osa-dev

Deployment

OSA can be deployed via Docker:

# Pull and run
docker pull ghcr.io/openscience-collective/osa:latest
docker run -d --name osa -p 38528:38528 \
  -e ANTHROPIC_API_KEY=your-key \
  ghcr.io/openscience-collective/osa:latest

# Check health
curl http://localhost:38528/health

See deploy/DEPLOYMENT_ARCHITECTURE.md for detailed deployment options including Apache reverse proxy and BYOK configuration.

Community Registry

OSA uses a YAML-driven registry to configure community assistants. Each community has a config.yaml that declares its documentation, system prompt, knowledge sources, and specialized tools.

# Directory structure
src/assistants/
    hed/config.yaml      # HED assistant configuration
    bids/config.yaml     # BIDS assistant (planned)

Adding a New Community

  1. Create src/assistants/my-tool/config.yaml:
id: my-tool
name: My Tool
description: A research tool for neuroscience
status: available

# By default, every community runs on the shared Claude Platform key.
# Optional: only set these if the community funds its own usage instead.
# Set the named environment variable on your backend server.
# anthropic_api_key_env_var: "ANTHROPIC_API_KEY_MY_TOOL"
# openrouter_api_key_env_var: "OPENROUTER_API_KEY_MY_TOOL"

system_prompt: |
  You are a technical assistant for {name}.
  {preloaded_docs_section}
  {available_docs_section}

documentation:
  - title: Getting Started
    url: https://my-tool.org/docs
    source_url: https://raw.githubusercontent.com/org/my-tool/main/docs/intro.md
    preload: true

github:
  repos:
    - org/my-tool
  1. (Optional) If you set either key env var, export it on your backend:
export ANTHROPIC_API_KEY_MY_TOOL="sk-ant-..."
# or, for a community that funds OpenRouter usage instead
export OPENROUTER_API_KEY_MY_TOOL="sk-or-v1-..."
  1. Validate your configuration:
uv run osa validate src/assistants/my-tool/config.yaml
  1. Start the server - the /{community-id}/ask endpoint is auto-created.

For the full guide, see the community registry documentation.

Documentation

Full documentation is available at docs.osc.earth/osa.

Development

# Run tests with coverage
uv run pytest --cov

# Format code
uv run ruff check --fix . && uv run ruff format .

License

MIT

Release files for open-science-assistant 0.8.10

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

Source distribution (sdist)

Source distribution for open-science-assistant 0.8.10
File Size Uploaded
open_science_assistant-0.8.10.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for open-science-assistant 0.8.10
File Interpreter ABI Platform
open_science_assistant-0.8.10-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / open_science_assistant-0.8.10.tar.gz

Download URL open_science_assistant-0.8.10.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
575cf61e36911955a55f51a8867fa7aa9eb36c2ecf0fb7f7f2520134b80f7712
BLAKE2b-256 checksum
How to use checksums
2c7f9587ec707edd1a33153ea5ae6c93f6940e99574a789c043897bae2ae0aba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / open_science_assistant-0.8.10-py3-none-any.whl

Download URL open_science_assistant-0.8.10-py3-none-any.whl
Size 445.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d091fd1dd143fa243ae02218324ef1d665f4a0aa1d6b4de07bb0879ad6b77d56
BLAKE2b-256 checksum
How to use checksums
3fc9f6065d9fef2f6836e4d5aea7efc0251cd7be5f1f586f14b60e172e54d4fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log
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