Skip to main content

Open Science Assistant - An extensible AI assistant platform for open science projects

Project description

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 (get one at 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 --openrouter-key YOUR_KEY

# 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 OPENROUTER_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

# Required: Per-community OpenRouter API key for cost attribution
# Set the environment variable on your backend server
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. Set the API key environment variable on your backend:
export OPENROUTER_API_KEY_MY_TOOL="your-openrouter-key"
  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

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

open_science_assistant-0.8.4.tar.gz (939.5 kB view details)

Uploaded Source

Built Distribution

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

open_science_assistant-0.8.4-py3-none-any.whl (390.7 kB view details)

Uploaded Python 3

File details

Details for the file open_science_assistant-0.8.4.tar.gz.

File metadata

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

File hashes

Hashes for open_science_assistant-0.8.4.tar.gz
Algorithm Hash digest
SHA256 a7941a4bb5a9441beaa064846b7cfa3a1b78ebfc4856ad9c5c5df25d0005b3df
MD5 243deaff0934ba8b81a802ca6c53de47
BLAKE2b-256 85ccd74d862216a2e93871b77fc745ea6f019c7d78d9e7adacd91bb6d654d56e

See more details on using hashes here.

Provenance

The following attestation bundles were made for open_science_assistant-0.8.4.tar.gz:

Publisher: publish.yml on OpenScience-Collective/osa

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

File details

Details for the file open_science_assistant-0.8.4-py3-none-any.whl.

File metadata

File hashes

Hashes for open_science_assistant-0.8.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6ce653fb48155e13b0454d3de0a32b9eb74788022d8228d2da89f6f480ca6758
MD5 09d8c0ef22a6ba939a2e40ab98da923a
BLAKE2b-256 4bad03a2c18d89cd370d72c34dff2eec86a037a62497d6ab5f3267f683caae15

See more details on using hashes here.

Provenance

The following attestation bundles were made for open_science_assistant-0.8.4-py3-none-any.whl:

Publisher: publish.yml on OpenScience-Collective/osa

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