Architecture

High-level platform (target)

                     OneOpen ML Studio
                            │
          ┌─────────────────┴─────────────────┐
          │                                   │
     Web Application                     Public API
          │                                   │
          └─────────────────┬─────────────────┘
                            │
                   Authentication Layer
                            │
                     FastAPI API Layer
                            │
    ┌───────────────────────┼───────────────────────┐
    │                       │                       │
Identity & Access    Data Lifecycle            ML Lifecycle
    │                       │                       │
 Orgs / Workspaces     Projects / Datasets     Training
 Users / Roles         Annotation / Review     Experiments
 Permissions           Validation / Versions   Model Registry
                       Transform / Export      Deployment export
                            │
                     Workflow Engine
                            │
              ┌─────────────┴─────────────┐
              │                           │
       Background Jobs              Event System
       Redis / Celery               WebSockets
              │
     CPU / GPU Inference / GPU Training Workers
              │
     PostgreSQL|SQLite · Redis · Object Storage (local/S3/MinIO)

Today’s shipping app is a modular local FastAPI + Jinja stack (SQLite, local files, in-process training). Team and enterprise modes above are the target architecture.

Platform modes

Mode

Auth

Storage

Workers

Local

None (single user)

SQLite + filesystem

In-process / local

Team server

Users, roles

PostgreSQL, Redis, MinIO/S3

Celery CPU/GPU

Enterprise

SSO (OIDC/SAML/LDAP), audit

HA DB + object store

K8s autoscaling

Organizational hierarchy (target)

Platform
└── Organization
    ├── Workspaces
    │   ├── Projects
    │   │   ├── Datasets
    │   │   ├── Annotation Tasks
    │   │   ├── Pipelines
    │   │   ├── Training Runs
    │   │   └── Models
    │   └── Members
    └── Organization Settings

This hierarchy is wired in the product today: projects require a parent workspace; local mode uses Personal → Default workspace.

Universal dataset schema (direction)

Internal samples are framework-neutral (not YOLO/COCO-native). Export adapters convert to Ultralytics, COCO, Hugging Face, etc.

Conceptual sample:

{
  "sample_id": "sample_000123",
  "modality": "image",
  "task": {"type": "object_detection", "schema_version": "1.0"},
  "source": {"uri": "…", "checksum": "sha256-…", "mime_type": "image/jpeg"},
  "annotations": [],
  "predictions": [],
  "metadata": {},
  "lineage": {"dataset_version": "v5", "transformations": []}
}

Plugin surfaces (target)

oneopen.datasource · importer · annotation · model · auto_labeler
oneopen.validator · transform · augmentation · splitter · exporter
oneopen.trainer · evaluator · metric · visualization · notification

Training adapters (target interface)

Adapters implement validate → prepare → train → evaluate → export → metrics for Ultralytics, PyTorch, Hugging Face, sklearn, XGBoost, and custom scripts.

Suggested modular backend layout (evolution)

oneopen_ml_studio/
├── api/ identity/ projects/ data_sources/ datasets/
├── annotations/ reviews/ pipelines/
├── training/ experiments/ models/ active_learning/
├── plugins/ notifications/ audit/ storage/ workers/
└── common/

Start as a modular monolith; split services only when scale requires it.

Technology direction

Layer

Direction

Frontend

React + TypeScript (future); Jinja UI today

Backend

FastAPI, SQLAlchemy, Pydantic

Local DB

SQLite

Server DB

PostgreSQL + Redis + Celery

Object storage

Local FS → MinIO / S3

Deploy

Docker Compose → Kubernetes

See Roadmap for shipped capabilities and planned work.