From ea69dc2a7e3f64a4a5de6869098fd2ed43ad70c1 Mon Sep 17 00:00:00 2001 From: xielong Date: Wed, 12 Jun 2024 17:24:23 +0800 Subject: [PATCH] feat: support hunyuan llm models (#5013) Co-authored-by: takatost Co-authored-by: Bowen Liang --- .../model_providers/_position.yaml | 1 + .../model_providers/hunyuan/__init__.py | 0 .../hunyuan/_assets/icon_l_en.png | Bin 0 -> 68638 bytes .../hunyuan/_assets/icon_s_en.png | Bin 0 -> 60824 bytes .../model_providers/hunyuan/hunyuan.py | 30 +++ .../model_providers/hunyuan/hunyuan.yaml | 40 ++++ .../model_providers/hunyuan/llm/__init__.py | 0 .../hunyuan/llm/_position.yaml | 4 + .../hunyuan/llm/hunyuan-lite.yaml | 28 +++ .../hunyuan/llm/hunyuan-pro.yaml | 28 +++ .../hunyuan/llm/hunyuan-standard-256k.yaml | 28 +++ .../hunyuan/llm/hunyuan-standard.yaml | 28 +++ .../model_providers/hunyuan/llm/llm.py | 205 ++++++++++++++++++ api/requirements.txt | 1 + .../model_runtime/hunyuan/__init__.py | 0 .../model_runtime/hunyuan/test_llm.py | 111 ++++++++++ .../model_runtime/hunyuan/test_provider.py | 25 +++ 17 files changed, 529 insertions(+) create mode 100644 api/core/model_runtime/model_providers/hunyuan/__init__.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png create mode 100644 api/core/model_runtime/model_providers/hunyuan/_assets/icon_s_en.png create mode 100644 api/core/model_runtime/model_providers/hunyuan/hunyuan.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/__init__.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/llm.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/__init__.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/test_llm.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/test_provider.py diff --git a/api/core/model_runtime/model_providers/_position.yaml b/api/core/model_runtime/model_providers/_position.yaml index b483303cad..21eea7ef3b 100644 --- a/api/core/model_runtime/model_providers/_position.yaml +++ b/api/core/model_runtime/model_providers/_position.yaml @@ -31,3 +31,4 @@ - volcengine_maas - openai_api_compatible - deepseek +- hunyuan diff --git a/api/core/model_runtime/model_providers/hunyuan/__init__.py b/api/core/model_runtime/model_providers/hunyuan/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png b/api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png new file mode 100644 index 0000000000000000000000000000000000000000..1303055ef8d1ee2b7bd127fa55c8f28a47a2ca4f GIT binary patch literal 68638 zcmZsCRa70@7G-dUV8Jc8ySux)ySqcM5G=U6L-0Uwcb9`haCZyt)|K0%Ki<9l0S6cy zsM>q2xu>iOS5lBfg2#pb@ZkfJw3L|2hYt`Iz}Mekp@Glzhb#BM3z(~lq{xS=3H+lE zABaCliwUcF8Ju>&_^K_WzrAPamRQe0NfCcxE`|>-Eod=uitY&CSyXT(8FBEallG{4 zAE&^hT<41EII+X0RJd~8UR2PlMyhf~9K>cK?lzK>#DH^;X7k%`ynb)@WYh9O?fAaC zIte4e>N>`~;d8M5yn4?+IYvw&EcEdsBqZ4XyaXc1eAS<-jEqJA|Mr!b7#8+_UW8y- zoj?BXkN)}2DG(0U*dx&M>tg$V-UACRk``|I|NU2TLa=oR?GSIc9FyFdIHvoCqK0Bb z|G6OHO-G$H=ZUg+7e9WrJ`{P)f`~J&n1x|>6iiZn?eEcvJQSIknPD~=7JGYp^Q?oX zi8@jsvVUDUEVv}>%RC(GM9a)?Xvdi_{3V5hANbUgwb{LFI|DJ}kz8I3FxSj~4v|yc zC%n5u&n%IBHr)k{#+lsnQ+3D2!yiK6vTGLsq3$Stgo-X zX|VS}WBX-zYf};F+u8Rm@;}Rv#TOW9kT&mBl@hF+Qy)E2Y^}g%|BSY>Z~n>i3d{>> zWd_@9%~%i0vei#5mYfT5^Q*1mk<-)3;fOPS+N!kk1@e&da&$cot37MguuDbp(>>LC zd$P9@$2jgVj{@Pd;YJn`(m1DkKbj%z!>eOb>ZkVvW{a2GTa_EBe{C}tCnST6abvVA zJ!1x8((X@|^u`LgF!@?KTd`#p1iP`6nMNoyHI9&OjB!kZue)!#m=;lEe|#9s4Xj-b z{WzT^3dS4lu^XYrYK2aU?o+Zye(xkqV0IW)GFZz-_>CSHfS=}k5`!^4eWz)6t$Y76 zu5+TxL*W)GBKVvCEtv7pr}`&xbL#?|0-M;suIz9Rk^$HFcYli@j!cX^&%WAhZAnH7 zdr!Txjg(GI-yW$*6lA)%3TOnDS<^{bEs9msi-4bbco>#7<6!tjKVS-$Z4eu=L^ew~ zfz!@uLe@k@cC>!-h%tB25yG0CG} z)(8G}!nKbl6Ct1$+lG#+M^caHf%ycv!N_>?cA0S1?Q=cG|NLcOU0^7>)bS5CQN&

8BrTmGxskG>j;_+WHOA}tK_II*N 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≫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

