Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/badges/coverage.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"schemaVersion":1,"label":"Coverage","message":"84.65%","color":"green"}
{"schemaVersion":1,"label":"Coverage","message":"84.75%","color":"green"}
43 changes: 43 additions & 0 deletions .github/compose.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: albert-api
services:
api:
build:
context: ..
dockerfile: app/Dockerfile
platform: linux/amd64
restart: always
environment:
- COVERAGE_RCFILE=./app/.coveragerc
- BRAVE_API_KEY=${BRAVE_API_KEY}
- ALBERT_API_KEY=${ALBERT_API_KEY}
ports:
- 8000:8000
volumes:
- ./config.test.yml:/config.yml:ro
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
qdrant:
condition: service_healthy

postgres:
extends:
file: ../compose.yml
service: postgres

redis:
extends:
file: ../compose.yml
service: redis

qdrant:
extends:
file: ../compose.yml
service: qdrant

volumes:
postgres:
redis:
qdrant:
100 changes: 100 additions & 0 deletions .github/config.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
general:
log_level: DEBUG

playground:
api_url: http://api:8000
max_api_key_expiration_days: 365
cache_ttl: 1800
database_url: postgresql://postgres:changeme@postgres:5432/playground

auth:
master_username: master
master_key: changeme

web_search:
- type: brave
model: albert-small
args:
api_key: ${BRAVE_API_KEY}

databases:
- type: qdrant
model: embeddings-small
args:
url: http://qdrant
api_key: changeme
prefer_grpc: True
timeout: 10

- type: redis
args:
host: redis
password: changeme

- type: sql
args:
url: postgresql+asyncpg://postgres:changeme@postgres:5432/api
echo: True
pool_size: 5
max_overflow: 10
pool_pre_ping: True
connect_args: {"server_settings": {"statement_timeout": "120s"}}

models:
- id: albert-large
type: text-generation
owned_by: test
aliases: ["mistralai/Mistral-Small-3.1-24B-Instruct-2503"]
clients:
- model: mistralai/Mistral-Small-3.1-24B-Instruct-2503
type: albert
args:
api_url: https://albert.api.etalab.gouv.fr
api_key: ${ALBERT_API_KEY}
timeout: 120

- id: albert-small
type: text-generation
aliases: ["meta-llama/Llama-3.1-8B-Instruct"]
clients:
- model: albert-small
type: albert
args:
api_url: https://albert.api.etalab.gouv.fr
api_key: ${ALBERT_API_KEY}
timeout: 120

- id: embeddings-small
type: text-embeddings-inference
aliases: ["BAAI/bge-m3"]
clients:
- model: BAAI/bge-m3
type: albert
args:
api_url: https://albert.api.etalab.gouv.fr
api_key: ${ALBERT_API_KEY}
timeout: 120

- id: audio-large
type: automatic-speech-recognition
aliases: ["openai/whisper-large-v3"]
clients:
- model: audio-large
type: albert
args:
api_url: https://albert.api.etalab.gouv.fr
api_key: ${ALBERT_API_KEY}
timeout: 120

- id: rerank-small
type: text-classification
aliases: ["BAAI/bge-reranker-v2-m3"]
clients:
- model: rerank-small
type: albert
args:
api_url: https://albert.api.etalab.gouv.fr
api_key: ${ALBERT_API_KEY}
timeout: 120


16 changes: 9 additions & 7 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,22 @@ jobs:

steps:
- uses: actions/checkout@v3

- name: Create config from template
run: |
echo "${{ secrets.CONFIG_YML }}" > config.yml

- name: Set up Docker Compose
run: |
docker compose --file compose.dev.yml up --detach
docker compose --file ./.github/compose.test.yml up --detach
env:
BRAVE_API_KEY: ${{ secrets.BRAVE_API_KEY }}
ALBERT_API_KEY: ${{ secrets.ALBERT_API_KEY }}

- name: Wait for API to start
run: |
sleep 30
echo $(ls -la)
for i in {1..30}; do
curl -s http://localhost:8000/health -H "Authorization: Bearer changeme" > /dev/null && echo "API is ready" && break || echo "Waiting for API..." && sleep 2;
done
echo $(docker logs albert-api-api-1)

