mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
add support for Voyage AI (#2159)
### What problem does this PR solve? #1853 #2138 add support for Voyage AI ### Type of change - [x] New Feature (non-breaking change which adds functionality) --------- Co-authored-by: Zhedong Cen <cenzhedong2@126.com> Co-authored-by: Kevin Hu <kevinhu.sh@gmail.com>
This commit is contained in:
@ -2400,7 +2400,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Lepton",
|
"name": "LeptonAI",
|
||||||
"logo": "",
|
"logo": "",
|
||||||
"tags": "LLM",
|
"tags": "LLM",
|
||||||
"status": "1",
|
"status": "1",
|
||||||
@ -3290,6 +3290,68 @@
|
|||||||
"model_type": "chat"
|
"model_type": "chat"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Voyage AI",
|
||||||
|
"logo": "",
|
||||||
|
"tags": "TEXT EMBEDDING, TEXT RE-RANK",
|
||||||
|
"status": "1",
|
||||||
|
"llm": [
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-large-2-instruct",
|
||||||
|
"tags": "TEXT EMBEDDING,16000",
|
||||||
|
"max_tokens": 16000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-finance-2",
|
||||||
|
"tags": "TEXT EMBEDDING,32000",
|
||||||
|
"max_tokens": 32000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-multilingual-2",
|
||||||
|
"tags": "TEXT EMBEDDING,32000",
|
||||||
|
"max_tokens": 32000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-law-2",
|
||||||
|
"tags": "TEXT EMBEDDING,16000",
|
||||||
|
"max_tokens": 16000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-code-2",
|
||||||
|
"tags": "TEXT EMBEDDING,16000",
|
||||||
|
"max_tokens": 16000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-large-2",
|
||||||
|
"tags": "TEXT EMBEDDING,16000",
|
||||||
|
"max_tokens": 16000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "voyage-2",
|
||||||
|
"tags": "TEXT EMBEDDING,4000",
|
||||||
|
"max_tokens": 4000,
|
||||||
|
"model_type": "embedding"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "rerank-1",
|
||||||
|
"tags": "RE-RANK, 8000",
|
||||||
|
"max_tokens": 8000,
|
||||||
|
"model_type": "rerank"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"llm_name": "rerank-lite-1",
|
||||||
|
"tags": "RE-RANK, 4000",
|
||||||
|
"max_tokens": 4000,
|
||||||
|
"model_type": "rerank"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,8 @@ EmbeddingModel = {
|
|||||||
"Upstage": UpstageEmbed,
|
"Upstage": UpstageEmbed,
|
||||||
"SILICONFLOW": SILICONFLOWEmbed,
|
"SILICONFLOW": SILICONFLOWEmbed,
|
||||||
"Replicate": ReplicateEmbed,
|
"Replicate": ReplicateEmbed,
|
||||||
"BaiduYiyan": BaiduYiyanEmbed
|
"BaiduYiyan": BaiduYiyanEmbed,
|
||||||
|
"Voyage AI": VoyageEmbed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -105,7 +106,7 @@ ChatModel = {
|
|||||||
"Tencent Hunyuan": HunyuanChat,
|
"Tencent Hunyuan": HunyuanChat,
|
||||||
"XunFei Spark": SparkChat,
|
"XunFei Spark": SparkChat,
|
||||||
"BaiduYiyan": BaiduYiyanChat,
|
"BaiduYiyan": BaiduYiyanChat,
|
||||||
"Anthropic": AnthropicChat
|
"Anthropic": VoyageChat,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +121,8 @@ RerankModel = {
|
|||||||
"cohere": CoHereRerank,
|
"cohere": CoHereRerank,
|
||||||
"TogetherAI": TogetherAIRerank,
|
"TogetherAI": TogetherAIRerank,
|
||||||
"SILICONFLOW": SILICONFLOWRerank,
|
"SILICONFLOW": SILICONFLOWRerank,
|
||||||
"BaiduYiyan": BaiduYiyanRerank
|
"BaiduYiyan": BaiduYiyanRerank,
|
||||||
|
"Voyage AI": VoyageRerank
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -623,3 +623,24 @@ class BaiduYiyanEmbed(Base):
|
|||||||
np.array([r["embedding"] for r in res["data"]]),
|
np.array([r["embedding"] for r in res["data"]]),
|
||||||
res["usage"]["total_tokens"],
|
res["usage"]["total_tokens"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class VoyageEmbed(Base):
|
||||||
|
def __init__(self, key, model_name, base_url=None):
|
||||||
|
import voyageai
|
||||||
|
|
||||||
|
self.client = voyageai.Client(api_key=key)
|
||||||
|
self.model_name = model_name
|
||||||
|
|
||||||
|
def encode(self, texts: list, batch_size=32):
|
||||||
|
res = self.client.embed(
|
||||||
|
texts=texts, model=self.model_name, input_type="document"
|
||||||
|
)
|
||||||
|
return np.array(res.embeddings), res.total_tokens
|
||||||
|
|
||||||
|
def encode_queries(self, text):
|
||||||
|
res = self.client.embed
|
||||||
|
res = self.client.embed(
|
||||||
|
texts=text, model=self.model_name, input_type="query"
|
||||||
|
)
|
||||||
|
return np.array(res.embeddings), res.total_tokens
|
||||||
|
|||||||
@ -311,3 +311,19 @@ class BaiduYiyanRerank(Base):
|
|||||||
rank = np.array([d["relevance_score"] for d in res["results"]])
|
rank = np.array([d["relevance_score"] for d in res["results"]])
|
||||||
indexs = [d["index"] for d in res["results"]]
|
indexs = [d["index"] for d in res["results"]]
|
||||||
return rank[indexs], res["usage"]["total_tokens"]
|
return rank[indexs], res["usage"]["total_tokens"]
|
||||||
|
|
||||||
|
|
||||||
|
class VoyageRerank(Base):
|
||||||
|
def __init__(self, key, model_name, base_url=None):
|
||||||
|
import voyageai
|
||||||
|
|
||||||
|
self.client = voyageai.Client(api_key=key)
|
||||||
|
self.model_name = model_name
|
||||||
|
|
||||||
|
def similarity(self, query: str, texts: list):
|
||||||
|
res = self.client.rerank(
|
||||||
|
query=query, documents=texts, model=self.model_name, top_k=len(texts)
|
||||||
|
)
|
||||||
|
rank = np.array([r.relevance_score for r in res.results])
|
||||||
|
indexs = [r.index for r in res.results]
|
||||||
|
return rank[indexs], res.total_tokens
|
||||||
|
|||||||
@ -86,6 +86,7 @@ torch==2.3.0
|
|||||||
transformers==4.38.1
|
transformers==4.38.1
|
||||||
umap==0.1.1
|
umap==0.1.1
|
||||||
volcengine==1.0.146
|
volcengine==1.0.146
|
||||||
|
voyageai==0.2.3
|
||||||
webdriver_manager==4.0.1
|
webdriver_manager==4.0.1
|
||||||
Werkzeug==3.0.3
|
Werkzeug==3.0.3
|
||||||
wikipedia==1.4.0
|
wikipedia==1.4.0
|
||||||
|
|||||||
@ -141,6 +141,7 @@ loguru==0.7.2
|
|||||||
umap-learn
|
umap-learn
|
||||||
fasttext==0.9.2
|
fasttext==0.9.2
|
||||||
volcengine==1.0.141
|
volcengine==1.0.141
|
||||||
|
voyageai==0.2.3
|
||||||
opencv-python-headless==4.9.0.80
|
opencv-python-headless==4.9.0.80
|
||||||
readability-lxml==0.8.1
|
readability-lxml==0.8.1
|
||||||
html_text==0.6.2
|
html_text==0.6.2
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
32
web/src/assets/svg/llm/voyage.svg
Normal file
32
web/src/assets/svg/llm/voyage.svg
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100.000000pt" height="19.000000pt" viewBox="0 0 300.000000 57.000000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g transform="translate(0.000000,57.000000) scale(0.100000,-0.100000)" fill="currentColor" stroke="none">
|
||||||
|
<path d="M2505 368 c-38 -84 -86 -188 -106 -230 l-38 -78 27 0 c24 0 30 7 55
|
||||||
|
75 l28 75 100 0 100 0 25 -55 c13 -31 24 -64 24 -75 0 -17 7 -20 44 -20 l43 0
|
||||||
|
-37 73 c-20 39 -68 143 -106 229 -38 87 -74 158 -80 158 -5 0 -41 -69 -79
|
||||||
|
-152z m110 -30 c22 -51 41 -95 42 -98 2 -3 -36 -6 -83 -7 -76 -1 -85 0 -81 15
|
||||||
|
12 40 72 182 77 182 3 0 24 -41 45 -92z"></path>
|
||||||
|
<path d="M63 493 c19 -61 197 -438 209 -440 10 -2 147 282 216 449 2 4 -10 8
|
||||||
|
-27 8 -23 0 -31 -5 -31 -17 0 -16 -142 -365 -146 -360 -8 11 -144 329 -149
|
||||||
|
350 -6 23 -12 27 -42 27 -29 0 -34 -3 -30 -17z"></path>
|
||||||
|
<path d="M2855 285 l0 -225 30 0 30 0 0 225 0 225 -30 0 -30 0 0 -225z"></path>
|
||||||
|
<path d="M588 380 c-55 -30 -82 -74 -86 -145 -3 -50 0 -66 20 -95 39 -58 82
|
||||||
|
-80 153 -80 68 0 110 21 149 73 32 43 30 150 -3 196 -47 66 -158 90 -233 51z
|
||||||
|
m133 -16 c59 -30 89 -156 54 -224 -45 -87 -162 -78 -201 16 -18 44 -18 128 1
|
||||||
|
164 28 55 90 73 146 44z"></path>
|
||||||
|
<path d="M935 303 l76 -98 -7 -72 -6 -73 33 0 34 0 -3 78 -4 77 71 93 c65 85
|
||||||
|
68 92 46 92 -15 0 -29 -9 -36 -22 -18 -33 -90 -128 -98 -128 -6 1 -67 85 -88
|
||||||
|
122 -8 15 -24 23 -53 25 l-41 4 76 -98z"></path>
|
||||||
|
<path d="M1257 230 c-82 -169 -83 -170 -57 -170 17 0 27 6 27 15 0 8 7 31 17
|
||||||
|
52 l17 38 79 0 78 1 16 -34 c9 -18 16 -42 16 -52 0 -17 7 -20 41 -20 22 0 39
|
||||||
|
3 37 8 -2 4 -39 80 -83 170 -43 89 -84 162 -92 162 -7 0 -50 -76 -96 -170z
|
||||||
|
m90 -38 c-33 -2 -61 -1 -63 1 -2 2 10 34 26 71 l31 68 33 -68 33 -69 -60 -3z"></path>
|
||||||
|
<path d="M1665 386 c-37 -16 -84 -63 -97 -96 -13 -35 -12 -104 2 -132 49 -94
|
||||||
|
182 -134 280 -83 24 12 29 22 32 64 3 49 3 49 -30 53 l-33 4 3 -45 c4 -61 -5
|
||||||
|
-71 -60 -71 -93 0 -142 57 -142 164 0 44 5 60 25 85 47 55 136 65 184 20 30
|
||||||
|
-28 35 -20 11 19 -19 31 -22 32 -82 32 -35 -1 -76 -7 -93 -14z"></path>
|
||||||
|
<path d="M1955 230 l0 -170 91 0 c76 0 93 3 98 16 4 9 5 18 4 20 -2 1 -31 -1
|
||||||
|
-66 -5 -34 -4 -64 -5 -67 -3 -3 3 -5 36 -5 73 l0 68 55 -6 c49 -5 55 -4 55 13
|
||||||
|
0 17 -6 19 -55 16 l-55 -4 0 61 0 61 64 0 c48 0 65 4 70 15 4 13 -10 15 -92
|
||||||
|
15 l-97 0 0 -170z"></path>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@ -24,7 +24,7 @@ export const IconMap = {
|
|||||||
'LM-Studio': 'lm-studio',
|
'LM-Studio': 'lm-studio',
|
||||||
'OpenAI-API-Compatible': 'openai-api',
|
'OpenAI-API-Compatible': 'openai-api',
|
||||||
cohere: 'cohere',
|
cohere: 'cohere',
|
||||||
Lepton: 'lepton',
|
LeptonAI: 'lepton-ai',
|
||||||
TogetherAI: 'together-ai',
|
TogetherAI: 'together-ai',
|
||||||
PerfXCloud: 'perfx-cloud',
|
PerfXCloud: 'perfx-cloud',
|
||||||
Upstage: 'upstage',
|
Upstage: 'upstage',
|
||||||
@ -38,6 +38,7 @@ export const IconMap = {
|
|||||||
'Fish Audio': 'fish-audio',
|
'Fish Audio': 'fish-audio',
|
||||||
'Tencent Cloud': 'tencent-cloud',
|
'Tencent Cloud': 'tencent-cloud',
|
||||||
Anthropic: 'anthropic',
|
Anthropic: 'anthropic',
|
||||||
|
'Voyage AI': 'voyage',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const BedrockRegionList = [
|
export const BedrockRegionList = [
|
||||||
|
|||||||
Reference in New Issue
Block a user