V79T5P``9UYA`t9GS?v0rsqd;8cS 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%0Amw?TXi)6xvr~2=}yc* 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Ë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 None: + """ + Validate provider credentials + if validate failed, raise exception + + :param credentials: provider credentials, credentials form defined in `provider_credential_schema`. + """ + try: + model_instance = self.get_model_instance(ModelType.LLM) + + # Use `hunyuan-standard` model for validate, + model_instance.validate_credentials( + model='hunyuan-standard', + credentials=credentials + ) + except CredentialsValidateFailedError as ex: + raise ex + except Exception as ex: + logger.exception(f'{self.get_provider_schema().provider} credentials validate failed') + raise ex diff --git a/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml b/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml new file mode 100644 index 0000000000..835a7716f7 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml @@ -0,0 +1,40 @@ +provider: hunyuan +label: + zh_Hans: 腾讯混元 + en_US: Hunyuan +description: + en_US: Models provided by Tencent Hunyuan, such as hunyuan-standard, hunyuan-standard-256k, hunyuan-pro and hunyuan-lite. + zh_Hans: 腾讯混元提供的模型,例如 hunyuan-standard、 hunyuan-standard-256k, hunyuan-pro 和 hunyuan-lite。 +icon_small: + en_US: icon_s_en.png +icon_large: + en_US: icon_l_en.png +background: "#F6F7F7" +help: + title: + en_US: Get your API Key from Tencent Hunyuan + zh_Hans: 从腾讯混元获取 API Key + url: + en_US: https://console.cloud.tencent.com/cam/capi +supported_model_types: + - llm +configurate_methods: + - predefined-model +provider_credential_schema: + credential_form_schemas: + - variable: secret_id + label: + en_US: Secret ID + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 Secret ID + en_US: Enter your Secret ID + - variable: secret_key + label: + en_US: Secret Key + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 Secret Key + en_US: Enter your Secret Key diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/__init__.py b/api/core/model_runtime/model_providers/hunyuan/llm/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml new file mode 100644 index 0000000000..2c1b981f85 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml @@ -0,0 +1,4 @@ +- hunyuan-lite +- hunyuan-standard +- hunyuan-standard-256k +- hunyuan-pro diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml new file mode 100644 index 0000000000..4f5a5dfb48 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml @@ -0,0 +1,28 @@ +model: hunyuan-lite +label: + zh_Hans: hunyuan-lite + en_US: hunyuan-lite +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 256000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 256000 +pricing: + input: '0.00' + output: '0.00' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml new file mode 100644 index 0000000000..d3b1b6d8b6 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml @@ -0,0 +1,28 @@ +model: hunyuan-pro +label: + zh_Hans: hunyuan-pro + en_US: hunyuan-pro +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 32000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 32000 +pricing: + input: '0.03' + output: '0.10' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml new file mode 100644 index 0000000000..3b28317497 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml @@ -0,0 +1,28 @@ +model: hunyuan-standard-256k +label: + zh_Hans: hunyuan-standard-256k + en_US: hunyuan-standard-256k +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 256000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 256000 +pricing: + input: '0.015' + output: '0.06' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml new file mode 100644 index 0000000000..88b27f51c4 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml @@ -0,0 +1,28 @@ +model: hunyuan-standard +label: + zh_Hans: hunyuan-standard + en_US: hunyuan-standard +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 32000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 32000 +pricing: + input: '0.0045' + output: '0.0005' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/llm.py b/api/core/model_runtime/model_providers/hunyuan/llm/llm.py new file mode 100644 index 0000000000..2b6d8e0047 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/llm.py @@ -0,0 +1,205 @@ +import json +import logging +from collections.abc import Generator + +from tencentcloud.common import credential +from tencentcloud.common.exception import TencentCloudSDKException +from tencentcloud.common.profile.client_profile import ClientProfile +from tencentcloud.common.profile.http_profile import HttpProfile +from tencentcloud.hunyuan.v20230901 import hunyuan_client, models + +from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta +from core.model_runtime.entities.message_entities import ( + AssistantPromptMessage, + PromptMessage, + PromptMessageTool, + SystemPromptMessage, + UserPromptMessage, +) +from core.model_runtime.errors.invoke import InvokeError +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel + +logger = logging.getLogger(__name__) + +class HunyuanLargeLanguageModel(LargeLanguageModel): + + def _invoke(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + model_parameters: dict, tools: list[PromptMessageTool] | None = None, + stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ + -> LLMResult | Generator: + + client = self._setup_hunyuan_client(credentials) + request = models.ChatCompletionsRequest() + messages_dict = self._convert_prompt_messages_to_dicts(prompt_messages) + + custom_parameters = { + 'Temperature': model_parameters.get('temperature', 0.0), + 'TopP': model_parameters.get('top_p', 1.0) + } + + params = { + "Model": model, + "Messages": messages_dict, + "Stream": stream, + **custom_parameters, + } + + request.from_json_string(json.dumps(params)) + response = client.ChatCompletions(request) + + if stream: + return self._handle_stream_chat_response(model, credentials, prompt_messages, response) + + return self._handle_chat_response(credentials, model, prompt_messages, response) + + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + Validate credentials + """ + try: + client = self._setup_hunyuan_client(credentials) + + req = models.ChatCompletionsRequest() + params = { + "Model": model, + "Messages": [{ + "Role": "user", + "Content": "hello" + }], + "TopP": 1, + "Temperature": 0, + "Stream": False + } + req.from_json_string(json.dumps(params)) + client.ChatCompletions(req) + except Exception as e: + raise CredentialsValidateFailedError(f'Credentials validation failed: {e}') + + def _setup_hunyuan_client(self, credentials): + secret_id = credentials['secret_id'] + secret_key = credentials['secret_key'] + cred = credential.Credential(secret_id, secret_key) + httpProfile = HttpProfile() + httpProfile.endpoint = "hunyuan.tencentcloudapi.com" + clientProfile = ClientProfile() + clientProfile.httpProfile = httpProfile + client = hunyuan_client.HunyuanClient(cred, "", clientProfile) + return client + + def _convert_prompt_messages_to_dicts(self, prompt_messages: list[PromptMessage]) -> list[dict]: + """Convert a list of PromptMessage objects to a list of dictionaries with 'Role' and 'Content' keys.""" + return [{"Role": message.role.value, "Content": message.content} for message in prompt_messages] + + def _handle_stream_chat_response(self, model, credentials, prompt_messages, resp): + for index, event in enumerate(resp): + logging.debug("_handle_stream_chat_response, event: %s", event) + + data_str = event['data'] + data = json.loads(data_str) + + choices = data.get('Choices', []) + if not choices: + continue + choice = choices[0] + delta = choice.get('Delta', {}) + message_content = delta.get('Content', '') + finish_reason = choice.get('FinishReason', '') + + usage = data.get('Usage', {}) + prompt_tokens = usage.get('PromptTokens', 0) + completion_tokens = usage.get('CompletionTokens', 0) + usage = self._calc_response_usage(model, credentials, prompt_tokens, completion_tokens) + + assistant_prompt_message = AssistantPromptMessage( + content=message_content, + tool_calls=[] + ) + + delta_chunk = LLMResultChunkDelta( + index=index, + role=delta.get('Role', 'assistant'), + message=assistant_prompt_message, + usage=usage, + finish_reason=finish_reason, + ) + + yield LLMResultChunk( + model=model, + prompt_messages=prompt_messages, + delta=delta_chunk, + ) + + def _handle_chat_response(self, credentials, model, prompt_messages, response): + usage = self._calc_response_usage(model, credentials, response.Usage.PromptTokens, + response.Usage.CompletionTokens) + assistant_prompt_message = PromptMessage(role="assistant") + assistant_prompt_message.content = response.Choices[0].Message.Content + result = LLMResult( + model=model, + prompt_messages=prompt_messages, + message=assistant_prompt_message, + usage=usage, + ) + + return result + + def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + tools: list[PromptMessageTool] | None = None) -> int: + if len(prompt_messages) == 0: + return 0 + prompt = self._convert_messages_to_prompt(prompt_messages) + return self._get_num_tokens_by_gpt2(prompt) + + def _convert_messages_to_prompt(self, messages: list[PromptMessage]) -> str: + """ + Format a list of messages into a full prompt for the Anthropic model + + :param messages: List of PromptMessage to combine. + :return: Combined string with necessary human_prompt and ai_prompt tags. + """ + messages = messages.copy() # don't mutate the original list + + text = "".join( + self._convert_one_message_to_text(message) + for message in messages + ) + + # trim off the trailing ' ' that might come from the "Assistant: " + return text.rstrip() + + def _convert_one_message_to_text(self, message: PromptMessage) -> str: + """ + Convert a single message to a string. + + :param message: PromptMessage to convert. + :return: String representation of the message. + """ + human_prompt = "\n\nHuman:" + ai_prompt = "\n\nAssistant:" + content = message.content + + if isinstance(message, UserPromptMessage): + message_text = f"{human_prompt} {content}" + elif isinstance(message, AssistantPromptMessage): + message_text = f"{ai_prompt} {content}" + elif isinstance(message, SystemPromptMessage): + message_text = content + else: + raise ValueError(f"Got unknown type {message}") + + return message_text + + @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 { + InvokeError: [TencentCloudSDKException], + } diff --git a/api/requirements.txt b/api/requirements.txt index 1749b4a2df..36a08a287a 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -85,3 +85,4 @@ pymysql==1.1.1 tidb-vector==0.0.9 google-cloud-aiplatform==1.49.0 vanna[postgres,mysql,clickhouse,duckdb]==0.5.5 +tencentcloud-sdk-python-hunyuan~=3.0.1158 \ No newline at end of file diff --git a/api/tests/integration_tests/model_runtime/hunyuan/__init__.py b/api/tests/integration_tests/model_runtime/hunyuan/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py b/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py new file mode 100644 index 0000000000..305f967ef0 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py @@ -0,0 +1,111 @@ +import os +from collections.abc import Generator + +import pytest + +from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta +from core.model_runtime.entities.message_entities import AssistantPromptMessage, SystemPromptMessage, UserPromptMessage +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.hunyuan.llm.llm import HunyuanLargeLanguageModel + + +def test_validate_credentials(): + model = HunyuanLargeLanguageModel() + + with pytest.raises(CredentialsValidateFailedError): + model.validate_credentials( + model='hunyuan-standard', + credentials={ + 'secret_id': 'invalid_key', + 'secret_key': 'invalid_key' + } + ) + + model.validate_credentials( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + } + ) + + +def test_invoke_model(): + model = HunyuanLargeLanguageModel() + + response = model.invoke( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + UserPromptMessage( + content='Hi' + ) + ], + model_parameters={ + 'temperature': 0.5, + 'max_tokens': 10 + }, + stop=['How'], + stream=False, + user="abc-123" + ) + + assert isinstance(response, LLMResult) + assert len(response.message.content) > 0 + + +def test_invoke_stream_model(): + model = HunyuanLargeLanguageModel() + + response = model.invoke( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + UserPromptMessage( + content='Hi' + ) + ], + model_parameters={ + 'temperature': 0.5, + 'max_tokens': 100, + 'seed': 1234 + }, + stream=True, + user="abc-123" + ) + + assert isinstance(response, Generator) + + for chunk in response: + assert isinstance(chunk, LLMResultChunk) + assert isinstance(chunk.delta, LLMResultChunkDelta) + assert isinstance(chunk.delta.message, AssistantPromptMessage) + assert len(chunk.delta.message.content) > 0 if chunk.delta.finish_reason is None else True + + +def test_get_num_tokens(): + model = HunyuanLargeLanguageModel() + + num_tokens = model.get_num_tokens( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + SystemPromptMessage( + content='You are a helpful AI assistant.', + ), + UserPromptMessage( + content='Hello World!' + ) + ] + ) + + assert num_tokens == 14 diff --git a/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py b/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py new file mode 100644 index 0000000000..bdec3d0e22 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py @@ -0,0 +1,25 @@ +import os + +import pytest + +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.hunyuan.hunyuan import HunyuanProvider + + +def test_validate_provider_credentials(): + provider = HunyuanProvider() + + with pytest.raises(CredentialsValidateFailedError): + provider.validate_provider_credentials( + credentials={ + 'secret_id': 'invalid_key', + 'secret_key': 'invalid_key' + } + ) + + provider.validate_provider_credentials( + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + } + )