[Docs] Add ruff linting to .ipynb files (#645)

This commit is contained in:
William FH
2024-06-11 18:02:49 -07:00
committed by GitHub
parent 854bf2c295
commit 4eab1739da
67 changed files with 741 additions and 850 deletions
+10 -8
View File
@@ -60,9 +60,10 @@
"source": [
"### LLMs\n",
"import os\n",
"os.environ['OPENAI_API_KEY'] = <your-api-key>\n",
"os.environ['COHERE_API_KEY'] = <your-api-key>\n",
"os.environ['TAVILY_API_KEY'] = <your-api-key>"
"\n",
"os.environ[\"OPENAI_API_KEY\"] = \"<your-api-key>\"\n",
"os.environ[\"COHERE_API_KEY\"] = \"<your-api-key>\"\n",
"os.environ[\"TAVILY_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -83,9 +84,9 @@
"outputs": [],
"source": [
"### Tracing (optional)\n",
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -475,9 +476,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -659,7 +661,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",
@@ -68,7 +68,8 @@
"source": [
"### LLMs\n",
"import os\n",
"os.environ['COHERE_API_KEY'] = <your-api-key>"
"\n",
"os.environ[\"COHERE_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -83,7 +84,7 @@
"# ### Tracing (optional)\n",
"# os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"# os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"# os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"# os.environ['LANGCHAIN_API_KEY'] ='<your-api-key>'"
]
},
{
@@ -108,9 +109,9 @@
"### Build Index\n",
"\n",
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
"from langchain_cohere import CohereEmbeddings\n",
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_cohere import CohereEmbeddings\n",
"\n",
"# Set embeddings\n",
"embd = CohereEmbeddings()\n",
@@ -187,11 +188,10 @@
],
"source": [
"### Router\n",
"from typing import Literal\n",
"\n",
"from langchain_cohere import ChatCohere\n",
"from langchain_core.prompts import ChatPromptTemplate\n",
"from langchain_core.pydantic_v1 import BaseModel, Field\n",
"from langchain_cohere import ChatCohere\n",
"\n",
"\n",
"# Data model\n",
@@ -329,11 +329,8 @@
"source": [
"### Generate\n",
"\n",
"from langchain import hub\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"import langchain\n",
"from langchain_core.messages import HumanMessage\n",
"\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"\n",
"# Preamble\n",
"preamble = \"\"\"You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.\"\"\"\n",
@@ -341,15 +338,18 @@
"# LLM\n",
"llm = ChatCohere(model_name=\"command-r\", temperature=0).bind(preamble=preamble)\n",
"\n",
"\n",
"# Prompt\n",
"prompt = lambda x: ChatPromptTemplate.from_messages(\n",
" [\n",
" HumanMessage(\n",
" f\"Question: {x['question']} \\nAnswer: \",\n",
" additional_kwargs={\"documents\": x[\"documents\"]},\n",
" )\n",
" ]\n",
")\n",
"def prompt(x):\n",
" return ChatPromptTemplate.from_messages(\n",
" [\n",
" HumanMessage(\n",
" f\"Question: {x['question']} \\nAnswer: \",\n",
" additional_kwargs={\"documents\": x[\"documents\"]},\n",
" )\n",
" ]\n",
" )\n",
"\n",
"\n",
"# Chain\n",
"rag_chain = prompt | llm | StrOutputParser()\n",
@@ -376,11 +376,7 @@
"source": [
"### LLM fallback\n",
"\n",
"from langchain import hub\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"import langchain\n",
"from langchain_core.messages import HumanMessage\n",
"\n",
"\n",
"# Preamble\n",
"preamble = \"\"\"You are an assistant for question-answering tasks. Answer the question based upon your knowledge. Use three sentences maximum and keep the answer concise.\"\"\"\n",
@@ -388,10 +384,13 @@
"# LLM\n",
"llm = ChatCohere(model_name=\"command-r\", temperature=0).bind(preamble=preamble)\n",
"\n",
"\n",
"# Prompt\n",
"prompt = lambda x: ChatPromptTemplate.from_messages(\n",
" [HumanMessage(f\"Question: {x['question']} \\nAnswer: \")]\n",
")\n",
"def prompt(x):\n",
" return ChatPromptTemplate.from_messages(\n",
" [HumanMessage(f\"Question: {x['question']} \\nAnswer: \")]\n",
" )\n",
"\n",
"\n",
"# Chain\n",
"llm_chain = prompt | llm | StrOutputParser()\n",
@@ -535,7 +534,7 @@
"outputs": [],
"source": [
"### Search\n",
"# os.environ['TAVILY_API_KEY'] = <your-api-key>\n",
"# os.environ['TAVILY_API_KEY'] ='<your-api-key>'\n",
"\n",
"from langchain_community.tools.tavily_search import TavilySearchResults\n",
"\n",
@@ -565,9 +564,10 @@
},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"|\n",
@@ -764,7 +764,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",
@@ -45,7 +45,8 @@
"metadata": {},
"outputs": [],
"source": [
"! pip install -U langchain-nomic langchain_community tiktoken langchainhub chromadb langchain langgraph tavily-python"
"%capture --no-stderr\n",
"%pip install -U langchain-nomic langchain_community tiktoken langchainhub chromadb langchain langgraph tavily-python"
]
},
{
@@ -100,9 +101,11 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"import os\n",
"\n",
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -122,8 +125,8 @@
"source": [
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_community.embeddings import GPT4AllEmbeddings\n",
"from langchain_community.vectorstores import Chroma\n",
"\n",
"urls = [\n",
" \"https://lilianweng.github.io/posts/2023-06-23-agent/\",\n",
@@ -439,9 +442,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -620,7 +624,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",
+9 -11
View File
@@ -32,8 +32,8 @@
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import getpass\n",
"import os\n",
"\n",
"\n",
"def _set_env(key: str):\n",
@@ -116,11 +116,7 @@
" \"Search and return information about Lilian Weng blog posts on LLM agents, prompt engineering, and adversarial attacks on LLMs.\",\n",
")\n",
"\n",
"tools = [retriever_tool]\n",
"\n",
"from langgraph.prebuilt import ToolExecutor\n",
"\n",
"tool_executor = ToolExecutor(tools)"
"tools = [retriever_tool]"
]
},
{
@@ -149,6 +145,7 @@
"from typing import Annotated, Sequence, TypedDict\n",
"\n",
"from langchain_core.messages import BaseMessage\n",
"\n",
"from langgraph.graph.message import add_messages\n",
"\n",
"\n",
@@ -204,11 +201,12 @@
"\n",
"from langchain import hub\n",
"from langchain_core.messages import BaseMessage, HumanMessage\n",
"from langchain_core.pydantic_v1 import BaseModel, Field\n",
"from langchain_openai import ChatOpenAI\n",
"from langgraph.prebuilt import tools_condition\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"from langchain_core.prompts import PromptTemplate\n",
"from langchain_core.pydantic_v1 import BaseModel, Field\n",
"from langchain_openai import ChatOpenAI\n",
"\n",
"from langgraph.prebuilt import tools_condition\n",
"\n",
"### Edges\n",
"\n",
@@ -451,7 +449,7 @@
"\n",
"try:\n",
" display(Image(graph.get_graph(xray=True).draw_mermaid_png()))\n",
"except:\n",
"except Exception:\n",
" # This requires some extra dependencies and is optional\n",
" pass"
]
@@ -529,7 +527,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.2"
"version": "3.12.2"
}
},
"nbformat": 4,
+11 -9
View File
@@ -67,7 +67,8 @@
"outputs": [],
"source": [
"import os\n",
"os.environ['OPENAI_API_KEY'] = <your-api-key>"
"\n",
"os.environ[\"OPENAI_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -87,7 +88,7 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['TAVILY_API_KEY'] = <your-api-key>"
"os.environ[\"TAVILY_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -107,9 +108,9 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -182,9 +183,9 @@
"source": [
"### Retrieval Grader\n",
"\n",
"from langchain_openai import ChatOpenAI\n",
"from langchain_core.prompts import ChatPromptTemplate\n",
"from langchain_core.pydantic_v1 import BaseModel, Field\n",
"from langchain_openai import ChatOpenAI\n",
"\n",
"\n",
"# Data model\n",
@@ -339,9 +340,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -499,9 +501,9 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" web_search = state[\"web_search\"]\n",
" filtered_documents = state[\"documents\"]\n",
" state[\"documents\"]\n",
"\n",
" if web_search == \"Yes\":\n",
" # All documents have been filtered check_relevance\n",
+14 -12
View File
@@ -99,7 +99,7 @@
"outputs": [],
"source": [
"# If using Mistral API\n",
"mistral_api_key = <your-api-key>"
"mistral_api_key = \"<your-api-key>\""
]
},
{
@@ -120,7 +120,8 @@
"outputs": [],
"source": [
"import os\n",
"os.environ['TAVILY_API_KEY'] = <your-api-key>"
"\n",
"os.environ[\"TAVILY_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -140,9 +141,9 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -183,10 +184,10 @@
"metadata": {},
"outputs": [],
"source": [
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_community.embeddings import GPT4AllEmbeddings\n",
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.embeddings import GPT4AllEmbeddings\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_mistralai import MistralAIEmbeddings\n",
"\n",
"# Load\n",
@@ -243,8 +244,8 @@
"\n",
"from langchain.prompts import PromptTemplate\n",
"from langchain_community.chat_models import ChatOllama\n",
"from langchain_mistralai.chat_models import ChatMistralAI\n",
"from langchain_core.output_parsers import JsonOutputParser\n",
"from langchain_mistralai.chat_models import ChatMistralAI\n",
"\n",
"# LLM\n",
"if run_local == \"Yes\":\n",
@@ -398,9 +399,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -558,9 +560,9 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" web_search = state[\"web_search\"]\n",
" filtered_documents = state[\"documents\"]\n",
" state[\"documents\"]\n",
"\n",
" if web_search == \"Yes\":\n",
" # All documents have been filtered check_relevance\n",
@@ -98,8 +98,8 @@
"### Index\n",
"\n",
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_community.embeddings import GPT4AllEmbeddings\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
"\n",
"urls = [\n",
@@ -186,7 +186,6 @@
"source": [
"### Generate\n",
"\n",
"from langchain import hub\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"from langchain_core.prompts import PromptTemplate\n",
"\n",
@@ -349,7 +348,6 @@
"outputs": [],
"source": [
"### Search\n",
"\n",
"from langchain_community.tools.tavily_search import TavilySearchResults\n",
"\n",
"web_search_tool = TavilySearchResults(k=3)"
@@ -370,9 +368,13 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from pprint import pprint\n",
"from typing import List\n",
"\n",
"from langchain_core.documents import Document\n",
"from typing_extensions import TypedDict\n",
"\n",
"from langgraph.graph import END, StateGraph\n",
"\n",
"### State\n",
"\n",
@@ -538,9 +540,9 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" web_search = state[\"web_search\"]\n",
" filtered_documents = state[\"documents\"]\n",
" state[\"documents\"]\n",
"\n",
" if web_search == \"Yes\":\n",
" # All documents have been filtered check_relevance\n",
@@ -597,8 +599,6 @@
" return \"not supported\"\n",
"\n",
"\n",
"from langgraph.graph import END, StateGraph\n",
"\n",
"workflow = StateGraph(GraphState)\n",
"\n",
"# Define the nodes\n",
@@ -703,7 +703,6 @@
"app = workflow.compile()\n",
"\n",
"# Test\n",
"from pprint import pprint\n",
"\n",
"inputs = {\"question\": \"What are the types of agent memory?\"}\n",
"for output in app.stream(inputs):\n",
@@ -751,12 +750,10 @@
}
],
"source": [
"# Compile\n",
"app = workflow.compile()\n",
"\n",
"# Test\n",
"from pprint import pprint\n",
"\n",
"# Compile\n",
"app = workflow.compile()\n",
"inputs = {\"question\": \"Who are the Bears expected to draft first in the NFL draft?\"}\n",
"for output in app.stream(inputs):\n",
" for key, value in output.items():\n",
+8 -9
View File
@@ -79,7 +79,8 @@
"outputs": [],
"source": [
"import os\n",
"os.environ['OPENAI_API_KEY'] = <your-api-key>"
"\n",
"os.environ[\"OPENAI_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -99,9 +100,9 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -182,7 +183,6 @@
"source": [
"### Retrieval Grader\n",
"\n",
"from typing import Literal\n",
"\n",
"from langchain_core.prompts import ChatPromptTemplate\n",
"from langchain_core.pydantic_v1 import BaseModel, Field\n",
@@ -416,9 +416,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -444,8 +445,6 @@
"source": [
"### Nodes\n",
"\n",
"from langchain.schema import Document\n",
"\n",
"\n",
"def retrieve(state):\n",
" \"\"\"\n",
@@ -550,7 +549,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",
+11 -9
View File
@@ -60,7 +60,8 @@
"metadata": {},
"outputs": [],
"source": [
"! pip install -U langchain-nomic langchain_community tiktoken langchainhub chromadb langchain langgraph"
"%capture --no-stderr\n",
"%pip install -U langchain-nomic langchain_community tiktoken langchainhub chromadb langchain langgraph"
]
},
{
@@ -115,9 +116,11 @@
"metadata": {},
"outputs": [],
"source": [
"os.environ['LANGCHAIN_TRACING_V2'] = 'true'\n",
"os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'\n",
"os.environ['LANGCHAIN_API_KEY'] = <your-api-key>"
"import os\n",
"\n",
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
"os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://api.smith.langchain.com\"\n",
"os.environ[\"LANGCHAIN_API_KEY\"] = \"<your-api-key>\""
]
},
{
@@ -139,8 +142,8 @@
"source": [
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
"from langchain_community.document_loaders import WebBaseLoader\n",
"from langchain_community.vectorstores import Chroma\n",
"from langchain_community.embeddings import GPT4AllEmbeddings\n",
"from langchain_community.vectorstores import Chroma\n",
"\n",
"urls = [\n",
" \"https://lilianweng.github.io/posts/2023-06-23-agent/\",\n",
@@ -389,9 +392,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -417,8 +421,6 @@
"source": [
"### Nodes\n",
"\n",
"from langchain.schema import Document\n",
"\n",
"\n",
"def retrieve(state):\n",
" \"\"\"\n",
@@ -523,7 +525,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",
@@ -231,7 +231,6 @@
"\n",
"from langchain import hub\n",
"from langchain_core.output_parsers import StrOutputParser\n",
"from langchain_core.runnables import RunnablePassthrough\n",
"\n",
"# Prompt\n",
"prompt = hub.pull(\"rlm/rag-prompt\")\n",
@@ -404,9 +403,10 @@
"metadata": {},
"outputs": [],
"source": [
"from typing_extensions import TypedDict\n",
"from typing import List\n",
"\n",
"from typing_extensions import TypedDict\n",
"\n",
"\n",
"class GraphState(TypedDict):\n",
" \"\"\"\n",
@@ -543,7 +543,7 @@
" \"\"\"\n",
"\n",
" print(\"---ASSESS GRADED DOCUMENTS---\")\n",
" question = state[\"question\"]\n",
" state[\"question\"]\n",
" filtered_documents = state[\"documents\"]\n",
"\n",
" if not filtered_documents:\n",