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://platform.claude.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

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.

To let a community's model write and run Python in the reader's own browser (execute_code, a client tool), see docs/community-browser-runtime.md: the extensions.client_tools and runtime.python config keys, the lock overlay for wheels Pyodide does not ship, the embedding page's Content-Security-Policy, and the measured first-load cost.

To customize a community's widget (title, greeting, suggested questions, logo, and its colors: the surface, the text on it, the accent used on the white panel, and the reader's own message bubble), see docs/community-widget.md.

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.15

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.15
File Size Uploaded
open_science_assistant-0.8.15.tar.gz 2.3 MB Details

Built distribution (wheel)

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

Total release size: 3.2 MB

Release files / open_science_assistant-0.8.15.tar.gz

Download URL open_science_assistant-0.8.15.tar.gz
Size 2.3 MB
Tags Source
SHA-256 checksum
How to use checksums
cdf644be02d2406db9a4f21c003db30b20686aa6689a372f458487c7e1cd9562
BLAKE2b-256 checksum
How to use checksums
6bd2606c33e38750d499ba85576bf961fc501f4cec02aae82eeb0c5dade98cba
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 25, 2026.

Transparency log

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

Download URL open_science_assistant-0.8.15-py3-none-any.whl
Size 918.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
96977038129a5a3a425c186476fa47898cef2029adbdcb233ce66a23159a952b
BLAKE2b-256 checksum
How to use checksums
4610a39478d2b741f910dd5dffb468afe5f6e6dc339790f3a336b47067c057e6
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 25, 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