feat: update OpenAI component temperature limit to 1.0 (#6194)

update openai component temperature max=1
This commit is contained in:
Cristhian Zanforlin Lousa 2025-02-12 10:56:29 -03:00 committed by GitHub
commit 39c4304543
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 2087 additions and 712 deletions

View file

@ -59,7 +59,7 @@ class OpenAIModelComponent(LCModelComponent):
required=True,
),
SliderInput(
name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)
name="temperature", display_name="Temperature", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)
),
IntInput(
name="seed",

View file

@ -8,12 +8,16 @@
"dataType": "Prompt",
"id": "Prompt-f1f2v",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-lL9HA",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -31,12 +35,16 @@
"dataType": "ChatInput",
"id": "ChatInput-GyBUF",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-lL9HA",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -54,12 +62,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-lL9HA",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-JieGw",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -77,12 +89,16 @@
"dataType": "Prompt",
"id": "Prompt-4IOgm",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-JieGw",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -100,12 +116,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-JieGw",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-dXMRv",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -123,12 +143,16 @@
"dataType": "Prompt",
"id": "Prompt-FRjO8",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-dXMRv",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -146,12 +170,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-dXMRv",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-KXQMh",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -170,7 +198,9 @@
"display_name": "Prompt",
"id": "Prompt-4IOgm",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -180,7 +210,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -247,7 +279,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -289,7 +323,9 @@
"data": {
"id": "ChatInput-GyBUF",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"category": "inputs",
"conditional_paths": [],
@ -340,7 +376,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -359,7 +397,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -460,7 +500,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -475,7 +518,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -494,7 +539,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -529,7 +576,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -571,7 +620,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-KXQMh",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -620,7 +671,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -640,7 +693,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -678,7 +733,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -698,7 +755,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -719,7 +778,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -735,7 +797,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -755,7 +819,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -791,7 +857,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -835,7 +903,9 @@
"display_name": "Prompt",
"id": "Prompt-FRjO8",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -845,7 +915,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -912,7 +984,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -956,7 +1030,9 @@
"display_name": "Prompt",
"id": "Prompt-f1f2v",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -966,7 +1042,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -1033,7 +1111,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -1149,7 +1229,10 @@
"data": {
"id": "OpenAIModel-lL9HA",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1199,7 +1282,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1218,7 +1303,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1245,7 +1332,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1253,7 +1340,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1435,7 +1524,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1464,7 +1555,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1520,7 +1611,10 @@
"data": {
"id": "OpenAIModel-JieGw",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1570,7 +1664,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1589,7 +1685,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1616,7 +1714,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1624,7 +1722,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1806,7 +1906,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1835,7 +1937,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1891,7 +1993,10 @@
"data": {
"id": "OpenAIModel-dXMRv",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1941,7 +2046,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1960,7 +2067,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1987,7 +2096,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1995,7 +2104,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2177,7 +2288,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2206,7 +2319,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -2273,5 +2386,7 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Prompt Chaining",
"tags": ["chatbots"]
}
"tags": [
"chatbots"
]
}

View file

@ -6,66 +6,78 @@
"data": {
"sourceHandle": {
"dataType": "ChatInput",
"id": "ChatInput-gyoWG",
"id": "ChatInput-jFwUm",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-kVbrq",
"inputTypes": ["Message"],
"id": "OpenAIModel-OcXkl",
"inputTypes": [
"Message"
],
"type": "str"
}
},
"id": "reactflow__edge-ChatInput-gyoWG{œdataTypeœ:œChatInputœ,œidœ:œChatInput-gyoWGœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-OpenAIModel-kVbrq{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-kVbrqœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "ChatInput-gyoWG",
"sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-gyoWGœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-kVbrq",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œOpenAIModel-kVbrqœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-ChatInput-jFwUm{œdataTypeœ:œChatInputœ,œidœ:œChatInput-jFwUmœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-OpenAIModel-OcXkl{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-OcXklœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "ChatInput-jFwUm",
"sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-jFwUmœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-OcXkl",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œOpenAIModel-OcXklœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
},
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "Prompt",
"id": "Prompt-U0xoC",
"id": "Prompt-3SM2g",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-kVbrq",
"inputTypes": ["Message"],
"id": "OpenAIModel-OcXkl",
"inputTypes": [
"Message"
],
"type": "str"
}
},
"id": "reactflow__edge-Prompt-U0xoC{œdataTypeœ:œPromptœ,œidœ:œPrompt-U0xoCœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-OpenAIModel-kVbrq{œfieldNameœ:œsystem_messageœ,œidœ:œOpenAIModel-kVbrqœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "Prompt-U0xoC",
"sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-U0xoCœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-kVbrq",
"targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œOpenAIModel-kVbrqœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-Prompt-3SM2g{œdataTypeœ:œPromptœ,œidœ:œPrompt-3SM2gœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-OpenAIModel-OcXkl{œfieldNameœ:œsystem_messageœ,œidœ:œOpenAIModel-OcXklœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "Prompt-3SM2g",
"sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-3SM2gœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-OcXkl",
"targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œOpenAIModel-OcXklœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
},
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "OpenAIModel",
"id": "OpenAIModel-kVbrq",
"id": "OpenAIModel-OcXkl",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-qv4Kg",
"inputTypes": ["Message"],
"id": "ChatOutput-gDYiJ",
"inputTypes": [
"Message"
],
"type": "str"
}
},
"id": "reactflow__edge-OpenAIModel-kVbrq{œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-kVbrqœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-qv4Kg{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-qv4Kgœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "OpenAIModel-kVbrq",
"sourceHandle": "{œdataTypeœ: œOpenAIModelœ, œidœ: œOpenAIModel-kVbrqœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
"target": "ChatOutput-qv4Kg",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-qv4Kgœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-OpenAIModel-OcXkl{œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-OcXklœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-gDYiJ{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-gDYiJœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "OpenAIModel-OcXkl",
"sourceHandle": "{œdataTypeœ: œOpenAIModelœ, œidœ: œOpenAIModel-OcXklœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
"target": "ChatOutput-gDYiJ",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-gDYiJœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
}
],
"nodes": [
@ -73,9 +85,11 @@
"data": {
"description": "Get chat inputs from the Playground.",
"display_name": "Chat Input",
"id": "ChatInput-gyoWG",
"id": "ChatInput-jFwUm",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -121,7 +135,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -140,7 +156,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -237,7 +255,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -251,7 +272,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -269,7 +292,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -304,7 +329,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -323,10 +350,10 @@
},
"dragging": false,
"height": 234,
"id": "ChatInput-gyoWG",
"id": "ChatInput-jFwUm",
"measured": {
"height": 234,
"width": 320
"width": 360
},
"position": {
"x": 689.5720422421635,
@ -344,9 +371,11 @@
"data": {
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"id": "Prompt-U0xoC",
"id": "Prompt-3SM2g",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -356,7 +385,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -422,7 +453,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -443,10 +476,10 @@
},
"dragging": false,
"height": 260,
"id": "Prompt-U0xoC",
"id": "Prompt-3SM2g",
"measured": {
"height": 260,
"width": 320
"width": 360
},
"position": {
"x": 690.2015147036818,
@ -462,7 +495,7 @@
},
{
"data": {
"id": "undefined-9fug3",
"id": "undefined-kVLkG",
"node": {
"description": "## 📖 README\n\nPerform basic prompting with an OpenAI model.\n\n#### Quick Start\n- Add your **OpenAI API key** to the **OpenAI Model**\n- Open the **Playground** to chat with your bot.\n\n#### Next steps:\n Experiment by changing the prompt and the OpenAI model temperature to see how the bot's responses change.",
"display_name": "Read Me",
@ -474,10 +507,10 @@
},
"dragging": false,
"height": 332,
"id": "undefined-9fug3",
"id": "undefined-kVLkG",
"measured": {
"height": 332,
"width": 324
"width": 328
},
"position": {
"x": 133.95771636602308,
@ -488,7 +521,7 @@
"y": 749.744424427066
},
"resizing": false,
"selected": true,
"selected": false,
"style": {
"height": 250,
"width": 324
@ -498,7 +531,7 @@
},
{
"data": {
"id": "note-fR64x",
"id": "note-WrEGM",
"node": {
"description": "### 💡 Add your OpenAI API key here 👇",
"display_name": "",
@ -511,10 +544,10 @@
},
"dragging": false,
"height": 324,
"id": "note-fR64x",
"id": "note-WrEGM",
"measured": {
"height": 324,
"width": 324
"width": 326
},
"position": {
"x": 1075.829573520873,
@ -535,9 +568,11 @@
},
{
"data": {
"id": "ChatOutput-qv4Kg",
"id": "ChatOutput-gDYiJ",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -585,7 +620,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -605,7 +642,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -643,7 +682,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -663,7 +704,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -684,7 +727,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -700,7 +746,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -720,7 +768,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -756,7 +806,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -777,10 +829,10 @@
},
"dragging": false,
"height": 234,
"id": "ChatOutput-qv4Kg",
"id": "ChatOutput-gDYiJ",
"measured": {
"height": 234,
"width": 320
"width": 360
},
"position": {
"x": 1460.070372772908,
@ -796,11 +848,13 @@
},
{
"data": {
"id": "OpenAIModel-kVbrq",
"id": "OpenAIModel-OcXkl",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
"custom_fields": {},
"description": "Generates text using OpenAI LLMs.",
@ -818,11 +872,12 @@
"openai_api_base",
"api_key",
"temperature",
"seed"
"seed",
"max_retries",
"timeout"
],
"frozen": false,
"icon": "OpenAI",
"key": "OpenAIModel",
"legacy": false,
"metadata": {},
"minimized": false,
@ -848,7 +903,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -858,7 +915,6 @@
}
],
"pinned": false,
"score": 0.14285714285714285,
"template": {
"_type": "Component",
"api_key": {
@ -867,8 +923,10 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"load_from_db": true,
"input_types": [
"Message"
],
"load_from_db": false,
"name": "api_key",
"password": true,
"placeholder": "",
@ -894,7 +952,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -902,7 +960,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1084,7 +1144,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1106,6 +1168,7 @@
"display_name": "Temperature",
"dynamic": false,
"info": "",
"load_from_db": false,
"max_label": "",
"max_label_icon": "",
"min_label": "",
@ -1113,7 +1176,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1153,10 +1216,10 @@
"type": "OpenAIModel"
},
"dragging": false,
"id": "OpenAIModel-kVbrq",
"id": "OpenAIModel-OcXkl",
"measured": {
"height": 653,
"width": 320
"height": 734,
"width": 360
},
"position": {
"x": 1071.3015591664102,
@ -1167,9 +1230,9 @@
}
],
"viewport": {
"x": 14.822536028026889,
"y": -179.77383984286314,
"zoom": 0.7681490030215967
"x": -37.61270157375441,
"y": -155.91266341888854,
"zoom": 0.7575251406952855
}
},
"description": "Perform basic prompting with an OpenAI model.",
@ -1180,5 +1243,7 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Basic Prompting",
"tags": ["chatbots"]
}
"tags": [
"chatbots"
]
}

View file

@ -9,12 +9,17 @@
"dataType": "ParseData",
"id": "ParseData-4Sckw",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "references",
"id": "Prompt-65R68",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -32,12 +37,17 @@
"dataType": "TextInput",
"id": "TextInput-t88FI",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "instructions",
"id": "Prompt-65R68",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -54,12 +64,16 @@
"dataType": "Prompt",
"id": "Prompt-65R68",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-MyAsQ",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -76,12 +90,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-MyAsQ",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-BE4YI",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -98,12 +116,16 @@
"dataType": "URL",
"id": "URL-EPEnt",
"name": "data",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-4Sckw",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -121,7 +143,9 @@
"display_name": "Parse Data",
"id": "ParseData-4Sckw",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -129,7 +153,11 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
"field_order": ["data", "template", "sep"],
"field_order": [
"data",
"template",
"sep"
],
"frozen": false,
"icon": "message-square",
"legacy": false,
@ -190,7 +218,9 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data",
"placeholder": "",
@ -223,7 +253,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -266,17 +298,24 @@
"display_name": "Prompt",
"id": "Prompt-65R68",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
"template": ["references", "instructions"]
"template": [
"references",
"instructions"
]
},
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -327,7 +366,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -348,7 +390,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -383,7 +428,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -426,7 +473,9 @@
"display_name": "Instructions",
"id": "TextInput-t88FI",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -434,7 +483,9 @@
"display_name": "Instructions",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -483,7 +534,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -526,7 +579,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-BE4YI",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -572,7 +627,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -591,7 +648,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -627,7 +686,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -645,7 +706,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -664,7 +727,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -678,7 +744,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -696,7 +764,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -731,7 +801,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -880,7 +952,10 @@
"data": {
"id": "OpenAIModel-MyAsQ",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -930,7 +1005,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -949,7 +1026,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -976,7 +1055,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -984,7 +1063,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1166,7 +1247,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1195,7 +1278,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1251,7 +1334,11 @@
"data": {
"id": "URL-EPEnt",
"node": {
"base_classes": ["Data", "DataFrame", "Message"],
"base_classes": [
"Data",
"DataFrame",
"Message"
],
"beta": false,
"category": "data",
"conditional_paths": [],
@ -1260,7 +1347,10 @@
"display_name": "URL",
"documentation": "",
"edited": false,
"field_order": ["urls", "format"],
"field_order": [
"urls",
"format"
],
"frozen": false,
"icon": "layout-template",
"key": "URL",
@ -1340,7 +1430,10 @@
"dynamic": false,
"info": "Output Format. Use 'Text' to extract the text from the HTML or 'Raw HTML' for the raw HTML content.",
"name": "format",
"options": ["Text", "Raw HTML"],
"options": [
"Text",
"Raw HTML"
],
"options_metadata": [],
"placeholder": "",
"required": false,
@ -1357,7 +1450,9 @@
"display_name": "URLs",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": true,
"list_add_label": "Add URL",
"load_from_db": false,
@ -1370,7 +1465,10 @@
"trace_as_input": true,
"trace_as_metadata": true,
"type": "str",
"value": ["https://langflow.org/", "https://docs.langflow.org/"]
"value": [
"https://langflow.org/",
"https://docs.langflow.org/"
]
}
},
"tool_mode": false
@ -1406,5 +1504,8 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Blog Writer",
"tags": ["chatbots", "content-generation"]
}
"tags": [
"chatbots",
"content-generation"
]
}

View file

@ -8,12 +8,16 @@
"dataType": "File",
"id": "File-GwJQZ",
"name": "data",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-BbvKb",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -31,12 +35,17 @@
"dataType": "ParseData",
"id": "ParseData-BbvKb",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "Document",
"id": "Prompt-yvZHT",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -54,12 +63,16 @@
"dataType": "ChatInput",
"id": "ChatInput-li477",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-atkmo",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -77,12 +90,16 @@
"dataType": "Prompt",
"id": "Prompt-yvZHT",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-atkmo",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -100,12 +117,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-atkmo",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-8pgwS",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -124,7 +145,9 @@
"display_name": "Chat Input",
"id": "ChatInput-li477",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -170,7 +193,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -189,7 +214,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -286,7 +313,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -300,7 +330,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -318,7 +350,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -353,7 +387,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -395,7 +431,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-8pgwS",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -444,7 +482,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -464,7 +504,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -502,7 +544,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -522,7 +566,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -543,7 +589,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -559,7 +608,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -579,7 +630,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -615,7 +668,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -659,7 +714,9 @@
"display_name": "Parse Data",
"id": "ParseData-BbvKb",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -667,7 +724,11 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
"field_order": ["data", "template", "sep"],
"field_order": [
"data",
"template",
"sep"
],
"frozen": false,
"icon": "message-square",
"legacy": false,
@ -728,7 +789,9 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data",
"placeholder": "",
@ -761,7 +824,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -869,7 +934,9 @@
"data": {
"id": "File-GwJQZ",
"node": {
"base_classes": ["Data"],
"base_classes": [
"Data"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -963,7 +1030,10 @@
"display_name": "Server File Path",
"dynamic": false,
"info": "Data object with a 'file_path' property pointing to server file or a Message object with a path to the file. Supercedes 'Path' but supports same file types.",
"input_types": ["Data", "Message"],
"input_types": [
"Data",
"Message"
],
"list": true,
"name": "file_path",
"placeholder": "",
@ -1110,18 +1180,24 @@
"display_name": "Prompt",
"id": "Prompt-yvZHT",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
"template": ["Document"]
"template": [
"Document"
]
},
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"documentation": "",
"edited": false,
"error": null,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"full_path": null,
"icon": "prompts",
@ -1158,7 +1234,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1211,7 +1290,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -1253,7 +1334,10 @@
"data": {
"id": "OpenAIModel-atkmo",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1303,7 +1387,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1322,7 +1408,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1349,7 +1437,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1357,7 +1445,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1539,7 +1629,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1568,7 +1660,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1635,5 +1727,9 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Document Q&A",
"tags": ["rag", "q-a", "openai"]
}
"tags": [
"rag",
"q-a",
"openai"
]
}

View file

@ -9,12 +9,16 @@
"dataType": "StructuredOutputComponent",
"id": "StructuredOutputComponent-XYoUc",
"name": "structured_output",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-HzweJ",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -33,12 +37,16 @@
"dataType": "ParseData",
"id": "ParseData-HzweJ",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-xQxLm",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -56,12 +64,16 @@
"dataType": "ChatInput",
"id": "ChatInput-rAWlE",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-cqeNw",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -79,12 +91,16 @@
"dataType": "Prompt",
"id": "Prompt-AzK6t",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-cqeNw",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -102,12 +118,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-cqeNw",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "StructuredOutputComponent-XYoUc",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -125,12 +145,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-cqeNw",
"name": "model_output",
"output_types": ["LanguageModel"]
"output_types": [
"LanguageModel"
]
},
"targetHandle": {
"fieldName": "llm",
"id": "StructuredOutputComponent-XYoUc",
"inputTypes": ["LanguageModel"],
"inputTypes": [
"LanguageModel"
],
"type": "other"
}
},
@ -149,7 +173,9 @@
"display_name": "Chat Input",
"id": "ChatInput-rAWlE",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -198,7 +224,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -218,7 +246,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -321,7 +351,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -337,7 +370,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -357,7 +392,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -393,7 +430,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -437,7 +476,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-xQxLm",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -486,7 +527,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -506,7 +549,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -544,7 +589,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -564,7 +611,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -585,7 +634,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -601,7 +653,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -621,7 +675,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -657,7 +713,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -736,7 +794,9 @@
"display_name": "Structured Output",
"id": "StructuredOutputComponent-XYoUc",
"node": {
"base_classes": ["Data"],
"base_classes": [
"Data"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -764,7 +824,9 @@
"method": "build_structured_output",
"name": "structured_output",
"selected": "Data",
"types": ["Data"],
"types": [
"Data"
],
"value": "__UNDEFINED__"
}
],
@ -795,7 +857,9 @@
"display_name": "Input message",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -815,7 +879,9 @@
"display_name": "Language Model",
"dynamic": false,
"info": "The language model to use to generate the structured output.",
"input_types": ["LanguageModel"],
"input_types": [
"LanguageModel"
],
"list": false,
"name": "llm",
"placeholder": "",
@ -959,7 +1025,9 @@
"data": {
"id": "ParseData-HzweJ",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -967,7 +1035,11 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
"field_order": ["data", "template", "sep"],
"field_order": [
"data",
"template",
"sep"
],
"frozen": false,
"icon": "message-square",
"legacy": false,
@ -1029,7 +1101,9 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data",
"placeholder": "",
@ -1065,7 +1139,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1110,7 +1186,9 @@
"display_name": "Prompt",
"id": "Prompt-AzK6t",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -1120,7 +1198,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -1187,7 +1267,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -1229,7 +1311,10 @@
"data": {
"id": "OpenAIModel-cqeNw",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1279,7 +1364,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1298,7 +1385,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1325,7 +1414,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1333,7 +1422,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1515,7 +1606,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1544,7 +1637,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1611,5 +1704,7 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Image Sentiment Analysis",
"tags": ["classification"]
}
"tags": [
"classification"
]
}

