| from enum import Enum |
| from typing import Type, List |
| from dataclasses import dataclass |
| from collections import OrderedDict |
|
|
| from FlagEmbedding.abc.inference import AbsEmbedder |
| from FlagEmbedding.inference.embedder import FlagModel, BGEM3FlagModel, FlagLLMModel, FlagICLModel, FlagPseudoMoEModel |
|
|
|
|
| class EmbedderModelClass(Enum): |
| ENCODER_ONLY_BASE = "encoder-only-base" |
| ENCODER_ONLY_M3 = "encoder-only-m3" |
| DECODER_ONLY_BASE = "decoder-only-base" |
| DECODER_ONLY_ICL = "decoder-only-icl" |
| DECODER_ONLY_PSEUDO_MOE = "decoder-only-pseudo_moe" |
|
|
|
|
| EMBEDDER_CLASS_MAPPING = OrderedDict([ |
| (EmbedderModelClass.ENCODER_ONLY_BASE, FlagModel), |
| (EmbedderModelClass.ENCODER_ONLY_M3, BGEM3FlagModel), |
| (EmbedderModelClass.DECODER_ONLY_BASE, FlagLLMModel), |
| (EmbedderModelClass.DECODER_ONLY_ICL, FlagICLModel), |
| (EmbedderModelClass.DECODER_ONLY_PSEUDO_MOE, FlagPseudoMoEModel) |
| ]) |
|
|
|
|
| class PoolingMethod(Enum): |
| LAST_TOKEN = "last_token" |
| CLS = "cls" |
| MEAN = "mean" |
|
|
|
|
| @dataclass |
| class EmbedderConfig: |
| model_class: Type[AbsEmbedder] |
| pooling_method: PoolingMethod |
| trust_remote_code: bool = False |
| query_instruction_format: str = "{}{}" |
|
|
|
|
| |
| BGE_MAPPING = OrderedDict([ |
| ( |
| "bge-reasoner-embed-qwen3-8b-0923", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "bge-code-v1", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, trust_remote_code=True, query_instruction_format="<instruct>{}\n<query>{}") |
| ), |
| ( |
| "bge-en-icl", |
| EmbedderConfig(FlagICLModel, PoolingMethod.LAST_TOKEN, query_instruction_format="<instruct>{}\n<query>{}") |
| ), |
| ( |
| "bge-multilingual-gemma2", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="<instruct>{}\n<query>{}") |
| ), |
| ( |
| "bge-m3", |
| EmbedderConfig(BGEM3FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-large-en-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-base-en-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-small-en-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-large-zh-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-base-zh-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-small-zh-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-large-en", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-base-en", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-small-en", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-large-zh", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-base-zh", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| "bge-small-zh", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ]) |
|
|
| |
| QWEN3_EMBEDDING_MAPPING = OrderedDict([ |
| ( |
| "Qwen3-Embedding-0.6B", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery:{}") |
| ), |
| ( |
| "Qwen3-Embedding-4B", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery:{}") |
| ), |
| ( |
| "Qwen3-Embedding-8B", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery:{}") |
| ), |
| ]) |
|
|
|
|
| |
| E5_MAPPING = OrderedDict([ |
| ( |
| "e5-mistral-7b-instruct", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "e5-large-v2", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "e5-base-v2", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "e5-small-v2", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "multilingual-e5-large-instruct", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "multilingual-e5-large", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "multilingual-e5-base", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "multilingual-e5-small", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "e5-large", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "e5-base", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| "e5-small", |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ]) |
|
|
| |
| GTE_MAPPING = OrderedDict([ |
| ( |
| "gte-Qwen2-7B-instruct", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, trust_remote_code=True, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "gte-Qwen2-1.5B-instruct", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, trust_remote_code=True, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "gte-Qwen1.5-7B-instruct", |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, trust_remote_code=True, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| "gte-multilingual-base", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS, trust_remote_code=True) |
| ), |
| ( |
| "gte-large-en-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS, trust_remote_code=True) |
| ), |
| ( |
| "gte-base-en-v1.5", |
| EmbedderConfig(FlagModel, PoolingMethod.CLS, True) |
| ), |
| ( |
| 'gte-large', |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| 'gte-base', |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| 'gte-small', |
| EmbedderConfig(FlagModel, PoolingMethod.MEAN) |
| ), |
| ( |
| 'gte-large-zh', |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| 'gte-base-zh', |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ( |
| 'gte-small-zh', |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ]) |
|
|
| |
| SFR_MAPPING = OrderedDict([ |
| ( |
| 'SFR-Embedding-2_R', |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ( |
| 'SFR-Embedding-Mistral', |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ]) |
|
|
| |
| LINQ_MAPPING = OrderedDict([ |
| ( |
| 'Linq-Embed-Mistral', |
| EmbedderConfig(FlagLLMModel, PoolingMethod.LAST_TOKEN, query_instruction_format="Instruct: {}\nQuery: {}") |
| ), |
| ]) |
|
|
| |
| BCE_MAPPING = OrderedDict([ |
| ( |
| 'bce-embedding-base_v1', |
| EmbedderConfig(FlagModel, PoolingMethod.CLS) |
| ), |
| ]) |
|
|
| |
| AUTO_EMBEDDER_MAPPING = OrderedDict() |
| AUTO_EMBEDDER_MAPPING.update(BGE_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(QWEN3_EMBEDDING_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(E5_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(GTE_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(SFR_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(LINQ_MAPPING) |
| AUTO_EMBEDDER_MAPPING.update(BCE_MAPPING) |
|
|
| |
|
|
| def support_native_bge_model_list()->List[str]: |
| return list(BGE_MAPPING.keys()) |
|
|
| def support_model_list()->List[str]: |
| return list(AUTO_EMBEDDER_MAPPING.keys()) |
|
|