> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flexinference.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenScience

> Configure OpenScience pour qu'il pointe vers FlexInference uniquement via la configuration.

OpenScience lit une entrée de fournisseur à partir d'un fichier JSON. Une version standard ne nécessite aucune modification du code source.

OpenScience peut définir `start_within` dans la configuration, de sorte qu'une clé d'agent est facultative ici. La clé reste le chemin le plus simple, car elle peut être modifiée sans redémarrage. Consultez les [clés d'agent](/fr/agent-keys).

## Configurer cela avec un agent

Ouvrez le bloc ci-dessous et copiez-le dans n'importe quel agent de codage. L'invite ne vous demandera jamais votre clé API : l'agent configure tout le reste, puis affiche la ligne d'exportation que vous devrez exécuter vous-même.

<Accordion title="Copier l'invite de configuration de l'agent">
  ```text theme={null}
  Configure OpenScience to send its requests to FlexInference. This is config only: no source change, no fork, no patch.

  You will never see or handle my API key. The provider entry stores only the `{env:FLEXINFERENCE_API_KEY}` template, and I export the value myself. Do not ask me for the key, and do not read it from my environment.

  1. Create a directory named `config/` and put `openscience.json` in it with this content:

  {
    "$schema": "https://syntheticsciences.ai/config.json",
    "model": "flexinference/gpt-5.6-sol",
    "provider": {
      "flexinference": {
        "name": "FlexInference",
        "env": ["FLEXINFERENCE_API_KEY"],
        "npm": "@ai-sdk/openai-compatible",
        "options": {
          "apiKey": "{env:FLEXINFERENCE_API_KEY}",
          "baseURL": "https://api.flexinference.com/v1"
        },
        "models": {
          "gpt-5.6-sol": {
            "name": "GPT-5.6 Sol",
            "reasoning": true,
            "tool_call": true
          }
        }
      }
    }
  }

  2. Print these lines for me to run. Do not run the export and do not ask for the value:

  export FLEXINFERENCE_API_KEY=<paste your key here>
  OPENSCIENCE_CONFIG_DIR=./config bun run dev

  3. Add `config/package.json`, `config/bun.lock`, and `config/node_modules/` to `.gitignore`. OpenScience writes those into any directory it loads config from on first run.

  Rules that matter, do not deviate:
  - Use `OPENSCIENCE_CONFIG_DIR`, not `OPENSCIENCE_CONFIG`. The first names a directory and scans it for commands, agents, and plugins. The second names a single file and scans nothing.
  - If I ask for a plugin, place the file at `config/plugins/<name>.js` and leave the `plugin` key out of the JSON entirely.
  - Tell me that any `.openscience` or `.synsc` directory inside a repository I open is also scanned for plugins, and that those plugins run with my exported key in the environment. Recommend I export the key only in the launch shell. Every entry in that array without a `file://` prefix is treated as an npm package name and handed to `bun add`, which fails and takes plugin startup down. The directory scan is one level deep and loads every `.js` and `.ts` sitting directly in `plugins/`, so keep shared modules outside it.
  - Do NOT put `start_within` in any model's `options`. FlexInference injects a key default only when the field is ABSENT, so writing it here permanently overrides my agent key's deadline with whatever you hardcoded. Only add it if I tell you I am not using an agent key.
  - Keep `options.apiKey` as the literal `{env:FLEXINFERENCE_API_KEY}` template. Never inline my key.
  - The top-level `model` field is what selects the provider. Without it OpenScience stays on its built-in default.
  - Every key under `models` is a slug sent verbatim on the wire, so it must be one FlexInference serves.

  Verify the file is valid JSON, then report what you created and the exact command to run.
  ```
</Accordion>

## Configurer OpenScience

1. Exportez la clé dans le shell qui démarre OpenScience.

```bash theme={null}
export FLEXINFERENCE_API_KEY=flex_live_...
```

2. Écrivez l'entrée du fournisseur dans `openscience.json`.

```json theme={null}
{
  "$schema": "https://syntheticsciences.ai/config.json",
  "model": "flexinference/gpt-5.6-sol",
  "provider": {
    "flexinference": {
      "name": "FlexInference",
      "env": ["FLEXINFERENCE_API_KEY"],
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "apiKey": "{env:FLEXINFERENCE_API_KEY}",
        "baseURL": "https://api.flexinference.com/v1"
      },
      "models": {
        "gpt-5.6-sol": {
          "name": "GPT-5.6 Sol",
          "reasoning": true,
          "tool_call": true
        }
      }
    }
  }
}
```

3. Démarrez OpenScience avec le répertoire de configuration défini.

```bash theme={null}
OPENSCIENCE_CONFIG_DIR=/path/to/config bun run dev
```

Laissez `start_within` hors des `options` lorsque votre clé contient la date limite. Nous ne remplissons une valeur par défaut stockée que lorsque le champ est absent ; une valeur ici annulerait donc la clé à chaque requête.

Définissez plutôt `"start_within": "default"` sur chaque modèle lorsque vous n'utilisez **pas** de clé d'agent. C'est la base de référence sûre, car un modèle choisi sans sélection de session sera alors acheminé de manière standard plutôt que de concourir par accident.

## Où va le fichier

OpenScience fusionne la configuration provenant de plusieurs emplacements, et une source ultérieure l'emporte.

* La configuration utilisateur globale dans le répertoire de configuration d'OpenScience.
* `OPENSCIENCE_CONFIG`, un chemin vers un fichier de configuration.
* `synsc.jsonc`, `synsc.json`, `openscience.jsonc` et `openscience.json` trouvés en remontant jusqu'à la racine de l'arborescence de travail, sauf si `OPENSCIENCE_DISABLE_PROJECT_CONFIG` est défini.
* `OPENSCIENCE_CONFIG_CONTENT`, contenant le JSON en ligne.
* Ces quatre mêmes noms à l'intérieur de chaque répertoire `.openscience` ou `.synsc` lors de cette remontée, plus tout répertoire nommé par `OPENSCIENCE_CONFIG_DIR`.

Les deux variables de chemin ne sont pas interchangeables. `OPENSCIENCE_CONFIG` désigne un fichier. `OPENSCIENCE_CONFIG_DIR` désigne un répertoire et traite l'ensemble comme une configuration, le scannant pour les commandes, les agents et les plugins. Utilisez la forme de répertoire lorsque le bundle contient plus que du JSON.

## Charger un plugin en le plaçant

OpenScience scanne chaque répertoire de configuration à la recherche de `{plugin,plugins}/*.{ts,js}` et charge ce qu'il trouve comme un fichier local. Placez le fichier à `plugins/flex.js` et omettez `plugin` du JSON.

```
config/
  openscience.json
  plugins/
    flex.js
```

Écrire le chemin dans `plugin` ne fonctionne pas. OpenScience lit chaque entrée sans préfixe `file://` comme un nom de package npm et le transmet à `bun add`, de sorte que `"./plugins/flex.js"` échoue à l'installation et entraîne l'arrêt du démarrage du plugin.

Le scan est d'un seul niveau de profondeur, et il prend tous les fichiers `.js` et `.ts` se trouvant directement dans `plugins/`. Gardez les modules partagés en dehors de ce répertoire, sinon OpenScience les chargera également comme plugins.

La première fois qu'OpenScience charge la configuration à partir d'un répertoire, il y écrit `package.json`, `bun.lock`, `node_modules/` et un `.gitignore` les couvrant. Attendez-vous à cela et ne les incluez pas dans Git.

## Confirmer l'application de la clé

Chaque réponse est accompagnée de `x-flexinference-defaults-applied`. OpenScience n'affiche pas les en-têtes de réponse dans l'espace de travail, alors lisez plutôt la requête dans le tableau de bord sous **Logs**.

## Dépannage

**Un plugin n'a jamais été chargé.** Le nommer dans `plugin` l'envoie à `bun add` comme nom de package, ce qui échoue et entraîne l'arrêt du démarrage du plugin. Placez le fichier à `plugins/flex.js` à l'intérieur du répertoire de configuration et omettez `plugin` du JSON.

**Un module d'aide chargé comme plugin.** Le scan prend tous les fichiers `.js` et `.ts` se trouvant directement dans `plugins/`. Déplacez les modules partagés en dehors de ce répertoire.

**Les requêtes ne nous parviennent jamais.** Le champ `model` de niveau supérieur est ce qui sélectionne le fournisseur. Sans lui, OpenScience reste sur sa valeur par défaut intégrée.

**[`401 invalid_api_key`](/fr/errors#invalid_api_key).** `FLEXINFERENCE_API_KEY` n'est pas défini dans le shell qui a démarré OpenScience. Exportez-le avant le lancement.

**[`400 flex_unsupported_for_anthropic`](/fr/errors#flex_unsupported_for_anthropic).** Une durée dans `options` a atteint un modèle `claude-*` avec votre propre clé Anthropic. La [course](/fr/deadline-routing) qu'une durée Claude exécute nécessite des clés gérées. Supprimez la durée et laissez la clé gérer la date limite.

**La date limite de la clé ne s'applique jamais.** Un `start_within` dans les `options` d'un modèle l'emporte sur la clé, car nous ne remplissons une valeur par défaut stockée que lorsque le champ est absent. Supprimez-le de l'entrée.

Consultez les [erreurs](/fr/errors) pour chaque refus que nous renvoyons, les [clés d'agent](/fr/agent-keys) pour celles qui ne sont pas spécifiques à OpenScience, et [OpenCode](/fr/opencode) pour les options de date limite par modèle et par variante, qu'OpenScience partage.