View file

@ -2666,7 +2666,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -2889,7 +2889,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -3048,7 +3048,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -3271,7 +3271,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"

View file

@ -9,12 +9,16 @@
"dataType": "StructuredOutputComponent",
"id": "StructuredOutputComponent-y5YEE",
"name": "structured_output",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-8KK2E",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -33,12 +37,16 @@
"dataType": "ParseData",
"id": "ParseData-8KK2E",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-gEsYh",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -57,12 +65,16 @@
"dataType": "ChatInput",
"id": "ChatInput-vuvZ4",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "Agent-lyqby",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -81,12 +93,16 @@
"dataType": "Agent",
"id": "Agent-lyqby",
"name": "response",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "StructuredOutputComponent-y5YEE",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -105,12 +121,16 @@
"dataType": "TavilySearchComponent",
"id": "TavilySearchComponent-Gv4zn",
"name": "component_as_tool",
"output_types": ["Tool"]
"output_types": [
"Tool"
]
},
"targetHandle": {
"fieldName": "tools",
"id": "Agent-lyqby",
"inputTypes": ["Tool"],
"inputTypes": [
"Tool"
],
"type": "other"
}
},
@ -126,12 +146,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-Yo7s2",
"name": "model_output",
"output_types": ["LanguageModel"]
"output_types": [
"LanguageModel"
]
},
"targetHandle": {
"fieldName": "llm",
"id": "StructuredOutputComponent-y5YEE",
"inputTypes": ["LanguageModel"],
"inputTypes": [
"LanguageModel"
],
"type": "other"
}
},
@ -149,7 +173,9 @@
"display_name": "Chat Input",
"id": "ChatInput-vuvZ4",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -198,7 +224,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -217,7 +245,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -318,7 +348,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -333,7 +366,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -352,7 +387,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -387,7 +424,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -429,7 +468,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-gEsYh",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -478,7 +519,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -498,7 +541,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -536,7 +581,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -556,7 +603,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -577,7 +626,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -593,7 +645,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -613,7 +667,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -649,7 +705,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -804,7 +862,9 @@
"display_name": "Structured Output",
"id": "StructuredOutputComponent-y5YEE",
"node": {
"base_classes": ["Data"],
"base_classes": [
"Data"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -832,7 +892,9 @@
"method": "build_structured_output",
"name": "structured_output",
"selected": "Data",
"types": ["Data"],
"types": [
"Data"
],
"value": "__UNDEFINED__"
}
],
@ -863,7 +925,9 @@
"display_name": "Input message",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -883,7 +947,9 @@
"display_name": "Language Model",
"dynamic": false,
"info": "The language model to use to generate the structured output.",
"input_types": ["LanguageModel"],
"input_types": [
"LanguageModel"
],
"list": false,
"name": "llm",
"placeholder": "",
@ -1075,7 +1141,9 @@
"data": {
"id": "ParseData-8KK2E",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"category": "helpers",
"conditional_paths": [],
@ -1084,7 +1152,11 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
"field_order": ["data", "template", "sep"],
"field_order": [
"data",
"template",
"sep"
],
"frozen": false,
"icon": "message-square",
"key": "ParseData",
@ -1147,7 +1219,9 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data",
"placeholder": "",
@ -1182,7 +1256,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1225,7 +1301,9 @@
"display_name": "Agent",
"id": "Agent-lyqby",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1307,7 +1385,9 @@
"display_name": "Agent Description [Deprecated]",
"dynamic": false,
"info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1358,7 +1438,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1409,7 +1491,9 @@
"display_name": "Input",
"dynamic": false,
"info": "The input provided by the user for the agent to process.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -1501,7 +1585,9 @@
"display_name": "External Memory",
"dynamic": false,
"info": "Retrieve messages from an external memory. If empty, it will use the Langflow tables.",
"input_types": ["Memory"],
"input_types": [
"Memory"
],
"list": false,
"name": "memory",
"placeholder": "",
@ -1595,7 +1681,10 @@
"dynamic": false,
"info": "Order of the messages.",
"name": "order",
"options": ["Ascending", "Descending"],
"options": [
"Ascending",
"Descending"
],
"placeholder": "",
"required": false,
"show": true,
@ -1629,7 +1718,11 @@
"dynamic": false,
"info": "Filter by sender type.",
"name": "sender",
"options": ["Machine", "User", "Machine and User"],
"options": [
"Machine",
"User",
"Machine and User"
],
"placeholder": "",
"required": false,
"show": true,
@ -1645,7 +1738,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Filter by sender name.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -1665,7 +1760,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -1685,7 +1782,9 @@
"display_name": "Agent Instructions",
"dynamic": false,
"info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1722,7 +1821,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {sender} or any other key in the message data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1761,7 +1862,9 @@
"display_name": "Tools",
"dynamic": false,
"info": "These are the tools that the agent can use to help with tasks.",
"input_types": ["Tool"],
"input_types": [
"Tool"
],
"list": true,
"name": "tools",
"placeholder": "",
@ -1844,7 +1947,10 @@
"data": {
"id": "TavilySearchComponent-Gv4zn",
"node": {
"base_classes": ["Data", "Message"],
"base_classes": [
"Data",
"Message"
],
"beta": false,
"category": "tools",
"conditional_paths": [],
@ -1880,7 +1986,9 @@
"name": "component_as_tool",
"required_inputs": null,
"selected": "Tool",
"types": ["Tool"],
"types": [
"Tool"
],
"value": "__UNDEFINED__"
}
],
@ -1894,7 +2002,9 @@
"display_name": "Tavily API Key",
"dynamic": false,
"info": "Your Tavily API Key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1983,7 +2093,9 @@
"display_name": "Search Query",
"dynamic": false,
"info": "The search query you want to execute with Tavily.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2006,7 +2118,10 @@
"dynamic": false,
"info": "The depth of the search.",
"name": "search_depth",
"options": ["basic", "advanced"],
"options": [
"basic",
"advanced"
],
"placeholder": "",
"required": false,
"show": true,
@ -2041,7 +2156,10 @@
"description": "Modify tool names and descriptions to help agents understand when to use each tool.",
"field_parsers": {
"commands": "commands",
"name": ["snake_case", "no_blank"]
"name": [
"snake_case",
"no_blank"
]
},
"hide_options": true
},
@ -2092,12 +2210,16 @@
{
"description": "fetch_content(api_key: Message) - **Tavily AI** is a search engine optimized for LLMs and RAG, aimed at efficient, quick, and persistent search results.",
"name": "None-fetch_content",
"tags": ["None-fetch_content"]
"tags": [
"None-fetch_content"
]
},
{
"description": "fetch_content_text(api_key: Message) - **Tavily AI** is a search engine optimized for LLMs and RAG, aimed at efficient, quick, and persistent search results.",
"name": "None-fetch_content_text",
"tags": ["None-fetch_content_text"]
"tags": [
"None-fetch_content_text"
]
}
]
},
@ -2109,7 +2231,10 @@
"dynamic": false,
"info": "The category of the search.",
"name": "topic",
"options": ["general", "news"],
"options": [
"general",
"news"
],
"placeholder": "",
"required": false,
"show": true,
@ -2142,7 +2267,10 @@
"data": {
"id": "OpenAIModel-Yo7s2",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -2192,7 +2320,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -2211,7 +2341,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -2238,7 +2370,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -2246,7 +2378,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2428,7 +2562,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2457,7 +2593,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -2524,5 +2660,8 @@
"is_component": false,
"last_tested_version": "1.1.1",
"name": "Market Research",
"tags": ["assistants", "agents"]
}
"tags": [
"assistants",
"agents"
]
}

