From 39cdfcfe2d64f76074b6716a3a1276eb1097c7bd Mon Sep 17 00:00:00 2001 From: jiangzhijie Date: Mon, 25 Nov 2024 11:00:21 +0800 Subject: [PATCH 1/2] fix the wrong LINDORM_PASSWORD variable name in docker-compose.yaml --- docker/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index e316ec0c5afb5c..285f576b0e83c9 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -177,7 +177,7 @@ x-shared-env: &shared-api-worker-env ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LINDORM_PASSWORD: ${LINDORM_USERNAME:-lindorm } + LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm } KIBANA_PORT: ${KIBANA_PORT:-5601} # AnalyticDB configuration ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-} From 5fbff148fbe60a1a49803e9a4db6d1fa890f3c7d Mon Sep 17 00:00:00 2001 From: jiangzhijie Date: Tue, 26 Nov 2024 16:08:10 +0800 Subject: [PATCH 2/2] add LindormAI as a custom model provider --- .../model_providers/_position.yaml | 1 + .../model_providers/lindormai/__init__.py | 0 .../lindormai/_assets/icon_l_en.png | Bin 0 -> 114387 bytes .../lindormai/_assets/icon_s_en.png | Bin 0 -> 17448 bytes .../model_providers/lindormai/_common.py | 104 ++++++++++++++++++ .../model_providers/lindormai/lindormai.py | 10 ++ .../model_providers/lindormai/lindormai.yaml | 58 ++++++++++ .../lindormai/rerank/__init__.py | 0 .../lindormai/rerank/rerank.py | 81 ++++++++++++++ .../lindormai/text_embedding/__init__.py | 0 .../text_embedding/text_embedding.py | 95 ++++++++++++++++ .../model_runtime/lindormai/__init__.py | 0 .../model_runtime/lindormai/test_embedding.py | 45 ++++++++ .../model_runtime/lindormai/test_rerank.py | 54 +++++++++ 14 files changed, 448 insertions(+) create mode 100644 api/core/model_runtime/model_providers/lindormai/__init__.py create mode 100644 api/core/model_runtime/model_providers/lindormai/_assets/icon_l_en.png create mode 100644 api/core/model_runtime/model_providers/lindormai/_assets/icon_s_en.png create mode 100644 api/core/model_runtime/model_providers/lindormai/_common.py create mode 100644 api/core/model_runtime/model_providers/lindormai/lindormai.py create mode 100644 api/core/model_runtime/model_providers/lindormai/lindormai.yaml create mode 100644 api/core/model_runtime/model_providers/lindormai/rerank/__init__.py create mode 100644 api/core/model_runtime/model_providers/lindormai/rerank/rerank.py create mode 100644 api/core/model_runtime/model_providers/lindormai/text_embedding/__init__.py create mode 100644 api/core/model_runtime/model_providers/lindormai/text_embedding/text_embedding.py create mode 100644 api/tests/integration_tests/model_runtime/lindormai/__init__.py create mode 100644 api/tests/integration_tests/model_runtime/lindormai/test_embedding.py create mode 100644 api/tests/integration_tests/model_runtime/lindormai/test_rerank.py diff --git a/api/core/model_runtime/model_providers/_position.yaml b/api/core/model_runtime/model_providers/_position.yaml index 89fccef6598fdd..87833966716937 100644 --- a/api/core/model_runtime/model_providers/_position.yaml +++ b/api/core/model_runtime/model_providers/_position.yaml @@ -41,3 +41,4 @@ - mixedbread - nomic - voyage +- lindormai diff --git a/api/core/model_runtime/model_providers/lindormai/__init__.py b/api/core/model_runtime/model_providers/lindormai/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/model_runtime/model_providers/lindormai/_assets/icon_l_en.png b/api/core/model_runtime/model_providers/lindormai/_assets/icon_l_en.png new file mode 100644 index 0000000000000000000000000000000000000000..b79d87263866917c2cde8c5dab87e3a75c67cbdf GIT binary patch literal 114387 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�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 literal 0 HcmV?d00001 diff --git a/api/core/model_runtime/model_providers/lindormai/_common.py b/api/core/model_runtime/model_providers/lindormai/_common.py new file mode 100644 index 00000000000000..ea4db5d7c225c5 --- /dev/null +++ b/api/core/model_runtime/model_providers/lindormai/_common.py @@ -0,0 +1,104 @@ +import json +from collections.abc import Mapping +from typing import Any +from urllib.error import HTTPError, URLError + +import requests + +from core.model_runtime.errors.invoke import ( + InvokeAuthorizationError, + InvokeBadRequestError, + InvokeConnectionError, + InvokeError, + InvokeRateLimitError, + InvokeServerUnavailableError, +) +from core.model_runtime.errors.validate import CredentialsValidateFailedError + + +def _check_credentials_fields(credentials: Mapping) -> None: + if "lindormai_endpoint" not in credentials: + raise CredentialsValidateFailedError("LindormAI EndPoint must be provided") + if "lindormai_username" not in credentials: + raise CredentialsValidateFailedError("LindormAI Username must be provided") + if "lindormai_password" not in credentials: + raise CredentialsValidateFailedError("LindormAI Password must be provided") + + +class _CommonLindormAI: + HTTP_HDR_AK_KEY = "x-ld-ak" + HTTP_HDR_SK_KEY = "x-ld-sk" + REST_URL_PATH = "/v1/ai" + REST_URL_MODELS_PATH = REST_URL_PATH + "/models" + INFER_INPUT_KEY = "input" + INFER_PARAMS_KEY = "params" + RSP_DATA_KEY = "data" + RSP_MODELS_KEY = "models" + + @property + def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: + """ + Map model invoke error to unified error + The key is the error type thrown to the caller + The value is the error type thrown by the model, + which needs to be converted into a unified error type for the caller. + + :return: Invoke error mapping + """ + return { + InvokeConnectionError: [URLError], + InvokeServerUnavailableError: [HTTPError], + InvokeRateLimitError: [InvokeRateLimitError], + InvokeAuthorizationError: [InvokeAuthorizationError], + InvokeBadRequestError: [InvokeBadRequestError, KeyError, ValueError, json.JSONDecodeError], + } + + def _post(self, url, data=None, json=None, **kwargs): + response = requests.post(url=url, data=data, json=json, **kwargs) + response.raise_for_status() + return response + + def _get(self, url, params=None, **kwargs): + response = requests.get(url=url, params=params, **kwargs) + response.raise_for_status() + return response + + def _check_model_status(self, model: str, credentials: Mapping) -> None: + """ + Validate model credentials + + :param model: model name + :param credentials: model credentials + :return: + """ + try: + endpoint = credentials.get("lindormai_endpoint") + username = credentials.get("lindormai_username") + passwd = credentials.get("lindormai_password") + headers = {_CommonLindormAI.HTTP_HDR_AK_KEY: username, _CommonLindormAI.HTTP_HDR_SK_KEY: passwd} + url = f"{endpoint}{_CommonLindormAI.REST_URL_MODELS_PATH}/{model}/status" + response = self._get(url, headers=headers) + if response.status_code != 200: + raise ValueError("UserName or PassWord is invalid.") + msg = response.json().get("msg", "ERROR:No Response Msg") + if msg != "SUCCESS": + raise ValueError(msg) + data = response.json().get("data", {}) + status = data.get("status", "") + if status != "READY": + raise ValueError("Model is not in READY status") + except Exception as ex: + raise CredentialsValidateFailedError(str(ex)) + + def _infer_model(self, model: str, credentials: Mapping, input_data: Any, params: dict) -> dict: + _check_credentials_fields(credentials) + endpoint = credentials.get("lindormai_endpoint") + username = credentials.get("lindormai_username") + passwd = credentials.get("lindormai_password") + headers = {_CommonLindormAI.HTTP_HDR_AK_KEY: username, _CommonLindormAI.HTTP_HDR_SK_KEY: passwd} + url = f"{endpoint}{_CommonLindormAI.REST_URL_MODELS_PATH}/{model}/infer" + infer_dict = {_CommonLindormAI.INFER_INPUT_KEY: input_data, _CommonLindormAI.INFER_PARAMS_KEY: params} + response = self._post(url, json=infer_dict, headers=headers) + response.raise_for_status() + result = response.json() + return result[_CommonLindormAI.RSP_DATA_KEY] if result else None diff --git a/api/core/model_runtime/model_providers/lindormai/lindormai.py b/api/core/model_runtime/model_providers/lindormai/lindormai.py new file mode 100644 index 00000000000000..be14ed29a1b6de --- /dev/null +++ b/api/core/model_runtime/model_providers/lindormai/lindormai.py @@ -0,0 +1,10 @@ +import logging + +from core.model_runtime.model_providers.__base.model_provider import ModelProvider + +logger = logging.getLogger(__name__) + + +class LindormAIProvider(ModelProvider): + def validate_provider_credentials(self, credentials: dict) -> None: + pass diff --git a/api/core/model_runtime/model_providers/lindormai/lindormai.yaml b/api/core/model_runtime/model_providers/lindormai/lindormai.yaml new file mode 100644 index 00000000000000..249c161dff42e9 --- /dev/null +++ b/api/core/model_runtime/model_providers/lindormai/lindormai.yaml @@ -0,0 +1,58 @@ +provider: lindormai +label: + en_US: Lindorm AI +icon_small: + en_US: icon_s_en.png +icon_large: + en_US: icon_l_en.png +background: "#FAF5FF" +help: + title: + en_US: How to deploy LindormAI + zh_Hans: 如何部署 LindormAI + url: + en_US: https://help.aliyun.com/document_detail/2393245.html?spm=a2c4g.11186623.help-menu-172543.d_2_7.4b0f1513fp0y82&scm=20140722.H_2393245._.OR_help-T_cn#DAS#zh-V_1 +supported_model_types: +# - llm + - text-embedding + - rerank +# - speech2text +# - tts +configurate_methods: + - customizable-model +model_credential_schema: + model: + label: + en_US: Model Name + zh_Hans: 模型名称 + placeholder: + en_US: Enter your model name + zh_Hans: 输入模型名称 + credential_form_schemas: + - variable: lindormai_endpoint + label: + zh_Hans: 服务器ENDPOINT + en_US: Server Endpoint + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入Lindorm的AI连接地址,如 http://ld-xxxxxxxxxxxxx-proxy-ai-pub.lindorm.aliyuncs.com:9002 + en_US: Enter the endpoint of you LindormAI, e.g. http://ld-xxxxxxxxxxxxx-proxy-ai-pub.lindorm.aliyuncs.com:9002 + - variable: lindormai_username + label: + zh_Hans: lindorm 用户名 + en_US: Model uid + type: text-input + required: true + placeholder: + zh_Hans: 在此输入您的用户名 + en_US: Enter your lindorm username + - variable: lindormai_password + label: + zh_Hans: 密码 + en_US: password + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的密码 + en_US: Enter the password diff --git a/api/core/model_runtime/model_providers/lindormai/rerank/__init__.py b/api/core/model_runtime/model_providers/lindormai/rerank/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/model_runtime/model_providers/lindormai/rerank/rerank.py b/api/core/model_runtime/model_providers/lindormai/rerank/rerank.py new file mode 100644 index 00000000000000..1381de73f640c9 --- /dev/null +++ b/api/core/model_runtime/model_providers/lindormai/rerank/rerank.py @@ -0,0 +1,81 @@ +import logging +from collections.abc import Mapping +from typing import Optional + +from core.model_runtime.entities.common_entities import I18nObject +from core.model_runtime.entities.model_entities import AIModelEntity, FetchFrom, ModelType +from core.model_runtime.entities.rerank_entities import RerankDocument, RerankResult +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.__base.rerank_model import RerankModel +from core.model_runtime.model_providers.lindormai._common import _check_credentials_fields, _CommonLindormAI + +logger = logging.getLogger(__name__) + + +class LindormAIRerankModel(_CommonLindormAI, RerankModel): + def validate_credentials(self, model: str, credentials: Mapping) -> None: + try: + _check_credentials_fields(credentials) + super()._check_model_status(model, credentials) + self._invoke( + model=model, + credentials=dict(credentials), + query="What is the capital of the United States?", + docs=[ + "Carson City is the capital city of the American state of Nevada. At the 2010 United States " + "Census, Carson City had a population of 55,274.", + "The Commonwealth of the Northern Mariana Islands is a group of islands in the Pacific Ocean that " + "are a political division controlled by the United States. Its capital is Saipan.", + ], + score_threshold=0.1, + ) + except Exception as ex: + raise CredentialsValidateFailedError(str(ex)) + + def _invoke( + self, + model: str, + credentials: dict, + query: str, + docs: list[str], + score_threshold: Optional[float] = None, + top_n: Optional[int] = None, + user: Optional[str] = None, + ) -> RerankResult: + try: + if len(docs) == 0: + return RerankResult(model=model, docs=[]) + _check_credentials_fields(credentials) + if top_n is None: + top_n = -1 + results = super()._infer_model( + model=model, + credentials=credentials, + input_data={"query": query, "chunks": docs}, + params={"topK": top_n}, + ) + rerank_documents = [] + for res in results: + if res["score"] >= score_threshold: + rerank_document = RerankDocument(index=res["index"], text=res["chunk"], score=res["score"]) + rerank_documents.append(rerank_document) + rerank_documents.sort(key=lambda x: x.score, reverse=True) + return RerankResult(model=model, docs=rerank_documents) + except Exception as e: + logger.exception(f"Failed to invoke rerank model, model: {model}") + raise + + def get_customizable_model_schema(self, model: str, credentials: dict) -> Optional[AIModelEntity]: + """ + used to define customizable model schema + """ + entity = AIModelEntity( + model=model, + label=I18nObject(en_US=model), + fetch_from=FetchFrom.CUSTOMIZABLE_MODEL, + model_type=ModelType.RERANK, + model_properties={}, + parameter_rules=[], + ) + + return entity diff --git a/api/core/model_runtime/model_providers/lindormai/text_embedding/__init__.py b/api/core/model_runtime/model_providers/lindormai/text_embedding/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/model_runtime/model_providers/lindormai/text_embedding/text_embedding.py b/api/core/model_runtime/model_providers/lindormai/text_embedding/text_embedding.py new file mode 100644 index 00000000000000..9e377239151691 --- /dev/null +++ b/api/core/model_runtime/model_providers/lindormai/text_embedding/text_embedding.py @@ -0,0 +1,95 @@ +import time +from collections.abc import Mapping +from typing import Optional + +from core.entities.embedding_type import EmbeddingInputType +from core.model_runtime.entities.common_entities import I18nObject +from core.model_runtime.entities.model_entities import AIModelEntity, FetchFrom, ModelType, PriceType +from core.model_runtime.entities.text_embedding_entities import EmbeddingUsage, TextEmbeddingResult +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.__base.text_embedding_model import TextEmbeddingModel +from core.model_runtime.model_providers.lindormai._common import _check_credentials_fields, _CommonLindormAI + + +class LindormAITextEmbeddingModel(_CommonLindormAI, TextEmbeddingModel): + def validate_credentials(self, model: str, credentials: Mapping) -> None: + try: + _check_credentials_fields(credentials) + super()._check_model_status(model, credentials) + self._invoke(model=model, credentials=dict(credentials), texts=["hello, New York!"]) + except Exception as ex: + raise CredentialsValidateFailedError(str(ex)) + + def _calc_response_usage(self, model: str, credentials: dict, tokens: int) -> EmbeddingUsage: + """ + Calculate response usage + + :param model: model name + :param credentials: model credentials + :param tokens: input tokens + :return: usage + """ + input_price_info = self.get_price( + model=model, credentials=credentials, tokens=tokens, price_type=PriceType.INPUT + ) + + usage = EmbeddingUsage( + tokens=tokens, + total_tokens=tokens, + unit_price=input_price_info.unit_price, + price_unit=input_price_info.unit, + total_price=input_price_info.total_amount, + currency=input_price_info.currency, + latency=time.perf_counter() - self.started_at, + ) + + return usage + + def get_num_tokens(self, model: str, credentials: dict, texts: list[str]) -> int: + return 0 + + def _invoke( + self, + model: str, + credentials: dict, + texts: list[str], + user: Optional[str] = None, + input_type: EmbeddingInputType = EmbeddingInputType.DOCUMENT, + ) -> TextEmbeddingResult: + """ + Invoke text embedding model + + credentials should be like: + { + 'server_url': 'server url', + 'model_uid': 'model uid', + } + + :param model: model name + :param credentials: model credentials + :param texts: texts to embed + :param user: unique user id + :param input_type: input type + :return: embeddings result + """ + batch_embeddings = super()._infer_model(model, credentials, texts, {}) + token = self.get_num_tokens(model, credentials, texts) + usage = self._calc_response_usage(model=model, credentials=credentials, tokens=token) + result = TextEmbeddingResult(model=model, embeddings=batch_embeddings, usage=usage) + return result + + def get_customizable_model_schema(self, model: str, credentials: dict) -> Optional[AIModelEntity]: + """ + used to define customizable model schema + """ + + entity = AIModelEntity( + model=model, + label=I18nObject(en_US=model), + fetch_from=FetchFrom.CUSTOMIZABLE_MODEL, + model_type=ModelType.TEXT_EMBEDDING, + model_properties={}, + parameter_rules=[], + ) + + return entity diff --git a/api/tests/integration_tests/model_runtime/lindormai/__init__.py b/api/tests/integration_tests/model_runtime/lindormai/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/tests/integration_tests/model_runtime/lindormai/test_embedding.py b/api/tests/integration_tests/model_runtime/lindormai/test_embedding.py new file mode 100644 index 00000000000000..1bc7ce3dc04742 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/lindormai/test_embedding.py @@ -0,0 +1,45 @@ +import os + +import pytest + +from core.model_runtime.entities.text_embedding_entities import TextEmbeddingResult +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.lindormai.text_embedding.text_embedding import LindormAITextEmbeddingModel + + +def test_validate_credentials(): + model = LindormAITextEmbeddingModel() + with pytest.raises(CredentialsValidateFailedError): + model.validate_credentials( + model="bge_model", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + ) + + model.validate_credentials( + model="bge_m3_model", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + ) + + +def test_invoke_embedding(): + model = LindormAITextEmbeddingModel() + response = model.invoke( + model="bge_m3_model", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + texts=["morning", "你好", "@29090"], + ) + assert isinstance(response, TextEmbeddingResult) + assert len(response.embeddings) == 3 + assert isinstance(response.embeddings[0], list) diff --git a/api/tests/integration_tests/model_runtime/lindormai/test_rerank.py b/api/tests/integration_tests/model_runtime/lindormai/test_rerank.py new file mode 100644 index 00000000000000..f1094b36d6ad95 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/lindormai/test_rerank.py @@ -0,0 +1,54 @@ +import json +import os + +import pytest + +from core.model_runtime.entities.rerank_entities import RerankResult +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.lindormai.rerank.rerank import LindormAIRerankModel + + +def test_validate_credentials(): + model = LindormAIRerankModel() + with pytest.raises(CredentialsValidateFailedError): + model.validate_credentials( + model="rerank_bge", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + ) + + model.validate_credentials( + model="rerank_bge_v2_m3", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + ) + + +def test_invoke_model(): + model = LindormAIRerankModel() + result = model.invoke( + model="rerank_bge_v2_m3", + credentials={ + "lindormai_endpoint": os.environ.get("AI_ENDPOINT"), + "lindormai_username": os.environ.get("AI_USERNAME"), + "lindormai_password": os.environ.get("AI_PASSWORD"), + }, + query="Who is Kasumi?", + docs=[ + "Kasumi is a girl's name of Japanese origin meaning mist.", + "Her music is a kawaii bass, a mix of future bass, pop, and kawaii music ", + "and she leads a team named PopiParty.", + ], + score_threshold=0.0, + ) + + assert isinstance(result, RerankResult) + assert len(result.docs) == 1 + assert result.docs[0].index == 0 + assert result.docs[0].score >= 0.0