Skip to content

Commit

Permalink
feat: handling duplicated models
Browse files Browse the repository at this point in the history
  • Loading branch information
leoguillaumegouv committed Dec 10, 2024
1 parent 07ea386 commit 92ee926
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 15 deletions.
12 changes: 9 additions & 3 deletions app/clients/_modelclients.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,18 @@ def __init__(self, settings: Settings) -> None:
if model.status == "unavailable":
logger.error(msg=f"unavailable model API on {model_config.url}, skipping.")
continue
self.__setitem__(key=model.id, value=model)
try:
logger.info(msg=f"Adding model API {model_config.url} to the client...")
self.__setitem__(key=model.id, value=model)
logger.info(msg="done.")
except Exception as e:
logger.error(msg=e)

def __setitem__(self, key: str, value) -> None:
if any(key == k for k in self.keys()):
raise KeyError(f"Model id {key} is duplicated, not allowed.")
super().__setitem__(key, value)
raise ValueError(f"duplicated model ID {key}, skipping.")
else:
super().__setitem__(key, value)

def __getitem__(self, key: str) -> Any:
try:
Expand Down
23 changes: 11 additions & 12 deletions docs/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,24 @@
| CONFIG_FILE | Chemin vers le fichier de configuration (par défaut : "config.yml") |
| LOG_LEVEL | Niveau de journalisation (par défaut : DEBUG) |


### Clients tiers

Pour fonctionner, l'API Albert nécessite des clients tiers :

* [Optionnel] Auth : [Grist](https://www.getgrist.com/)*
* Auth (optionnel) : [Grist](https://www.getgrist.com/)*
* Cache : [Redis](https://redis.io/)
* Internet : [DuckDuckGo](https://duckduckgo.com/) ou [Brave](https://search.brave.com/)
* Vectors : [Qdrant](https://qdrant.tech/) ou [Elasticsearch](https://www.elastic.co/fr/products/elasticsearch)
* Models :
* [vLLM](https://github.com/vllm-project/vllm)
* [HuggingFace Text Embeddings Inference](https://github.com/huggingface/text-embeddings-inference)
* [Optionnel] [Whisper OpenAI API](https://github.com/etalab-ia/whisper-openai-api)
* Models** :
* text-generation: [vLLM](https://github.com/vllm-project/vllm)
* text-embeddings-inference: [HuggingFace Text Embeddings Inference](https://github.com/huggingface/text-embeddings-inference)
* automatic-speech-recognition: [Whisper OpenAI API](https://github.com/etalab-ia/whisper-openai-api)
* text-classification: [HuggingFace Text Embeddings Inference](https://github.com/huggingface/text-embeddings-inference)

Vous devez à minima à disposer d'un modèle language (text-generation) et d'un modèle d'embeddings (text-embeddings-inference).

\* *Pour plus d'information sur l'authentification Grist, voir la [documentation](./security.md).*
\* *Pour plus d'information sur l'authentification Grist, voir la [documentation](./security.md).*<br>
\** *Pour plus d'information sur le déploiement des modèles, voir la [documentation](./models.md).*

Ces clients sont déclarés dans un fichier de configuration qui doit respecter les spécifications suivantes (voir *[config.example.yml](./config.example.yml)* pour un exemple) :

Expand All @@ -59,13 +62,9 @@ internet:
...

models:
- url: [required]
- url: text-generation|text-embeddings-inference|automatic-speech-recognition|text-classification
key: [optional]
type: [required] # at least one of embedding model (text-embeddings-inference)

- url: [required]
key: [optional]
type: [required] # at least one of language model (text-generation)
...

databases:
Expand Down
41 changes: 41 additions & 0 deletions docs/models.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Models

L'API Albert permet de configurer 4 types de modèles :
- text-generation : modèle de language
- text-embeddings-inference : modèle d'embeddings
- automatic-speech-recognition : modèle de transcription audio.
- text-classification : modèle de reranking

Pour configurer la connexion à ces modèles, voir la documentation [deployment](./deployment.md).

## text-generation

Pour les modèles de language, vous pouvez utiliser n'importe quel API compatible avec le format [OpenAI](https://platform.openai.com/docs/api-reference/chat/create), c'est-à-dire disposant d'un endpoint `/v1/chat/completions`.

Si vous souhaitez déployer un modèle de language, vous recommandons d'utiliser [vLLM](https://github.com/vllm-project/vllm). Exemple de modèle de language : [guillaumetell-7b](https://huggingface.co/AgentPublic/guillaumetell-7b).

**⚠️ Le déploiement de l'API est pas conditionné à la fourniture d'un modèle de language.**

## text-embeddings-inference

Pour les modèles d'embeddings, vous pouvez utiliser n'importe quel API compatible avec le format [OpenAI](https://platform.openai.com/docs/api-reference/embeddings), c'est-à-dire disposant d'un endpoint `/v1/embeddings`.

Si vous souhaitez déployer un modèle d'embeddings, vous recommandons d'utiliser [HuggingFace Text Embeddings Inference](https://github.com/huggingface/text-embeddings-inference). Exemple de modèle d'embeddings : [multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large).

**⚠️ Le déploiement de l'API est conditionné à la fourniture d'un modèle d'embeddings.**

## automatic-speech-recognition

Pour les modèles de transcription audio, vous pouvez utiliser n'importe quel API compatible avec le format [OpenAI](https://platform.openai.com/docs/api-reference/audio/create-transcription), c'est-à-dire disposant d'un endpoint `/v1/audio/transcriptions`.

Si vous souhaitez déployer un modèle de transcription audio, vous recommandons d'utiliser [Whisper OpenAI API](https://github.com/etalab-ia/whisper-openai-api). Exemple de modèle de transcription audio : [whisper-large-v3-turbo](https://huggingface.co/openai/whisper-large-v3-turbo).

Le déploiement de l'API n'est pas conditionné à la fourniture d'un modèle de transcription audio.

## text-classification

Pour les modèles de reranking, vous devez une API compatible avec le format proposé par l'API [HuggingFace Text Embeddings Inference](https://huggingface.github.io/text-embeddings-inference/), c'est-à-dire disposant d'un endpoint `/rerank`.

Si vous souhaitez déployer un modèle de reranking, vous recommandons d'utiliser [HuggingFace Text Embeddings Inference](https://github.com/huggingface/text-embeddings-inference). Exemple de modèle de reranking : [bge-reranker-v2-m3](https://huggingface.co/BAAI/bge-reranker-v2-m3).

Le déploiement de l'API n'est pas conditionné à la fourniture d'un modèle de reranking.

0 comments on commit 92ee926

Please sign in to comment.