View file

@ -8,12 +8,17 @@
"dataType": "Memory",
"id": "Memory-gWJrq",
"name": "messages_text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "memory",
"id": "Prompt-yhdMP",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -31,12 +36,16 @@
"dataType": "ChatInput",
"id": "ChatInput-PEO9d",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-63o3Q",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -54,12 +63,16 @@
"dataType": "Prompt",
"id": "Prompt-yhdMP",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-63o3Q",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -77,12 +90,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-63o3Q",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-BIXzI",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -99,7 +116,9 @@
"data": {
"id": "ChatInput-PEO9d",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -148,7 +167,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -168,7 +189,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -271,7 +294,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -287,7 +313,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -307,7 +335,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -343,7 +373,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -387,7 +419,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-BIXzI",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -436,7 +470,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -456,7 +492,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -494,7 +532,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -514,7 +554,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -535,7 +577,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -551,7 +596,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -571,7 +618,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -607,7 +656,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -716,7 +767,10 @@
"data": {
"id": "Memory-gWJrq",
"node": {
"base_classes": ["Data", "Message"],
"base_classes": [
"Data",
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -794,7 +848,9 @@
"display_name": "External Memory",
"dynamic": false,
"info": "Retrieve messages from an external memory. If empty, it will use the Langflow tables.",
"input_types": ["Memory"],
"input_types": [
"Memory"
],
"list": false,
"name": "memory",
"placeholder": "",
@ -829,7 +885,10 @@
"dynamic": false,
"info": "Order of the messages.",
"name": "order",
"options": ["Ascending", "Descending"],
"options": [
"Ascending",
"Descending"
],
"placeholder": "",
"required": false,
"show": true,
@ -847,7 +906,11 @@
"dynamic": false,
"info": "Filter by sender type.",
"name": "sender",
"options": ["Machine", "User", "Machine and User"],
"options": [
"Machine",
"User",
"Machine and User"
],
"placeholder": "",
"required": false,
"show": true,
@ -863,7 +926,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Filter by sender name.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -883,7 +948,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -903,7 +970,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {sender} or any other key in the message data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -946,18 +1015,24 @@
"data": {
"id": "Prompt-yhdMP",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
"template": ["memory"]
"template": [
"memory"
]
},
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"documentation": "",
"edited": false,
"error": null,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"full_path": null,
"icon": "prompts",
@ -1013,7 +1088,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1048,7 +1126,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -1090,7 +1170,10 @@
"data": {
"id": "OpenAIModel-63o3Q",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1140,7 +1223,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1159,7 +1244,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1186,7 +1273,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1194,7 +1281,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1376,7 +1465,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1405,7 +1496,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1472,5 +1563,9 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Memory Chatbot",
"tags": ["chatbots", "openai", "assistants"]
}
"tags": [
"chatbots",
"openai",
"assistants"
]
}

View file

@ -2547,7 +2547,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -2770,7 +2770,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -2929,7 +2929,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -3152,7 +3152,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"

View file

@ -8,12 +8,16 @@
"dataType": "Prompt",
"id": "Prompt-a6SIY",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-brPVM",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -31,12 +35,16 @@
"dataType": "Prompt",
"id": "Prompt-jkCpO",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-brPVM",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -54,12 +62,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-brPVM",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-oE2ic",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -78,7 +90,9 @@
"display_name": "Prompt",
"id": "Prompt-jkCpO",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -95,7 +109,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -146,7 +162,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -166,7 +185,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -186,7 +208,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -206,7 +231,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -226,7 +254,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -246,7 +277,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -282,7 +316,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -361,7 +397,9 @@
"display_name": "Prompt",
"id": "Prompt-a6SIY",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -371,7 +409,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -438,7 +478,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -482,7 +524,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-oE2ic",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -531,7 +575,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -551,7 +597,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -589,7 +637,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -609,7 +659,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -630,7 +682,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -646,7 +701,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -666,7 +723,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -702,7 +761,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -774,7 +835,10 @@
"data": {
"id": "OpenAIModel-brPVM",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -824,7 +888,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -843,7 +909,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -870,7 +938,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -878,7 +946,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1060,7 +1130,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1089,7 +1161,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -1156,5 +1228,8 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "SEO Keyword Generator",
"tags": ["chatbots", "assistants"]
}
"tags": [
"chatbots",
"assistants"
]
}

View file

@ -9,12 +9,17 @@
"dataType": "TextInput",
"id": "TextInput-eClq5",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "CONTENT_GUIDELINES",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -33,12 +38,17 @@
"dataType": "TextInput",
"id": "TextInput-IpoG7",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "OUTPUT_FORMAT",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -57,12 +67,17 @@
"dataType": "TextInput",
"id": "TextInput-npraC",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "OUTPUT_LANGUAGE",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -81,12 +96,17 @@
"dataType": "TextInput",
"id": "TextInput-EZaR7",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "PROFILE_DETAILS",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -105,12 +125,17 @@
"dataType": "TextInput",
"id": "TextInput-fKGcs",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "PROFILE_TYPE",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -129,12 +154,17 @@
"dataType": "TextInput",
"id": "TextInput-92vEK",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "TONE_AND_STYLE",
"id": "Prompt-AWZtN",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -152,12 +182,16 @@
"dataType": "ChatInput",
"id": "ChatInput-ECcN8",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-p0R9m",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -175,12 +209,16 @@
"dataType": "Prompt",
"id": "Prompt-AWZtN",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "system_message",
"id": "OpenAIModel-p0R9m",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -198,12 +236,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-p0R9m",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-0jDYx",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -220,7 +262,9 @@
"data": {
"id": "ChatInput-ECcN8",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -269,7 +313,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -288,7 +334,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -389,7 +437,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -404,7 +455,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -423,7 +476,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -458,7 +513,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -498,7 +555,9 @@
"data": {
"id": "TextInput-eClq5",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -506,7 +565,9 @@
"display_name": "Content Guidelines",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -555,7 +616,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -598,7 +661,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-0jDYx",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -647,7 +712,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -667,7 +734,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -705,7 +774,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -725,7 +796,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -746,7 +819,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -762,7 +838,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -782,7 +860,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -818,7 +898,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -860,7 +942,9 @@
"data": {
"id": "TextInput-IpoG7",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -868,7 +952,9 @@
"display_name": "Output Format",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -917,7 +1003,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -958,7 +1046,9 @@
"data": {
"id": "TextInput-npraC",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -966,7 +1056,9 @@
"display_name": "Output Language",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -1015,7 +1107,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1056,7 +1150,9 @@
"data": {
"id": "TextInput-EZaR7",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1064,7 +1160,9 @@
"display_name": "Profile Details",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -1113,7 +1211,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1154,7 +1254,9 @@
"data": {
"id": "TextInput-92vEK",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1162,7 +1264,9 @@
"display_name": "Tone And Style",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -1211,7 +1315,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1252,7 +1358,9 @@
"data": {
"id": "TextInput-fKGcs",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1260,7 +1368,9 @@
"display_name": "Profile Type",
"documentation": "",
"edited": false,
"field_order": ["input_value"],
"field_order": [
"input_value"
],
"frozen": false,
"icon": "type",
"legacy": false,
@ -1309,7 +1419,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Text to be passed as input.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1389,7 +1501,9 @@
"display_name": "Prompt",
"id": "Prompt-AWZtN",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
@ -1406,7 +1520,9 @@
"display_name": "Prompt",
"documentation": "",
"edited": false,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"icon": "prompts",
"legacy": false,
@ -1438,7 +1554,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1458,7 +1577,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1478,7 +1600,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1498,7 +1623,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1518,7 +1646,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1538,7 +1669,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -1593,7 +1727,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -1635,7 +1771,10 @@
"data": {
"id": "OpenAIModel-p0R9m",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -1685,7 +1824,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -1704,7 +1845,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -1731,7 +1874,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -1739,7 +1882,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1921,7 +2066,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -1950,7 +2097,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -2017,5 +2164,8 @@
"is_component": false,
"last_tested_version": "1.0.19.post2",
"name": "Twitter Thread Generator",
"tags": ["chatbots", "content-generation"]
}
"tags": [
"chatbots",
"content-generation"
]
}

View file

@ -9,12 +9,17 @@
"dataType": "ParseData",
"id": "ParseData-9zsFp",
"name": "text",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "context",
"id": "Prompt-mqa6n",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -32,12 +37,17 @@
"dataType": "ChatInput",
"id": "ChatInput-Jy5aI",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "question",
"id": "Prompt-mqa6n",
"inputTypes": ["Message", "Text"],
"inputTypes": [
"Message",
"Text"
],
"type": "str"
}
},
@ -55,12 +65,16 @@
"dataType": "File",
"id": "File-i8StI",
"name": "data",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data_inputs",
"id": "SplitText-DakpR",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -77,12 +91,16 @@
"dataType": "Prompt",
"id": "Prompt-mqa6n",
"name": "prompt",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-VVLPR",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -99,12 +117,16 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-VVLPR",
"name": "text_output",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-EujCa",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -121,12 +143,16 @@
"dataType": "OpenAIEmbeddings",
"id": "OpenAIEmbeddings-BF7iH",
"name": "embeddings",
"output_types": ["Embeddings"]
"output_types": [
"Embeddings"
]
},
"targetHandle": {
"fieldName": "embedding_model",
"id": "AstraDB-Qdaes",
"inputTypes": ["Embeddings"],
"inputTypes": [
"Embeddings"
],
"type": "other"
}
},
@ -143,12 +169,16 @@
"dataType": "ChatInput",
"id": "ChatInput-Jy5aI",
"name": "message",
"output_types": ["Message"]
"output_types": [
"Message"
]
},
"targetHandle": {
"fieldName": "search_query",
"id": "AstraDB-Qdaes",
"inputTypes": ["Message"],
"inputTypes": [
"Message"
],
"type": "str"
}
},
@ -165,12 +195,16 @@
"dataType": "AstraDB",
"id": "AstraDB-Qdaes",
"name": "search_results",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-9zsFp",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -187,12 +221,16 @@
"dataType": "OpenAIEmbeddings",
"id": "OpenAIEmbeddings-KNVHv",
"name": "embeddings",
"output_types": ["Embeddings"]
"output_types": [
"Embeddings"
]
},
"targetHandle": {
"fieldName": "embedding_model",
"id": "AstraDB-sPWXd",
"inputTypes": ["Embeddings"],
"inputTypes": [
"Embeddings"
],
"type": "other"
}
},
@ -209,12 +247,16 @@
"dataType": "SplitText",
"id": "SplitText-DakpR",
"name": "chunks",
"output_types": ["Data"]
"output_types": [
"Data"
]
},
"targetHandle": {
"fieldName": "ingest_data",
"id": "AstraDB-sPWXd",
"inputTypes": ["Data"],
"inputTypes": [
"Data"
],
"type": "other"
}
},
@ -232,7 +274,9 @@
"display_name": "Chat Input",
"id": "ChatInput-Jy5aI",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -278,7 +322,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -297,7 +343,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -394,7 +442,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -408,7 +459,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -426,7 +479,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -460,7 +515,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -502,7 +559,9 @@
"display_name": "Parse Data",
"id": "ParseData-9zsFp",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -510,7 +569,11 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
"field_order": ["data", "template", "sep"],
"field_order": [
"data",
"template",
"sep"
],
"frozen": false,
"icon": "message-square",
"legacy": false,
@ -571,7 +634,9 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data",
"placeholder": "",
@ -604,7 +669,9 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -647,18 +714,25 @@
"display_name": "Prompt",
"id": "Prompt-mqa6n",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {
"template": ["context", "question"]
"template": [
"context",
"question"
]
},
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"documentation": "",
"edited": false,
"error": null,
"field_order": ["template"],
"field_order": [
"template"
],
"frozen": false,
"full_path": null,
"icon": "prompts",
@ -714,7 +788,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -734,7 +811,10 @@
"fileTypes": [],
"file_path": "",
"info": "",
"input_types": ["Message", "Text"],
"input_types": [
"Message",
"Text"
],
"list": false,
"load_from_db": false,
"multiline": true,
@ -768,7 +848,9 @@
"display_name": "Tool Placeholder",
"dynamic": false,
"info": "A placeholder input for tool mode.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tool_placeholder",
@ -812,7 +894,9 @@
"display_name": "Split Text",
"id": "SplitText-DakpR",
"node": {
"base_classes": ["Data"],
"base_classes": [
"Data"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -916,7 +1000,9 @@
"display_name": "Data Inputs",
"dynamic": false,
"info": "The data to split.",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": true,
"name": "data_inputs",
"placeholder": "",
@ -932,7 +1018,9 @@
"display_name": "Separator",
"dynamic": false,
"info": "The character to split on. Defaults to newline.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "separator",
@ -1048,7 +1136,9 @@
"display_name": "Chat Output",
"id": "ChatOutput-EujCa",
"node": {
"base_classes": ["Message"],
"base_classes": [
"Message"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1097,7 +1187,9 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "background_color",
@ -1117,7 +1209,9 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@ -1155,7 +1249,9 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "data_template",
@ -1175,7 +1271,9 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "input_value",
@ -1196,7 +1294,10 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
"options": ["Machine", "User"],
"options": [
"Machine",
"User"
],
"placeholder": "",
"required": false,
"show": true,
@ -1212,7 +1313,9 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "sender_name",
@ -1232,7 +1335,9 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "session_id",
@ -1268,7 +1373,9 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "text_color",
@ -1310,7 +1417,9 @@
"data": {
"id": "OpenAIEmbeddings-BF7iH",
"node": {
"base_classes": ["Embeddings"],
"base_classes": [
"Embeddings"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1354,7 +1463,9 @@
"display_name": "Embeddings",
"method": "build_embeddings",
"name": "embeddings",
"required_inputs": ["openai_api_key"],
"required_inputs": [
"openai_api_key"
],
"selected": "Embeddings",
"tool_mode": true,
"types": [
@ -1388,7 +1499,9 @@
"display_name": "Client",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "client",
@ -1458,7 +1571,9 @@
"display_name": "Deployment",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "deployment",
@ -1564,7 +1679,9 @@
"display_name": "OpenAI API Base",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_base",
@ -1584,7 +1701,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "openai_api_key",
"password": true,
@ -1601,7 +1720,9 @@
"display_name": "OpenAI API Type",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_type",
@ -1621,7 +1742,9 @@
"display_name": "OpenAI API Version",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_version",
@ -1641,7 +1764,9 @@
"display_name": "OpenAI Organization",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_organization",
@ -1661,7 +1786,9 @@
"display_name": "OpenAI Proxy",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_proxy",
@ -1745,7 +1872,9 @@
"display_name": "TikToken Model Name",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tiktoken_model_name",
@ -1824,7 +1953,9 @@
"data": {
"id": "OpenAIEmbeddings-KNVHv",
"node": {
"base_classes": ["Embeddings"],
"base_classes": [
"Embeddings"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -1868,7 +1999,9 @@
"display_name": "Embeddings",
"method": "build_embeddings",
"name": "embeddings",
"required_inputs": ["openai_api_key"],
"required_inputs": [
"openai_api_key"
],
"selected": "Embeddings",
"tool_mode": true,
"types": [
@ -1902,7 +2035,9 @@
"display_name": "Client",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "client",
@ -1972,7 +2107,9 @@
"display_name": "Deployment",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "deployment",
@ -2078,7 +2215,9 @@
"display_name": "OpenAI API Base",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_base",
@ -2098,7 +2237,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "openai_api_key",
"password": true,
@ -2115,7 +2256,9 @@
"display_name": "OpenAI API Type",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_type",
@ -2135,7 +2278,9 @@
"display_name": "OpenAI API Version",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_api_version",
@ -2155,7 +2300,9 @@
"display_name": "OpenAI Organization",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_organization",
@ -2175,7 +2322,9 @@
"display_name": "OpenAI Proxy",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "openai_proxy",
@ -2259,7 +2408,9 @@
"display_name": "TikToken Model Name",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"load_from_db": false,
"name": "tiktoken_model_name",
@ -2301,7 +2452,9 @@
"data": {
"id": "File-i8StI",
"node": {
"base_classes": ["Data"],
"base_classes": [
"Data"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -2396,7 +2549,10 @@
"display_name": "Server File Path",
"dynamic": false,
"info": "Data object with a 'file_path' property pointing to server file or a Message object with a path to the file. Supercedes 'Path' but supports same file types.",
"input_types": ["Data", "Message"],
"input_types": [
"Data",
"Message"
],
"list": true,
"name": "file_path",
"placeholder": "",
@ -2637,7 +2793,10 @@
"data": {
"id": "OpenAIModel-VVLPR",
"node": {
"base_classes": ["LanguageModel", "Message"],
"base_classes": [
"LanguageModel",
"Message"
],
"beta": false,
"category": "models",
"conditional_paths": [],
@ -2687,7 +2846,9 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
"required_inputs": ["api_key"],
"required_inputs": [
"api_key"
],
"selected": "LanguageModel",
"tool_mode": true,
"types": [
@ -2706,7 +2867,9 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"load_from_db": true,
"name": "api_key",
"password": true,
@ -2733,7 +2896,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=2, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
"value": "from langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs import BoolInput, DictInput, DropdownInput, IntInput, SecretStrInput, SliderInput, StrInput\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = [\n *LCModelComponent._base_inputs,\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. \"\n \"Defaults to https://api.openai.com/v1. \"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n required=True,\n ),\n SliderInput(\n name=\"temperature\", display_name=\"Temperature\", value=0.1, range_spec=RangeSpec(min=0, max=1, step=0.01)\n ),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n IntInput(\n name=\"max_retries\",\n display_name=\"Max Retries\",\n info=\"The maximum number of retries to make when generating.\",\n advanced=True,\n value=5,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"The timeout for requests to OpenAI completion API.\",\n advanced=True,\n value=700,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = self.json_mode\n seed = self.seed\n max_retries = self.max_retries\n timeout = self.timeout\n\n api_key = SecretStr(openai_api_key).get_secret_value() if openai_api_key else None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n max_retries=max_retries,\n request_timeout=timeout,\n )\n if json_mode:\n output = output.bind(response_format={\"type\": \"json_object\"})\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"Get a message from an OpenAI exception.\n\n Args:\n e (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n try:\n from openai import BadRequestError\n except ImportError:\n return None\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\")\n if message:\n return message\n return None\n"
},
"input_value": {
"_input_type": "MessageInput",
@ -2741,7 +2904,9 @@
"display_name": "Input",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2923,7 +3088,9 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -2952,7 +3119,7 @@
"name": "temperature",
"placeholder": "",
"range_spec": {
"max": 2,
"max": 1,
"min": 0,
"step": 0.01,
"step_type": "float"
@ -3008,7 +3175,10 @@
"data": {
"id": "AstraDB-Qdaes",
"node": {
"base_classes": ["Data", "DataFrame"],
"base_classes": [
"Data",
"DataFrame"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -3048,7 +3218,11 @@
"display_name": "Search Results",
"method": "search_documents",
"name": "search_results",
"required_inputs": ["api_endpoint", "collection_name", "token"],
"required_inputs": [
"api_endpoint",
"collection_name",
"token"
],
"selected": "Data",
"tool_mode": true,
"types": [
@ -3258,7 +3432,10 @@
"dynamic": false,
"info": "Choose an embedding model or use Astra Vectorize.",
"name": "embedding_choice",
"options": ["Embedding Model", "Astra Vectorize"],
"options": [
"Embedding Model",
"Astra Vectorize"
],
"options_metadata": [],
"placeholder": "",
"real_time_refresh": true,
@ -3276,7 +3453,9 @@
"display_name": "Embedding Model",
"dynamic": false,
"info": "Specify the Embedding Model. Not required for Astra Vectorize collections.",
"input_types": ["Embeddings"],
"input_types": [
"Embeddings"
],
"list": false,
"list_add_label": "Add More",
"name": "embedding_model",
@ -3331,7 +3510,9 @@
"display_name": "Ingest Data",
"dynamic": false,
"info": "",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": false,
"list_add_label": "Add More",
"name": "ingest_data",
@ -3388,7 +3569,9 @@
"display_name": "Search Query",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -3487,7 +3670,10 @@
"data": {
"id": "AstraDB-sPWXd",
"node": {
"base_classes": ["Data", "DataFrame"],
"base_classes": [
"Data",
"DataFrame"
],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@ -3527,7 +3713,11 @@
"display_name": "Search Results",
"method": "search_documents",
"name": "search_results",
"required_inputs": ["api_endpoint", "collection_name", "token"],
"required_inputs": [
"api_endpoint",
"collection_name",
"token"
],
"selected": "Data",
"tool_mode": true,
"types": [
@ -3737,7 +3927,10 @@
"dynamic": false,
"info": "Choose an embedding model or use Astra Vectorize.",
"name": "embedding_choice",
"options": ["Embedding Model", "Astra Vectorize"],
"options": [
"Embedding Model",
"Astra Vectorize"
],
"options_metadata": [],
"placeholder": "",
"real_time_refresh": true,
@ -3755,7 +3948,9 @@
"display_name": "Embedding Model",
"dynamic": false,
"info": "Specify the Embedding Model. Not required for Astra Vectorize collections.",
"input_types": ["Embeddings"],
"input_types": [
"Embeddings"
],
"list": false,
"list_add_label": "Add More",
"name": "embedding_model",
@ -3810,7 +4005,9 @@
"display_name": "Ingest Data",
"dynamic": false,
"info": "",
"input_types": ["Data"],
"input_types": [
"Data"
],
"list": false,
"list_add_label": "Add More",
"name": "ingest_data",
@ -3867,7 +4064,9 @@
"display_name": "Search Query",
"dynamic": false,
"info": "",
"input_types": ["Message"],
"input_types": [
"Message"
],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@ -3975,5 +4174,10 @@
"is_component": false,
"last_tested_version": "1.1.2",
"name": "Vector Store RAG",
"tags": ["openai", "astradb", "rag", "q-a"]
}
"tags": [
"openai",
"astradb",
"rag",
"q-a"
]
}