add support for TogetherAI (#1890)
Browse files### What problem does this PR solve?
#1853 add support for TogetherAI
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
---------
Co-authored-by: Zhedong Cen <[email protected]>
Co-authored-by: Kevin Hu <[email protected]>
- api/apps/llm_app.py +1 -1
- conf/llm_factories.json +8 -1
- rag/llm/__init__.py +6 -2
- rag/llm/chat_model.py +7 -0
- rag/llm/cv_model.py +7 -0
- rag/llm/embedding_model.py +8 -0
- rag/llm/rerank_model.py +8 -0
- web/src/assets/svg/llm/together-ai.svg +15 -0
- web/src/pages/user-setting/constants.tsx +1 -1
- web/src/pages/user-setting/setting-model/constant.ts +1 -0
api/apps/llm_app.py
CHANGED
|
@@ -135,7 +135,7 @@ def add_llm():
|
|
| 135 |
api_key = req.get("api_key","xxxxxxxxxxxxxxx")
|
| 136 |
else:
|
| 137 |
llm_name = req["llm_name"]
|
| 138 |
-
api_key = "xxxxxxxxxxxxxxx"
|
| 139 |
|
| 140 |
llm = {
|
| 141 |
"tenant_id": current_user.id,
|
|
|
|
| 135 |
api_key = req.get("api_key","xxxxxxxxxxxxxxx")
|
| 136 |
else:
|
| 137 |
llm_name = req["llm_name"]
|
| 138 |
+
api_key = req.get("api_key","xxxxxxxxxxxxxxx")
|
| 139 |
|
| 140 |
llm = {
|
| 141 |
"tenant_id": current_user.id,
|
conf/llm_factories.json
CHANGED
|
@@ -2443,6 +2443,13 @@
|
|
| 2443 |
}
|
| 2444 |
]
|
| 2445 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2446 |
{
|
| 2447 |
"name": "PerfXCloud",
|
| 2448 |
"logo": "",
|
|
@@ -2594,6 +2601,6 @@
|
|
| 2594 |
"model_type": "embedding"
|
| 2595 |
}
|
| 2596 |
]
|
| 2597 |
-
}
|
| 2598 |
]
|
| 2599 |
}
|
|
|
|
| 2443 |
}
|
| 2444 |
]
|
| 2445 |
},
|
| 2446 |
+
{
|
| 2447 |
+
"name": "TogetherAI",
|
| 2448 |
+
"logo": "",
|
| 2449 |
+
"tags": "LLM,TEXT EMBEDDING,IMAGE2TEXT",
|
| 2450 |
+
"status": "1",
|
| 2451 |
+
"llm": []
|
| 2452 |
+
},
|
| 2453 |
{
|
| 2454 |
"name": "PerfXCloud",
|
| 2455 |
"logo": "",
|
|
|
|
| 2601 |
"model_type": "embedding"
|
| 2602 |
}
|
| 2603 |
]
|
| 2604 |
+
}
|
| 2605 |
]
|
| 2606 |
}
|
rag/llm/__init__.py
CHANGED
|
@@ -39,6 +39,7 @@ EmbeddingModel = {
|
|
| 39 |
"LM-Studio": LmStudioEmbed,
|
| 40 |
"OpenAI-API-Compatible": OpenAI_APIEmbed,
|
| 41 |
"cohere": CoHereEmbed,
|
|
|
|
| 42 |
"PerfXCloud": PerfXCloudEmbed,
|
| 43 |
}
|
| 44 |
|
|
@@ -57,7 +58,8 @@ CvModel = {
|
|
| 57 |
"NVIDIA": NvidiaCV,
|
| 58 |
"LM-Studio": LmStudioCV,
|
| 59 |
"StepFun":StepFunCV,
|
| 60 |
-
"OpenAI-API-Compatible": OpenAI_APICV
|
|
|
|
| 61 |
}
|
| 62 |
|
| 63 |
|
|
@@ -86,6 +88,7 @@ ChatModel = {
|
|
| 86 |
"OpenAI-API-Compatible": OpenAI_APIChat,
|
| 87 |
"cohere": CoHereChat,
|
| 88 |
"LeptonAI": LeptonAIChat,
|
|
|
|
| 89 |
"PerfXCloud": PerfXCloudChat
|
| 90 |
}
|
| 91 |
|
|
@@ -98,7 +101,8 @@ RerankModel = {
|
|
| 98 |
"NVIDIA": NvidiaRerank,
|
| 99 |
"LM-Studio": LmStudioRerank,
|
| 100 |
"OpenAI-API-Compatible": OpenAI_APIRerank,
|
| 101 |
-
"cohere": CoHereRerank
|
|
|
|
| 102 |
}
|
| 103 |
|
| 104 |
|
|
|
|
| 39 |
"LM-Studio": LmStudioEmbed,
|
| 40 |
"OpenAI-API-Compatible": OpenAI_APIEmbed,
|
| 41 |
"cohere": CoHereEmbed,
|
| 42 |
+
"TogetherAI": TogetherAIEmbed,
|
| 43 |
"PerfXCloud": PerfXCloudEmbed,
|
| 44 |
}
|
| 45 |
|
|
|
|
| 58 |
"NVIDIA": NvidiaCV,
|
| 59 |
"LM-Studio": LmStudioCV,
|
| 60 |
"StepFun":StepFunCV,
|
| 61 |
+
"OpenAI-API-Compatible": OpenAI_APICV,
|
| 62 |
+
"TogetherAI": TogetherAICV
|
| 63 |
}
|
| 64 |
|
| 65 |
|
|
|
|
| 88 |
"OpenAI-API-Compatible": OpenAI_APIChat,
|
| 89 |
"cohere": CoHereChat,
|
| 90 |
"LeptonAI": LeptonAIChat,
|
| 91 |
+
"TogetherAI": TogetherAIChat,
|
| 92 |
"PerfXCloud": PerfXCloudChat
|
| 93 |
}
|
| 94 |
|
|
|
|
| 101 |
"NVIDIA": NvidiaRerank,
|
| 102 |
"LM-Studio": LmStudioRerank,
|
| 103 |
"OpenAI-API-Compatible": OpenAI_APIRerank,
|
| 104 |
+
"cohere": CoHereRerank,
|
| 105 |
+
"TogetherAI": TogetherAIRerank
|
| 106 |
}
|
| 107 |
|
| 108 |
|
rag/llm/chat_model.py
CHANGED
|
@@ -990,6 +990,13 @@ class LeptonAIChat(Base):
|
|
| 990 |
super().__init__(key, model_name, base_url)
|
| 991 |
|
| 992 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 993 |
class PerfXCloudChat(Base):
|
| 994 |
def __init__(self, key, model_name, base_url="https://cloud.perfxlab.cn/v1"):
|
| 995 |
if not base_url:
|
|
|
|
| 990 |
super().__init__(key, model_name, base_url)
|
| 991 |
|
| 992 |
|
| 993 |
+
class TogetherAIChat(Base):
|
| 994 |
+
def __init__(self, key, model_name, base_url="https://api.together.xyz/v1"):
|
| 995 |
+
if not base_url:
|
| 996 |
+
base_url = "https://api.together.xyz/v1"
|
| 997 |
+
super().__init__(key, model_name, base_url)
|
| 998 |
+
|
| 999 |
+
|
| 1000 |
class PerfXCloudChat(Base):
|
| 1001 |
def __init__(self, key, model_name, base_url="https://cloud.perfxlab.cn/v1"):
|
| 1002 |
if not base_url:
|
rag/llm/cv_model.py
CHANGED
|
@@ -649,3 +649,10 @@ class OpenAI_APICV(GptV4):
|
|
| 649 |
self.client = OpenAI(api_key=key, base_url=base_url)
|
| 650 |
self.model_name = model_name.split("___")[0]
|
| 651 |
self.lang = lang
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 649 |
self.client = OpenAI(api_key=key, base_url=base_url)
|
| 650 |
self.model_name = model_name.split("___")[0]
|
| 651 |
self.lang = lang
|
| 652 |
+
|
| 653 |
+
|
| 654 |
+
class TogetherAICV(GptV4):
|
| 655 |
+
def __init__(self, key, model_name, base_url="https://api.together.xyz/v1"):
|
| 656 |
+
if not base_url:
|
| 657 |
+
base_url = "https://api.together.xyz/v1"
|
| 658 |
+
super().__init__(key, model_name, base_url)
|
rag/llm/embedding_model.py
CHANGED
|
@@ -555,8 +555,16 @@ class CoHereEmbed(Base):
|
|
| 555 |
)
|
| 556 |
|
| 557 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 558 |
class PerfXCloudEmbed(OpenAIEmbed):
|
| 559 |
def __init__(self, key, model_name, base_url="https://cloud.perfxlab.cn/v1"):
|
| 560 |
if not base_url:
|
| 561 |
base_url = "https://cloud.perfxlab.cn/v1"
|
| 562 |
super().__init__(key, model_name, base_url)
|
|
|
|
|
|
| 555 |
)
|
| 556 |
|
| 557 |
|
| 558 |
+
class TogetherAIEmbed(OllamaEmbed):
|
| 559 |
+
def __init__(self, key, model_name, base_url="https://api.together.xyz/v1"):
|
| 560 |
+
if not base_url:
|
| 561 |
+
base_url = "https://api.together.xyz/v1"
|
| 562 |
+
super().__init__(key, model_name, base_url)
|
| 563 |
+
|
| 564 |
+
|
| 565 |
class PerfXCloudEmbed(OpenAIEmbed):
|
| 566 |
def __init__(self, key, model_name, base_url="https://cloud.perfxlab.cn/v1"):
|
| 567 |
if not base_url:
|
| 568 |
base_url = "https://cloud.perfxlab.cn/v1"
|
| 569 |
super().__init__(key, model_name, base_url)
|
| 570 |
+
|
rag/llm/rerank_model.py
CHANGED
|
@@ -245,3 +245,11 @@ class CoHereRerank(Base):
|
|
| 245 |
rank = np.array([d.relevance_score for d in res.results])
|
| 246 |
indexs = [d.index for d in res.results]
|
| 247 |
return rank[indexs], token_count
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 245 |
rank = np.array([d.relevance_score for d in res.results])
|
| 246 |
indexs = [d.index for d in res.results]
|
| 247 |
return rank[indexs], token_count
|
| 248 |
+
|
| 249 |
+
|
| 250 |
+
class TogetherAIRerank(Base):
|
| 251 |
+
def __init__(self, key, model_name, base_url):
|
| 252 |
+
pass
|
| 253 |
+
|
| 254 |
+
def similarity(self, query: str, texts: list):
|
| 255 |
+
raise NotImplementedError("The api has not been implement")
|
web/src/assets/svg/llm/together-ai.svg
ADDED
|
|
web/src/pages/user-setting/constants.tsx
CHANGED
|
@@ -17,4 +17,4 @@ export const UserSettingIconMap = {
|
|
| 17 |
|
| 18 |
export * from '@/constants/setting';
|
| 19 |
|
| 20 |
-
export const LocalLlmFactories = ['Ollama', 'Xinference','LocalAI','LM-Studio',"OpenAI-API-Compatible"];
|
|
|
|
| 17 |
|
| 18 |
export * from '@/constants/setting';
|
| 19 |
|
| 20 |
+
export const LocalLlmFactories = ['Ollama', 'Xinference','LocalAI','LM-Studio',"OpenAI-API-Compatible",'TogetherAI'];
|
web/src/pages/user-setting/setting-model/constant.ts
CHANGED
|
@@ -25,6 +25,7 @@ export const IconMap = {
|
|
| 25 |
'OpenAI-API-Compatible': 'openai-api',
|
| 26 |
cohere: 'cohere',
|
| 27 |
Lepton: 'lepton',
|
|
|
|
| 28 |
PerfXCould: 'perfx-could'
|
| 29 |
};
|
| 30 |
|
|
|
|
| 25 |
'OpenAI-API-Compatible': 'openai-api',
|
| 26 |
cohere: 'cohere',
|
| 27 |
Lepton: 'lepton',
|
| 28 |
+
TogetherAI:'together-ai',
|
| 29 |
PerfXCould: 'perfx-could'
|
| 30 |
};
|
| 31 |
|