Update documentQA

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-06-21 12:40:56 -03:00
commit 40ad4b63bb

View file

@ -2,10 +2,11 @@
"data": {
"edges": [
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "File",
"id": "File-BzIs2",
"id": "File-z24tW",
"name": "data",
"output_types": [
"Data"
@ -13,7 +14,7 @@
},
"targetHandle": {
"fieldName": "Document",
"id": "Prompt-9DNZG",
"id": "Prompt-ws12t",
"inputTypes": [
"Document",
"Message",
@ -23,17 +24,18 @@
"type": "str"
}
},
"id": "reactflow__edge-File-BzIs2{œdataTypeœ:œFileœ,œidœ:œFile-BzIs2œ,œnameœ:œdataœ,œoutput_typesœ:[œDataœ]}-Prompt-9DNZG{œfieldNameœ:œDocumentœ,œidœ:œPrompt-9DNZGœ,œinputTypesœ:[œDocumentœ,œMessageœ,œDataœ,œTextœ],œtypeœ:œstrœ}",
"source": "File-BzIs2",
"sourceHandle": "{œdataTypeœ: œFileœ, œidœ: œFile-BzIs2œ, œnameœ: œdataœ, œoutput_typesœ: [œDataœ]}",
"target": "Prompt-9DNZG",
"targetHandle": "{œfieldNameœ: œDocumentœ, œidœ: œPrompt-9DNZGœ, œinputTypesœ: [œDocumentœ, œMessageœ, œDataœ, œTextœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-File-z24tW{œdataTypeœ:œFileœ,œidœ:œFile-z24tWœ,œnameœ:œdataœ,œoutput_typesœ:[œDataœ]}-Prompt-ws12t{œfieldNameœ:œDocumentœ,œidœ:œPrompt-ws12tœ,œinputTypesœ:[œDocumentœ,œMessageœ,œDataœ,œTextœ],œtypeœ:œstrœ}",
"source": "File-z24tW",
"sourceHandle": "{œdataTypeœ: œFileœ, œidœ: œFile-z24tWœ, œnameœ: œdataœ, œoutput_typesœ: [œDataœ]}",
"target": "Prompt-ws12t",
"targetHandle": "{œfieldNameœ: œDocumentœ, œidœ: œPrompt-ws12tœ, œinputTypesœ: [œDocumentœ, œMessageœ, œDataœ, œTextœ], œtypeœ: œstrœ}"
},
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "ChatInput",
"id": "ChatInput-27Usy",
"id": "ChatInput-YMjNE",
"name": "message",
"output_types": [
"Message"
@ -41,7 +43,7 @@
},
"targetHandle": {
"fieldName": "Question",
"id": "Prompt-9DNZG",
"id": "Prompt-ws12t",
"inputTypes": [
"Document",
"Message",
@ -51,17 +53,18 @@
"type": "str"
}
},
"id": "reactflow__edge-ChatInput-27Usy{œdataTypeœ:œChatInputœ,œidœ:œChatInput-27Usyœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-Prompt-9DNZG{œfieldNameœ:œQuestionœ,œidœ:œPrompt-9DNZGœ,œinputTypesœ:[œDocumentœ,œMessageœ,œDataœ,œTextœ],œtypeœ:œstrœ}",
"source": "ChatInput-27Usy",
"sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-27Usyœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
"target": "Prompt-9DNZG",
"targetHandle": "{œfieldNameœ: œQuestionœ, œidœ: œPrompt-9DNZGœ, œinputTypesœ: [œDocumentœ, œMessageœ, œDataœ, œTextœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-ChatInput-YMjNE{œdataTypeœ:œChatInputœ,œidœ:œChatInput-YMjNEœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-Prompt-ws12t{œfieldNameœ:œQuestionœ,œidœ:œPrompt-ws12tœ,œinputTypesœ:[œDocumentœ,œMessageœ,œDataœ,œTextœ],œtypeœ:œstrœ}",
"source": "ChatInput-YMjNE",
"sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-YMjNEœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
"target": "Prompt-ws12t",
"targetHandle": "{œfieldNameœ: œQuestionœ, œidœ: œPrompt-ws12tœ, œinputTypesœ: [œDocumentœ, œMessageœ, œDataœ, œTextœ], œtypeœ: œstrœ}"
},
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "Prompt",
"id": "Prompt-9DNZG",
"id": "Prompt-ws12t",
"name": "prompt",
"output_types": [
"Message"
@ -69,24 +72,25 @@
},
"targetHandle": {
"fieldName": "input_value",
"id": "OpenAIModel-8b6nG",
"id": "OpenAIModel-AdQdh",
"inputTypes": [
"Message"
],
"type": "str"
}
},
"id": "reactflow__edge-Prompt-9DNZG{œdataTypeœ:œPromptœ,œidœ:œPrompt-9DNZGœ,œnameœ:œpromptœ,œoutput_typesœ:[œPromptœ]}-OpenAIModel-8b6nG{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-8b6nGœ,œinputTypesœ:[œTextœ,œDataœ,œPromptœ],œtypeœ:œstrœ}",
"source": "Prompt-9DNZG",
"sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-9DNZGœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-8b6nG",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œOpenAIModel-8b6nGœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-Prompt-ws12t{œdataTypeœ:œPromptœ,œidœ:œPrompt-ws12tœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-OpenAIModel-AdQdh{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-AdQdhœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
"source": "Prompt-ws12t",
"sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-ws12tœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
"target": "OpenAIModel-AdQdh",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œOpenAIModel-AdQdhœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
},
{
"className": "",
"data": {
"sourceHandle": {
"dataType": "OpenAIModel",
"id": "OpenAIModel-8b6nG",
"id": "OpenAIModel-AdQdh",
"name": "text_output",
"output_types": [
"Message"
@ -94,7 +98,7 @@
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-y4SCS",
"id": "ChatOutput-bSlkp",
"inputTypes": [
"Message",
"str"
@ -102,11 +106,11 @@
"type": "str"
}
},
"id": "reactflow__edge-OpenAIModel-8b6nG{œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-8b6nGœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œTextœ]}-ChatOutput-y4SCS{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-y4SCSœ,œinputTypesœ:[œTextœ,œMessageœ],œtypeœ:œstrœ}",
"source": "OpenAIModel-8b6nG",
"sourceHandle": "{œdataTypeœ: œOpenAIModelœ, œidœ: œOpenAIModel-8b6nGœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
"target": "ChatOutput-y4SCS",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-y4SCSœ, œinputTypesœ: [œMessageœ, œstrœ], œtypeœ: œstrœ}"
"id": "reactflow__edge-OpenAIModel-AdQdh{œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-AdQdhœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-bSlkp{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-bSlkpœ,œinputTypesœ:[œMessageœ,œstrœ],œtypeœ:œstrœ}",
"source": "OpenAIModel-AdQdh",
"sourceHandle": "{œdataTypeœ: œOpenAIModelœ, œidœ: œOpenAIModel-AdQdhœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
"target": "ChatOutput-bSlkp",
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-bSlkpœ, œinputTypesœ: [œMessageœ, œstrœ], œtypeœ: œstrœ}"
}
],
"nodes": [
@ -114,7 +118,7 @@
"data": {
"description": "Create a prompt template with dynamic variables.",
"display_name": "Prompt",
"id": "Prompt-9DNZG",
"id": "Prompt-ws12t",
"node": {
"base_classes": [
"object",
@ -255,8 +259,8 @@
"type": "Prompt"
},
"dragging": false,
"height": 573,
"id": "Prompt-9DNZG",
"height": 525,
"id": "Prompt-ws12t",
"position": {
"x": 585.7906101139403,
"y": 117.52115876762832
@ -271,7 +275,7 @@
},
{
"data": {
"id": "ChatInput-27Usy",
"id": "ChatInput-YMjNE",
"node": {
"base_classes": [
"str",
@ -349,7 +353,7 @@
"show": true,
"title_case": false,
"type": "str",
"value": ""
"value": "what is this?"
},
"sender": {
"advanced": true,
@ -428,8 +432,8 @@
"type": "ChatInput"
},
"dragging": false,
"height": 301,
"id": "ChatInput-27Usy",
"height": 309,
"id": "ChatInput-YMjNE",
"position": {
"x": -38.501719080514135,
"y": 379.81180230285355
@ -444,7 +448,7 @@
},
{
"data": {
"id": "ChatOutput-y4SCS",
"id": "ChatOutput-bSlkp",
"node": {
"base_classes": [
"str",
@ -602,7 +606,7 @@
},
"dragging": false,
"height": 309,
"id": "ChatOutput-y4SCS",
"id": "ChatOutput-bSlkp",
"position": {
"x": 1733.3012915204283,
"y": 168.76098809939327
@ -619,7 +623,7 @@
"data": {
"description": "A generic file loader.",
"display_name": "File",
"id": "File-BzIs2",
"id": "File-z24tW",
"node": {
"base_classes": [
"Data"
@ -696,7 +700,7 @@
"ts",
"tsx"
],
"file_path": "cd558bbb-10b7-4c22-a7ad-3739f26b4bd7/Climate Prediction Updated.json",
"file_path": "e56e0529-7225-4f6c-9144-5ad0806f5fed/Math Router.json",
"info": "Supported file types: txt, md, mdx, csv, json, yaml, yml, xml, html, htm, pdf, docx, py, sh, sql, js, ts, tsx",
"list": false,
"name": "path",
@ -727,13 +731,13 @@
},
"dragging": false,
"height": 301,
"id": "File-BzIs2",
"id": "File-z24tW",
"position": {
"x": -44.56084223565597,
"x": -37.064128418041946,
"y": 39.0475820447775
},
"positionAbsolute": {
"x": -44.56084223565597,
"x": -37.064128418041946,
"y": 39.0475820447775
},
"selected": true,
@ -742,11 +746,14 @@
},
{
"data": {
"id": "OpenAIModel-8b6nG",
"description": "Generates text using OpenAI LLMs.",
"display_name": "OpenAI",
"edited": false,
"id": "OpenAIModel-AdQdh",
"node": {
"base_classes": [
"BaseLanguageModel",
"Text"
"LanguageModel",
"Message"
],
"beta": false,
"conditional_paths": [],
@ -754,16 +761,19 @@
"description": "Generates text using OpenAI LLMs.",
"display_name": "OpenAI",
"documentation": "",
"edited": true,
"field_order": [
"input_value",
"max_tokens",
"model_kwargs",
"output_schema",
"model_name",
"openai_api_base",
"openai_api_key",
"temperature",
"stream",
"system_message"
"system_message",
"seed"
],
"frozen": false,
"icon": "OpenAI",
@ -811,7 +821,7 @@
"show": true,
"title_case": false,
"type": "code",
"value": "import operator\nfrom functools import reduce\n\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.constants import STREAM_INFO_TEXT\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n MessageInput,\n SecretStrInput,\n StrInput,\n)\nfrom langflow.schema.message import Message\nfrom langflow.template import Output\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n\n inputs = [\n MessageInput(name=\"input_value\", display_name=\"Input\"),\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 ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n DictInput(\n name=\"output_schema\",\n is_list=True,\n display_name=\"Schema\",\n advanced=True,\n info=\"The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.\",\n ),\n DropdownInput(\n name=\"model_name\", display_name=\"Model Name\", advanced=False, options=MODEL_NAMES, value=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. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"openai_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 ),\n FloatInput(name=\"temperature\", display_name=\"Temperature\", value=0.1),\n BoolInput(name=\"stream\", display_name=\"Stream\", info=STREAM_INFO_TEXT, advanced=True),\n StrInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"System message to pass to the model.\",\n advanced=True,\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 ]\n outputs = [\n Output(display_name=\"Text\", name=\"text_output\", method=\"text_response\"),\n Output(display_name=\"Language Model\", name=\"model_output\", method=\"build_model\"),\n ]\n\n def text_response(self) -> Message:\n input_value = self.input_value\n stream = self.stream\n system_message = self.system_message\n output = self.build_model()\n result = self.get_chat_result(output, stream, input_value, system_message)\n self.status = result\n return result\n\n def build_model(self) -> LanguageModel:\n # self.output_schea is a list of dictionaries\n # let's convert it to a dictionary\n output_schema_dict: dict[str, str] = reduce(operator.ior, self.output_schema or {}, {})\n openai_api_key = self.openai_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\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = bool(output_schema_dict)\n seed = self.seed\n if openai_api_key:\n api_key = SecretStr(openai_api_key)\n else:\n api_key = None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs or {},\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature or 0.1,\n seed=seed,\n )\n if json_mode:\n output = output.with_structured_output(schema=output_schema_dict, method=\"json_mode\")\n\n return output\n"
"value": "import operator\nfrom functools import reduce\n\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.constants import STREAM_INFO_TEXT\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n MessageInput,\n SecretStrInput,\n StrInput,\n)\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n\n inputs = [\n MessageInput(name=\"input_value\", display_name=\"Input\"),\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 ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n DictInput(\n name=\"output_schema\",\n is_list=True,\n display_name=\"Schema\",\n advanced=True,\n info=\"The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.\",\n ),\n DropdownInput(\n name=\"model_name\", display_name=\"Model Name\", advanced=False, options=MODEL_NAMES, value=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. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"openai_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 ),\n FloatInput(name=\"temperature\", display_name=\"Temperature\", value=0.1),\n BoolInput(name=\"stream\", display_name=\"Stream\", info=STREAM_INFO_TEXT, advanced=True),\n StrInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"System message to pass to the model.\",\n advanced=True,\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 ]\n\n def build_model(self) -> LanguageModel:\n # self.output_schea is a list of dictionaries\n # let's convert it to a dictionary\n output_schema_dict: dict[str, str] = reduce(operator.ior, self.output_schema or {}, {})\n openai_api_key = self.openai_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 = bool(output_schema_dict)\n seed = self.seed\n model_kwargs[\"seed\"] = seed\n\n if openai_api_key:\n api_key = SecretStr(openai_api_key)\n else:\n api_key = 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 or 0.1,\n )\n if json_mode:\n output = output.with_structured_output(schema=output_schema_dict, method=\"json_mode\") # type: ignore\n\n return output\n\n def _get_exception_message(self, e: Exception):\n \"\"\"\n Get a message from an OpenAI exception.\n\n Args:\n exception (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n\n try:\n from openai import BadRequestError\n except ImportError:\n return\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\") # type: ignore\n if message:\n return message\n return\n"
},
"input_value": {
"advanced": false,
@ -842,7 +852,8 @@
"required": false,
"show": true,
"title_case": false,
"type": "int"
"type": "int",
"value": ""
},
"model_kwargs": {
"advanced": true,
@ -855,7 +866,8 @@
"required": false,
"show": true,
"title_case": false,
"type": "dict"
"type": "dict",
"value": {}
},
"model_name": {
"advanced": false,
@ -906,7 +918,35 @@
"show": true,
"title_case": false,
"type": "str",
"value": "OPENAI_API_KEY"
"value": ""
},
"output_schema": {
"advanced": true,
"display_name": "Schema",
"dynamic": false,
"info": "The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.",
"list": true,
"name": "output_schema",
"placeholder": "",
"required": false,
"show": true,
"title_case": false,
"type": "dict",
"value": {}
},
"seed": {
"advanced": true,
"display_name": "Seed",
"dynamic": false,
"info": "The seed controls the reproducibility of the job.",
"list": false,
"name": "seed",
"placeholder": "",
"required": false,
"show": true,
"title_case": false,
"type": "int",
"value": 1
},
"stream": {
"advanced": true,
@ -957,7 +997,7 @@
},
"dragging": false,
"height": 623,
"id": "OpenAIModel-8b6nG",
"id": "OpenAIModel-AdQdh",
"position": {
"x": 1141.7303854551026,
"y": -51.19892217231286
@ -972,14 +1012,15 @@
}
],
"viewport": {
"x": 198.5801484914205,
"y": 244.8736279905512,
"x": 91.58014849142035,
"y": 287.8736279905512,
"zoom": 0.5335671198494703
}
},
"description": "This flow integrates PDF reading with a language model to answer document-specific questions. Ideal for small-scale texts, it facilitates direct queries with immediate insights.",
"id": "cd558bbb-10b7-4c22-a7ad-3739f26b4bd7",
"endpoint_name": null,
"id": "e56e0529-7225-4f6c-9144-5ad0806f5fed",
"is_component": false,
"last_tested_version": "1.0.0a52",
"last_tested_version": "1.0.0a61",
"name": "Document QA"
}