openrag/flows/components/watsonx_embedding.json
2025-09-29 14:53:47 -04:00

1 line
No EOL
9 KiB
JSON

{"data":{"edges":[],"nodes":[{"data":{"node":{"template":{"_type":"Component","api_key":{"load_from_db":false,"required":true,"placeholder":"","show":true,"name":"api_key","value":"","display_name":"Watsonx API Key","advanced":false,"input_types":[],"dynamic":false,"info":"The API Key to use for the model.","title_case":false,"password":true,"type":"str","_input_type":"SecretStrInput"},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Any\n\nimport requests\nfrom ibm_watsonx_ai import APIClient, Credentials\nfrom ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames\nfrom langchain_ibm import WatsonxEmbeddings\nfrom pydantic.v1 import SecretStr\n\nfrom lfx.base.embeddings.model import LCEmbeddingsModel\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import BoolInput, DropdownInput, IntInput, SecretStrInput, StrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.dotdict import dotdict\n\n\nclass WatsonxEmbeddingsComponent(LCEmbeddingsModel):\n display_name = \"IBM watsonx.ai Embeddings\"\n description = \"Generate embeddings using IBM watsonx.ai models.\"\n icon = \"WatsonxAI\"\n name = \"WatsonxEmbeddingsComponent\"\n\n # models present in all the regions\n _default_models = [\n \"sentence-transformers/all-minilm-l12-v2\",\n \"ibm/slate-125m-english-rtrvr-v2\",\n \"ibm/slate-30m-english-rtrvr-v2\",\n \"intfloat/multilingual-e5-large\",\n ]\n\n inputs = [\n DropdownInput(\n name=\"url\",\n display_name=\"watsonx API Endpoint\",\n info=\"The base URL of the API.\",\n value=None,\n options=[\n \"https://us-south.ml.cloud.ibm.com\",\n \"https://eu-de.ml.cloud.ibm.com\",\n \"https://eu-gb.ml.cloud.ibm.com\",\n \"https://au-syd.ml.cloud.ibm.com\",\n \"https://jp-tok.ml.cloud.ibm.com\",\n \"https://ca-tor.ml.cloud.ibm.com\",\n ],\n real_time_refresh=True,\n ),\n StrInput(\n name=\"project_id\",\n display_name=\"watsonx project id\",\n info=\"The project ID or deployment space ID that is associated with the foundation model.\",\n required=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Watsonx API Key\",\n info=\"The API Key to use for the model.\",\n required=True,\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=[],\n value=None,\n dynamic=True,\n required=True,\n ),\n IntInput(\n name=\"truncate_input_tokens\",\n display_name=\"Truncate Input Tokens\",\n advanced=True,\n value=200,\n ),\n BoolInput(\n name=\"input_text\",\n display_name=\"Include the original text in the output\",\n value=True,\n advanced=True,\n ),\n ]\n\n @staticmethod\n def fetch_models(base_url: str) -> list[str]:\n \"\"\"Fetch available models from the watsonx.ai API.\"\"\"\n try:\n endpoint = f\"{base_url}/ml/v1/foundation_model_specs\"\n params = {\n \"version\": \"2024-09-16\",\n \"filters\": \"function_embedding,!lifecycle_withdrawn:and\",\n }\n response = requests.get(endpoint, params=params, timeout=10)\n response.raise_for_status()\n data = response.json()\n models = [model[\"model_id\"] for model in data.get(\"resources\", [])]\n return sorted(models)\n except Exception: # noqa: BLE001\n logger.exception(\"Error fetching models\")\n return WatsonxEmbeddingsComponent._default_models\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):\n \"\"\"Update model options when URL or API key changes.\"\"\"\n logger.debug(\n \"Updating build config. Field name: %s, Field value: %s\",\n field_name,\n field_value,\n )\n\n if field_name == \"url\" and field_value:\n try:\n models = self.fetch_models(base_url=build_config.url.value)\n build_config.model_name.options = models\n if build_config.model_name.value:\n build_config.model_name.value = models[0]\n info_message = f\"Updated model options: {len(models)} models found in {build_config.url.value}\"\n logger.info(info_message)\n except Exception: # noqa: BLE001\n logger.exception(\"Error updating model options.\")\n\n def build_embeddings(self) -> Embeddings:\n credentials = Credentials(\n api_key=SecretStr(self.api_key).get_secret_value(),\n url=self.url,\n )\n\n api_client = APIClient(credentials)\n\n params = {\n EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: self.truncate_input_tokens,\n EmbedTextParamsMetaNames.RETURN_OPTIONS: {\"input_text\": self.input_text},\n }\n\n return WatsonxEmbeddings(\n model_id=self.model_name,\n params=params,\n watsonx_client=api_client,\n project_id=self.project_id,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"input_text":{"tool_mode":false,"trace_as_metadata":true,"list":false,"list_add_label":"Add More","required":false,"placeholder":"","show":true,"name":"input_text","value":true,"display_name":"Include the original text in the output","advanced":true,"dynamic":false,"info":"","title_case":false,"type":"bool","_input_type":"BoolInput"},"model_name":{"tool_mode":false,"trace_as_metadata":true,"options":[],"options_metadata":[],"combobox":false,"dialog_inputs":{},"toggle":false,"required":true,"placeholder":"","show":true,"name":"model_name","display_name":"Model Name","advanced":false,"dynamic":true,"info":"","title_case":false,"external_options":{},"type":"str","_input_type":"DropdownInput"},"project_id":{"tool_mode":false,"trace_as_metadata":true,"load_from_db":false,"list":false,"list_add_label":"Add More","required":true,"placeholder":"","show":true,"name":"project_id","value":"","display_name":"watsonx project id","advanced":false,"dynamic":false,"info":"The project ID or deployment space ID that is associated with the foundation model.","title_case":false,"type":"str","_input_type":"StrInput"},"truncate_input_tokens":{"tool_mode":false,"trace_as_metadata":true,"list":false,"list_add_label":"Add More","required":false,"placeholder":"","show":true,"name":"truncate_input_tokens","value":200,"display_name":"Truncate Input Tokens","advanced":true,"dynamic":false,"info":"","title_case":false,"type":"int","_input_type":"IntInput"},"url":{"tool_mode":false,"trace_as_metadata":true,"options":["https://us-south.ml.cloud.ibm.com","https://eu-de.ml.cloud.ibm.com","https://eu-gb.ml.cloud.ibm.com","https://au-syd.ml.cloud.ibm.com","https://jp-tok.ml.cloud.ibm.com","https://ca-tor.ml.cloud.ibm.com"],"options_metadata":[],"combobox":false,"dialog_inputs":{},"toggle":false,"required":false,"placeholder":"","show":true,"name":"url","display_name":"watsonx API Endpoint","advanced":false,"dynamic":false,"info":"The base URL of the API.","real_time_refresh":true,"title_case":false,"external_options":{},"type":"str","_input_type":"DropdownInput"}},"description":"Generate embeddings using IBM watsonx.ai models.","icon":"WatsonxAI","base_classes":["Embeddings"],"display_name":"IBM watsonx.ai Embeddings","documentation":"","minimized":false,"custom_fields":{},"output_types":[],"pinned":false,"conditional_paths":[],"frozen":false,"outputs":[{"types":["Embeddings"],"selected":"Embeddings","name":"embeddings","display_name":"Embedding Model","method":"build_embeddings","value":"__UNDEFINED__","cache":true,"allows_loop":false,"group_outputs":false,"tool_mode":true}],"field_order":["url","project_id","api_key","model_name","truncate_input_tokens","input_text"],"beta":false,"legacy":false,"edited":false,"metadata":{"module":"lfx.components.ibm.watsonx_embeddings.WatsonxEmbeddingsComponent","code_hash":"ffded413ea90","dependencies":{"total_dependencies":5,"dependencies":[{"name":"requests","version":"2.32.5"},{"name":"ibm_watsonx_ai","version":"1.3.34"},{"name":"langchain_ibm","version":"0.3.16"},{"name":"pydantic","version":"2.10.6"},{"name":"lfx","version":null}]}},"tool_mode":false,"official":false},"showNode":true,"type":"WatsonxEmbeddingsComponent","id":"WatsonxEmbeddingsComponent-q67FN"},"id":"WatsonxEmbeddingsComponent-q67FN","position":{"x":0,"y":0},"type":"genericNode"}],"viewport":{"x":1,"y":1,"zoom":1}},"description":"Generate embeddings using IBM watsonx.ai models.","name":"IBM watsonx.ai Embeddings","id":"WatsonxEmbeddingsComponent-q67FN","is_component":true,"last_tested_version":"1.6.0"}