- name: Wait for PostgreSQL
run: |
for i in {1..30}; do
Expand Down
152 changes: 29 additions & 123 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,77 +10,52 @@ Pour contribuer au projet, merci de suivre les instructions suivantes.

Pour plus d'information sur le déploiement des services, veuillez consulter la [documentation dédiée](./docs/deployment.md).

> [!NOTE] Le fichier de configuration pour exécuter les tests est [config.test.yml](./.github/config.test.yml). Vous pouvez vous en inspirer pour configurer votre propre fichier de configuration.

2. Lancer le docker compose de développement avec le mode watch :

```bash
docker compose --file compose.dev.yml up --watch
```

L'API et l'UI seront disponibles respectivement sur les ports 8000 et 8501.
> [!NOTE] L'API et le playground seront disponibles respectivement sur les ports 8000 et 8501. Pour vous connecter au playground la première fois utilisez le login *master* et le mot de passe *changeme* (définit dans le fichier de configuration).

# Développement hors environnement Docker

## Les bases de de données

Vous pouvez lancer les services de base de données nécéssaires avec docker compose :

```bash
docker compose up --detach
```

## API (FastAPI)

1. Dans un environnement virtuel Python, installez les packages Python présents dans le fichier *[pyproject.toml](./pyproject.toml)*

```bash
pip install ".[app,dev,test]"
pre-commit install
```
1. Créez un fichier *config.yml* à partir du fichier d'exemple de configuration *[config.example.yml](./config.example.yml)* avec vos modèles.

2. Créez un fichier *config.yml* à partir du fichier d'exemple de configuration *[config.example.yml](./config.example.yml)* en configurant votre base de données SQL et vos modèles.
Pour plus d'information sur le déploiement des services, veuillez consulter la [documentation dédiée](./docs/deployment.md).

Pour plus d'information sur la configuration, veuillez consulter la [documentation dédiée](./docs/deployment.md).
> [!NOTE] Le fichier de configuration pour exécuter les tests est [config.test.yml](./.github/config.test.yml). V

3. Créez les tables de la base de données avec Alembic
2. Instanciez les dépendances

```bash
alembic -c app/alembic.ini upgrade head
```
docker compose up --detach # run the databases

4. Lancez l'API en local
pip install ".[app,ui,dev,test]" # install the dependencies

```bash
uvicorn app.main:app --port 8000 --log-level debug --reload
alembic -c app/alembic.ini upgrade head # create the API tables
alembic -c ui/alembic.ini upgrade head # create the Playground tables
```

## UI (Streamlit)

1. Dans un environnement virtuel Python, installez les packages Python présents dans le fichier *[pyproject.toml](./pyproject.toml)*

```bash
pip install ".[ui,dev,test]"
pre-commit install
```

2. Créez un fichier *config.yml* à partir du fichier d'exemple de configuration *[config.example.yml](./config.example.yml)* en configurant votre base de données SQL.

Pour plus d'information sur la configuration, veuillez consulter la [documentation dédiée](./docs/deployment.md).

3. Créez les tables de la base de données avec Alembic
3. Lancez l'API

```bash
alembic -c ui/alembic.ini upgrade head
uvicorn app.main:app --port 8000 --log-level debug --reload # run the API
```

4. Lancez l'UI en local
4. Lancez le playground

Dans un autre terminal, lancez le playground avec la commande suivante :

```bash
streamlit run ui/chat.py --server.port 8501 --browser.gatherUsageStats false --theme.base light
streamlit run ui/chat.py --server.port 8501 --browser.gatherUsageStats false --theme.base light # run the playground
```

Pour vous connecter à l'UI la première fois utilisez le login *master* et le mot de passe *changeme* (correspondant à la clé master dans le fichier de configuration).
Pour vous connecter au playground la première fois utilisez le login *master* et le mot de passe *changeme* (définit dans le fichier de configuration).

# Migration de la base de données SQL
# Modifications de la structure des bases de données SQL

## Modifications du fichier [`app/sql/models.py`](./app/sql/models.py)

