Skip to content

Commit 1b5c302

Browse files
author
leoguillaume
committed
wip
1 parent f749b42 commit 1b5c302

File tree

20 files changed

+405
-351
lines changed

20 files changed

+405
-351
lines changed

.github/compose.test.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: albert-api
2+
services:
3+
api:
4+
build:
5+
context: ..
6+
dockerfile: app/Dockerfile
7+
platform: linux/amd64
8+
restart: always
9+
environment:
10+
- COVERAGE_RCFILE=./app/.coveragerc
11+
- BRAVE_API_KEY=${BRAVE_API_KEY}
12+
- ALBERT_API_KEY=${ALBERT_API_KEY}
13+
ports:
14+
- 8000:8000
15+
volumes:
16+
- ./config.test.yml:/config.yml:ro
17+
depends_on:
18+
redis:
19+
condition: service_healthy
20+
postgres:
21+
condition: service_healthy
22+
qdrant:
23+
condition: service_healthy
24+
25+
postgres:
26+
extends:
27+
file: ../compose.yml
28+
service: postgres
29+
30+
redis:
31+
extends:
32+
file: ../compose.yml
33+
service: redis
34+
35+
qdrant:
36+
extends:
37+
file: ../compose.yml
38+
service: qdrant
39+
40+
volumes:
41+
postgres:
42+
redis:
43+
qdrant:

.github/config.test.yml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
general:
2+
log_level: DEBUG
3+
4+
playground:
5+
api_url: http://api:8000
6+
max_api_key_expiration_days: 365
7+
cache_ttl: 1800
8+
database_url: postgresql://postgres:changeme@postgres:5432/playground
9+
10+
auth:
11+
master_username: master
12+
master_key: changeme
13+
14+
web_search:
15+
- type: brave
16+
model: albert-small
17+
args:
18+
api_key: ${BRAVE_API_KEY}
19+
20+
databases:
21+
- type: qdrant
22+
model: embeddings-small
23+
args:
24+
url: http://qdrant
25+
api_key: changeme
26+
prefer_grpc: True
27+
timeout: 10
28+
29+
- type: redis
30+
args:
31+
host: redis
32+
password: changeme
33+
34+
- type: sql
35+
args:
36+
url: postgresql+asyncpg://postgres:changeme@postgres:5432/api
37+
echo: True
38+
pool_size: 5
39+
max_overflow: 10
40+
pool_pre_ping: True
41+
connect_args: {"server_settings": {"statement_timeout": "120s"}}
42+
43+
models:
44+
- id: albert-large
45+
type: text-generation
46+
owned_by: test
47+
aliases: ["mistralai/Mistral-Small-3.1-24B-Instruct-2503"]
48+
clients:
49+
- model: mistralai/Mistral-Small-3.1-24B-Instruct-2503
50+
type: albert
51+
args:
52+
api_url: https://albert.api.etalab.gouv.fr
53+
api_key: ${ALBERT_API_KEY}
54+
timeout: 120
55+
56+
- id: albert-small
57+
type: text-generation
58+
aliases: ["meta-llama/Llama-3.1-8B-Instruct"]
59+
clients:
60+
- model: albert-small
61+
type: albert
62+
args:
63+
api_url: https://albert.api.etalab.gouv.fr
64+
api_key: ${ALBERT_API_KEY}
65+
timeout: 120
66+
67+
- id: embeddings-small
68+
type: text-embeddings-inference
69+
aliases: ["BAAI/bge-m3"]
70+
clients:
71+
- model: BAAI/bge-m3
72+
type: albert
73+
args:
74+
api_url: https://albert.api.etalab.gouv.fr
75+
api_key: ${ALBERT_API_KEY}
76+
timeout: 120
77+
78+
- id: audio-large
79+
type: automatic-speech-recognition
80+
aliases: ["openai/whisper-large-v3"]
81+
clients:
82+
- model: audio-large
83+
type: albert
84+
args:
85+
api_url: https://albert.api.etalab.gouv.fr
86+
api_key: ${ALBERT_API_KEY}
87+
timeout: 120
88+
89+
- id: rerank-small
90+
type: text-classification
91+
aliases: ["BAAI/bge-reranker-v2-m3"]
92+
clients:
93+
- model: rerank-small
94+
type: albert
95+
args:
96+
api_url: https://albert.api.etalab.gouv.fr
97+
api_key: ${ALBERT_API_KEY}
98+
timeout: 120
99+
100+

