From 229d74d4bd39befa3723fa2841e23d40007a9772 Mon Sep 17 00:00:00 2001 From: Federico Aguzzi <62149513+f-aguzzi@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:46:42 +0200 Subject: [PATCH] test(AbstractGraph): add AbstractGraph tests --- requirements-dev.lock | 149 --------------------------- requirements.lock | 154 ---------------------------- requirements.txt | 14 +-- tests/graphs/abstract_graph_test.py | 31 ++++++ 4 files changed, 34 insertions(+), 314 deletions(-) create mode 100644 tests/graphs/abstract_graph_test.py diff --git a/requirements-dev.lock b/requirements-dev.lock index 64af8ee8..04ca69d9 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -15,8 +15,6 @@ aiohappyeyeballs==2.3.5 aiohttp==3.10.3 # via langchain # via langchain-community - # via langchain-fireworks - # via langchain-nvidia-ai-endpoints aiosignal==1.3.1 # via aiohttp alabaster==0.7.16 @@ -25,11 +23,7 @@ altair==5.4.0 # via streamlit annotated-types==0.7.0 # via pydantic -anthropic==0.33.0 - # via langchain-anthropic anyio==4.4.0 - # via anthropic - # via groq # via httpx # via openai # via starlette @@ -55,8 +49,6 @@ boto3==1.34.158 botocore==1.34.158 # via boto3 # via s3transfer -browserbase==0.3.0 - # via scrapegraphai burr==0.22.1 # via scrapegraphai cachetools==5.4.0 @@ -78,17 +70,11 @@ cycler==0.12.1 # via matplotlib dataclasses-json==0.6.7 # via langchain-community -defusedxml==0.7.1 - # via langchain-anthropic dill==0.3.8 # via multiprocess # via pylint distro==1.9.0 - # via anthropic - # via groq # via openai -docstring-parser==0.16 - # via google-cloud-aiplatform docutils==0.19 # via sphinx exceptiongroup==1.2.2 @@ -102,10 +88,6 @@ fastapi-pagination==0.12.26 # via burr filelock==3.15.4 # via huggingface-hub - # via torch - # via transformers -fireworks-ai==0.15.0 - # via langchain-fireworks fonttools==4.53.1 # via matplotlib free-proxy==1.1.1 @@ -115,7 +97,6 @@ frozenlist==1.4.1 # via aiosignal fsspec==2024.6.1 # via huggingface-hub - # via torch furo==2024.5.6 # via scrapegraphai gitdb==4.0.11 @@ -129,11 +110,6 @@ google-ai-generativelanguage==0.6.6 google-api-core==2.19.1 # via google-ai-generativelanguage # via google-api-python-client - # via google-cloud-aiplatform - # via google-cloud-bigquery - # via google-cloud-core - # via google-cloud-resource-manager - # via google-cloud-storage # via google-generativeai google-api-python-client==2.140.0 # via google-generativeai @@ -142,52 +118,21 @@ google-auth==2.33.0 # via google-api-core # via google-api-python-client # via google-auth-httplib2 - # via google-cloud-aiplatform - # via google-cloud-bigquery - # via google-cloud-core - # via google-cloud-resource-manager - # via google-cloud-storage # via google-generativeai google-auth-httplib2==0.2.0 # via google-api-python-client -google-cloud-aiplatform==1.61.0 - # via langchain-google-vertexai -google-cloud-bigquery==3.25.0 - # via google-cloud-aiplatform -google-cloud-core==2.4.1 - # via google-cloud-bigquery - # via google-cloud-storage -google-cloud-resource-manager==1.12.5 - # via google-cloud-aiplatform -google-cloud-storage==2.18.2 - # via google-cloud-aiplatform - # via langchain-google-vertexai -google-crc32c==1.5.0 - # via google-cloud-storage - # via google-resumable-media google-generativeai==0.7.2 # via langchain-google-genai -google-resumable-media==2.7.2 - # via google-cloud-bigquery - # via google-cloud-storage googleapis-common-protos==1.63.2 # via google-api-core - # via grpc-google-iam-v1 # via grpcio-status graphviz==0.20.3 # via burr - # via scrapegraphai greenlet==3.0.3 # via playwright # via sqlalchemy -groq==0.9.0 - # via langchain-groq -grpc-google-iam-v1==0.13.1 - # via google-cloud-resource-manager grpcio==1.65.4 # via google-api-core - # via googleapis-common-protos - # via grpc-google-iam-v1 # via grpcio-status grpcio-status==1.62.3 # via google-api-core @@ -202,20 +147,12 @@ httplib2==0.22.0 # via google-api-python-client # via google-auth-httplib2 httpx==0.27.0 - # via anthropic - # via browserbase - # via fireworks-ai - # via groq # via langchain-mistralai # via openai httpx-sse==0.4.0 - # via fireworks-ai # via langchain-mistralai huggingface-hub==0.24.5 - # via langchain-huggingface - # via sentence-transformers # via tokenizers - # via transformers idna==3.7 # via anyio # via httpx @@ -236,15 +173,11 @@ jinja2==3.1.4 # via burr # via pydeck # via sphinx - # via torch jiter==0.5.0 - # via anthropic # via openai jmespath==1.0.1 # via boto3 # via botocore -joblib==1.4.2 - # via scikit-learn jsonpatch==1.33 # via langchain-core jsonpointer==3.0.0 @@ -258,40 +191,22 @@ kiwisolver==1.4.5 langchain==0.2.14 # via langchain-community # via scrapegraphai -langchain-anthropic==0.1.22 - # via scrapegraphai langchain-aws==0.1.16 # via scrapegraphai langchain-community==0.2.11 # via scrapegraphai langchain-core==0.2.33 # via langchain - # via langchain-anthropic # via langchain-aws # via langchain-community - # via langchain-fireworks # via langchain-google-genai - # via langchain-google-vertexai - # via langchain-groq - # via langchain-huggingface # via langchain-mistralai - # via langchain-nvidia-ai-endpoints # via langchain-openai # via langchain-text-splitters -langchain-fireworks==0.1.7 - # via scrapegraphai langchain-google-genai==1.0.8 # via scrapegraphai -langchain-google-vertexai==1.0.8 - # via scrapegraphai -langchain-groq==0.1.9 - # via scrapegraphai -langchain-huggingface==0.0.3 - # via scrapegraphai langchain-mistralai==0.1.12 # via scrapegraphai -langchain-nvidia-ai-endpoints==0.2.1 - # via scrapegraphai langchain-openai==0.1.22 # via scrapegraphai langchain-text-splitters==0.2.2 @@ -320,8 +235,6 @@ minify-html==0.15.0 # via scrapegraphai mpire==2.10.2 # via semchunk -mpmath==1.3.0 - # via sympy multidict==6.0.5 # via aiohttp # via yarl @@ -331,8 +244,6 @@ mypy-extensions==1.0.0 # via typing-inspect narwhals==1.3.0 # via altair -networkx==3.2.1 - # via torch numpy==1.26.4 # via contourpy # via faiss-cpu @@ -343,24 +254,16 @@ numpy==1.26.4 # via pandas # via pyarrow # via pydeck - # via scikit-learn - # via scipy - # via sentence-transformers # via sf-hamilton - # via shapely # via streamlit - # via transformers openai==1.40.3 # via burr - # via langchain-fireworks # via langchain-openai orjson==3.10.7 # via langsmith packaging==24.1 # via altair # via faiss-cpu - # via google-cloud-aiplatform - # via google-cloud-bigquery # via huggingface-hub # via langchain-core # via marshmallow @@ -368,21 +271,16 @@ packaging==24.1 # via pytest # via sphinx # via streamlit - # via transformers pandas==2.2.2 # via scrapegraphai # via sf-hamilton # via streamlit pillow==10.4.0 - # via fireworks-ai - # via langchain-nvidia-ai-endpoints # via matplotlib - # via sentence-transformers # via streamlit platformdirs==4.2.2 # via pylint playwright==1.45.1 - # via browserbase # via scrapegraphai # via undetected-playwright pluggy==1.5.0 @@ -390,16 +288,11 @@ pluggy==1.5.0 proto-plus==1.24.0 # via google-ai-generativelanguage # via google-api-core - # via google-cloud-aiplatform - # via google-cloud-resource-manager protobuf==4.25.4 # via google-ai-generativelanguage # via google-api-core - # via google-cloud-aiplatform - # via google-cloud-resource-manager # via google-generativeai # via googleapis-common-protos - # via grpc-google-iam-v1 # via grpcio-status # via proto-plus # via streamlit @@ -411,15 +304,10 @@ pyasn1==0.6.0 pyasn1-modules==0.4.0 # via google-auth pydantic==2.8.2 - # via anthropic - # via browserbase # via burr # via fastapi # via fastapi-pagination - # via fireworks-ai - # via google-cloud-aiplatform # via google-generativeai - # via groq # via langchain # via langchain-core # via langsmith @@ -444,7 +332,6 @@ pytest==8.0.0 pytest-mock==3.14.0 python-dateutil==2.9.0.post0 # via botocore - # via google-cloud-bigquery # via matplotlib # via pandas python-dotenv==1.0.1 @@ -456,28 +343,22 @@ pyyaml==6.0.2 # via langchain # via langchain-community # via langchain-core - # via transformers referencing==0.35.1 # via jsonschema # via jsonschema-specifications regex==2024.7.24 # via tiktoken - # via transformers requests==2.32.3 # via burr # via free-proxy # via google-api-core - # via google-cloud-bigquery - # via google-cloud-storage # via huggingface-hub # via langchain # via langchain-community - # via langchain-fireworks # via langsmith # via sphinx # via streamlit # via tiktoken - # via transformers rich==13.7.1 # via streamlit rpds-py==0.20.0 @@ -487,29 +368,16 @@ rsa==4.9 # via google-auth s3transfer==0.10.2 # via boto3 -safetensors==0.4.4 - # via transformers -scikit-learn==1.5.1 - # via sentence-transformers -scipy==1.13.1 - # via scikit-learn - # via sentence-transformers semchunk==2.2.0 # via scrapegraphai -sentence-transformers==3.0.1 - # via langchain-huggingface sf-hamilton==1.73.1 # via burr -shapely==2.0.5 - # via google-cloud-aiplatform six==1.16.0 # via python-dateutil smmap==5.0.1 # via gitdb sniffio==1.3.1 - # via anthropic # via anyio - # via groq # via httpx # via openai snowballstemmer==2.2.0 @@ -541,23 +409,16 @@ starlette==0.37.2 # via fastapi streamlit==1.37.1 # via burr -sympy==1.13.2 - # via torch tenacity==8.5.0 # via langchain # via langchain-community # via langchain-core # via streamlit -threadpoolctl==3.5.0 - # via scikit-learn tiktoken==0.7.0 # via langchain-openai # via scrapegraphai tokenizers==0.19.1 - # via anthropic - # via langchain-huggingface # via langchain-mistralai - # via transformers toml==0.10.2 # via streamlit tomli==2.0.1 @@ -565,8 +426,6 @@ tomli==2.0.1 # via pytest tomlkit==0.13.0 # via pylint -torch==2.2.2 - # via sentence-transformers tornado==6.4.1 # via streamlit tqdm==4.66.5 @@ -576,20 +435,13 @@ tqdm==4.66.5 # via openai # via scrapegraphai # via semchunk - # via sentence-transformers - # via transformers -transformers==4.44.0 - # via langchain-huggingface - # via sentence-transformers typing-extensions==4.12.2 # via altair - # via anthropic # via anyio # via astroid # via fastapi # via fastapi-pagination # via google-generativeai - # via groq # via huggingface-hub # via langchain-core # via openai @@ -601,7 +453,6 @@ typing-extensions==4.12.2 # via sqlalchemy # via starlette # via streamlit - # via torch # via typing-inspect # via uvicorn typing-inspect==0.9.0 diff --git a/requirements.lock b/requirements.lock index 1d80e1bf..f3cb5626 100644 --- a/requirements.lock +++ b/requirements.lock @@ -11,17 +11,11 @@ aiohttp==3.9.5 # via langchain # via langchain-community - # via langchain-fireworks - # via langchain-nvidia-ai-endpoints aiosignal==1.3.1 # via aiohttp annotated-types==0.7.0 # via pydantic -anthropic==0.31.2 - # via langchain-anthropic anyio==4.4.0 - # via anthropic - # via groq # via httpx # via openai async-timeout==4.0.3 @@ -37,8 +31,6 @@ boto3==1.34.146 botocore==1.34.146 # via boto3 # via s3transfer -browserbase==0.3.0 - # via scrapegraphai cachetools==5.4.0 # via google-auth certifi==2024.7.4 @@ -49,26 +41,16 @@ charset-normalizer==3.3.2 # via requests dataclasses-json==0.6.7 # via langchain-community -defusedxml==0.7.1 - # via langchain-anthropic dill==0.3.8 # via multiprocess distro==1.9.0 - # via anthropic - # via groq # via openai -docstring-parser==0.16 - # via google-cloud-aiplatform exceptiongroup==1.2.2 # via anyio faiss-cpu==1.8.0.post1 # via scrapegraphai filelock==3.15.4 # via huggingface-hub - # via torch - # via transformers -fireworks-ai==0.14.0 - # via langchain-fireworks free-proxy==1.1.1 # via scrapegraphai frozenlist==1.4.1 @@ -76,7 +58,6 @@ frozenlist==1.4.1 # via aiosignal fsspec==2024.6.1 # via huggingface-hub - # via torch google==3.0.0 # via scrapegraphai google-ai-generativelanguage==0.6.6 @@ -84,11 +65,6 @@ google-ai-generativelanguage==0.6.6 google-api-core==2.19.1 # via google-ai-generativelanguage # via google-api-python-client - # via google-cloud-aiplatform - # via google-cloud-bigquery - # via google-cloud-core - # via google-cloud-resource-manager - # via google-cloud-storage # via google-generativeai google-api-python-client==2.137.0 # via google-generativeai @@ -97,51 +73,19 @@ google-auth==2.32.0 # via google-api-core # via google-api-python-client # via google-auth-httplib2 - # via google-cloud-aiplatform - # via google-cloud-bigquery - # via google-cloud-core - # via google-cloud-resource-manager - # via google-cloud-storage # via google-generativeai google-auth-httplib2==0.2.0 # via google-api-python-client -google-cloud-aiplatform==1.59.0 - # via langchain-google-vertexai -google-cloud-bigquery==3.25.0 - # via google-cloud-aiplatform -google-cloud-core==2.4.1 - # via google-cloud-bigquery - # via google-cloud-storage -google-cloud-resource-manager==1.12.4 - # via google-cloud-aiplatform -google-cloud-storage==2.18.0 - # via google-cloud-aiplatform - # via langchain-google-vertexai -google-crc32c==1.5.0 - # via google-cloud-storage - # via google-resumable-media google-generativeai==0.7.2 # via langchain-google-genai -google-resumable-media==2.7.1 - # via google-cloud-bigquery - # via google-cloud-storage googleapis-common-protos==1.63.2 # via google-api-core - # via grpc-google-iam-v1 # via grpcio-status -graphviz==0.20.3 - # via scrapegraphai greenlet==3.0.3 # via playwright # via sqlalchemy -groq==0.9.0 - # via langchain-groq -grpc-google-iam-v1==0.13.1 - # via google-cloud-resource-manager grpcio==1.65.1 # via google-api-core - # via googleapis-common-protos - # via grpc-google-iam-v1 # via grpcio-status grpcio-status==1.62.2 # via google-api-core @@ -155,35 +99,22 @@ httplib2==0.22.0 # via google-api-python-client # via google-auth-httplib2 httpx==0.27.0 - # via anthropic - # via browserbase - # via fireworks-ai - # via groq # via langchain-mistralai # via openai httpx-sse==0.4.0 - # via fireworks-ai # via langchain-mistralai huggingface-hub==0.24.1 - # via langchain-huggingface - # via sentence-transformers # via tokenizers - # via transformers idna==3.7 # via anyio # via httpx # via requests # via yarl -jinja2==3.1.4 - # via torch jiter==0.5.0 - # via anthropic # via openai jmespath==1.0.1 # via boto3 # via botocore -joblib==1.4.2 - # via scikit-learn jsonpatch==1.33 # via langchain-core jsonpointer==3.0.0 @@ -191,40 +122,22 @@ jsonpointer==3.0.0 langchain==0.2.14 # via langchain-community # via scrapegraphai -langchain-anthropic==0.1.20 - # via scrapegraphai langchain-aws==0.1.12 # via scrapegraphai langchain-community==0.2.10 # via scrapegraphai langchain-core==0.2.33 # via langchain - # via langchain-anthropic # via langchain-aws # via langchain-community - # via langchain-fireworks # via langchain-google-genai - # via langchain-google-vertexai - # via langchain-groq - # via langchain-huggingface # via langchain-mistralai - # via langchain-nvidia-ai-endpoints # via langchain-openai # via langchain-text-splitters -langchain-fireworks==0.1.5 - # via scrapegraphai langchain-google-genai==1.0.8 # via scrapegraphai -langchain-google-vertexai==1.0.7 - # via scrapegraphai -langchain-groq==0.1.6 - # via scrapegraphai -langchain-huggingface==0.0.3 - # via scrapegraphai langchain-mistralai==0.1.12 # via scrapegraphai -langchain-nvidia-ai-endpoints==0.1.7 - # via scrapegraphai langchain-openai==0.1.22 # via scrapegraphai langchain-text-splitters==0.2.2 @@ -235,16 +148,12 @@ langsmith==0.1.93 # via langchain-core lxml==5.2.2 # via free-proxy -markupsafe==2.1.5 - # via jinja2 marshmallow==3.21.3 # via dataclasses-json minify-html==0.15.0 # via scrapegraphai mpire==2.10.2 # via semchunk -mpmath==1.3.0 - # via sympy multidict==6.0.5 # via aiohttp # via yarl @@ -252,55 +161,34 @@ multiprocess==0.70.16 # via mpire mypy-extensions==1.0.0 # via typing-inspect -networkx==3.2.1 - # via torch numpy==1.26.4 # via faiss-cpu # via langchain # via langchain-aws # via langchain-community # via pandas - # via scikit-learn - # via scipy - # via sentence-transformers - # via shapely - # via transformers openai==1.41.0 - # via langchain-fireworks # via langchain-openai orjson==3.10.6 # via langsmith packaging==24.1 # via faiss-cpu - # via google-cloud-aiplatform - # via google-cloud-bigquery # via huggingface-hub # via langchain-core # via marshmallow - # via transformers pandas==2.2.2 # via scrapegraphai -pillow==10.4.0 - # via fireworks-ai - # via langchain-nvidia-ai-endpoints - # via sentence-transformers playwright==1.45.1 - # via browserbase # via scrapegraphai # via undetected-playwright proto-plus==1.24.0 # via google-ai-generativelanguage # via google-api-core - # via google-cloud-aiplatform - # via google-cloud-resource-manager protobuf==4.25.3 # via google-ai-generativelanguage # via google-api-core - # via google-cloud-aiplatform - # via google-cloud-resource-manager # via google-generativeai # via googleapis-common-protos - # via grpc-google-iam-v1 # via grpcio-status # via proto-plus pyasn1==0.6.0 @@ -309,12 +197,7 @@ pyasn1==0.6.0 pyasn1-modules==0.4.0 # via google-auth pydantic==2.8.2 - # via anthropic - # via browserbase - # via fireworks-ai - # via google-cloud-aiplatform # via google-generativeai - # via groq # via langchain # via langchain-core # via langsmith @@ -329,7 +212,6 @@ pyparsing==3.1.2 # via httplib2 python-dateutil==2.9.0.post0 # via botocore - # via google-cloud-bigquery # via pandas python-dotenv==1.0.1 # via scrapegraphai @@ -340,45 +222,26 @@ pyyaml==6.0.1 # via langchain # via langchain-community # via langchain-core - # via transformers regex==2024.5.15 # via tiktoken - # via transformers requests==2.32.3 # via free-proxy # via google-api-core - # via google-cloud-bigquery - # via google-cloud-storage # via huggingface-hub # via langchain # via langchain-community - # via langchain-fireworks # via langsmith # via tiktoken - # via transformers rsa==4.9 # via google-auth s3transfer==0.10.2 # via boto3 -safetensors==0.4.3 - # via transformers -scikit-learn==1.5.1 - # via sentence-transformers -scipy==1.13.1 - # via scikit-learn - # via sentence-transformers semchunk==2.2.0 # via scrapegraphai -sentence-transformers==3.0.1 - # via langchain-huggingface -shapely==2.0.5 - # via google-cloud-aiplatform six==1.16.0 # via python-dateutil sniffio==1.3.1 - # via anthropic # via anyio - # via groq # via httpx # via openai soupsieve==2.5 @@ -386,24 +249,15 @@ soupsieve==2.5 sqlalchemy==2.0.31 # via langchain # via langchain-community -sympy==1.13.1 - # via torch tenacity==8.5.0 # via langchain # via langchain-community # via langchain-core -threadpoolctl==3.5.0 - # via scikit-learn tiktoken==0.7.0 # via langchain-openai # via scrapegraphai tokenizers==0.19.1 - # via anthropic - # via langchain-huggingface # via langchain-mistralai - # via transformers -torch==2.2.2 - # via sentence-transformers tqdm==4.66.4 # via google-generativeai # via huggingface-hub @@ -411,16 +265,9 @@ tqdm==4.66.4 # via openai # via scrapegraphai # via semchunk - # via sentence-transformers - # via transformers -transformers==4.43.3 - # via langchain-huggingface - # via sentence-transformers typing-extensions==4.12.2 - # via anthropic # via anyio # via google-generativeai - # via groq # via huggingface-hub # via langchain-core # via openai @@ -428,7 +275,6 @@ typing-extensions==4.12.2 # via pydantic-core # via pyee # via sqlalchemy - # via torch # via typing-inspect typing-inspect==0.9.0 # via dataclasses-json diff --git a/requirements.txt b/requirements.txt index 21c2fd3b..80cb0767 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,15 +1,9 @@ langchain>=0.2.14 -langchain-fireworks>=0.1.3 -langchain_community>=0.2.9 langchain-google-genai>=1.0.7 -langchain-google-vertexai>=1.0.7 langchain-openai>=0.1.22 -langchain-groq>=0.1.3 -langchain-aws>=0.1.3 -langchain-anthropic>=0.1.11 langchain-mistralai>=0.1.12 -langchain-huggingface>=0.0.3 -langchain-nvidia-ai-endpoints>=0.1.6 +langchain_community>=0.2.9 +langchain-aws>=0.1.3 html2text>=2024.2.26 faiss-cpu>=1.8.0 beautifulsoup4>=4.12.3 @@ -17,11 +11,9 @@ pandas>=2.2.2 python-dotenv>=1.0.1 tiktoken>=0.7 tqdm>=4.66.4 -graphviz>=0.20.3 minify-html>=0.15.0 free-proxy>=1.1.1 playwright>=1.43.0 -google>=3.0.0 undetected-playwright>=0.3.0 +google>=3.0.0 semchunk>=1.0.1 -browserbase>=0.3.0 diff --git a/tests/graphs/abstract_graph_test.py b/tests/graphs/abstract_graph_test.py new file mode 100644 index 00000000..805a1691 --- /dev/null +++ b/tests/graphs/abstract_graph_test.py @@ -0,0 +1,31 @@ +""" +Tests for the AbstractGraph. +""" +import pytest +from unittest.mock import patch +from scrapegraphai.graphs import AbstractGraph + +class TestAbstractGraph: + @pytest.mark.parametrize("llm_config, expected_model", [ + ({"model": "openai/gpt-3.5-turbo"}, "ChatOpenAI"), + ({"model": "azure_openai/gpt-3.5-turbo"}, "AzureChatOpenAI"), + ({"model": "google_genai/gemini-pro"}, "ChatGoogleGenerativeAI"), + ({"model": "google_vertexai/chat-bison"}, "ChatVertexAI"), + ({"model": "ollama/llama2"}, "Ollama"), + ({"model": "oneapi/text-davinci-003"}, "OneApi"), + ({"model": "nvidia/clara-instant-1-base"}, "ChatNVIDIA"), + ({"model": "deepseek/deepseek-coder-6.7b-instruct"}, "DeepSeek"), + ({"model": "ernie/ernie-bot"}, "ErnieBotChat"), + ]) + def test_create_llm(self, llm_config, expected_model): + graph = AbstractGraph("Test prompt", {"llm": llm_config}) + assert isinstance(graph.llm_model, expected_model) + + def test_create_llm_unknown_provider(self): + with pytest.raises(ValueError): + AbstractGraph("Test prompt", {"llm": {"model": "unknown_provider/model"}}) + + def test_create_llm_error(self): + with patch("your_module.init_chat_model", side_effect=Exception("Test error")): + with pytest.raises(Exception): + AbstractGraph("Test prompt", {"llm": {"model": "openai/gpt-3.5-turbo"}})