Expand Down Expand Up @@ -113,64 +88,19 @@ alembic -c ui/alembic.ini upgrade head
# Tests

Merci, avant chaque pull request, de vérifier le bon déploiement de votre API en exécutant les tests prévus à cet effet. Pour exécuter ces tests à la racine du projet, exécutez la commande suivante :

```bash
PYTHONPATH=. pytest --config-file=pyproject.toml
```

Pour n'exécuter qu'une partie des tests, par exemple les test *audio*, exécutez la commande suivante :

```bash
PYTHONPATH=. pytest app/tests/test_audio.py --config-file=pyproject.toml
CONFIG_FILE=./.github/config.test.yml PYTHONPATH=. pytest --config-file=pyproject.toml
```

> [!NOTE] Le fichier de configuration pour exécuter les tests est [config.test.yml](./.github/config.test.yml). Vous pouvez le modifier pour exécuter les tests sur votre machine.

Pour mettre à jour les snapshots, exécutez la commande suivante :

```bash
PYTHONPATH=. pytest --config-file=pyproject.toml --snapshot-update
```

## Configurer les tests dans VSCode

Pour utiliser le module testing de VSCode, veuillez la configuration suivante dans votre fichier *.vscode/settings.json* :

```json
{
"python.terminal.activateEnvironment": false,
"python.testing.pytestArgs": [
"app/tests",
"--config-file=pyproject.toml"
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
}
```

Afin de spéficier les variables d'environnement nécessaires pour les tests, vous devez également créer un fichier *.vscode/launch.json* avec la configuration suivante ou l'ajouter à votre fichier existant :

```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Test",
"purpose": [
"debug-test"
],
"type": "debugpy",
"request": "launch",
"program": "${file}",
"args": [
"--color=yes",
"--exitfirst"
],
"env": {"CONFIG_FILE": "<path to config file>"},
"console": "integratedTerminal",
}
]
}
```

# Notebooks

Il est important de tenir à jour les notebooks de docs/tutorials, afin de montrer des rapides exemples d'utilisation de l'API.
Expand All @@ -186,39 +116,14 @@ jupyter notebook docs/tutorials/

Le linter du projet est [Ruff](https://beta.ruff.rs/docs/configuration/). Les règles de formatage spécifiques au projet sont dans le fichier *[pyproject.toml](./pyproject.toml)*.

## Configurer Ruff avec pre-commit

1. Installez les hooks de pre-commit

```bash
pip install ".[dev]"
pre-commit install
```

Ruff s'exécutera automatiquement à chaque commit.
Merci de bien vouloir installer les hooks de pre-commit :

## Configurer Ruff sur VSCode

1. Installez l'extension *Ruff* (charliermarsh.ruff) dans VSCode
2. Configurez le linter Ruff dans VSCode pour utiliser le fichier *[pyproject.toml](./pyproject.toml)*

À l'aide de la palette de commandes de VSCode (⇧⌘P), recherchez et sélectionnez *Preferences: Open User Settings (JSON)*.

Dans le fichier JSON qui s'ouvre, ajoutez à la fin du fichier les lignes suivantes :

```json
"ruff.configuration": "<path to pyproject.toml>",
"ruff.format.preview": true,
"ruff.lineLength": 150,
"ruff.codeAction.fixViolation": {
"enable": false
},
"ruff.nativeServer": "on"
```

⚠️ **Attention** : Assurez-vous que le fichier *[pyproject.toml](./app/pyproject.toml)* est bien spécifié dans la configuration.
```bash
pip install ".[dev]"
pre-commit install
```

3. **Pour exécuter le linter, utilisez la palette de commandes de VSCode (⇧⌘P) depuis le fichier sur lequel vous voulez l'exécuter, puis recherchez et sélectionnez *Ruff: Format document* et *Ruff: Format imports*.**
Ruff s'exécutera automatiquement à chaque commit.

# Commit

Expand All @@ -232,3 +137,4 @@ feat(collections): collection name retriever
```

*Le thème est optionnel et doit correspondre à un thématique de la code base (deploy, collections, models, ...).

Loading