Skip to content

Sources de données distantes

Chargez dynamiquement les données d'annotation dans Potato depuis des URL HTTP, des buckets S3, Google Cloud Storage, des bases PostgreSQL et les jeux de données Hugging Face, sans fichier local.

Potato sait charger les données d'annotation depuis d'autres sources que des fichiers locaux : URL, services de stockage dans le cloud, bases de données et jeux de données Hugging Face.

Vue d'ensemble

Le système de sources de données apporte :

  • Plusieurs types de sources : URL, Google Drive, Dropbox, S3, Hugging Face, Google Sheets, bases SQL
  • Chargement partiel : charger les données par tranches pour les gros jeux de données
  • Chargement incrémental : charger automatiquement de nouvelles données à mesure que l'annotation avance
  • Mise en cache : conserver les fichiers distants en local pour éviter de les retélécharger
  • Identifiants protégés : substitution par variables d'environnement pour les secrets

Configuration

Ajoutez data_sources à votre config.yaml :

yaml
data_sources:
  - type: file
    path: "data/annotations.jsonl"
 
  - type: url
    url: "https://example.com/data.jsonl"

Types de sources

Fichier local

yaml
data_sources:
  - type: file
    path: "data/annotations.jsonl"

URL HTTP/HTTPS

yaml
data_sources:
  - type: url
    url: "https://example.com/data.jsonl"
    headers:
      Authorization: "Bearer ${API_TOKEN}"
    max_size_mb: 100
    timeout_seconds: 30
    block_private_ips: true    # SSRF protection

Amazon S3

yaml
data_sources:
  - type: s3
    bucket: "my-annotation-data"
    key: "datasets/items.jsonl"
    region: "us-east-1"
    access_key_id: "${AWS_ACCESS_KEY_ID}"
    secret_access_key: "${AWS_SECRET_ACCESS_KEY}"

Prérequis : pip install boto3

Google Drive

yaml
data_sources:
  - type: google_drive
    url: "https://drive.google.com/file/d/xxx/view?usp=sharing"

Pour les fichiers privés, utilisez credentials_file avec un compte de service. Prérequis : pip install google-api-python-client google-auth

Dropbox

yaml
data_sources:
  - type: dropbox
    url: "https://www.dropbox.com/s/xxx/file.jsonl?dl=0"

Pour les fichiers privés, utilisez access_token: "${DROPBOX_TOKEN}". Prérequis : pip install dropbox

Jeux de données Hugging Face

yaml
data_sources:
  - type: huggingface
    dataset: "squad"
    split: "train"
    token: "${HF_TOKEN}"        # For private datasets
    id_field: "id"
    text_field: "context"

Prérequis : pip install datasets

Google Sheets

yaml
data_sources:
  - type: google_sheets
    spreadsheet_id: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
    sheet_name: "Sheet1"
    credentials_file: "credentials/service_account.json"

Prérequis : pip install google-api-python-client google-auth

Base de données SQL

yaml
data_sources:
  - type: database
    connection_string: "${DATABASE_URL}"
    query: "SELECT id, text, metadata FROM items WHERE status = 'pending'"

Ou avec des paramètres séparés :

yaml
data_sources:
  - type: database
    dialect: postgresql
    host: "localhost"
    port: 5432
    database: "annotations"
    username: "${DB_USER}"
    password: "${DB_PASSWORD}"
    table: "items"

Prérequis : pip install sqlalchemy psycopg2-binary (PostgreSQL) ou pymysql (MySQL)

Chargement partiel et incrémental

Pour les gros jeux de données, activez le chargement partiel :

yaml
partial_loading:
  enabled: true
  initial_count: 1000
  batch_size: 500
  auto_load_threshold: 0.8     # Auto-load when 80% annotated

Mise en cache

Les sources distantes sont mises en cache en local :

yaml
data_cache:
  enabled: true
  cache_dir: ".potato_cache"
  ttl_seconds: 3600            # 1 hour
  max_size_mb: 500

Gestion des identifiants

Passez par des variables d'environnement pour les valeurs sensibles :

yaml
data_sources:
  - type: url
    url: "https://api.example.com/data"
    headers:
      Authorization: "Bearer ${API_TOKEN}"
 
credentials:
  env_substitution: true
  env_file: ".env"

Sources multiples

Combinez des données venant de plusieurs sources :

yaml
data_sources:
  - type: file
    path: "data/base.jsonl"
 
  - type: url
    url: "https://example.com/extra.jsonl"
 
  - type: s3
    bucket: "my-bucket"
    key: "annotations/batch1.jsonl"

Compatibilité ascendante

La configuration data_files reste utilisable en parallèle de data_sources :

yaml
data_files:
  - "data/existing.jsonl"
 
data_sources:
  - type: url
    url: "https://example.com/additional.jsonl"

Sécurité

  • Les sources URL bloquent par défaut les adresses IP privées ou internes (protection contre le SSRF)
  • Ne versionnez jamais d'identifiants
  • Utilisez la syntaxe ${VAR_NAME} pour les secrets
  • Rangez les fichiers .env hors de votre dépôt

Pour aller plus loin

Pour les détails d'implémentation, consultez la documentation source.