From 92ee92691ac0d3c8f65b02bcc7bb7d97a9eaf7aa Mon Sep 17 00:00:00 2001 From: leoguillaume Date: Tue, 10 Dec 2024 11:47:10 +0100 Subject: [PATCH] feat: handling duplicated models --- app/clients/_modelclients.py | 12 ++++++++--- docs/deployment.md | 23 ++++++++++---------- docs/models.md | 41 ++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 docs/models.md diff --git a/app/clients/_modelclients.py b/app/clients/_modelclients.py index 50f7f4f5..c923fe2f 100644 --- a/app/clients/_modelclients.py +++ b/app/clients/_modelclients.py @@ -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: diff --git a/docs/deployment.md b/docs/deployment.md index 8ee7e0d9..a675f167 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -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).*
+\** *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) : @@ -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: diff --git a/docs/models.md b/docs/models.md new file mode 100644 index 00000000..987eadf1 --- /dev/null +++ b/docs/models.md @@ -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.