.github/workflows/run_tests.yml

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,22 @@ jobs:
1313

1414
steps:
1515
- uses: actions/checkout@v3
16-
17-
- name: Create config from template
18-
run: |
19-
echo "${{ secrets.CONFIG_YML }}" > config.yml
2016

2117
- name: Set up Docker Compose
2218
run: |
23-
docker compose --file compose.dev.yml up --detach
19+
docker compose --file ./.github/compose.test.yml up --detach
20+
env:
21+
BRAVE_API_KEY: ${{ secrets.BRAVE_API_KEY }}
22+
ALBERT_API_KEY: ${{ secrets.ALBERT_API_KEY }}
2423

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

CONTRIBUTING.md

Lines changed: 29 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -10,77 +10,52 @@ Pour contribuer au projet, merci de suivre les instructions suivantes.
1010

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

13+
> [!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.
14+
1315
2. Lancer le docker compose de développement avec le mode watch :
1416

1517
```bash
1618
docker compose --file compose.dev.yml up --watch
1719
```
1820

19-
L'API et l'UI seront disponibles respectivement sur les ports 8000 et 8501.
21+
> [!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).
2022
2123
# Développement hors environnement Docker
2224
23-
## Les bases de de données
24-
25-
Vous pouvez lancer les services de base de données nécéssaires avec docker compose :
26-
27-
```bash
28-
docker compose up --detach
29-
```
30-
31-
## API (FastAPI)
32-
33-
1. Dans un environnement virtuel Python, installez les packages Python présents dans le fichier *[pyproject.toml](./pyproject.toml)*
34-
35-
```bash
36-
pip install ".[app,dev,test]"
37-
pre-commit install
38-
```
25+
1. Créez un fichier *config.yml* à partir du fichier d'exemple de configuration *[config.example.yml](./config.example.yml)* avec vos modèles.
3926

40-
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.
27+
Pour plus d'information sur le déploiement des services, veuillez consulter la [documentation dédiée](./docs/deployment.md).
4128
42-
Pour plus d'information sur la configuration, veuillez consulter la [documentation dédiée](./docs/deployment.md).
29+
> [!NOTE] Le fichier de configuration pour exécuter les tests est [config.test.yml](./.github/config.test.yml). V
4330
44-
3. Créez les tables de la base de données avec Alembic
31+
2. Instanciez les dépendances
4532
4633
```bash
47-
alembic -c app/alembic.ini upgrade head
48-
```
34+
docker compose up --detach # run the databases
4935
50-
4. Lancez l'API en local
36+
pip install ".[app,ui,dev,test]" # install the dependencies
5137
52-
```bash
53-
uvicorn app.main:app --port 8000 --log-level debug --reload
38+
alembic -c app/alembic.ini upgrade head # create the API tables
39+
alembic -c ui/alembic.ini upgrade head # create the Playground tables
5440
```
5541
56-
## UI (Streamlit)
57-
58-
1. Dans un environnement virtuel Python, installez les packages Python présents dans le fichier *[pyproject.toml](./pyproject.toml)*
59-
60-
```bash
61-
pip install ".[ui,dev,test]"
62-
pre-commit install
63-
```
64-
65-
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.
66-
67-
Pour plus d'information sur la configuration, veuillez consulter la [documentation dédiée](./docs/deployment.md).
68-
69-
3. Créez les tables de la base de données avec Alembic
42+
3. Lancez l'API
7043

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

75-
4. Lancez l'UI en local
48+
4. Lancez le playground
49+
50+
Dans un autre terminal, lancez le playground avec la commande suivante :
7651

7752
```bash
78-
streamlit run ui/chat.py --server.port 8501 --browser.gatherUsageStats false --theme.base light
53+
streamlit run ui/chat.py --server.port 8501 --browser.gatherUsageStats false --theme.base light # run the playground
7954
```
8055

81-
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).
56+
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).
8257

