app: description: HTTP Tutorial icon: "\U0001F393" icon_background: '#FFE4E8' mode: advanced-chat name: HTTP kind: app version: 0.1.0 workflow: environment_variables: [] features: file_upload: image: enabled: true number_limits: 3 transfer_methods: - local_file - remote_url opening_statement: "Hello Lyson Ober! \U0001F44B\u2728 I'm your exa.ai assistant,\ \ ready to dive into the sea of curiosity with you! \U0001F30A\U0001F9E0 What\ \ fascinating topic has caught your interest today?" retriever_resource: enabled: true sensitive_word_avoidance: config: inputs_config: enabled: true preset_response: "Oops! \U0001F648 Let's keep our chat Imperial-X focused.\ \ Care to rephrase? \U0001F31F" outputs_config: enabled: false preset_response: "Whoops! \U0001F916 Got a bit carried away there. Let me\ \ try again with Imperial-X info only! \U0001F504" enabled: true type: openai_moderation speech_to_text: enabled: true suggested_questions: - "\U0001F984 Why unicorns don't make great pets?" - "\U0001F33F How plants gossip about us when we're not looking?" - "\U0001F570\uFE0F What would happen if we could high-five our past selves?" suggested_questions_after_answer: enabled: true text_to_speech: enabled: true language: en-US voice: echo graph: edges: - data: isInIteration: false sourceType: code targetType: http-request id: 1721468180646-source-1721463453690-target selected: false source: '1721468180646' sourceHandle: source target: '1721463453690' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: code targetType: code id: 1721469428830-source-1721468180646-target selected: false source: '1721469428830' sourceHandle: source target: '1721468180646' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: http-request targetType: code id: 1721463453690-source-1721474172600-target selected: false source: '1721463453690' sourceHandle: source target: '1721474172600' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: code targetType: iteration id: 1721474172600-source-1721475912946-target selected: false source: '1721474172600' sourceHandle: source target: '1721475912946' targetHandle: target type: custom zIndex: 0 - data: isInIteration: true iteration_id: '1721475912946' sourceType: template-transform targetType: answer id: 1721476736499-source-1721477350072-target selected: false source: '1721476736499' sourceHandle: source target: '1721477350072' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false sourceType: llm targetType: code id: 1721478635205-source-1721469428830-target selected: false source: '1721478635205' sourceHandle: source target: '1721469428830' targetHandle: target type: custom zIndex: 0 - data: isInIteration: true iteration_id: '1721475912946' sourceType: llm targetType: template-transform id: 1721475919640-source-1721476736499-target selected: false source: '1721475919640' sourceHandle: source target: '1721476736499' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: true iteration_id: '1721475912946' sourceType: code targetType: http-request id: 1721476938220-source-1721481486245-target selected: false source: '1721476938220' sourceHandle: source target: '1721481486245' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: true iteration_id: '1721475912946' sourceType: http-request targetType: llm id: 1721481486245-source-1721475919640-target selected: false source: '1721481486245' sourceHandle: source target: '1721475919640' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false sourceType: start targetType: llm id: 1720358802844-source-1721478635205-target selected: false source: '1720358802844' sourceHandle: source target: '1721478635205' targetHandle: target type: custom zIndex: 0 nodes: - data: desc: '' selected: false title: Start type: start variables: [] height: 54 id: '1720358802844' position: x: 1390.2361218981657 y: 431.6291063691216 positionAbsolute: x: 1390.2361218981657 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: authorization: config: api_key: e2e08539-f2be-4c4c-b907-0c87f6a3d2de header: x-api-key type: custom type: api-key body: data: '{{#1721468180646.result#}}' type: json desc: '' headers: 'accept:application/json content-type:application/json' method: post params: '' selected: false timeout: max_connect_timeout: 0 max_read_timeout: 0 max_write_timeout: 0 title: Exa.ai - 1 type: http-request url: https://api.exa.ai/search variables: [] height: 90 id: '1721463453690' position: x: 2644.4386633308663 y: 431.6291063691216 positionAbsolute: x: 2644.4386633308663 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: code: "import json\n\ndef main(arg1: str, startPublishedDate: str, endPublishedDate:\ \ str) -> dict:\n json_data = {\n \"query\": arg1,\n \"\ type\": \"neural\",\n \"numResults\": 6, \n \"includeDomains\"\ : [\"dify.ai\"],\n \"startPublishedDate\": startPublishedDate,\n\ \ \"endPublishedDate\":endPublishedDate,\n \"contents\": {\n\ \ \"text\": True,\n \"highlights\": {\n \ \ \"numSentences\": 7,\n \"highlightsPerUrl\": 3\n \ \ }\n }\n }\n \n return {\n \"result\"\ : json.dumps(json_data)\n }" code_language: python3 desc: '' outputs: result: children: null type: string selected: false title: Code Node Before HTTP - json.dumps type: code variables: - value_selector: - sys - query variable: arg1 - value_selector: - '1721469428830' - startPublishedDate variable: startPublishedDate - value_selector: - '1721469428830' - endPublishedDate variable: endPublishedDate height: 54 id: '1721468180646' position: x: 2343.141167474779 y: 431.6291063691216 positionAbsolute: x: 2343.141167474779 y: 431.6291063691216 selected: true sourcePosition: right targetPosition: left type: custom width: 244 - data: code: "from datetime import datetime, timedelta\n\ndef main(arg1: str) ->\ \ dict:\n end_date = datetime.now()\n start_date = end_date - timedelta(days=60)\n\ \ \n end_formatted = end_date.strftime(\"%Y-%m-%dT%H:%M:%S.%fZ\")\n\ \ start_formatted = start_date.strftime(\"%Y-%m-%dT%H:%M:%S.%fZ\")\n\ \ \n return {\n \"startPublishedDate\": start_formatted,\n\ \ \"endPublishedDate\": end_formatted\n }" code_language: python3 desc: '' outputs: endPublishedDate: children: null type: string startPublishedDate: children: null type: string selected: false title: How to obtain the date using code nodes type: code variables: - value_selector: - sys - query variable: arg1 height: 54 id: '1721469428830' position: x: 2035.5228742372458 y: 431.6291063691216 positionAbsolute: x: 2035.5228742372458 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: code: "import json\n\ndef main(input_data: str) -> dict:\n # Parse the\ \ input JSON\n data = json.loads(input_data)\n \n # Extract the\ \ results array and convert each item to a JSON string\n items = [json.dumps(item)\ \ for item in data.get('results', [])]\n \n # Calculate the number\ \ of items\n item_number = len(items)\n \n # Return a dictionary\ \ containing 'items' key and 'item_number' key\n return {\n \"\ items\": items,\n \"item_number\": item_number\n }" code_language: python3 desc: '' outputs: item_number: children: null type: number items: children: null type: array[string] selected: false title: Query Result Extraction type: code variables: - value_selector: - '1721463453690' - body variable: input_data height: 54 id: '1721474172600' position: x: 2961.151076331323 y: 431.6291063691216 positionAbsolute: x: 2961.151076331323 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' height: 445 iterator_selector: - '1721474172600' - items output_selector: - '1721475919640' - text output_type: array[string] selected: false startNodeType: code start_node_id: '1721476938220' title: Iteration type: iteration width: 1608 height: 445 id: '1721475912946' position: x: 3295.422416703354 y: 431.6291063691216 positionAbsolute: x: 3295.422416703354 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 1608 zIndex: 1 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: true isIterationStart: false iteration_id: '1721475912946' model: completion_params: temperature: 0 mode: chat name: moonshot-v1-32k provider: moonshot prompt_template: - id: d9e3e20c-f4d7-4bbd-887d-86bc2a2042d2 role: system text: 'Summarize briefly to create an abstract, without unnecessary explanations, but without omitting any key points. Do not add any new content; strictly adhere to the original intent. Additionally, there is no need to include a URL at the end. ' - id: 5a274485-5e69-400f-b433-26cc75e2e932 role: user text: 'Input: {{#1721481486245.body#}}' selected: false title: Summary type: llm variables: [] vision: enabled: false extent: parent height: 98 id: '1721475919640' parentId: '1721475912946' position: x: 717 y: 85 positionAbsolute: x: 4012.422416703354 y: 516.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1001 - data: desc: 'For more methods, please refer to Jinja2, where the author (me) is also exploring initially. In summary, this Template node can be used to standardize the output' isInIteration: true iteration_id: '1721475912946' selected: false template: 'NO.{{ index+1 }} {{ markdown_url }} Summary: {{ summary }} \n\n {{ index+1 }}/{{ item_number }} \n\n---\n\n' title: Template Cleanup type: template-transform variables: - value_selector: - '1721475919640' - text variable: summary - value_selector: - '1721476938220' - markdown_url variable: markdown_url - value_selector: - '1721475912946' - index variable: index - value_selector: - '1721474172600' - item_number variable: item_number - value_selector: - '1721475912946' - item variable: item extent: parent height: 156 id: '1721476736499' parentId: '1721475912946' position: x: 1016.5783553275437 y: 85 positionAbsolute: x: 4312.000772030898 y: 516.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: code: "import json\n\ndef main(item_json: str) -> dict:\n \"\"\"\n Extract\ \ title and url from a JSON string and convert them to a Markdown format\ \ link\n \n :param item_json: JSON string containing title and url\n\ \ :return: Dictionary containing the Markdown format link\n \"\"\"\ \n # Parse the JSON string\n item = json.loads(item_json)\n \n\ \ # Extract title and url\n title = item.get('title', 'No Title')\n\ \ url = item.get('url', '#')\n \n # Create Markdown format link\n\ \ markdown_url = f\"[{title}]({url})\"\n \n # Return a dictionary\ \ containing markdown_url, title, and url\n return {\n \"markdown_url\"\ : markdown_url,\n \"title\": title,\n \"url\": url\n }" code_language: python3 desc: '' isInIteration: true isIterationStart: true iteration_id: '1721475912946' outputs: markdown_url: children: null type: string title: children: null type: string url: children: null type: string selected: false title: Markdown URL type: code variables: - value_selector: - '1721475912946' - item variable: item_json extent: parent height: 54 id: '1721476938220' parentId: '1721475912946' position: x: 117 y: 82.11983360482381 positionAbsolute: x: 3412.422416703354 y: 513.7489399739454 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: answer: '{{#1721476736499.output#}}' desc: '' isInIteration: true iteration_id: '1721475912946' selected: false title: Reply type: answer variables: [] extent: parent height: 108 id: '1721477350072' parentId: '1721475912946' position: x: 1315.9188403580679 y: 85 positionAbsolute: x: 4611.341257061422 y: 516.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: authorization: config: api_key: e2e08539-f2be-4c4c-b907-0c87f6a3d2de header: x-api-key type: custom type: api-key body: data: "{\n \"ids\": [\"{{#1721476938220.url#}}\"],\n \"highlights\"\ : {\n \"numSentences\": 6,\n \"highlightsPerUrl\": 3\n }\n\ }" type: json desc: '' headers: 'accept:application/json content-type:application/json' isInIteration: true iteration_id: '1721475912946' method: post params: '' selected: false timeout: max_connect_timeout: 0 max_read_timeout: 0 max_write_timeout: 0 title: Exa.ai Get Contents & Highlights type: http-request url: https://api.exa.ai/contents variables: [] extent: parent height: 90 id: '1721481486245' parentId: '1721475912946' position: x: 402.9362013734258 y: 85 positionAbsolute: x: 3698.3586180767797 y: 516.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' memory: query_prompt_template: '{{#sys.query#}}' role_prefix: assistant: '' user: '' window: enabled: false size: 50 model: completion_params: temperature: 0.5 mode: chat name: claude-3-5-sonnet-20240620 provider: anthropic prompt_template: - id: 874cd053-787d-4fa2-862e-6b9c42a4ecf1 role: system text: Please rephrase the user's question to make it more specific without altering the original intent. selected: false title: Query Enhance / Rewrite type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '1721478635205' position: x: 1732.3746750250646 y: 431.6291063691216 positionAbsolute: x: 1732.3746750250646 y: 431.6291063691216 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: author: Lyson Ober desc: '' height: 253 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4CC Step 1\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"repeat the user's question with LLM, or expand the user's query to make\ \ it clearer and more specific, or address the issue of unclear and logically\ \ disordered questions from the user. In short, how to write the Prompt\ \ Rewrite here depends on your specific scenario and intent, requiring you\ \ to slow down and think it through clearly.\",\"type\":\"text\",\"version\"\ :1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0}],\"direction\":\"ltr\",\"format\":\"\"\ ,\"indent\":0,\"type\":\"root\",\"version\":1}}" theme: blue title: '' type: '' width: 245 height: 253 id: '1721560991231' position: x: 1732.3746750250646 y: 566.817339793541 positionAbsolute: x: 1732.3746750250646 y: 566.817339793541 selected: false sourcePosition: right targetPosition: left type: custom-note width: 245 - data: author: Lyson Ober desc: '' height: 250 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4CC Step 2\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"I usually use this method to get the time and date. In our video example,\ \ the next step is to call the exa.ai search engine. One of its features\ \ is the ability to limit the date range of search results, so you can modify\ \ it to any other API-required date format by following my code template\ \ and asking the AI.\",\"type\":\"text\",\"version\":1}],\"direction\":\"\ ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"\ textFormat\":0}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\"\ :\"root\",\"version\":1}}" theme: blue title: '' type: '' width: 240 height: 250 id: '1721561124553' position: x: 2035.5228742372458 y: 512.9994902909687 positionAbsolute: x: 2035.5228742372458 y: 512.9994902909687 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Lyson Ober desc: '' height: 561 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4CC Step 3\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"\U0001F914 For those frustrated by JSON errors in Dify's HTTP nodes,\ \ I strongly advise against mixing strings and variables within the HTTP\ \ node.\",\"type\":\"text\",\"version\":1},{\"type\":\"linebreak\",\"version\"\ :1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"\U0001F4A1 Instead, use a code node beforehand to directly package and\ \ output the entire JSON format, then place this output variable into the\ \ HTTP node's JSON text box.\",\"type\":\"text\",\"version\":1},{\"type\"\ :\"linebreak\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\"\ ,\"style\":\"\",\"text\":\"\U0001F4DD This is especially useful when passing\ \ LLM-summarized content, which may contain line breaks and other elements\ \ that can lead to various unexpected JSON errors. By using my method, you're\ \ less likely to encounter such issues.\",\"type\":\"text\",\"version\"\ :1},{\"type\":\"linebreak\",\"version\":1},{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F446 Check the code here,\ \ copy this example and so you can ask AI to help you further.\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0},{\"children\":[{\"detail\":0,\"format\"\ :0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The reason is that various\ \ line breaks can easily lead to HTTP errors. Unless your variables are\ \ very simple (such as in a subsequent HTTP node where only a Link needs\ \ to be passed)\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\"\ ,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\"\ :0},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"\ type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\":[],\"\ direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0}],\"direction\":\"ltr\",\"format\":\"\"\ ,\"indent\":0,\"type\":\"root\",\"version\":1}}" theme: blue title: '' type: '' width: 240 height: 561 id: '1721561206071' position: x: 2343.141167474779 y: 512.9994902909687 positionAbsolute: x: 2343.141167474779 y: 512.9994902909687 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Lyson Ober desc: '' height: 542 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4CC Step 4\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"Now, simply configure the HEADERS, PARAMS, and API-KEY of the HTTP node\ \ according to the API Documents instructions for the product you want to\ \ connect to the Dify Workflow/Chatflow.\",\"type\":\"text\",\"version\"\ :1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0},{\"children\":[],\"direction\":\"ltr\"\ ,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\"\ :0},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\"\ :\"\",\"text\":\"For BODY, we all modify it at the front of this BODY-JSON\ \ code node. Emphasizing again, this approach avoids various strange and\ \ inconsistent errors in JSON format escaping.\",\"type\":\"text\",\"version\"\ :1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0},{\"children\":[],\"direction\":null,\"\ format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\"\ :0},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\"\ :\"\",\"text\":\"Now, simply configure the HEADERS, PARAMS, and API-KEY\ \ of the HTTP node according to the API Documents instructions for the product\ \ you want to connect to the Dify Workflow/Chatflow.\\r\\rFor BODY, we all\ \ modify it at the front of this BODY-JSON code node. Emphasizing again,\ \ this approach avoids various strange and inconsistent errors in JSON format\ \ escaping.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"\ format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\"\ :0}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\"\ ,\"version\":1}}" theme: blue title: '' type: '' width: 246 height: 542 id: '1721561267385' position: x: 2644.4386633308663 y: 543.4838684743379 positionAbsolute: x: 2644.4386633308663 y: 543.4838684743379 selected: false sourcePosition: right targetPosition: left type: custom-note width: 246 - data: author: Lyson Ober desc: '' height: 156 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4DD Not\",\"type\":\"\ text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"The other steps involve string cleaning and templated output, with various\ \ methods available; this is just one example \U0001F449\U0001F449\U0001F449\ \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\ \",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0}],\"\ direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\"\ :1}}" theme: blue title: '' type: '' width: 255 height: 156 id: '1721561919410' position: x: 2953.858797425279 y: 255.30573909167185 positionAbsolute: x: 2953.858797425279 y: 255.30573909167185 selected: false sourcePosition: right targetPosition: left type: custom-note width: 255 - data: author: Lyson Ober desc: '' height: 182 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"\U0001F4CC Step 5\",\"type\"\ :\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\"\ :0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0},{\"children\"\ :[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\"\ :\"Here is the full text reading. You can use JinaReader, but the topic\ \ of this lesson is HTTP nodes, so I will continue to use the API documentation\ \ from exa.ai to do this.\",\"type\":\"text\",\"version\":1}],\"direction\"\ :\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\"\ :1,\"textFormat\":0}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"\ type\":\"root\",\"version\":1}}" theme: blue title: '' type: '' width: 240 height: 182 id: '1721561927168' position: x: 3701.215051308979 y: 631.7934760105285 positionAbsolute: x: 3701.215051308979 y: 631.7934760105285 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Lyson Ober desc: '' height: 236 selected: false showAuthor: true text: "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"\ mode\":\"normal\",\"style\":\"\",\"text\":\"Here, we are obtaining the full\ \ text of each link. The topic of this lesson is HTTP, so I am using the\ \ API documentation of exa.ai as an example. However, in reality, you can\ \ directly use JinaReader (Dify already has this tool, and you can use it\ \ directly by filling in the API-Key).\",\"type\":\"text\",\"version\":1}],\"\ direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\"\ ,\"version\":1,\"textFormat\":0},{\"children\":[],\"direction\":null,\"\ format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\"\ :0},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\"\ :\"\",\"text\":\"\U0001F447\",\"type\":\"text\",\"version\":1}],\"direction\"\ :\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\"\ :1,\"textFormat\":0}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"\ type\":\"root\",\"version\":1}}" theme: blue title: '' type: '' width: 240 height: 236 id: '1721562032845' position: x: 3701.215051308979 y: 180.85107470100235 positionAbsolute: x: 3701.215051308979 y: 180.85107470100235 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 viewport: x: -865.6242184336479 y: 48.030281533306635 zoom: 0.5342519008311633