83-
# Migration de la base de données SQL
58+
# Modifications de la structure des bases de données SQL
8459

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

@@ -113,64 +88,19 @@ alembic -c ui/alembic.ini upgrade head
11388
# Tests
11489

11590
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 :
116-
117-
```bash
118-
PYTHONPATH=. pytest --config-file=pyproject.toml
119-
```
120-
121-
Pour n'exécuter qu'une partie des tests, par exemple les test *audio*, exécutez la commande suivante :
12291

12392
```bash
124-
PYTHONPATH=. pytest app/tests/test_audio.py --config-file=pyproject.toml
93+
CONFIG_FILE=./.github/config.test.yml PYTHONPATH=. pytest --config-file=pyproject.toml
12594
```
12695

96+
> [!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.
97+
12798
Pour mettre à jour les snapshots, exécutez la commande suivante :
12899

129100
```bash
130101
PYTHONPATH=. pytest --config-file=pyproject.toml --snapshot-update
131102
```
132103

133-
## Configurer les tests dans VSCode
134-
135-
Pour utiliser le module testing de VSCode, veuillez la configuration suivante dans votre fichier *.vscode/settings.json* :
136-
137-
```json
138-
{
139-
"python.terminal.activateEnvironment": false,
140-
"python.testing.pytestArgs": [
141-
"app/tests",
142-
"--config-file=pyproject.toml"
143-
],
144-
"python.testing.unittestEnabled": false,
145-
"python.testing.pytestEnabled": true,
146-
}
147-
```
148-
149-
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 :
150-
151-
```json
152-
{
153-
"version": "0.2.0",
154-
"configurations": [
155-
{
156-
"name": "Debug Test",
157-
"purpose": [
158-
"debug-test"
159-
],
160-
"type": "debugpy",
161-
"request": "launch",
162-
"program": "${file}",
163-
"args": [
164-
"--color=yes",
165-
"--exitfirst"
166-
],
167-
"env": {"CONFIG_FILE": "<path to config file>"},
168-
"console": "integratedTerminal",
169-
}
170-
]
171-
}
172-
```
173-
174104
# Notebooks
175105

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

187117
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)*.
188118

189-
## Configurer Ruff avec pre-commit
190-
191-
1. Installez les hooks de pre-commit
192-
193-
```bash
194-
pip install ".[dev]"
195-
pre-commit install
196-
```
197-
198-
Ruff s'exécutera automatiquement à chaque commit.
119+
Merci de bien vouloir installer les hooks de pre-commit :
199120

200-
## Configurer Ruff sur VSCode
201-
202-
1. Installez l'extension *Ruff* (charliermarsh.ruff) dans VSCode
203-
2. Configurez le linter Ruff dans VSCode pour utiliser le fichier *[pyproject.toml](./pyproject.toml)*
204-
205-
À l'aide de la palette de commandes de VSCode (⇧⌘P), recherchez et sélectionnez *Preferences: Open User Settings (JSON)*.
206-
207-
Dans le fichier JSON qui s'ouvre, ajoutez à la fin du fichier les lignes suivantes :
208-
209-
```json
210-
"ruff.configuration": "<path to pyproject.toml>",
211-
"ruff.format.preview": true,
212-
"ruff.lineLength": 150,
213-
"ruff.codeAction.fixViolation": {
214-
"enable": false
215-
},
216-
"ruff.nativeServer": "on"
217-
```
218-
219-
⚠️ **Attention** : Assurez-vous que le fichier *[pyproject.toml](./app/pyproject.toml)* est bien spécifié dans la configuration.
121+
```bash
122+
pip install ".[dev]"
123+
pre-commit install
124+
```
220125

221-
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*.**
126+
Ruff s'exécutera automatiquement à chaque commit.
222127
223128
# Commit
224129
@@ -232,3 +137,4 @@ feat(collections): collection name retriever
232137
```
233138
234139
*Le thème est optionnel et doit correspondre à un thématique de la code base (deploy, collections, models, ...).
140+

0 commit comments

Comments
 (0)