From 6752044cb1097eceff907b88b64cc74f2f25da8f Mon Sep 17 00:00:00 2001 From: Jerry Liu <jerryjliu98@gmail.com> Date: Sat, 15 Apr 2023 22:02:08 -0700 Subject: [PATCH] [tentative] revert embedding nb's in docs (#1208) --- .github/workflows/dev_docs.yml | 2 - .gitignore | 1 + .readthedocs.yaml | 29 +- docs/build_notebooks.py | 27 - docs/conf.py | 4 - docs/guides/notebooks.rst | 171 +- .../async/AsyncComposableIndicesSEC.nblink | 1 - .../async/AsyncGPTTreeIndexDemo.nblink | 1 - .../async/AsyncLLMPredictorDemo.nblink | 1 - .../notebooks/async/AsyncQueryDemo.nblink | 1 - .../notebooks/azure_demo/AzureOpenAI.nblink | 1 - .../notebooks/chatbot/Chatbot_SEC.nblink | 1 - .../ChatGPTRetrievalPluginIndexDemo.nblink | 1 - .../ChatGPTRetrievalPluginReaderDemo.nblink | 1 - .../ChatGPT_Retrieval_Plugin_Upload.nblink | 1 - ...ity_Analysis-Decompose-KeywordTable.nblink | 1 - .../ComposableIndices-Prior.nblink | 1 - .../ComposableIndices-Weaviate.nblink | 1 - .../ComposableIndices.nblink | 1 - .../composable_indices/QASummaryGraph.nblink | 1 - .../cost_analysis/TokenPredictor.nblink | 1 - .../data_connectors/ChromaDemo.nblink | 1 - .../data_connectors/DatabaseReaderDemo.nblink | 1 - .../data_connectors/DiscordDemo.nblink | 1 - .../data_connectors/FaissDemo.nblink | 1 - .../GithubRepositoryReaderDemo.nblink | 1 - .../data_connectors/GoogleDocsDemo.nblink | 1 - .../notebooks/data_connectors/MakeDemo.nblink | 1 - .../data_connectors/MboxReaderDemo.nblink | 1 - .../data_connectors/MilvusReaderDemo.nblink | 1 - .../data_connectors/MongoDemo.nblink | 1 - .../data_connectors/NotionDemo.nblink | 1 - .../data_connectors/ObsidianReaderDemo.nblink | 1 - .../data_connectors/PineconeDemo.nblink | 1 - .../data_connectors/QdrantDemo.nblink | 1 - .../data_connectors/SlackDemo.nblink | 1 - .../data_connectors/TwitterDemo.nblink | 1 - .../data_connectors/WeaviateDemo.nblink | 1 - .../data_connectors/WebPageDemo.nblink | 1 - .../notebooks/docstore/DocstoreDemo.nblink | 1 - .../evaluation/GuardrailsDemo.nblink | 1 - .../LangchainOutputParserDemo.nblink | 1 - .../TestNYC-Evaluation-Query.nblink | 1 - .../evaluation/TestNYC-Evaluation.nblink | 1 - .../guides/notebooks/gatsby/TestGatsby.nblink | 1 - .../knowledge_graph/KnowledgeGraphDemo.nblink | 1 - .../langchain_demo/LangchainDemo.nblink | 1 - .../notebooks/multimodal/Multimodal.nblink | 1 - .../NodePostprocessorDemo.nblink | 1 - .../RecencyPostprocessorDemo.nblink | 1 - .../notebooks/optimizer/OptimizerDemo.nblink | 1 - .../DavinciComparison.nblink | 1 - .../paul_graham_essay/GPT4Comparison.nblink | 1 - .../paul_graham_essay/InsertDemo.nblink | 1 - .../KeywordTableComparison.nblink | 1 - .../SentenceSplittingDemo.nblink | 1 - .../paul_graham_essay/TestEssay.nblink | 1 - .../playground/PlaygroundDemo.nblink | 1 - .../HyDEQueryTransformDemo.nblink | 1 - .../struct_indices/PandasIndexDemo.nblink | 1 - .../SQLIndexDemo-Context.nblink | 1 - .../SQLIndexDemo-ManyTables.nblink | 1 - .../struct_indices/SQLIndexDemo.nblink | 1 - .../test_wiki/TestNYC-Benchmark-GPT4.nblink | 1 - .../test_wiki/TestNYC-Tree-GPT4.nblink | 1 - .../guides/notebooks/test_wiki/TestNYC.nblink | 1 - .../test_wiki/TestNYC_Embeddings.nblink | 1 - .../notebooks/test_wiki/TestWikiReader.nblink | 1 - .../AsyncIndexCreationDemo.nblink | 1 - .../vector_indices/ChromaIndexDemo.nblink | 1 - .../vector_indices/FaissIndexDemo.nblink | 1 - .../vector_indices/MilvusIndexDemo.nblink | 1 - .../vector_indices/OpensearchDemo.nblink | 1 - .../PineconeIndexDemo-Hybrid.nblink | 1 - .../vector_indices/PineconeIndexDemo.nblink | 1 - .../vector_indices/QdrantIndexDemo.nblink | 1 - .../SimpleIndexDemo-ChatGPT.nblink | 1 - .../SimpleIndexDemo-multistep.nblink | 1 - .../SimpleIndexDemo-streaming.nblink | 1 - .../vector_indices/SimpleIndexDemo.nblink | 1 - .../WeaviateIndexDemo-Hybrid.nblink | 1 - .../vector_indices/WeaviateIndexDemo.nblink | 1 - docs/index.rst | 12 +- docs/readthedocs-environment.yml | 16 - docs/requirements.txt | 5 + .../async/AsyncComposableIndicesSEC.ipynb | 10 +- examples/chatbot/Chatbot_SEC.ipynb | 10 +- .../ChatGPT_Retrieval_Plugin_Upload.ipynb | 10 +- .../composable_indices/QASummaryGraph.ipynb | 10 +- .../data_connectors/DatabaseReaderDemo.ipynb | 409 +- .../GithubRepositoryReaderDemo.ipynb | 222 +- examples/data_connectors/MboxReaderDemo.ipynb | 208 +- examples/data_connectors/MongoDemo.ipynb | 214 +- examples/data_connectors/NotionDemo.ipynb | 288 +- .../data_connectors/ObsidianReaderDemo.ipynb | 275 +- examples/data_connectors/PineconeDemo.ipynb | 300 +- examples/data_connectors/QdrantDemo.ipynb | 264 +- examples/data_connectors/SlackDemo.ipynb | 204 +- examples/data_connectors/TwitterDemo.ipynb | 216 +- examples/data_connectors/WeaviateDemo.ipynb | 352 +- examples/data_connectors/WebPageDemo.ipynb | 440 +-- examples/docstore/DocstoreDemo.ipynb | 10 +- examples/evaluation/GuardrailsDemo.ipynb | 680 ++-- .../LangchainOutputParserDemo.ipynb | 662 ++-- .../evaluation/TestNYC-Evaluation-Query.ipynb | 8 - examples/evaluation/TestNYC-Evaluation.ipynb | 10 +- examples/gatsby/TestGatsby.ipynb | 374 +- .../knowledge_graph/KnowledgeGraphDemo.ipynb | 10 +- examples/multimodal/Multimodal.ipynb | 1192 +++--- .../RecencyPostprocessorDemo.ipynb | 10 +- examples/optimizer/OptimizerDemo.ipynb | 396 +- .../paul_graham_essay/DavinciComparison.ipynb | 26 +- .../paul_graham_essay/GPT4Comparison.ipynb | 1294 ++++--- examples/paul_graham_essay/InsertDemo.ipynb | 10 +- .../KeywordTableComparison.ipynb | 852 ++--- .../SentenceSplittingDemo.ipynb | 298 +- examples/paul_graham_essay/TestEssay.ipynb | 1322 ++++--- examples/playground/PlaygroundDemo.ipynb | 832 ++-- .../test_wiki/TestNYC-Benchmark-GPT4.ipynb | 3404 ++++++++--------- examples/test_wiki/TestNYC-Tree-GPT4.ipynb | 10 +- examples/test_wiki/TestNYC.ipynb | 366 +- examples/test_wiki/TestNYC_Embeddings.ipynb | 882 ++--- examples/test_wiki/TestWikiReader.ipynb | 582 ++- examples/vector_indices/OpensearchDemo.ipynb | 446 +-- .../SimpleIndexDemo-multistep.ipynb | 4 +- .../SimpleIndexDemo-streaming.ipynb | 278 +- 126 files changed, 8630 insertions(+), 9103 deletions(-) delete mode 100644 docs/build_notebooks.py delete mode 100644 docs/guides/notebooks/async/AsyncComposableIndicesSEC.nblink delete mode 100644 docs/guides/notebooks/async/AsyncGPTTreeIndexDemo.nblink delete mode 100644 docs/guides/notebooks/async/AsyncLLMPredictorDemo.nblink delete mode 100644 docs/guides/notebooks/async/AsyncQueryDemo.nblink delete mode 100644 docs/guides/notebooks/azure_demo/AzureOpenAI.nblink delete mode 100644 docs/guides/notebooks/chatbot/Chatbot_SEC.nblink delete mode 100644 docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.nblink delete mode 100644 docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginReaderDemo.nblink delete mode 100644 docs/guides/notebooks/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.nblink delete mode 100644 docs/guides/notebooks/composable_indices/City_Analysis-Decompose-KeywordTable.nblink delete mode 100644 docs/guides/notebooks/composable_indices/ComposableIndices-Prior.nblink delete mode 100644 docs/guides/notebooks/composable_indices/ComposableIndices-Weaviate.nblink delete mode 100644 docs/guides/notebooks/composable_indices/ComposableIndices.nblink delete mode 100644 docs/guides/notebooks/composable_indices/QASummaryGraph.nblink delete mode 100644 docs/guides/notebooks/cost_analysis/TokenPredictor.nblink delete mode 100644 docs/guides/notebooks/data_connectors/ChromaDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/DatabaseReaderDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/DiscordDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/FaissDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/GithubRepositoryReaderDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/GoogleDocsDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/MakeDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/MboxReaderDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/MilvusReaderDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/MongoDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/NotionDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/ObsidianReaderDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/PineconeDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/QdrantDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/SlackDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/TwitterDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/WeaviateDemo.nblink delete mode 100644 docs/guides/notebooks/data_connectors/WebPageDemo.nblink delete mode 100644 docs/guides/notebooks/docstore/DocstoreDemo.nblink delete mode 100644 docs/guides/notebooks/evaluation/GuardrailsDemo.nblink delete mode 100644 docs/guides/notebooks/evaluation/LangchainOutputParserDemo.nblink delete mode 100644 docs/guides/notebooks/evaluation/TestNYC-Evaluation-Query.nblink delete mode 100644 docs/guides/notebooks/evaluation/TestNYC-Evaluation.nblink delete mode 100644 docs/guides/notebooks/gatsby/TestGatsby.nblink delete mode 100644 docs/guides/notebooks/knowledge_graph/KnowledgeGraphDemo.nblink delete mode 100644 docs/guides/notebooks/langchain_demo/LangchainDemo.nblink delete mode 100644 docs/guides/notebooks/multimodal/Multimodal.nblink delete mode 100644 docs/guides/notebooks/node_postprocessor/NodePostprocessorDemo.nblink delete mode 100644 docs/guides/notebooks/node_postprocessor/RecencyPostprocessorDemo.nblink delete mode 100644 docs/guides/notebooks/optimizer/OptimizerDemo.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/DavinciComparison.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/GPT4Comparison.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/InsertDemo.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/KeywordTableComparison.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/SentenceSplittingDemo.nblink delete mode 100644 docs/guides/notebooks/paul_graham_essay/TestEssay.nblink delete mode 100644 docs/guides/notebooks/playground/PlaygroundDemo.nblink delete mode 100644 docs/guides/notebooks/query_transformations/HyDEQueryTransformDemo.nblink delete mode 100644 docs/guides/notebooks/struct_indices/PandasIndexDemo.nblink delete mode 100644 docs/guides/notebooks/struct_indices/SQLIndexDemo-Context.nblink delete mode 100644 docs/guides/notebooks/struct_indices/SQLIndexDemo-ManyTables.nblink delete mode 100644 docs/guides/notebooks/struct_indices/SQLIndexDemo.nblink delete mode 100644 docs/guides/notebooks/test_wiki/TestNYC-Benchmark-GPT4.nblink delete mode 100644 docs/guides/notebooks/test_wiki/TestNYC-Tree-GPT4.nblink delete mode 100644 docs/guides/notebooks/test_wiki/TestNYC.nblink delete mode 100644 docs/guides/notebooks/test_wiki/TestNYC_Embeddings.nblink delete mode 100644 docs/guides/notebooks/test_wiki/TestWikiReader.nblink delete mode 100644 docs/guides/notebooks/vector_indices/AsyncIndexCreationDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/ChromaIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/FaissIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/MilvusIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/OpensearchDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/PineconeIndexDemo-Hybrid.nblink delete mode 100644 docs/guides/notebooks/vector_indices/PineconeIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/QdrantIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/SimpleIndexDemo-ChatGPT.nblink delete mode 100644 docs/guides/notebooks/vector_indices/SimpleIndexDemo-multistep.nblink delete mode 100644 docs/guides/notebooks/vector_indices/SimpleIndexDemo-streaming.nblink delete mode 100644 docs/guides/notebooks/vector_indices/SimpleIndexDemo.nblink delete mode 100644 docs/guides/notebooks/vector_indices/WeaviateIndexDemo-Hybrid.nblink delete mode 100644 docs/guides/notebooks/vector_indices/WeaviateIndexDemo.nblink delete mode 100644 docs/readthedocs-environment.yml create mode 100644 docs/requirements.txt diff --git a/.github/workflows/dev_docs.yml b/.github/workflows/dev_docs.yml index e1cbb57ad8..f0b2e907ff 100644 --- a/.github/workflows/dev_docs.yml +++ b/.github/workflows/dev_docs.yml @@ -10,11 +10,9 @@ jobs: steps: - uses: actions/checkout@v2 - uses: cpina/github-action-push-to-another-repository@main - - uses: awalsh128/cache-apt-pkgs-action@latest env: API_TOKEN_GITHUB: ${{ secrets.PAT}} with: - packages: pandoc source-directory: './docs' destination-github-username: 'avb-is-me' destination-repository-name: 'gpt_index' diff --git a/.gitignore b/.gitignore index 5641140d3e..1ef6f088da 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,7 @@ target/ # Jupyter Notebook .ipynb_checkpoints +notebooks/ # IPython profile_default/ diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 4f82c41b78..3170150b55 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,19 +1,12 @@ version: 2 - -formats: - - htmlzip - - epub - -search: - ranking: - '*': 1 - getting_started/*: 2 - guides/*: 2 - how_to/*: 2 - use_cases/*: 2 - gallery/*: 2 - reference/*: 1 - index.html*: 2 - -conda: - environment: docs/readthedocs-environment.yml +sphinx: + configuration: docs/conf.py +build: + image: testing +formats: all +python: + version: 3.9 + install: + - requirements: docs/requirements.txt + - method: pip + path: . \ No newline at end of file diff --git a/docs/build_notebooks.py b/docs/build_notebooks.py deleted file mode 100644 index ed7fb0ca33..0000000000 --- a/docs/build_notebooks.py +++ /dev/null @@ -1,27 +0,0 @@ -import json -import os - -source_dir = "../examples/" -dest_dir = "./guides/notebooks/" -relative_path = "../../../../examples" - - -for example_dir in os.listdir(source_dir): - example_dir_path = os.path.join(source_dir, example_dir) - - for nb_name in os.listdir(example_dir_path): - if not nb_name.endswith(".ipynb"): - continue - - # make dest folder in docs - os.makedirs(os.path.join(dest_dir, example_dir), exist_ok=True) - - # build link text - relative_nb_path = os.path.join(relative_path, example_dir, nb_name) - nb_link_text = json.dumps({"path": relative_nb_path}) - - # write nbsphinx-link document - nbsphinx_name = nb_name.replace(".ipynb", ".nblink") - nbsphinx_path = os.path.join(dest_dir, example_dir, nbsphinx_name) - with open(nbsphinx_path, "w") as f: - f.write(nb_link_text) diff --git a/docs/conf.py b/docs/conf.py index f93ff37a73..ce1417956d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -37,8 +37,6 @@ extensions = [ "sphinx_rtd_theme", "sphinx.ext.mathjax", "myst_parser", - "nbsphinx", - "nbsphinx_link", ] myst_heading_anchors = 4 @@ -57,8 +55,6 @@ html_theme = "furo" html_title = "LlamaIndex" html_static_path = ["_static"] -# nbsphinx options -nbsphinx_execute = "never" html_css_files = [ "css/custom.css", ] diff --git a/docs/guides/notebooks.rst b/docs/guides/notebooks.rst index 5e6773fabc..5fae146bab 100644 --- a/docs/guides/notebooks.rst +++ b/docs/guides/notebooks.rst @@ -3,173 +3,4 @@ Notebooks We offer a wide variety of example notebooks. They are referenced throughout the documentation. -All examples can be accessed using the menu links or can be found `directly in the repository`_. - -.. _directly in the repository: https://github.com/jerryjliu/llama_index/tree/main/examples - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Async - - ./notebooks/async/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Azure - - notebooks/azure_demo/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Chatbot - - notebooks/chatbot/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: ChatGPT Plugin - - notebooks/chatgpt_plugin/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Composable Indices - - notebooks/composable_indices/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Cost Analysis - - notebooks/cost_analysis/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Data Connectors - - notebooks/data_connectors/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Docstore - - notebooks/docstore/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Evaluation - - notebooks/evaluation/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Gastby - - notebooks/gatsby/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Knowledge Graph - - notebooks/knowledge_graph/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Langchain Integration - - notebooks/langchain_demo/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Multimodal - - notebooks/multimodal/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Node Post-Processor - - notebooks/node_postprocessor/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Optimizer - - notebooks/optimizer/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Paul Graham Essay - - notebooks/paul_graham_essay/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Playground - - notebooks/playground/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Query Transformations - - notebooks/query_transformations/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Structured Indices - - notebooks/struct_indices/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Wikipedia - - notebooks/test_wiki/* - - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Vector Indices - - notebooks/vector_indices/* +Example notebooks are found `here <https://github.com/jerryjliu/gpt_index/tree/main/examples>`_. \ No newline at end of file diff --git a/docs/guides/notebooks/async/AsyncComposableIndicesSEC.nblink b/docs/guides/notebooks/async/AsyncComposableIndicesSEC.nblink deleted file mode 100644 index 27f243d52e..0000000000 --- a/docs/guides/notebooks/async/AsyncComposableIndicesSEC.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/async/AsyncComposableIndicesSEC.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/async/AsyncGPTTreeIndexDemo.nblink b/docs/guides/notebooks/async/AsyncGPTTreeIndexDemo.nblink deleted file mode 100644 index a553014c27..0000000000 --- a/docs/guides/notebooks/async/AsyncGPTTreeIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/async/AsyncGPTTreeIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/async/AsyncLLMPredictorDemo.nblink b/docs/guides/notebooks/async/AsyncLLMPredictorDemo.nblink deleted file mode 100644 index a61033974b..0000000000 --- a/docs/guides/notebooks/async/AsyncLLMPredictorDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/async/AsyncLLMPredictorDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/async/AsyncQueryDemo.nblink b/docs/guides/notebooks/async/AsyncQueryDemo.nblink deleted file mode 100644 index e5a19ec1c4..0000000000 --- a/docs/guides/notebooks/async/AsyncQueryDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/async/AsyncQueryDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/azure_demo/AzureOpenAI.nblink b/docs/guides/notebooks/azure_demo/AzureOpenAI.nblink deleted file mode 100644 index 318e9bf7fe..0000000000 --- a/docs/guides/notebooks/azure_demo/AzureOpenAI.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/azure_demo/AzureOpenAI.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/chatbot/Chatbot_SEC.nblink b/docs/guides/notebooks/chatbot/Chatbot_SEC.nblink deleted file mode 100644 index 5156a52750..0000000000 --- a/docs/guides/notebooks/chatbot/Chatbot_SEC.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/chatbot/Chatbot_SEC.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.nblink b/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.nblink deleted file mode 100644 index 424014f345..0000000000 --- a/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginReaderDemo.nblink b/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginReaderDemo.nblink deleted file mode 100644 index bcad633aa0..0000000000 --- a/docs/guides/notebooks/chatgpt_plugin/ChatGPTRetrievalPluginReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/chatgpt_plugin/ChatGPTRetrievalPluginReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.nblink b/docs/guides/notebooks/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.nblink deleted file mode 100644 index 526d471354..0000000000 --- a/docs/guides/notebooks/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/composable_indices/City_Analysis-Decompose-KeywordTable.nblink b/docs/guides/notebooks/composable_indices/City_Analysis-Decompose-KeywordTable.nblink deleted file mode 100644 index 96805c4ed9..0000000000 --- a/docs/guides/notebooks/composable_indices/City_Analysis-Decompose-KeywordTable.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/composable_indices/City_Analysis-Decompose-KeywordTable.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/composable_indices/ComposableIndices-Prior.nblink b/docs/guides/notebooks/composable_indices/ComposableIndices-Prior.nblink deleted file mode 100644 index c5dec604c4..0000000000 --- a/docs/guides/notebooks/composable_indices/ComposableIndices-Prior.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/composable_indices/ComposableIndices-Prior.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/composable_indices/ComposableIndices-Weaviate.nblink b/docs/guides/notebooks/composable_indices/ComposableIndices-Weaviate.nblink deleted file mode 100644 index bccfa5cc2d..0000000000 --- a/docs/guides/notebooks/composable_indices/ComposableIndices-Weaviate.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/composable_indices/ComposableIndices-Weaviate.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/composable_indices/ComposableIndices.nblink b/docs/guides/notebooks/composable_indices/ComposableIndices.nblink deleted file mode 100644 index edab307b2b..0000000000 --- a/docs/guides/notebooks/composable_indices/ComposableIndices.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/composable_indices/ComposableIndices.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/composable_indices/QASummaryGraph.nblink b/docs/guides/notebooks/composable_indices/QASummaryGraph.nblink deleted file mode 100644 index 1648510d8d..0000000000 --- a/docs/guides/notebooks/composable_indices/QASummaryGraph.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/composable_indices/QASummaryGraph.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/cost_analysis/TokenPredictor.nblink b/docs/guides/notebooks/cost_analysis/TokenPredictor.nblink deleted file mode 100644 index 915e93b1da..0000000000 --- a/docs/guides/notebooks/cost_analysis/TokenPredictor.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/cost_analysis/TokenPredictor.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/ChromaDemo.nblink b/docs/guides/notebooks/data_connectors/ChromaDemo.nblink deleted file mode 100644 index 6d11f643b1..0000000000 --- a/docs/guides/notebooks/data_connectors/ChromaDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/ChromaDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/DatabaseReaderDemo.nblink b/docs/guides/notebooks/data_connectors/DatabaseReaderDemo.nblink deleted file mode 100644 index 287ef60779..0000000000 --- a/docs/guides/notebooks/data_connectors/DatabaseReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/DatabaseReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/DiscordDemo.nblink b/docs/guides/notebooks/data_connectors/DiscordDemo.nblink deleted file mode 100644 index 1d4952cb11..0000000000 --- a/docs/guides/notebooks/data_connectors/DiscordDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/DiscordDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/FaissDemo.nblink b/docs/guides/notebooks/data_connectors/FaissDemo.nblink deleted file mode 100644 index 1151a573b4..0000000000 --- a/docs/guides/notebooks/data_connectors/FaissDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/FaissDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/GithubRepositoryReaderDemo.nblink b/docs/guides/notebooks/data_connectors/GithubRepositoryReaderDemo.nblink deleted file mode 100644 index 689936b1da..0000000000 --- a/docs/guides/notebooks/data_connectors/GithubRepositoryReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/GithubRepositoryReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/GoogleDocsDemo.nblink b/docs/guides/notebooks/data_connectors/GoogleDocsDemo.nblink deleted file mode 100644 index 60f687b022..0000000000 --- a/docs/guides/notebooks/data_connectors/GoogleDocsDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/GoogleDocsDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/MakeDemo.nblink b/docs/guides/notebooks/data_connectors/MakeDemo.nblink deleted file mode 100644 index edf9cd5a93..0000000000 --- a/docs/guides/notebooks/data_connectors/MakeDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/MakeDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/MboxReaderDemo.nblink b/docs/guides/notebooks/data_connectors/MboxReaderDemo.nblink deleted file mode 100644 index beeb32654d..0000000000 --- a/docs/guides/notebooks/data_connectors/MboxReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/MboxReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/MilvusReaderDemo.nblink b/docs/guides/notebooks/data_connectors/MilvusReaderDemo.nblink deleted file mode 100644 index 38d30b5773..0000000000 --- a/docs/guides/notebooks/data_connectors/MilvusReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/MilvusReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/MongoDemo.nblink b/docs/guides/notebooks/data_connectors/MongoDemo.nblink deleted file mode 100644 index e627ac29f5..0000000000 --- a/docs/guides/notebooks/data_connectors/MongoDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/MongoDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/NotionDemo.nblink b/docs/guides/notebooks/data_connectors/NotionDemo.nblink deleted file mode 100644 index 401c1c4873..0000000000 --- a/docs/guides/notebooks/data_connectors/NotionDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/NotionDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/ObsidianReaderDemo.nblink b/docs/guides/notebooks/data_connectors/ObsidianReaderDemo.nblink deleted file mode 100644 index 6faffd22b6..0000000000 --- a/docs/guides/notebooks/data_connectors/ObsidianReaderDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/ObsidianReaderDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/PineconeDemo.nblink b/docs/guides/notebooks/data_connectors/PineconeDemo.nblink deleted file mode 100644 index a5a213bb9a..0000000000 --- a/docs/guides/notebooks/data_connectors/PineconeDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/PineconeDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/QdrantDemo.nblink b/docs/guides/notebooks/data_connectors/QdrantDemo.nblink deleted file mode 100644 index 900ea79354..0000000000 --- a/docs/guides/notebooks/data_connectors/QdrantDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/QdrantDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/SlackDemo.nblink b/docs/guides/notebooks/data_connectors/SlackDemo.nblink deleted file mode 100644 index 231dbf937f..0000000000 --- a/docs/guides/notebooks/data_connectors/SlackDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/SlackDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/TwitterDemo.nblink b/docs/guides/notebooks/data_connectors/TwitterDemo.nblink deleted file mode 100644 index 0b208c3f90..0000000000 --- a/docs/guides/notebooks/data_connectors/TwitterDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/TwitterDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/WeaviateDemo.nblink b/docs/guides/notebooks/data_connectors/WeaviateDemo.nblink deleted file mode 100644 index ab9e2427f6..0000000000 --- a/docs/guides/notebooks/data_connectors/WeaviateDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/WeaviateDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/data_connectors/WebPageDemo.nblink b/docs/guides/notebooks/data_connectors/WebPageDemo.nblink deleted file mode 100644 index 829d3854eb..0000000000 --- a/docs/guides/notebooks/data_connectors/WebPageDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/data_connectors/WebPageDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/docstore/DocstoreDemo.nblink b/docs/guides/notebooks/docstore/DocstoreDemo.nblink deleted file mode 100644 index 3f379a2f68..0000000000 --- a/docs/guides/notebooks/docstore/DocstoreDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/docstore/DocstoreDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/evaluation/GuardrailsDemo.nblink b/docs/guides/notebooks/evaluation/GuardrailsDemo.nblink deleted file mode 100644 index c67b10a4b4..0000000000 --- a/docs/guides/notebooks/evaluation/GuardrailsDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/evaluation/GuardrailsDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/evaluation/LangchainOutputParserDemo.nblink b/docs/guides/notebooks/evaluation/LangchainOutputParserDemo.nblink deleted file mode 100644 index a7a4722097..0000000000 --- a/docs/guides/notebooks/evaluation/LangchainOutputParserDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/evaluation/LangchainOutputParserDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/evaluation/TestNYC-Evaluation-Query.nblink b/docs/guides/notebooks/evaluation/TestNYC-Evaluation-Query.nblink deleted file mode 100644 index a34d68cdda..0000000000 --- a/docs/guides/notebooks/evaluation/TestNYC-Evaluation-Query.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/evaluation/TestNYC-Evaluation-Query.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/evaluation/TestNYC-Evaluation.nblink b/docs/guides/notebooks/evaluation/TestNYC-Evaluation.nblink deleted file mode 100644 index 977b921aa1..0000000000 --- a/docs/guides/notebooks/evaluation/TestNYC-Evaluation.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/evaluation/TestNYC-Evaluation.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/gatsby/TestGatsby.nblink b/docs/guides/notebooks/gatsby/TestGatsby.nblink deleted file mode 100644 index 45dbaa9346..0000000000 --- a/docs/guides/notebooks/gatsby/TestGatsby.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/gatsby/TestGatsby.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/knowledge_graph/KnowledgeGraphDemo.nblink b/docs/guides/notebooks/knowledge_graph/KnowledgeGraphDemo.nblink deleted file mode 100644 index 44bcf85d64..0000000000 --- a/docs/guides/notebooks/knowledge_graph/KnowledgeGraphDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/knowledge_graph/KnowledgeGraphDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/langchain_demo/LangchainDemo.nblink b/docs/guides/notebooks/langchain_demo/LangchainDemo.nblink deleted file mode 100644 index 251948c9bf..0000000000 --- a/docs/guides/notebooks/langchain_demo/LangchainDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/langchain_demo/LangchainDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/multimodal/Multimodal.nblink b/docs/guides/notebooks/multimodal/Multimodal.nblink deleted file mode 100644 index db221882e8..0000000000 --- a/docs/guides/notebooks/multimodal/Multimodal.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/multimodal/Multimodal.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/node_postprocessor/NodePostprocessorDemo.nblink b/docs/guides/notebooks/node_postprocessor/NodePostprocessorDemo.nblink deleted file mode 100644 index bb855d8169..0000000000 --- a/docs/guides/notebooks/node_postprocessor/NodePostprocessorDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/node_postprocessor/NodePostprocessorDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/node_postprocessor/RecencyPostprocessorDemo.nblink b/docs/guides/notebooks/node_postprocessor/RecencyPostprocessorDemo.nblink deleted file mode 100644 index 5c6292bd25..0000000000 --- a/docs/guides/notebooks/node_postprocessor/RecencyPostprocessorDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/node_postprocessor/RecencyPostprocessorDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/optimizer/OptimizerDemo.nblink b/docs/guides/notebooks/optimizer/OptimizerDemo.nblink deleted file mode 100644 index c9d893cf65..0000000000 --- a/docs/guides/notebooks/optimizer/OptimizerDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/optimizer/OptimizerDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/DavinciComparison.nblink b/docs/guides/notebooks/paul_graham_essay/DavinciComparison.nblink deleted file mode 100644 index 6d585c00e7..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/DavinciComparison.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/DavinciComparison.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/GPT4Comparison.nblink b/docs/guides/notebooks/paul_graham_essay/GPT4Comparison.nblink deleted file mode 100644 index 63768b3834..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/GPT4Comparison.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/GPT4Comparison.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/InsertDemo.nblink b/docs/guides/notebooks/paul_graham_essay/InsertDemo.nblink deleted file mode 100644 index 94c7766261..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/InsertDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/InsertDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/KeywordTableComparison.nblink b/docs/guides/notebooks/paul_graham_essay/KeywordTableComparison.nblink deleted file mode 100644 index df536641f0..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/KeywordTableComparison.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/KeywordTableComparison.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/SentenceSplittingDemo.nblink b/docs/guides/notebooks/paul_graham_essay/SentenceSplittingDemo.nblink deleted file mode 100644 index ad1fb314c2..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/SentenceSplittingDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/SentenceSplittingDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/paul_graham_essay/TestEssay.nblink b/docs/guides/notebooks/paul_graham_essay/TestEssay.nblink deleted file mode 100644 index e2988e067b..0000000000 --- a/docs/guides/notebooks/paul_graham_essay/TestEssay.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/paul_graham_essay/TestEssay.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/playground/PlaygroundDemo.nblink b/docs/guides/notebooks/playground/PlaygroundDemo.nblink deleted file mode 100644 index b19e6d309e..0000000000 --- a/docs/guides/notebooks/playground/PlaygroundDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/playground/PlaygroundDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/query_transformations/HyDEQueryTransformDemo.nblink b/docs/guides/notebooks/query_transformations/HyDEQueryTransformDemo.nblink deleted file mode 100644 index c7e84b9aa4..0000000000 --- a/docs/guides/notebooks/query_transformations/HyDEQueryTransformDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/query_transformations/HyDEQueryTransformDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/struct_indices/PandasIndexDemo.nblink b/docs/guides/notebooks/struct_indices/PandasIndexDemo.nblink deleted file mode 100644 index d6ec3f659c..0000000000 --- a/docs/guides/notebooks/struct_indices/PandasIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/struct_indices/PandasIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/struct_indices/SQLIndexDemo-Context.nblink b/docs/guides/notebooks/struct_indices/SQLIndexDemo-Context.nblink deleted file mode 100644 index 794811f2b9..0000000000 --- a/docs/guides/notebooks/struct_indices/SQLIndexDemo-Context.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/struct_indices/SQLIndexDemo-Context.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/struct_indices/SQLIndexDemo-ManyTables.nblink b/docs/guides/notebooks/struct_indices/SQLIndexDemo-ManyTables.nblink deleted file mode 100644 index 482a9d0f10..0000000000 --- a/docs/guides/notebooks/struct_indices/SQLIndexDemo-ManyTables.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/struct_indices/SQLIndexDemo-ManyTables.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/struct_indices/SQLIndexDemo.nblink b/docs/guides/notebooks/struct_indices/SQLIndexDemo.nblink deleted file mode 100644 index e2651cecc7..0000000000 --- a/docs/guides/notebooks/struct_indices/SQLIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/struct_indices/SQLIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/test_wiki/TestNYC-Benchmark-GPT4.nblink b/docs/guides/notebooks/test_wiki/TestNYC-Benchmark-GPT4.nblink deleted file mode 100644 index e5e3f3eb46..0000000000 --- a/docs/guides/notebooks/test_wiki/TestNYC-Benchmark-GPT4.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/test_wiki/TestNYC-Tree-GPT4.nblink b/docs/guides/notebooks/test_wiki/TestNYC-Tree-GPT4.nblink deleted file mode 100644 index bbad368cb3..0000000000 --- a/docs/guides/notebooks/test_wiki/TestNYC-Tree-GPT4.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/test_wiki/TestNYC-Tree-GPT4.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/test_wiki/TestNYC.nblink b/docs/guides/notebooks/test_wiki/TestNYC.nblink deleted file mode 100644 index 9af98cb135..0000000000 --- a/docs/guides/notebooks/test_wiki/TestNYC.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/test_wiki/TestNYC.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/test_wiki/TestNYC_Embeddings.nblink b/docs/guides/notebooks/test_wiki/TestNYC_Embeddings.nblink deleted file mode 100644 index 9a81277e90..0000000000 --- a/docs/guides/notebooks/test_wiki/TestNYC_Embeddings.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/test_wiki/TestNYC_Embeddings.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/test_wiki/TestWikiReader.nblink b/docs/guides/notebooks/test_wiki/TestWikiReader.nblink deleted file mode 100644 index b263c6cf36..0000000000 --- a/docs/guides/notebooks/test_wiki/TestWikiReader.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/test_wiki/TestWikiReader.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/AsyncIndexCreationDemo.nblink b/docs/guides/notebooks/vector_indices/AsyncIndexCreationDemo.nblink deleted file mode 100644 index 3a68f8d664..0000000000 --- a/docs/guides/notebooks/vector_indices/AsyncIndexCreationDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/AsyncIndexCreationDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/ChromaIndexDemo.nblink b/docs/guides/notebooks/vector_indices/ChromaIndexDemo.nblink deleted file mode 100644 index 15ff10564b..0000000000 --- a/docs/guides/notebooks/vector_indices/ChromaIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/ChromaIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/FaissIndexDemo.nblink b/docs/guides/notebooks/vector_indices/FaissIndexDemo.nblink deleted file mode 100644 index 4b3d64aa54..0000000000 --- a/docs/guides/notebooks/vector_indices/FaissIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/FaissIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/MilvusIndexDemo.nblink b/docs/guides/notebooks/vector_indices/MilvusIndexDemo.nblink deleted file mode 100644 index e30b29fcec..0000000000 --- a/docs/guides/notebooks/vector_indices/MilvusIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/MilvusIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/OpensearchDemo.nblink b/docs/guides/notebooks/vector_indices/OpensearchDemo.nblink deleted file mode 100644 index 088df7a9c4..0000000000 --- a/docs/guides/notebooks/vector_indices/OpensearchDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/OpensearchDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/PineconeIndexDemo-Hybrid.nblink b/docs/guides/notebooks/vector_indices/PineconeIndexDemo-Hybrid.nblink deleted file mode 100644 index f8b68d6c52..0000000000 --- a/docs/guides/notebooks/vector_indices/PineconeIndexDemo-Hybrid.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/PineconeIndexDemo-Hybrid.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/PineconeIndexDemo.nblink b/docs/guides/notebooks/vector_indices/PineconeIndexDemo.nblink deleted file mode 100644 index 3a97fa698c..0000000000 --- a/docs/guides/notebooks/vector_indices/PineconeIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/PineconeIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/QdrantIndexDemo.nblink b/docs/guides/notebooks/vector_indices/QdrantIndexDemo.nblink deleted file mode 100644 index 672467f404..0000000000 --- a/docs/guides/notebooks/vector_indices/QdrantIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/QdrantIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-ChatGPT.nblink b/docs/guides/notebooks/vector_indices/SimpleIndexDemo-ChatGPT.nblink deleted file mode 100644 index a8dfbb2753..0000000000 --- a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-ChatGPT.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/SimpleIndexDemo-ChatGPT.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-multistep.nblink b/docs/guides/notebooks/vector_indices/SimpleIndexDemo-multistep.nblink deleted file mode 100644 index a854f9e016..0000000000 --- a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-multistep.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/SimpleIndexDemo-multistep.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-streaming.nblink b/docs/guides/notebooks/vector_indices/SimpleIndexDemo-streaming.nblink deleted file mode 100644 index 765f138608..0000000000 --- a/docs/guides/notebooks/vector_indices/SimpleIndexDemo-streaming.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/SimpleIndexDemo-streaming.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/SimpleIndexDemo.nblink b/docs/guides/notebooks/vector_indices/SimpleIndexDemo.nblink deleted file mode 100644 index 8940a12d2d..0000000000 --- a/docs/guides/notebooks/vector_indices/SimpleIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/SimpleIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/WeaviateIndexDemo-Hybrid.nblink b/docs/guides/notebooks/vector_indices/WeaviateIndexDemo-Hybrid.nblink deleted file mode 100644 index 9d0b16c20e..0000000000 --- a/docs/guides/notebooks/vector_indices/WeaviateIndexDemo-Hybrid.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/WeaviateIndexDemo-Hybrid.ipynb"} \ No newline at end of file diff --git a/docs/guides/notebooks/vector_indices/WeaviateIndexDemo.nblink b/docs/guides/notebooks/vector_indices/WeaviateIndexDemo.nblink deleted file mode 100644 index dc2ac1abb3..0000000000 --- a/docs/guides/notebooks/vector_indices/WeaviateIndexDemo.nblink +++ /dev/null @@ -1 +0,0 @@ -{"path": "../../../../examples/vector_indices/WeaviateIndexDemo.ipynb"} \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 364b6bd2ae..1b8ec50320 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -45,7 +45,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 1 :caption: Getting Started getting_started/installation.md @@ -53,7 +53,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 2 :caption: Guides guides/primer.rst @@ -62,7 +62,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 2 :caption: Use Cases use_cases/queries.md @@ -70,7 +70,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 1 :caption: Key Components how_to/data_connectors.md @@ -92,7 +92,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 1 :caption: Reference reference/indices.rst @@ -114,7 +114,7 @@ That's where the **LlamaIndex** comes in. LlamaIndex is a simple, flexible inter .. toctree:: - :maxdepth: 3 + :maxdepth: 1 :caption: Gallery gallery/app_showcase.md diff --git a/docs/readthedocs-environment.yml b/docs/readthedocs-environment.yml deleted file mode 100644 index 57c3152c46..0000000000 --- a/docs/readthedocs-environment.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: docs -channels: - - conda-forge -dependencies: - - python>=3.9 - - sphinx>=4.3.0 - - pandoc - - nbconvert - - ipykernel - - pip: - - nbsphinx - - nbsphinx-link - - myst-parser - - docutils<0.17 - - furo>=2023.3.27 - - -e ../ diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000..076588e514 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,5 @@ +-e . +sphinx>=4.3.0 +furo>=2023.3.27 +docutils<0.17 +myst-parser diff --git a/examples/async/AsyncComposableIndicesSEC.ipynb b/examples/async/AsyncComposableIndicesSEC.ipynb index c1b303b0fd..94bd2be0eb 100644 --- a/examples/async/AsyncComposableIndicesSEC.ipynb +++ b/examples/async/AsyncComposableIndicesSEC.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "34f92329", - "metadata": {}, - "source": [ - "# Async Composable Indices - SEC" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -468,7 +460,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/examples/chatbot/Chatbot_SEC.ipynb b/examples/chatbot/Chatbot_SEC.ipynb index f75adf69fc..140d0bdf4e 100644 --- a/examples/chatbot/Chatbot_SEC.ipynb +++ b/examples/chatbot/Chatbot_SEC.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "0308df0f", - "metadata": {}, - "source": [ - "# Chatbot - SEC Demo" - ] - }, { "cell_type": "code", "execution_count": 9, @@ -836,7 +828,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb b/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb index 55e2f631bd..b2da4bb54d 100644 --- a/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb +++ b/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "432745ad", - "metadata": {}, - "source": [ - "# ChatGPT Retrieval Plugin Upload Demo" - ] - }, { "cell_type": "markdown", "id": "cfb64210-9c6b-47d7-81f4-67dbdab68e4c", @@ -267,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" }, "vscode": { "interpreter": { diff --git a/examples/composable_indices/QASummaryGraph.ipynb b/examples/composable_indices/QASummaryGraph.ipynb index b54a461dde..d9a093a3f3 100644 --- a/examples/composable_indices/QASummaryGraph.ipynb +++ b/examples/composable_indices/QASummaryGraph.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "4604568b", - "metadata": {}, - "source": [ - "# QASummaryGraph Demo" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -439,7 +431,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/data_connectors/DatabaseReaderDemo.ipynb b/examples/data_connectors/DatabaseReaderDemo.ipynb index c1816801e6..5cb887f0f5 100644 --- a/examples/data_connectors/DatabaseReaderDemo.ipynb +++ b/examples/data_connectors/DatabaseReaderDemo.ipynb @@ -1,209 +1,202 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Database Reader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from __future__ import absolute_import\n", - "\n", - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"\"\n", - "\n", - "from llama_index.readers.database import DatabaseReader\n", - "from llama_index import GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize DatabaseReader object with the following parameters:\n", - "\n", - "db = DatabaseReader(\n", - " scheme = \"postgresql\", # Database Scheme\n", - " host = \"localhost\", # Database Host\n", - " port = \"5432\", # Database Port\n", - " user = \"postgres\", # Database User\n", - " password = \"FakeExamplePassword\", # Database Password\n", - " dbname = \"postgres\", # Database Name\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "### DatabaseReader class ###\n", - "# db is an instance of DatabaseReader:\n", - "print(type(db))\n", - "# DatabaseReader available method:\n", - "print(type(db.load_data))\n", - "\n", - "### SQLDatabase class ###\n", - "# db.sql is an instance of SQLDatabase:\n", - "print(type(db.sql_database))\n", - "# SQLDatabase available methods:\n", - "print(type(db.sql_database.from_uri))\n", - "print(type(db.sql_database.get_single_table_info))\n", - "print(type(db.sql_database.get_table_columns))\n", - "print(type(db.sql_database.get_table_info))\n", - "print(type(db.sql_database.get_table_names))\n", - "print(type(db.sql_database.insert_into_table))\n", - "print(type(db.sql_database.run))\n", - "print(type(db.sql_database.run_sql))\n", - "# SQLDatabase available properties:\n", - "print(type(db.sql_database.dialect))\n", - "print(type(db.sql_database.engine))\n", - "print(type(db.sql_database.table_info))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "### Testing DatabaseReader\n", - "### from SQLDatabase, SQLAlchemy engine and Database URI:\n", - "\n", - "# From SQLDatabase instance:\n", - "print(type(db.sql_database))\n", - "db_from_sql_database = DatabaseReader(sql_database = db.sql_database)\n", - "print(type(db_from_sql_database))\n", - "\n", - "# From SQLAlchemy engine:\n", - "print(type(db.sql_database.engine))\n", - "db_from_engine = DatabaseReader(engine = db.sql_database.engine)\n", - "print(type(db_from_engine))\n", - "\n", - "# From Database URI:\n", - "print(type(db.uri))\n", - "db_from_uri = DatabaseReader(uri = db.uri)\n", - "print(type(db_from_uri))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The below SQL Query example returns a list values of each row\n", - "# with concatenated text from the name and age columns\n", - "# from the users table where the age is greater than or equal to 18\n", - "\n", - "query = f\"\"\"\n", - " SELECT\n", - " CONCAT(name, ' is ', age, ' years old.') AS text\n", - " FROM public.users\n", - " WHERE age >= 18\n", - " \"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Please refer to llama_index.langchain_helpers.sql_wrapper\n", - "# SQLDatabase.run_sql method\n", - "texts = db.sql_database.run_sql(command = query)\n", - "\n", - "# Display type(texts) and texts\n", - "# type(texts) must return <class 'list'>\n", - "print(type(texts))\n", - "\n", - "# Documents must return a list of Tuple objects\n", - "print(texts)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Please refer to llama_index.readers.database.DatabaseReader.load_data\n", - "# DatabaseReader.load_data method\n", - "documents = db.load_data(query = query)\n", - "\n", - "# Display type(documents) and documents\n", - "# type(documents) must return <class 'list'>\n", - "print(type(documents))\n", - "\n", - "# Documents must return a list of Document objects\n", - "print(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " # Try to load existing Index from disk\n", - " index = GPTSimpleVectorIndex.load_from_disk('index.json')\n", - "except:\n", - " index = GPTSimpleVectorIndex.from_documents(documents)\n", - "\n", - " # Save newly created Index to disk\n", - " index.save_to_disk('index.json')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "bd5508c2ffc7f17f7d31cf4086cc872f89e96996a08987e995649e5fbe85a3a4" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from __future__ import absolute_import\n", + "\n", + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"\"\n", + "\n", + "from llama_index.readers.database import DatabaseReader\n", + "from llama_index import GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize DatabaseReader object with the following parameters:\n", + "\n", + "db = DatabaseReader(\n", + " scheme = \"postgresql\", # Database Scheme\n", + " host = \"localhost\", # Database Host\n", + " port = \"5432\", # Database Port\n", + " user = \"postgres\", # Database User\n", + " password = \"FakeExamplePassword\", # Database Password\n", + " dbname = \"postgres\", # Database Name\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "### DatabaseReader class ###\n", + "# db is an instance of DatabaseReader:\n", + "print(type(db))\n", + "# DatabaseReader available method:\n", + "print(type(db.load_data))\n", + "\n", + "### SQLDatabase class ###\n", + "# db.sql is an instance of SQLDatabase:\n", + "print(type(db.sql_database))\n", + "# SQLDatabase available methods:\n", + "print(type(db.sql_database.from_uri))\n", + "print(type(db.sql_database.get_single_table_info))\n", + "print(type(db.sql_database.get_table_columns))\n", + "print(type(db.sql_database.get_table_info))\n", + "print(type(db.sql_database.get_table_names))\n", + "print(type(db.sql_database.insert_into_table))\n", + "print(type(db.sql_database.run))\n", + "print(type(db.sql_database.run_sql))\n", + "# SQLDatabase available properties:\n", + "print(type(db.sql_database.dialect))\n", + "print(type(db.sql_database.engine))\n", + "print(type(db.sql_database.table_info))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "### Testing DatabaseReader\n", + "### from SQLDatabase, SQLAlchemy engine and Database URI:\n", + "\n", + "# From SQLDatabase instance:\n", + "print(type(db.sql_database))\n", + "db_from_sql_database = DatabaseReader(sql_database = db.sql_database)\n", + "print(type(db_from_sql_database))\n", + "\n", + "# From SQLAlchemy engine:\n", + "print(type(db.sql_database.engine))\n", + "db_from_engine = DatabaseReader(engine = db.sql_database.engine)\n", + "print(type(db_from_engine))\n", + "\n", + "# From Database URI:\n", + "print(type(db.uri))\n", + "db_from_uri = DatabaseReader(uri = db.uri)\n", + "print(type(db_from_uri))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The below SQL Query example returns a list values of each row\n", + "# with concatenated text from the name and age columns\n", + "# from the users table where the age is greater than or equal to 18\n", + "\n", + "query = f\"\"\"\n", + " SELECT\n", + " CONCAT(name, ' is ', age, ' years old.') AS text\n", + " FROM public.users\n", + " WHERE age >= 18\n", + " \"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Please refer to llama_index.langchain_helpers.sql_wrapper\n", + "# SQLDatabase.run_sql method\n", + "texts = db.sql_database.run_sql(command = query)\n", + "\n", + "# Display type(texts) and texts\n", + "# type(texts) must return <class 'list'>\n", + "print(type(texts))\n", + "\n", + "# Documents must return a list of Tuple objects\n", + "print(texts)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Please refer to llama_index.readers.database.DatabaseReader.load_data\n", + "# DatabaseReader.load_data method\n", + "documents = db.load_data(query = query)\n", + "\n", + "# Display type(documents) and documents\n", + "# type(documents) must return <class 'list'>\n", + "print(type(documents))\n", + "\n", + "# Documents must return a list of Document objects\n", + "print(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " # Try to load existing Index from disk\n", + " index = GPTSimpleVectorIndex.load_from_disk('index.json')\n", + "except:\n", + " index = GPTSimpleVectorIndex.from_documents(documents)\n", + "\n", + " # Save newly created Index to disk\n", + " index.save_to_disk('index.json')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "vscode": { + "interpreter": { + "hash": "bd5508c2ffc7f17f7d31cf4086cc872f89e96996a08987e995649e5fbe85a3a4" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/data_connectors/GithubRepositoryReaderDemo.ipynb b/examples/data_connectors/GithubRepositoryReaderDemo.ipynb index fffce6df33..389becf839 100644 --- a/examples/data_connectors/GithubRepositoryReaderDemo.ipynb +++ b/examples/data_connectors/GithubRepositoryReaderDemo.ipynb @@ -1,116 +1,110 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Github Repository Reader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# This is due to the fact that we use asyncio.loop_until_complete in\n", - "# the DiscordReader. Since the Jupyter kernel itself runs on\n", - "# an event loop, we need to add some help with nesting\n", - "!pip install nest_asyncio httpx\n", - "import nest_asyncio\n", - "nest_asyncio.apply()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%env OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", - "from llama_index import GPTSimpleVectorIndex, GithubRepositoryReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%env GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", - "github_token = os.environ.get(\"GITHUB_TOKEN\")\n", - "owner = \"jerryjliu\"\n", - "repo = \"llama_index\"\n", - "branch = \"main\"\n", - "\n", - "documents = GithubRepositoryReader(\n", - " github_token=github_token,\n", - " owner=owner,\n", - " repo=repo,\n", - " use_parser=False,\n", - " verbose=False,\n", - ").load_data(branch=branch)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents)\n", - "index.save_to_disk(\"github_index.json\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# import time\n", - "# for document in documents:\n", - "# print(document.extra_info)\n", - "# time.sleep(.25) \n", - "response = index.query(\"What is the difference between GPTSimpleVectorIndex and GPTListIndex?\", verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "5bc2ab08ee48b6366504a28e3231c27a37c154a347ee8ac6184b716eff7bdbcd" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is due to the fact that we use asyncio.loop_until_complete in\n", + "# the DiscordReader. Since the Jupyter kernel itself runs on\n", + "# an event loop, we need to add some help with nesting\n", + "!pip install nest_asyncio httpx\n", + "import nest_asyncio\n", + "nest_asyncio.apply()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%env OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", + "from llama_index import GPTSimpleVectorIndex, GithubRepositoryReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%env GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", + "github_token = os.environ.get(\"GITHUB_TOKEN\")\n", + "owner = \"jerryjliu\"\n", + "repo = \"llama_index\"\n", + "branch = \"main\"\n", + "\n", + "documents = GithubRepositoryReader(\n", + " github_token=github_token,\n", + " owner=owner,\n", + " repo=repo,\n", + " use_parser=False,\n", + " verbose=False,\n", + ").load_data(branch=branch)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents)\n", + "index.save_to_disk(\"github_index.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# import time\n", + "# for document in documents:\n", + "# print(document.extra_info)\n", + "# time.sleep(.25) \n", + "response = index.query(\"What is the difference between GPTSimpleVectorIndex and GPTListIndex?\", verbose=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gpt_index-github-reader", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "5bc2ab08ee48b6366504a28e3231c27a37c154a347ee8ac6184b716eff7bdbcd" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/examples/data_connectors/MboxReaderDemo.ipynb b/examples/data_connectors/MboxReaderDemo.ipynb index 33ebc68f54..5285057c08 100644 --- a/examples/data_connectors/MboxReaderDemo.ipynb +++ b/examples/data_connectors/MboxReaderDemo.ipynb @@ -1,108 +1,102 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Mbox Reader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%env OPENAI_API_KEY=sk-************" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import MboxReader, GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "documents = MboxReader().load_data('mbox_data_dir', max_count=1000) # Returns list of documents " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents) # Initialize index with documents" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [query] Total LLM token usage: 100 tokens\n", - "> [query] Total embedding token usage: 10 tokens\n" - ] - } - ], - "source": [ - "res = index.query('When did i have that call with the London office?')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> There is a call scheduled with the London office at 12am GMT on the 10th of February." - ] - } - ], - "source": [ - "res.response" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "7dd9b00487715d9ffc85f7f860a0013e7a0542b27fc53d2b1d33405d7679eac1" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%env OPENAI_API_KEY=sk-************" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import MboxReader, GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "documents = MboxReader().load_data('mbox_data_dir', max_count=1000) # Returns list of documents " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents) # Initialize index with documents" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [query] Total LLM token usage: 100 tokens\n", + "> [query] Total embedding token usage: 10 tokens\n" + ] + } + ], + "source": [ + "res = index.query('When did i have that call with the London office?')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> There is a call scheduled with the London office at 12am GMT on the 10th of February." + ] + } + ], + "source": [ + "res.response" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8 (main, Oct 13 2022, 09:48:40) [Clang 14.0.0 (clang-1400.0.29.102)]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "7dd9b00487715d9ffc85f7f860a0013e7a0542b27fc53d2b1d33405d7679eac1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/data_connectors/MongoDemo.ipynb b/examples/data_connectors/MongoDemo.ipynb index a91dde25e2..a0496781de 100644 --- a/examples/data_connectors/MongoDemo.ipynb +++ b/examples/data_connectors/MongoDemo.ipynb @@ -1,108 +1,108 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", - "metadata": {}, - "source": [ - "# MongoDB Demo\n", - "Demonstrates our MongoDB data connector" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "60355655", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SimpleMongoReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "da90589a-fb44-4ec6-9706-753dba4fa968", - "metadata": {}, - "outputs": [], - "source": [ - "host = \"<host>\"\n", - "port = \"<port>\"\n", - "db_name = \"<db_name>\"\n", - "collection_name = \"<collection_name>\"\n", - "# query_dict is passed into db.collection.find()\n", - "query_dict = {}\n", - "reader = SimpleMongoReader(host, port)\n", - "documents = reader.load_data(db_name, collection_name, query_dict=query_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", + "metadata": {}, + "source": [ + "# MongoDB Demo\n", + "Demonstrates our MongoDB data connector" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "60355655", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SimpleMongoReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da90589a-fb44-4ec6-9706-753dba4fa968", + "metadata": {}, + "outputs": [], + "source": [ + "host = \"<host>\"\n", + "port = \"<port>\"\n", + "db_name = \"<db_name>\"\n", + "collection_name = \"<collection_name>\"\n", + "# query_dict is passed into db.collection.find()\n", + "query_dict = {}\n", + "reader = SimpleMongoReader(host, port)\n", + "documents = reader.load_data(db_name, collection_name, query_dict=query_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/NotionDemo.ipynb b/examples/data_connectors/NotionDemo.ipynb index f29db92f2f..aa1508b1f7 100644 --- a/examples/data_connectors/NotionDemo.ipynb +++ b/examples/data_connectors/NotionDemo.ipynb @@ -1,145 +1,145 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", - "metadata": {}, - "source": [ - "# NotionPageReader Demo\n", - "Demonstrates our Notion data connector" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "995afc19", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, NotionPageReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "da90589a-fb44-4ec6-9706-753dba4fa968", - "metadata": {}, - "outputs": [], - "source": [ - "integration_token = os.getenv(\"NOTION_INTEGRATION_TOKEN\")\n", - "page_ids = [\"<page_id>\"]\n", - "documents = NotionPageReader(integration_token=integration_token).load_data(page_ids=page_ids)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "8e8e1b13", - "metadata": {}, - "source": [ - "You can also pass the id of a database to index all the pages in that database:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "087431a2-b04c-441c-820f-6d6d3cdf831c", - "metadata": {}, - "outputs": [], - "source": [ - "database_id = \"<database-id>\"\n", - "\n", - "# https://developers.notion.com/docs/working-with-databases for how to find your database id\n", - "\n", - "documents = NotionPageReader(integration_token=integration_token).load_data(database_id=database_id)\n", - "\n", - "print(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6464025d-0c5a-4e2d-8a90-91c29ece9884", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "index = GPTListIndex.from_documents(documents)\n", - "response = index.query(\"<query_text>\")\n", - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "c32397a35d2e76e766f80c3872b208f0c0029e8a6a9b8e2a8fe7b1641cfa009b" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", + "metadata": {}, + "source": [ + "# Notion Demo\n", + "Demonstrates our Notion data connector" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "995afc19", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, NotionPageReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da90589a-fb44-4ec6-9706-753dba4fa968", + "metadata": {}, + "outputs": [], + "source": [ + "integration_token = os.getenv(\"NOTION_INTEGRATION_TOKEN\")\n", + "page_ids = [\"<page_id>\"]\n", + "documents = NotionPageReader(integration_token=integration_token).load_data(page_ids=page_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "8e8e1b13", + "metadata": {}, + "source": [ + "You can also pass the id of a database to index all the pages in that database:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "087431a2-b04c-441c-820f-6d6d3cdf831c", + "metadata": {}, + "outputs": [], + "source": [ + "database_id = \"<database-id>\"\n", + "\n", + "# https://developers.notion.com/docs/working-with-databases for how to find your database id\n", + "\n", + "documents = NotionPageReader(integration_token=integration_token).load_data(database_id=database_id)\n", + "\n", + "print(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6464025d-0c5a-4e2d-8a90-91c29ece9884", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "index = GPTListIndex.from_documents(documents)\n", + "response = index.query(\"<query_text>\")\n", + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "vscode": { + "interpreter": { + "hash": "c32397a35d2e76e766f80c3872b208f0c0029e8a6a9b8e2a8fe7b1641cfa009b" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/ObsidianReaderDemo.ipynb b/examples/data_connectors/ObsidianReaderDemo.ipynb index 449427eb41..951a918f75 100644 --- a/examples/data_connectors/ObsidianReaderDemo.ipynb +++ b/examples/data_connectors/ObsidianReaderDemo.ipynb @@ -1,142 +1,135 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Obsidian Reader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%env OPENAI_API_KEY=sk-************" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import ObsidianReader, GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "documents = ObsidianReader('/Users/hursh/vault').load_data() # Returns list of documents " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents) # Initialize index with documents" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# index.save_to_disk('index.json')\n", - "index = GPTSimpleVectorIndex.load_from_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [query] Total LLM token usage: 920 tokens\n", - "> [query] Total embedding token usage: 7 tokens\n" - ] - } - ], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "res = index.query('What is the meaning of life?')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'\\nThe meaning of life is subjective and can vary from person to person. It is ultimately up to each individual to decide what they believe is the purpose and value of life. Some may find meaning in their faith, while others may find it in their relationships, work, or hobbies. Ultimately, it is up to each individual to decide what brings them joy and fulfillment and to pursue that path.'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "res.response" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%env OPENAI_API_KEY=sk-************" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import ObsidianReader, GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "documents = ObsidianReader('/Users/hursh/vault').load_data() # Returns list of documents " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents) # Initialize index with documents" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# index.save_to_disk('index.json')\n", + "index = GPTSimpleVectorIndex.load_from_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [query] Total LLM token usage: 920 tokens\n", + "> [query] Total embedding token usage: 7 tokens\n" + ] + } + ], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "res = index.query('What is the meaning of life?')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\nThe meaning of life is subjective and can vary from person to person. It is ultimately up to each individual to decide what they believe is the purpose and value of life. Some may find meaning in their faith, while others may find it in their relationships, work, or hobbies. Ultimately, it is up to each individual to decide what brings them joy and fulfillment and to pursue that path.'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res.response" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "vscode": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/data_connectors/PineconeDemo.ipynb b/examples/data_connectors/PineconeDemo.ipynb index d9e0c35e13..85df05dcb5 100644 --- a/examples/data_connectors/PineconeDemo.ipynb +++ b/examples/data_connectors/PineconeDemo.ipynb @@ -1,151 +1,151 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f3ca56f0-6ef1-426f-bac5-fd7c374d0f51", - "metadata": {}, - "source": [ - "# PineconeReader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b2bd3c59", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "e2f49003-b952-4b9b-b935-2941f9303773", - "metadata": {}, - "outputs": [], - "source": [ - "api_key = \"<api_key>\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "262f990a-79c8-413a-9f3c-cd9a3c191307", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index.readers.pinecone import PineconeReader" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "252f8163-7297-44b6-a838-709e9662f3d6", - "metadata": {}, - "outputs": [], - "source": [ - "reader = PineconeReader(api_key=api_key, environment=\"us-west1-gcp\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "53b49187-8477-436c-9718-5d2f8cc6fad0", - "metadata": {}, - "outputs": [], - "source": [ - "# the id_to_text_map specifies a mapping from the ID specified in Pinecone to your text. \n", - "id_to_text_map = {\n", - " \"id1\": \"text blob 1\",\n", - " \"id2\": \"text blob 2\",\n", - "}\n", - "\n", - "# the query_vector is an embedding representation of your query_vector\n", - "# Example query vector:\n", - "# query_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]\n", - "\n", - "query_vector=[n1, n2, n3, ...]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a88be1c4-603f-48b9-ac64-10a219af4951", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: Required args are index_name, id_to_text_map, vector.\n", - "# In addition, we pass-through all kwargs that can be passed into the the `Query` operation in Pinecone.\n", - "# See the API reference: https://docs.pinecone.io/reference/query\n", - "# and also the Python client: https://github.com/pinecone-io/pinecone-python-client\n", - "# for more details. \n", - "documents = reader.load_data(index_name='quickstart', id_to_text_map=id_to_text_map, top_k=3, vector=query_vector, separate_documents=True)" - ] - }, - { - "cell_type": "markdown", - "id": "a4baf59e-fc97-4a1e-947f-354a6438ffa6", - "metadata": {}, - "source": [ - "### Create index " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "109d083e-f3b4-420b-886b-087c8cf3f98b", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e15b9177-9e94-4e4e-9a2e-cd3a288a7faf", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "67b50613-a589-4acf-ba16-10571b415268", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "f3ca56f0-6ef1-426f-bac5-fd7c374d0f51", + "metadata": {}, + "source": [ + "# Pinecone Demo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2bd3c59", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e2f49003-b952-4b9b-b935-2941f9303773", + "metadata": {}, + "outputs": [], + "source": [ + "api_key = \"<api_key>\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "262f990a-79c8-413a-9f3c-cd9a3c191307", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index.readers.pinecone import PineconeReader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "252f8163-7297-44b6-a838-709e9662f3d6", + "metadata": {}, + "outputs": [], + "source": [ + "reader = PineconeReader(api_key=api_key, environment=\"us-west1-gcp\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "53b49187-8477-436c-9718-5d2f8cc6fad0", + "metadata": {}, + "outputs": [], + "source": [ + "# the id_to_text_map specifies a mapping from the ID specified in Pinecone to your text. \n", + "id_to_text_map = {\n", + " \"id1\": \"text blob 1\",\n", + " \"id2\": \"text blob 2\",\n", + "}\n", + "\n", + "# the query_vector is an embedding representation of your query_vector\n", + "# Example query vector:\n", + "# query_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]\n", + "\n", + "query_vector=[n1, n2, n3, ...]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a88be1c4-603f-48b9-ac64-10a219af4951", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: Required args are index_name, id_to_text_map, vector.\n", + "# In addition, we pass-through all kwargs that can be passed into the the `Query` operation in Pinecone.\n", + "# See the API reference: https://docs.pinecone.io/reference/query\n", + "# and also the Python client: https://github.com/pinecone-io/pinecone-python-client\n", + "# for more details. \n", + "documents = reader.load_data(index_name='quickstart', id_to_text_map=id_to_text_map, top_k=3, vector=query_vector, separate_documents=True)" + ] + }, + { + "cell_type": "markdown", + "id": "a4baf59e-fc97-4a1e-947f-354a6438ffa6", + "metadata": {}, + "source": [ + "### Create index " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "109d083e-f3b4-420b-886b-087c8cf3f98b", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15b9177-9e94-4e4e-9a2e-cd3a288a7faf", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67b50613-a589-4acf-ba16-10571b415268", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/QdrantDemo.ipynb b/examples/data_connectors/QdrantDemo.ipynb index c862df0c68..f2731a8cf7 100644 --- a/examples/data_connectors/QdrantDemo.ipynb +++ b/examples/data_connectors/QdrantDemo.ipynb @@ -1,133 +1,133 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f3ca56f0-6ef1-426f-bac5-fd7c374d0f51", - "metadata": {}, - "source": [ - "# QdrantReader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "778ee662", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "262f990a-79c8-413a-9f3c-cd9a3c191307", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index.readers.qdrant import QdrantReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "252f8163-7297-44b6-a838-709e9662f3d6", - "metadata": {}, - "outputs": [], - "source": [ - "reader = QdrantReader(host=\"localhost\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53b49187-8477-436c-9718-5d2f8cc6fad0", - "metadata": {}, - "outputs": [], - "source": [ - "# the query_vector is an embedding representation of your query_vector\n", - "# Example query vector:\n", - "# query_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]\n", - "\n", - "query_vector=[n1, n2, n3, ...]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a88be1c4-603f-48b9-ac64-10a219af4951", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: Required args are collection_name, query_vector.\n", - "# See the Python client: https://github.com/qdrant/qdrant_client\n", - "# for more details. \n", - "documents = reader.load_data(collection_name=\"demo\", query_vector=query_vector, limit=5)" - ] - }, - { - "cell_type": "markdown", - "id": "169b4273-eb20-4d06-9ffe-71320f4570f6", - "metadata": {}, - "source": [ - "### Create index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ac4563a1", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f06b02db", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97d1ae80", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "f3ca56f0-6ef1-426f-bac5-fd7c374d0f51", + "metadata": {}, + "source": [ + "# Qdrant Demo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "778ee662", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "262f990a-79c8-413a-9f3c-cd9a3c191307", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index.readers.qdrant import QdrantReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "252f8163-7297-44b6-a838-709e9662f3d6", + "metadata": {}, + "outputs": [], + "source": [ + "reader = QdrantReader(host=\"localhost\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53b49187-8477-436c-9718-5d2f8cc6fad0", + "metadata": {}, + "outputs": [], + "source": [ + "# the query_vector is an embedding representation of your query_vector\n", + "# Example query vector:\n", + "# query_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]\n", + "\n", + "query_vector=[n1, n2, n3, ...]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a88be1c4-603f-48b9-ac64-10a219af4951", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: Required args are collection_name, query_vector.\n", + "# See the Python client: https://github.com/qdrant/qdrant_client\n", + "# for more details. \n", + "documents = reader.load_data(collection_name=\"demo\", query_vector=query_vector, limit=5)" + ] + }, + { + "cell_type": "markdown", + "id": "169b4273-eb20-4d06-9ffe-71320f4570f6", + "metadata": {}, + "source": [ + "### Create index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac4563a1", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f06b02db", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97d1ae80", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/SlackDemo.ipynb b/examples/data_connectors/SlackDemo.ipynb index e517d80b9a..d7b1faa898 100644 --- a/examples/data_connectors/SlackDemo.ipynb +++ b/examples/data_connectors/SlackDemo.ipynb @@ -1,103 +1,103 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", - "metadata": {}, - "source": [ - "# SlackReader Demo\n", - "Demonstrates our Slack data connector" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc664882", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SlackReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "da90589a-fb44-4ec6-9706-753dba4fa968", - "metadata": {}, - "outputs": [], - "source": [ - "slack_token = os.getenv(\"SLACK_BOT_TOKEN\")\n", - "channel_ids = [\"<channel_id>\"]\n", - "documents = SlackReader(slack_token=slack_token).load_data(channel_ids=channel_ids)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "effeb5a7-8544-4ee4-8c11-bad0d8165394", + "metadata": {}, + "source": [ + "# Slack Demo\n", + "Demonstrates our Slack data connector" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dc664882", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ea1f66d-10ed-4417-bdcb-f8a894836ea5", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SlackReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da90589a-fb44-4ec6-9706-753dba4fa968", + "metadata": {}, + "outputs": [], + "source": [ + "slack_token = os.getenv(\"SLACK_BOT_TOKEN\")\n", + "channel_ids = [\"<channel_id>\"]\n", + "documents = SlackReader(slack_token=slack_token).load_data(channel_ids=channel_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "341295df-2029-4728-ab3d-2ee178a7e6f1", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01c26b9d-49ec-4a6e-9c61-5c06bb86bbb2", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f160c678-2fb5-4d6d-b2bc-87abb61cfdec", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/TwitterDemo.ipynb b/examples/data_connectors/TwitterDemo.ipynb index 8965ec5e3b..06a9d41384 100644 --- a/examples/data_connectors/TwitterDemo.ipynb +++ b/examples/data_connectors/TwitterDemo.ipynb @@ -1,113 +1,105 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "afec1d41", - "metadata": {}, - "source": [ - "# TwitterTweetReader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "367a6eae", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21d03e9b-8a47-45b2-ab27-295b7397ecad", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTSimpleVectorIndex, TwitterTweetReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef5d2334-9661-4648-a823-a335ea277826", - "metadata": {}, - "outputs": [], - "source": [ - "# create an app in https://developer.twitter.com/en/apps\n", - "BEARER_TOKEN = \"<bearer_token>\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1d6a1153-1383-4aaf-b39d-72c1fc9cc428", - "metadata": {}, - "outputs": [], - "source": [ - "# create reader, specify twitter handles\n", - "reader = TwitterTweetReader(BEARER_TOKEN)\n", - "documents = reader.load_data([\"@twitter_handle1\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca319024-88e7-424f-b1d8-4daa06c6bc6a", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "78680a17-9088-419e-97cf-ac3d5783a709", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2f0f92a7-cdd9-478f-9765-0a122d6e8508", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "367a6eae", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21d03e9b-8a47-45b2-ab27-295b7397ecad", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTSimpleVectorIndex, TwitterTweetReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef5d2334-9661-4648-a823-a335ea277826", + "metadata": {}, + "outputs": [], + "source": [ + "# create an app in https://developer.twitter.com/en/apps\n", + "BEARER_TOKEN = \"<bearer_token>\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d6a1153-1383-4aaf-b39d-72c1fc9cc428", + "metadata": {}, + "outputs": [], + "source": [ + "# create reader, specify twitter handles\n", + "reader = TwitterTweetReader(BEARER_TOKEN)\n", + "documents = reader.load_data([\"@twitter_handle1\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca319024-88e7-424f-b1d8-4daa06c6bc6a", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78680a17-9088-419e-97cf-ac3d5783a709", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f0f92a7-cdd9-478f-9765-0a122d6e8508", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/WeaviateDemo.ipynb b/examples/data_connectors/WeaviateDemo.ipynb index a2ea15a7d5..b36751549b 100644 --- a/examples/data_connectors/WeaviateDemo.ipynb +++ b/examples/data_connectors/WeaviateDemo.ipynb @@ -1,177 +1,177 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "36e7bb96-0c27-47e9-a525-c11f40be3b86", - "metadata": {}, - "source": [ - "# WeaviateReader Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "38ca1434", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "d99bc57b-85df-46ac-8262-2409344af428", - "metadata": {}, - "outputs": [], - "source": [ - "import weaviate\n", - "from llama_index.readers.weaviate import WeaviateReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fec36c7a-3766-4167-890e-b93adb831a64", - "metadata": {}, - "outputs": [], - "source": [ - "# See https://weaviate.io/developers/weaviate/current/client-libraries/python.html\n", - "# for more details on authentication\n", - "resource_owner_config = weaviate.AuthClientPassword(\n", - " username = \"<username>\", \n", - " password = \"<password>\", \n", - ")\n", - "\n", - "# initialize reader\n", - "reader = WeaviateReader(\"https://<cluster-id>.semi.network/\", auth_client_secret=resource_owner_config)" - ] - }, - { - "cell_type": "markdown", - "id": "ce9f299c-4f0a-4bca-bc90-79848f02b381", - "metadata": {}, - "source": [ - "You have two options for the Weaviate reader: 1) directly specify the class_name and properties, or 2) input the raw graphql_query. Examples are shown below." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "b92d69a1-d39f-45cf-a136-cb9c2f2f5cdf", - "metadata": {}, - "outputs": [], - "source": [ - "# 1) load data using class_name and properties\n", - "# docs = reader.load_data(\n", - "# class_name=\"Author\", properties=[\"name\", \"description\"], separate_documents=True\n", - "# )\n", - "\n", - "documents = reader.load_data(\n", - " class_name=\"<class_name>\", \n", - " properties=[\"property1\", \"property2\", \"...\"], \n", - " separate_documents=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "722b5d47-9897-4c54-9734-259ab0c1634c", - "metadata": {}, - "outputs": [], - "source": [ - "# 2) example GraphQL query\n", - "# query = \"\"\"\n", - "# {\n", - "# Get {\n", - "# Author {\n", - "# name\n", - "# description\n", - "# }\n", - "# }\n", - "# }\n", - "# \"\"\"\n", - "# docs = reader.load_data(graphql_query=query, separate_documents=True)\n", - "\n", - "query = \"\"\"\n", - "{\n", - " Get {\n", - " <class_name> {\n", - " <property1>\n", - " <property2>\n", - " ...\n", - " }\n", - " }\n", - "}\n", - "\"\"\"\n", - "\n", - "documents = reader.load_data(graphql_query=query, separate_documents=True)" - ] - }, - { - "cell_type": "markdown", - "id": "169b4273-eb20-4d06-9ffe-71320f4570f6", - "metadata": {}, - "source": [ - "### Create index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "92599a0a-93ba-4c93-80f1-9acae0663c34", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52d93c3f-a08d-4637-98bc-0c3cc693c563", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"<query_text>\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "771b42be-4108-43a0-a1b4-b259a7819936", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "36e7bb96-0c27-47e9-a525-c11f40be3b86", + "metadata": {}, + "source": [ + "# Weaviate" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38ca1434", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d99bc57b-85df-46ac-8262-2409344af428", + "metadata": {}, + "outputs": [], + "source": [ + "import weaviate\n", + "from llama_index.readers.weaviate import WeaviateReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fec36c7a-3766-4167-890e-b93adb831a64", + "metadata": {}, + "outputs": [], + "source": [ + "# See https://weaviate.io/developers/weaviate/current/client-libraries/python.html\n", + "# for more details on authentication\n", + "resource_owner_config = weaviate.AuthClientPassword(\n", + " username = \"<username>\", \n", + " password = \"<password>\", \n", + ")\n", + "\n", + "# initialize reader\n", + "reader = WeaviateReader(\"https://<cluster-id>.semi.network/\", auth_client_secret=resource_owner_config)" + ] + }, + { + "cell_type": "markdown", + "id": "ce9f299c-4f0a-4bca-bc90-79848f02b381", + "metadata": {}, + "source": [ + "You have two options for the Weaviate reader: 1) directly specify the class_name and properties, or 2) input the raw graphql_query. Examples are shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b92d69a1-d39f-45cf-a136-cb9c2f2f5cdf", + "metadata": {}, + "outputs": [], + "source": [ + "# 1) load data using class_name and properties\n", + "# docs = reader.load_data(\n", + "# class_name=\"Author\", properties=[\"name\", \"description\"], separate_documents=True\n", + "# )\n", + "\n", + "documents = reader.load_data(\n", + " class_name=\"<class_name>\", \n", + " properties=[\"property1\", \"property2\", \"...\"], \n", + " separate_documents=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "722b5d47-9897-4c54-9734-259ab0c1634c", + "metadata": {}, + "outputs": [], + "source": [ + "# 2) example GraphQL query\n", + "# query = \"\"\"\n", + "# {\n", + "# Get {\n", + "# Author {\n", + "# name\n", + "# description\n", + "# }\n", + "# }\n", + "# }\n", + "# \"\"\"\n", + "# docs = reader.load_data(graphql_query=query, separate_documents=True)\n", + "\n", + "query = \"\"\"\n", + "{\n", + " Get {\n", + " <class_name> {\n", + " <property1>\n", + " <property2>\n", + " ...\n", + " }\n", + " }\n", + "}\n", + "\"\"\"\n", + "\n", + "documents = reader.load_data(graphql_query=query, separate_documents=True)" + ] + }, + { + "cell_type": "markdown", + "id": "169b4273-eb20-4d06-9ffe-71320f4570f6", + "metadata": {}, + "source": [ + "### Create index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92599a0a-93ba-4c93-80f1-9acae0663c34", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52d93c3f-a08d-4637-98bc-0c3cc693c563", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"<query_text>\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "771b42be-4108-43a0-a1b4-b259a7819936", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/data_connectors/WebPageDemo.ipynb b/examples/data_connectors/WebPageDemo.ipynb index 77ba8fcb04..faeb457650 100644 --- a/examples/data_connectors/WebPageDemo.ipynb +++ b/examples/data_connectors/WebPageDemo.ipynb @@ -1,221 +1,221 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "30146ad2-f165-4f4b-ae07-fe6597a2964f", - "metadata": {}, - "source": [ - "# WebPageReader Demo\n", - "\n", - "Demonstrates our web page reader." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3c39063b", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "markdown", - "id": "2315a154-f72d-4447-b1eb-cde9b66868cb", - "metadata": {}, - "source": [ - "#### Using SimpleWebPageReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "87bf7ecd-50cd-47da-9f0e-bc48d7ae45d8", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SimpleWebPageReader\n", - "from IPython.display import Markdown, display\n", - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6de3929-51eb-4064-b4b6-c203bb6debc4", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: the html_to_text=True option requires html2text to be installed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "663403de-2e6e-4340-ab8f-8ee681bc06aa", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleWebPageReader(html_to_text=True).load_data([\"http://paulgraham.com/worked.html\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b8cd183a-2423-4a3e-ad92-dfe89ed5454e", - "metadata": {}, - "outputs": [], - "source": [ - "documents[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26854cc3-af61-4910-ab6b-3bed6acfb447", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5cfdf87a-97cb-481f-ad51-be5bf8b5217f", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"What did the author do growing up?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7278d033-cae3-4ddf-96bd-75ea570ca53f", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "2708dc99-0e4d-4c7e-b180-8392286d87c2", - "metadata": {}, - "source": [ - "#### Using TrafilaturaWebReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa2d54c6-c694-4852-a743-165e4777bd56", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import TrafilaturaWebReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "46854f2f-426e-40a3-a87f-5fb51f90e14c", - "metadata": {}, - "outputs": [], - "source": [ - "documents = TrafilaturaWebReader().load_data([\"http://paulgraham.com/worked.html\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "80752ad3-1ed8-4695-9247-22efbe475746", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8cc9b154-1dcf-479b-b49b-251874aea506", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"What did the author do growing up?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "971b6415-8bcd-4d8b-a1de-9b7ada3cd392", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "b2b6d07c", - "metadata": {}, - "source": [ - "### Using RssReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a5ad5ca8", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, RssReader\n", - "\n", - "documents = RssReader().load_data([\n", - " \"https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml\"\n", - " ])\n", - "\n", - "index = GPTListIndex.from_documents(documents)\n", - "\n", - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"What happened in the news today?\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - }, - "vscode": { - "interpreter": { - "hash": "c32397a35d2e76e766f80c3872b208f0c0029e8a6a9b8e2a8fe7b1641cfa009b" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "30146ad2-f165-4f4b-ae07-fe6597a2964f", + "metadata": {}, + "source": [ + "# Web Page Demo\n", + "\n", + "Demonstrates our web page reader." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c39063b", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "markdown", + "id": "2315a154-f72d-4447-b1eb-cde9b66868cb", + "metadata": {}, + "source": [ + "#### Using SimpleWebPageReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87bf7ecd-50cd-47da-9f0e-bc48d7ae45d8", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SimpleWebPageReader\n", + "from IPython.display import Markdown, display\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6de3929-51eb-4064-b4b6-c203bb6debc4", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: the html_to_text=True option requires html2text to be installed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "663403de-2e6e-4340-ab8f-8ee681bc06aa", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleWebPageReader(html_to_text=True).load_data([\"http://paulgraham.com/worked.html\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8cd183a-2423-4a3e-ad92-dfe89ed5454e", + "metadata": {}, + "outputs": [], + "source": [ + "documents[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26854cc3-af61-4910-ab6b-3bed6acfb447", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5cfdf87a-97cb-481f-ad51-be5bf8b5217f", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"What did the author do growing up?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7278d033-cae3-4ddf-96bd-75ea570ca53f", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "2708dc99-0e4d-4c7e-b180-8392286d87c2", + "metadata": {}, + "source": [ + "#### Using TrafilaturaWebReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa2d54c6-c694-4852-a743-165e4777bd56", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import TrafilaturaWebReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46854f2f-426e-40a3-a87f-5fb51f90e14c", + "metadata": {}, + "outputs": [], + "source": [ + "documents = TrafilaturaWebReader().load_data([\"http://paulgraham.com/worked.html\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "80752ad3-1ed8-4695-9247-22efbe475746", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cc9b154-1dcf-479b-b49b-251874aea506", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"What did the author do growing up?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "971b6415-8bcd-4d8b-a1de-9b7ada3cd392", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "b2b6d07c", + "metadata": {}, + "source": [ + "### Using RssReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5ad5ca8", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, RssReader\n", + "\n", + "documents = RssReader().load_data([\n", + " \"https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml\"\n", + " ])\n", + "\n", + "index = GPTListIndex.from_documents(documents)\n", + "\n", + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"What happened in the news today?\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "vscode": { + "interpreter": { + "hash": "c32397a35d2e76e766f80c3872b208f0c0029e8a6a9b8e2a8fe7b1641cfa009b" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/docstore/DocstoreDemo.ipynb b/examples/docstore/DocstoreDemo.ipynb index fe789d243c..324771f1f0 100644 --- a/examples/docstore/DocstoreDemo.ipynb +++ b/examples/docstore/DocstoreDemo.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "846a4f8b", - "metadata": {}, - "source": [ - "# Docstore Demo" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -296,7 +288,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/evaluation/GuardrailsDemo.ipynb b/examples/evaluation/GuardrailsDemo.ipynb index ec19a3d2d6..78b177a61d 100644 --- a/examples/evaluation/GuardrailsDemo.ipynb +++ b/examples/evaluation/GuardrailsDemo.ipynb @@ -1,341 +1,341 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", - "metadata": {}, - "source": [ - "# Simple Index Guardrails Demo" - ] - }, - { - "cell_type": "markdown", - "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", - "metadata": {}, - "source": [ - "#### Load documents, build the GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", - "\n", - "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", - "metadata": {}, - "outputs": [], - "source": [ - "# load documents\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 18579 tokens\n", - "> [build_index_from_documents] Total embedding token usage: 18579 tokens\n" - ] - } - ], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=512)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2bbccf1d-ac39-427c-b3a3-f8e9d1d12348", - "metadata": {}, - "outputs": [], - "source": [ - "# save index to disk\n", - "index.save_to_disk('index_simple.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "197ca78e-1310-474d-91e3-877c3636b901", - "metadata": {}, - "outputs": [], - "source": [ - "# load index from disk\n", - "index = GPTSimpleVectorIndex.load_from_disk('index_simple.json')" - ] - }, - { - "cell_type": "markdown", - "id": "8b7d7c61-b5d7-4b8f-b90b-3ebee1103f27", - "metadata": {}, - "source": [ - "#### Define Query + Guardrails Spec" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "6fb88295-0840-4e2d-b79b-def0b0a63a7f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.output_parsers import GuardrailsOutputParser\n", - "from gpt_index.llm_predictor import StructuredLLMPredictor" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "057139d2-09e8-4b8d-83a1-a2356a1475a8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "llm_predictor = StructuredLLMPredictor()" - ] - }, - { - "cell_type": "markdown", - "id": "bc25edf7-9343-4e82-a3f1-eec4281a9371", - "metadata": {}, - "source": [ - "**Define custom QA and Refine Prompts**" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "2833d086-d240-4798-b3c5-a83ac4593b0e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.prompts.prompts import QuestionAnswerPrompt, RefinePrompt\n", - "from gpt_index.prompts.default_prompts import DEFAULT_TEXT_QA_PROMPT_TMPL, DEFAULT_REFINE_PROMPT_TMPL" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "a4b9201d-fe16-4cc0-8135-a08d9928625d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# NOTE: we don't need to define the query_str in the rail spec, we can define during query-time.\n", - "rail_spec = (\"\"\"\n", - "<rail version=\"0.1\">\n", - "\n", - "<output>\n", - " <list name=\"points\" description=\"Bullet points regarding events in the author's life.\">\n", - " <object>\n", - " <string name=\"explanation\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", - " <string name=\"explanation2\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", - " <string name=\"explanation3\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", - " </object>\n", - " </list>\n", - "</output>\n", - "\n", - "<prompt>\n", - "\n", - "Query string here.\n", - "\n", - "@xml_prefix_prompt\n", - "\n", - "{output_schema}\n", - "\n", - "@json_suffix_prompt_v2_wo_none\n", - "</prompt>\n", - "</rail>\n", - "\"\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f7af4ebf-1dff-48ec-9fb7-8926af45b6a0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "output_parser = GuardrailsOutputParser.from_rail_string(rail_spec, llm=llm_predictor.llm)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "a9b440d4-6fb4-46e6-973f-44207b432d3f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# NOTE: we use the same output parser for both prompts, though you can choose to use different parsers\n", - "# NOTE: here we add formatting instructions to the prompts.\n", - "\n", - "fmt_qa_tmpl = output_parser.format(DEFAULT_TEXT_QA_PROMPT_TMPL)\n", - "fmt_refine_tmpl = output_parser.format(DEFAULT_REFINE_PROMPT_TMPL)\n", - "\n", - "qa_prompt = QuestionAnswerPrompt(fmt_qa_tmpl, output_parser=output_parser)\n", - "refine_prompt = RefinePrompt(fmt_refine_tmpl, output_parser=output_parser)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "1ba18a80-35f4-4fd4-9b13-9f13f84db4fe", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context information is below. \n", - "---------------------\n", - "{context_str}\n", - "---------------------\n", - "Given the context information and not prior knowledge, answer the question: {query_str}\n", - "\n", - "\n", - "\n", - "Given below is XML that describes the information to extract from this document and the tags to extract it into.\n", - "\n", - "\n", - "<output>\n", - " <list name=\"points\" description=\"Bullet points regarding events in the author's life.\">\n", - " <object>\n", - " <string name=\"explanation\" format=\"one-line\"/>\n", - " <string name=\"explanation2\" format=\"one-line\"/>\n", - " <string name=\"explanation3\" format=\"one-line\"/>\n", - " </object>\n", - " </list>\n", - "</output>\n", - "\n", - "\n", - "\n", - "\n", - "ONLY return a valid JSON object (no other text is necessary). The JSON MUST conform to the XML format, including any types and format requests e.g. requests for lists, objects and specific types. Be correct and concise.\n", - "\n", - "JSON Output:\n", - "\n", - "\n" - ] - } - ], - "source": [ - "# take a look at the new QA template! \n", - "print(fmt_qa_tmpl)" - ] - }, - { - "cell_type": "markdown", - "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", - "metadata": {}, - "source": [ - "#### Query Index" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "fb9cdf43-0f31-4c36-869b-df9fa50aebdb", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 754 tokens\n", - "> [query] Total LLM token usage: 754 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 11 tokens\n", - "> [query] Total embedding token usage: 11 tokens\n" - ] - } - ], - "source": [ - "response = index.query(\n", - " \"What are the three items the author did growing up?\", \n", - " text_qa_template=qa_prompt, \n", - " refine_template=refine_prompt, \n", - " llm_predictor=llm_predictor\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "bc7760b6-5be3-4303-b97e-3f5edacf674b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'points': [{'explanation': 'Writing short stories', 'explanation2': 'Programming on an IBM 1401', 'explanation3': 'Using microcomputers'}]}\n" - ] - } - ], - "source": [ - "print(response)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "llama_index_shreyar", - "language": "python", - "name": "llama_index_shreyar" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", + "metadata": {}, + "source": [ + "# Simple Index Demo" + ] + }, + { + "cell_type": "markdown", + "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", + "metadata": {}, + "source": [ + "#### Load documents, build the GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", + "\n", + "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", + "metadata": {}, + "outputs": [], + "source": [ + "# load documents\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 18579 tokens\n", + "> [build_index_from_documents] Total embedding token usage: 18579 tokens\n" + ] + } + ], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=512)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2bbccf1d-ac39-427c-b3a3-f8e9d1d12348", + "metadata": {}, + "outputs": [], + "source": [ + "# save index to disk\n", + "index.save_to_disk('index_simple.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "197ca78e-1310-474d-91e3-877c3636b901", + "metadata": {}, + "outputs": [], + "source": [ + "# load index from disk\n", + "index = GPTSimpleVectorIndex.load_from_disk('index_simple.json')" + ] + }, + { + "cell_type": "markdown", + "id": "8b7d7c61-b5d7-4b8f-b90b-3ebee1103f27", + "metadata": {}, + "source": [ + "#### Define Query + Guardrails Spec" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6fb88295-0840-4e2d-b79b-def0b0a63a7f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.output_parsers import GuardrailsOutputParser\n", + "from gpt_index.llm_predictor import StructuredLLMPredictor" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "057139d2-09e8-4b8d-83a1-a2356a1475a8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "llm_predictor = StructuredLLMPredictor()" + ] + }, + { + "cell_type": "markdown", + "id": "bc25edf7-9343-4e82-a3f1-eec4281a9371", + "metadata": {}, + "source": [ + "**Define custom QA and Refine Prompts**" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2833d086-d240-4798-b3c5-a83ac4593b0e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.prompts.prompts import QuestionAnswerPrompt, RefinePrompt\n", + "from gpt_index.prompts.default_prompts import DEFAULT_TEXT_QA_PROMPT_TMPL, DEFAULT_REFINE_PROMPT_TMPL" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "a4b9201d-fe16-4cc0-8135-a08d9928625d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# NOTE: we don't need to define the query_str in the rail spec, we can define during query-time.\n", + "rail_spec = (\"\"\"\n", + "<rail version=\"0.1\">\n", + "\n", + "<output>\n", + " <list name=\"points\" description=\"Bullet points regarding events in the author's life.\">\n", + " <object>\n", + " <string name=\"explanation\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", + " <string name=\"explanation2\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", + " <string name=\"explanation3\" format=\"one-line\" on-fail-one-line=\"noop\" />\n", + " </object>\n", + " </list>\n", + "</output>\n", + "\n", + "<prompt>\n", + "\n", + "Query string here.\n", + "\n", + "@xml_prefix_prompt\n", + "\n", + "{output_schema}\n", + "\n", + "@json_suffix_prompt_v2_wo_none\n", + "</prompt>\n", + "</rail>\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "f7af4ebf-1dff-48ec-9fb7-8926af45b6a0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "output_parser = GuardrailsOutputParser.from_rail_string(rail_spec, llm=llm_predictor.llm)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a9b440d4-6fb4-46e6-973f-44207b432d3f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# NOTE: we use the same output parser for both prompts, though you can choose to use different parsers\n", + "# NOTE: here we add formatting instructions to the prompts.\n", + "\n", + "fmt_qa_tmpl = output_parser.format(DEFAULT_TEXT_QA_PROMPT_TMPL)\n", + "fmt_refine_tmpl = output_parser.format(DEFAULT_REFINE_PROMPT_TMPL)\n", + "\n", + "qa_prompt = QuestionAnswerPrompt(fmt_qa_tmpl, output_parser=output_parser)\n", + "refine_prompt = RefinePrompt(fmt_refine_tmpl, output_parser=output_parser)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1ba18a80-35f4-4fd4-9b13-9f13f84db4fe", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Context information is below. \n", + "---------------------\n", + "{context_str}\n", + "---------------------\n", + "Given the context information and not prior knowledge, answer the question: {query_str}\n", + "\n", + "\n", + "\n", + "Given below is XML that describes the information to extract from this document and the tags to extract it into.\n", + "\n", + "\n", + "<output>\n", + " <list name=\"points\" description=\"Bullet points regarding events in the author's life.\">\n", + " <object>\n", + " <string name=\"explanation\" format=\"one-line\"/>\n", + " <string name=\"explanation2\" format=\"one-line\"/>\n", + " <string name=\"explanation3\" format=\"one-line\"/>\n", + " </object>\n", + " </list>\n", + "</output>\n", + "\n", + "\n", + "\n", + "\n", + "ONLY return a valid JSON object (no other text is necessary). The JSON MUST conform to the XML format, including any types and format requests e.g. requests for lists, objects and specific types. Be correct and concise.\n", + "\n", + "JSON Output:\n", + "\n", + "\n" + ] + } + ], + "source": [ + "# take a look at the new QA template! \n", + "print(fmt_qa_tmpl)" + ] + }, + { + "cell_type": "markdown", + "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", + "metadata": {}, + "source": [ + "#### Query Index" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fb9cdf43-0f31-4c36-869b-df9fa50aebdb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 754 tokens\n", + "> [query] Total LLM token usage: 754 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 11 tokens\n", + "> [query] Total embedding token usage: 11 tokens\n" + ] + } + ], + "source": [ + "response = index.query(\n", + " \"What are the three items the author did growing up?\", \n", + " text_qa_template=qa_prompt, \n", + " refine_template=refine_prompt, \n", + " llm_predictor=llm_predictor\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "bc7760b6-5be3-4303-b97e-3f5edacf674b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'points': [{'explanation': 'Writing short stories', 'explanation2': 'Programming on an IBM 1401', 'explanation3': 'Using microcomputers'}]}\n" + ] + } + ], + "source": [ + "print(response)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llama_index_shreyar", + "language": "python", + "name": "llama_index_shreyar" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/evaluation/LangchainOutputParserDemo.ipynb b/examples/evaluation/LangchainOutputParserDemo.ipynb index fcfe07309f..91f6f5a2ff 100644 --- a/examples/evaluation/LangchainOutputParserDemo.ipynb +++ b/examples/evaluation/LangchainOutputParserDemo.ipynb @@ -1,333 +1,333 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", - "metadata": {}, - "source": [ - "# Simple Index LangchainOutputParser Demo" - ] - }, - { - "cell_type": "markdown", - "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", - "metadata": {}, - "source": [ - "#### Load documents, build the GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", - "\n", - "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", - "metadata": {}, - "outputs": [], - "source": [ - "# load documents\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 18579 tokens\n", - "> [build_index_from_documents] Total embedding token usage: 18579 tokens\n" - ] - } - ], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=512)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2bbccf1d-ac39-427c-b3a3-f8e9d1d12348", - "metadata": {}, - "outputs": [], - "source": [ - "# save index to disk\n", - "index.save_to_disk('index_simple.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "197ca78e-1310-474d-91e3-877c3636b901", - "metadata": {}, - "outputs": [], - "source": [ - "# load index from disk\n", - "index = GPTSimpleVectorIndex.load_from_disk('index_simple.json')" - ] - }, - { - "cell_type": "markdown", - "id": "8b7d7c61-b5d7-4b8f-b90b-3ebee1103f27", - "metadata": {}, - "source": [ - "#### Define Query + Langchain Output Parser" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "6fb88295-0840-4e2d-b79b-def0b0a63a7f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.output_parsers import LangchainOutputParser\n", - "from gpt_index.llm_predictor import StructuredLLMPredictor\n", - "from langchain.output_parsers import StructuredOutputParser, ResponseSchema" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "057139d2-09e8-4b8d-83a1-a2356a1475a8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "llm_predictor = StructuredLLMPredictor()" - ] - }, - { - "cell_type": "markdown", - "id": "bc25edf7-9343-4e82-a3f1-eec4281a9371", - "metadata": {}, - "source": [ - "**Define custom QA and Refine Prompts**" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2833d086-d240-4798-b3c5-a83ac4593b0e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.prompts.prompts import QuestionAnswerPrompt, RefinePrompt\n", - "from gpt_index.prompts.default_prompts import DEFAULT_TEXT_QA_PROMPT_TMPL, DEFAULT_REFINE_PROMPT_TMPL" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a4b9201d-fe16-4cc0-8135-a08d9928625d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "response_schemas = [\n", - " ResponseSchema(name=\"Education\", description=\"Describes the author's educational experience/background.\"),\n", - " ResponseSchema(name=\"Work\", description=\"Describes the author's work experience/background.\")\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "e73b87b8-90da-4ab8-9ff7-e40880277d9b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "lc_output_parser = StructuredOutputParser.from_response_schemas(response_schemas)\n", - "output_parser = LangchainOutputParser(lc_output_parser)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "a9b440d4-6fb4-46e6-973f-44207b432d3f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# NOTE: we use the same output parser for both prompts, though you can choose to use different parsers\n", - "# NOTE: here we add formatting instructions to the prompts.\n", - "\n", - "fmt_qa_tmpl = output_parser.format(DEFAULT_TEXT_QA_PROMPT_TMPL)\n", - "fmt_refine_tmpl = output_parser.format(DEFAULT_REFINE_PROMPT_TMPL)\n", - "\n", - "qa_prompt = QuestionAnswerPrompt(fmt_qa_tmpl, output_parser=output_parser)\n", - "refine_prompt = RefinePrompt(fmt_refine_tmpl, output_parser=output_parser)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "1ba18a80-35f4-4fd4-9b13-9f13f84db4fe", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context information is below. \n", - "---------------------\n", - "{context_str}\n", - "---------------------\n", - "Given the context information and not prior knowledge, answer the question: {query_str}\n", - "\n", - "\n", - "The output should be a markdown code snippet formatted in the following schema:\n", - "\n", - "```json\n", - "{{\n", - "\t\"Education\": string // Describes the author's educational experience/background.\n", - "\t\"Work\": string // Describes the author's work experience/background.\n", - "}}\n", - "```\n" - ] - } - ], - "source": [ - "# take a look at the new QA template! \n", - "print(fmt_qa_tmpl)" - ] - }, - { - "cell_type": "markdown", - "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", - "metadata": {}, - "source": [ - "#### Query Index" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fb9cdf43-0f31-4c36-869b-df9fa50aebdb", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 609 tokens\n" - ] + "cells": [ + { + "cell_type": "markdown", + "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", + "metadata": {}, + "source": [ + "# Simple Index Demo" + ] + }, + { + "cell_type": "markdown", + "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", + "metadata": {}, + "source": [ + "#### Load documents, build the GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", + "\n", + "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", + "metadata": {}, + "outputs": [], + "source": [ + "# load documents\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 18579 tokens\n", + "> [build_index_from_documents] Total embedding token usage: 18579 tokens\n" + ] + } + ], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=512)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2bbccf1d-ac39-427c-b3a3-f8e9d1d12348", + "metadata": {}, + "outputs": [], + "source": [ + "# save index to disk\n", + "index.save_to_disk('index_simple.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "197ca78e-1310-474d-91e3-877c3636b901", + "metadata": {}, + "outputs": [], + "source": [ + "# load index from disk\n", + "index = GPTSimpleVectorIndex.load_from_disk('index_simple.json')" + ] + }, + { + "cell_type": "markdown", + "id": "8b7d7c61-b5d7-4b8f-b90b-3ebee1103f27", + "metadata": {}, + "source": [ + "#### Define Query + Langchain Output Parser" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6fb88295-0840-4e2d-b79b-def0b0a63a7f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.output_parsers import LangchainOutputParser\n", + "from gpt_index.llm_predictor import StructuredLLMPredictor\n", + "from langchain.output_parsers import StructuredOutputParser, ResponseSchema" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "057139d2-09e8-4b8d-83a1-a2356a1475a8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "llm_predictor = StructuredLLMPredictor()" + ] + }, + { + "cell_type": "markdown", + "id": "bc25edf7-9343-4e82-a3f1-eec4281a9371", + "metadata": {}, + "source": [ + "**Define custom QA and Refine Prompts**" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2833d086-d240-4798-b3c5-a83ac4593b0e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.prompts.prompts import QuestionAnswerPrompt, RefinePrompt\n", + "from gpt_index.prompts.default_prompts import DEFAULT_TEXT_QA_PROMPT_TMPL, DEFAULT_REFINE_PROMPT_TMPL" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a4b9201d-fe16-4cc0-8135-a08d9928625d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "response_schemas = [\n", + " ResponseSchema(name=\"Education\", description=\"Describes the author's educational experience/background.\"),\n", + " ResponseSchema(name=\"Work\", description=\"Describes the author's work experience/background.\")\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e73b87b8-90da-4ab8-9ff7-e40880277d9b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "lc_output_parser = StructuredOutputParser.from_response_schemas(response_schemas)\n", + "output_parser = LangchainOutputParser(lc_output_parser)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9b440d4-6fb4-46e6-973f-44207b432d3f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# NOTE: we use the same output parser for both prompts, though you can choose to use different parsers\n", + "# NOTE: here we add formatting instructions to the prompts.\n", + "\n", + "fmt_qa_tmpl = output_parser.format(DEFAULT_TEXT_QA_PROMPT_TMPL)\n", + "fmt_refine_tmpl = output_parser.format(DEFAULT_REFINE_PROMPT_TMPL)\n", + "\n", + "qa_prompt = QuestionAnswerPrompt(fmt_qa_tmpl, output_parser=output_parser)\n", + "refine_prompt = RefinePrompt(fmt_refine_tmpl, output_parser=output_parser)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1ba18a80-35f4-4fd4-9b13-9f13f84db4fe", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Context information is below. \n", + "---------------------\n", + "{context_str}\n", + "---------------------\n", + "Given the context information and not prior knowledge, answer the question: {query_str}\n", + "\n", + "\n", + "The output should be a markdown code snippet formatted in the following schema:\n", + "\n", + "```json\n", + "{{\n", + "\t\"Education\": string // Describes the author's educational experience/background.\n", + "\t\"Work\": string // Describes the author's work experience/background.\n", + "}}\n", + "```\n" + ] + } + ], + "source": [ + "# take a look at the new QA template! \n", + "print(fmt_qa_tmpl)" + ] + }, + { + "cell_type": "markdown", + "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", + "metadata": {}, + "source": [ + "#### Query Index" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "fb9cdf43-0f31-4c36-869b-df9fa50aebdb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 609 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [query] Total LLM token usage: 609 tokens\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 11 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [query] Total embedding token usage: 11 tokens\n" + ] + } + ], + "source": [ + "response = index.query(\n", + " \"What are a few things the author did growing up?\", \n", + " text_qa_template=qa_prompt, \n", + " refine_template=refine_prompt, \n", + " llm_predictor=llm_predictor\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "bc7760b6-5be3-4303-b97e-3f5edacf674b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Education': 'Before college, the author wrote short stories and experimented with programming on an IBM 1401.', 'Work': 'The author worked on writing and programming outside of school.'}\n" + ] + } + ], + "source": [ + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "002a4b5f-51ac-437a-afe7-94e2687737a9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llama_index", + "language": "python", + "name": "llama_index" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [query] Total LLM token usage: 609 tokens\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 11 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [query] Total embedding token usage: 11 tokens\n" - ] - } - ], - "source": [ - "response = index.query(\n", - " \"What are a few things the author did growing up?\", \n", - " text_qa_template=qa_prompt, \n", - " refine_template=refine_prompt, \n", - " llm_predictor=llm_predictor\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "bc7760b6-5be3-4303-b97e-3f5edacf674b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Education': 'Before college, the author wrote short stories and experimented with programming on an IBM 1401.', 'Work': 'The author worked on writing and programming outside of school.'}\n" - ] - } - ], - "source": [ - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "002a4b5f-51ac-437a-afe7-94e2687737a9", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "llama_index", - "language": "python", - "name": "llama_index" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/evaluation/TestNYC-Evaluation-Query.ipynb b/examples/evaluation/TestNYC-Evaluation-Query.ipynb index 0642aaa53a..518103912a 100644 --- a/examples/evaluation/TestNYC-Evaluation-Query.ipynb +++ b/examples/evaluation/TestNYC-Evaluation-Query.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "00a0d904", - "metadata": {}, - "source": [ - "# NYC Wiki Evaulate Query " - ] - }, { "cell_type": "code", "execution_count": 1, diff --git a/examples/evaluation/TestNYC-Evaluation.ipynb b/examples/evaluation/TestNYC-Evaluation.ipynb index 47aec207d3..1a15885d7f 100644 --- a/examples/evaluation/TestNYC-Evaluation.ipynb +++ b/examples/evaluation/TestNYC-Evaluation.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "e4db1f4f", - "metadata": {}, - "source": [ - "# NYC Wiki Evaluate Response" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -509,7 +501,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/gatsby/TestGatsby.ipynb b/examples/gatsby/TestGatsby.ipynb index 6ab8cd644f..b7c5f3be54 100644 --- a/examples/gatsby/TestGatsby.ipynb +++ b/examples/gatsby/TestGatsby.ipynb @@ -1,192 +1,184 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "481102d7", - "metadata": {}, - "source": [ - "# Gatsby Book Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ffeb4eee", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Building index from nodes: 9 chunks\n", - "0/95\n", - "10/95\n", - "20/95\n", - "30/95\n", - "40/95\n", - "50/95\n", - "60/95\n", - "70/95\n", - "80/95\n", - "90/95\n", - "> [build_index_from_documents] Total token usage: 34226 tokens\n" - ] - } - ], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTTreeIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", - "metadata": {}, - "outputs": [], - "source": [ - "index.save_to_disk('index_gatsby.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", - "metadata": {}, - "outputs": [], - "source": [ - "# try loading\n", - "new_index = GPTTreeIndex.load_from_disk('index_gatsby.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the narrator do after getting back to Chicago?\n", - ">[Level 0] Selected node: [8]/[8]\n", - ">[Level 1] Selected node: [8]/[8]\n", - "> [query] Total token usage: 6058 tokens\n" - ] - } - ], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "\n", - "response = new_index.query(\"What did the narrator do after getting back to Chicago?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "91581e60-6051-40ae-bba6-8fa08ffbb728", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>The narrator returned to his home in Chicago and began calling people to inform them of Gatsby's funeral. He was worried that the funeral would draw a sightseeing crowd and wanted to keep it private. He was relieved when Klipspringer called and promised to tell anyone who might be interested about the funeral. He then asked Klipspringer to commit to attending the funeral, but Klipspringer hesitated.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca10a9c1-9dff-476d-b218-3208a1b8e7f6", - "metadata": {}, - "outputs": [], - "source": [ - "# GPT is confused by the text evidence\n", - "response = new_index.query(\"What did Gatsby do before he met Daisy?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "ffeb4eee", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Building index from nodes: 9 chunks\n", + "0/95\n", + "10/95\n", + "20/95\n", + "30/95\n", + "40/95\n", + "50/95\n", + "60/95\n", + "70/95\n", + "80/95\n", + "90/95\n", + "> [build_index_from_documents] Total token usage: 34226 tokens\n" + ] + } + ], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTTreeIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", + "metadata": {}, + "outputs": [], + "source": [ + "index.save_to_disk('index_gatsby.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", + "metadata": {}, + "outputs": [], + "source": [ + "# try loading\n", + "new_index = GPTTreeIndex.load_from_disk('index_gatsby.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the narrator do after getting back to Chicago?\n", + ">[Level 0] Selected node: [8]/[8]\n", + ">[Level 1] Selected node: [8]/[8]\n", + "> [query] Total token usage: 6058 tokens\n" + ] + } + ], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "\n", + "response = new_index.query(\"What did the narrator do after getting back to Chicago?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "91581e60-6051-40ae-bba6-8fa08ffbb728", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>The narrator returned to his home in Chicago and began calling people to inform them of Gatsby's funeral. He was worried that the funeral would draw a sightseeing crowd and wanted to keep it private. He was relieved when Klipspringer called and promised to tell anyone who might be interested about the funeral. He then asked Klipspringer to commit to attending the funeral, but Klipspringer hesitated.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca10a9c1-9dff-476d-b218-3208a1b8e7f6", + "metadata": {}, + "outputs": [], + "source": [ + "# GPT is confused by the text evidence\n", + "response = new_index.query(\"What did Gatsby do before he met Daisy?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/knowledge_graph/KnowledgeGraphDemo.ipynb b/examples/knowledge_graph/KnowledgeGraphDemo.ipynb index 9b1b3b6ef2..70ade12dd8 100644 --- a/examples/knowledge_graph/KnowledgeGraphDemo.ipynb +++ b/examples/knowledge_graph/KnowledgeGraphDemo.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "c0e1f6c3", - "metadata": {}, - "source": [ - "# GPTKnowledgeGraphIndex Demo" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -554,7 +546,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/multimodal/Multimodal.ipynb b/examples/multimodal/Multimodal.ipynb index a3074ea67e..8a42426e2c 100644 --- a/examples/multimodal/Multimodal.ipynb +++ b/examples/multimodal/Multimodal.ipynb @@ -1,602 +1,594 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "90acf9c9", - "metadata": {}, - "source": [ - "# Multimodel Document Loading" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "d4073749", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index import SimpleDirectoryReader, GPTSimpleVectorIndex\n", - "from gpt_index.readers.file.base import (\n", - " DEFAULT_FILE_EXTRACTOR, \n", - " ImageParser,\n", - ")\n", - "from gpt_index.response.notebook_utils import (\n", - " display_response, \n", - " display_image,\n", - ")\n", - "from gpt_index.indices.query.query_transform.base import (\n", - " ImageOutputQueryTransform,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "a4b74e87", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: By default, image parser converts image into text and discard the original image. \n", - "# Here, we explicitly keep both the original image and parsed text in an image document\n", - "image_parser = ImageParser(keep_image=True, parse_text=True)\n", - "file_extractor = DEFAULT_FILE_EXTRACTOR\n", - "file_extractor.update(\n", - "{\n", - " \".jpg\": image_parser,\n", - " \".png\": image_parser,\n", - " \".jpeg\": image_parser,\n", - "})\n", - "\n", - "# NOTE: we add filename as metadata for all documents\n", - "filename_fn = lambda filename: {'file_name': filename}" - ] - }, - { - "cell_type": "markdown", - "id": "ca801c8c", - "metadata": {}, - "source": [ - "# Q&A over Receipt Images" - ] - }, - { - "cell_type": "markdown", - "id": "80cce8e4", - "metadata": {}, - "source": [ - "We first ingest our receipt images with the *custom* `image parser` and `metadata function` defined above. \n", - "This gives us `image documents` instead of only text documents." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "dbc28f2d", - "metadata": {}, - "outputs": [], - "source": [ - "receipt_reader = SimpleDirectoryReader(\n", - " input_dir='data/receipts', \n", - " file_extractor=file_extractor, \n", - " file_metadata=filename_fn,\n", - ")\n", - "receipt_documents = receipt_reader.load_data()" - ] - }, - { - "cell_type": "markdown", - "id": "12fd6f45", - "metadata": {}, - "source": [ - "We build a simple vector index as usual, but unlike before, our index holds images in addition to text." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "629cab63", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 2180 tokens\n" - ] - } - ], - "source": [ - "receipts_index = GPTSimpleVectorIndex.from_documents(receipt_documents)" - ] - }, - { - "cell_type": "markdown", - "id": "8fef454f", - "metadata": {}, - "source": [ - "We can now ask a question that prompts for response with both text and image. \n", - "We use a custom query transform `ImageOutputQueryTransform` to add instruction on how to display the image nicely in the notebook." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "7c078dc0", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 1005 tokens\n", - "INFO:root:> [query] Total embedding token usage: 30 tokens\n" - ] - } - ], - "source": [ - "receipts_response = receipts_index.query(\n", - " 'When was the last time I went to McDonald\\'s and how much did I spend. \\\n", - " Also show me the receipt from my visit.',\n", - " query_transform=ImageOutputQueryTransform(width=400)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "05c180ae", - "metadata": {}, - "source": [ - "We now have rich multimodal response with inline text and image! \n", - "\n", - "The source nodes section gives additional details on retrieved data used for synthesizing the final response. \n", - "In this case, we can verify that the receipt for McDonald's is correctly retrieved. " - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "810ad2e9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** The last time you went to McDonald's was on 03/10/2018 at 07:39:12 PM and you spent $26.15. Here is the receipt from your visit: <img src=\"data/receipts/1100-receipt.jpg\" width=\"400\" />" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" + "cells": [ + { + "cell_type": "code", + "execution_count": 13, + "id": "d4073749", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index import SimpleDirectoryReader, GPTSimpleVectorIndex\n", + "from gpt_index.readers.file.base import (\n", + " DEFAULT_FILE_EXTRACTOR, \n", + " ImageParser,\n", + ")\n", + "from gpt_index.response.notebook_utils import (\n", + " display_response, \n", + " display_image,\n", + ")\n", + "from gpt_index.indices.query.query_transform.base import (\n", + " ImageOutputQueryTransform,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a4b74e87", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: By default, image parser converts image into text and discard the original image. \n", + "# Here, we explicitly keep both the original image and parsed text in an image document\n", + "image_parser = ImageParser(keep_image=True, parse_text=True)\n", + "file_extractor = DEFAULT_FILE_EXTRACTOR\n", + "file_extractor.update(\n", + "{\n", + " \".jpg\": image_parser,\n", + " \".png\": image_parser,\n", + " \".jpeg\": image_parser,\n", + "})\n", + "\n", + "# NOTE: we add filename as metadata for all documents\n", + "filename_fn = lambda filename: {'file_name': filename}" + ] + }, + { + "cell_type": "markdown", + "id": "ca801c8c", + "metadata": {}, + "source": [ + "# Q&A over Receipt Images" + ] + }, + { + "cell_type": "markdown", + "id": "80cce8e4", + "metadata": {}, + "source": [ + "We first ingest our receipt images with the *custom* `image parser` and `metadata function` defined above. \n", + "This gives us `image documents` instead of only text documents." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "dbc28f2d", + "metadata": {}, + "outputs": [], + "source": [ + "receipt_reader = SimpleDirectoryReader(\n", + " input_dir='data/receipts', \n", + " file_extractor=file_extractor, \n", + " file_metadata=filename_fn,\n", + ")\n", + "receipt_documents = receipt_reader.load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "12fd6f45", + "metadata": {}, + "source": [ + "We build a simple vector index as usual, but unlike before, our index holds images in addition to text." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "629cab63", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 2180 tokens\n" + ] + } + ], + "source": [ + "receipts_index = GPTSimpleVectorIndex.from_documents(receipt_documents)" + ] + }, + { + "cell_type": "markdown", + "id": "8fef454f", + "metadata": {}, + "source": [ + "We can now ask a question that prompts for response with both text and image. \n", + "We use a custom query transform `ImageOutputQueryTransform` to add instruction on how to display the image nicely in the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "7c078dc0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 1005 tokens\n", + "INFO:root:> [query] Total embedding token usage: 30 tokens\n" + ] + } + ], + "source": [ + "receipts_response = receipts_index.query(\n", + " 'When was the last time I went to McDonald\\'s and how much did I spend. \\\n", + " Also show me the receipt from my visit.',\n", + " query_transform=ImageOutputQueryTransform(width=400)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "05c180ae", + "metadata": {}, + "source": [ + "We now have rich multimodal response with inline text and image! \n", + "\n", + "The source nodes section gives additional details on retrieved data used for synthesizing the final response. \n", + "In this case, we can verify that the receipt for McDonald's is correctly retrieved. " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "810ad2e9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "**`Final Response:`** The last time you went to McDonald's was on 03/10/2018 at 07:39:12 PM and you spent $26.15. Here is the receipt from your visit: <img src=\"data/receipts/1100-receipt.jpg\" width=\"400\" />" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/1`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 3949d7d1-96bc-4d46-beb6-79d2acbb1fd6<br>**Similarity:** 0.7981321083637717<br>**Text:** file_name: data/receipts/1100-receipt.jpg\n", + "\n", + "<s_menu><s_nm> Story</s_nm><s_num> 16725 Stony Platin ...<br>**Image:**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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BkSxCQSDjgez1M5hYzxumvGRzfWT483rZrKetFFV0R4DBts0i0taq40CslAIABYhXZyd860FyJ1LjeykikjWROiSaK8AqjT9UurTBa7L2V3n65LRL47LdQPwASZMvp11KSxCTtWaLWTOZShLtc7gUsLvrrkwJfsuFmwKZWyfSTYqWW97nFjTOpSyopRSoFZEPeynJagBwDEslRvZNwlRMYdj6wcgQqToqgnKuILaQJDl8LCkXC5Y22XD4dCavqzk2qrmLLyyiNRWO1sfg0kHKcFOby+gCojD9lphAQfnOllVIQYRwNDEtp0pKhCAgJheyiG9Olpff91+DVV/FhWIjA+UIHYWDgOgkJWS02V+QARlDgXBC6t0hj2CMbDtQJ/6tmnPnT37f/u//F8jEs+6QWyC4py5idHI0q9PGcQ2B5Vbov0HDhif912XmBFAWSeTyXe+851PP/qZjX37k4gCpNT9x//w799666311VXu+hhCbNrU9Ta2fG119YXnnvvv/82//af//J+JagiRpWuaBsqmxWVYXidry3aFqgWXSrDfmlqdEpyS2edoBhIQkS6GYYC2ifsT83DtQwdWVzkeSM3oUt9AM2IBQFZiRCVBIhIWaBABDRGILGxVWNiZv3a+nIAXRFjizR55pCrou/fo/U3Xu+XEF5FBr1kpdTeLsmYscSheAmmqChortWo0uStXVStp/9evg0vW5VK0sWpj2F01Uhxn8NSWn2Awr8yPDcu4ImbumAHQWpy4tMAREVRxe6w6J0XMcIFdG23xb+ccLp2KteznCrwdco9fLq3muiNclIhGo5FZjL537nBSydz77XQ5tez04dQc8rBql48LI9bzrCklAoXYrKytURyAEJTpF6oKIB6b8M3FAp2hpZ/AF1xjzu+VQbuIRkvYz8naTx2Kb2KGbr2lnjjXqntLVHcmOzs7O02I2qdIQbNjGbAYzE40BieYmEWBQvxn//y/2b9/f9d1Xd/1Xd/33Z/86Z+++LOfjZsREjbRZqtolwSVUZkQbrv7rpR4e2un73oQ7uezre2ds++9/9qrrwozEmrqSSBJr5Wq0EWQckHZXGY3OflaNjoVyK62be0dVzALngkqkkSFe0yAHTQUjmweOsRJu7gKsUmSlBkoASZAQRDEhpAMRE1VWBFFKRIRYeGomjNry9FJ2laOogWuKDn/u/T03d51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UIfooRpk5krYtz6EDN1p0YymyUUZKsolId+Ebv3IceZmJgBMmhaik0tceW9v79KlB8bd+M233jpy5Mjjn/rUqdOnf/TKK1u3b1+7fn3z+HEEdLhye7v19fX63Z2SVowXrMxp31JfwMqf6q8fehVqhCbQj1955dGPPTIeT5599nu/8Au/uLm58Qd/8L/t3tkG0Z+9/tNH//pf39vb62fThujF7790/vy5vb29F158/td+7dd+9MrL0+n0nXfePn/+nvl8ePbZZ/f39y9fvvzcc8998Ytf/PrXv/7www+fOHHihz/84cMPP/zcc88dP358NBrZxn73u989evToe++9d+XKlZs3b37zm9/8zd/8zQceeAAAgOlnr7/13jvvDn3/yU988iev/BgJU0q/9MUvmoJh5nfeeedP//RP/+E//IevvPLKiy88d+L48atXr166dGk2mxHRK6+8cu3atY2NjStXr06n0/Pnz3/wwQcbGxumUIcYiTElERLQRAQCabI23t9NW7c+Sjg+efxi17XF50FE5MDUaNu2gKCESqgIyGYdllMrqTdEVADDezdj0Pacl+v4cRkTw8VHzRFY9Ys75Zc/LQ66NorNNkjVFCyo5LLfto4Mqi6CMpCjPKAqVk2aYkKikpJABQVagIE4+VEZk+my0umz/mFFXGaDcanyjnMBiHGj6UPNpmzC0rPutwMw6MGlKm9fBJVZPVLg6yufLhtZZtd4kYg7TW6oo4EJLusHPxRdMmWRiAz6N8bBIxHLqmaJaSsRPgxDn1JUFfsvEQYmSb3EqAqK3E3WsemQ2FkbK1/ShN365uaDV65c/+jmK6+++r/90R/+4Ecvnz53drKx/sijj37605/uus6sU1tP3/deiraiUrQy2eoNr18EqgjLyv6vXM4GK7+XGCUOk/E49v3m+vrxY0f/7N/9u61bH50+ffKdt9+8+tCVtglHNjdOnTwhKe5s3zl58sTmkQ0FGYb+rbfefOSRhx997GOPfOzh/el+CGE8Hl+9etVsk09/+tNme25vb9+4cWNnZ8cid8x87do1RPzVX/3VDz/8cG1t7ezZs/fff/+lS5eI6Nvf/c6dne17zp//wi/8wv0XLz7//PNN0/z2b31lf2c3DnFra+uFF15o2/b48ePj8Xhvby+E8JWvfOXsmTNvvvkmlHK+1157bWNjI6b0jW9845ln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ABC1EHcBoyIA2/iqqoIoWnLBOqsoxk/iArPlEOiI1T6J1GrXKEIhIBGLQCFujzukfyomiazBuC3HaIvgaMgTAnLbDKsEhoqQ0oU615BCDCKtRZCVfeckiBUhgSQAihVTZBGAkXDnQcf8QcY0WBgYEULOghgRgjBq0BoCbdmyZc+ePcePH3/zzTd37dr1rW9968033wSAf/bP/tlrr732+c9/vtfraa0yrW06aFJmECDdzIuXrly6fOXd999fWVmZnp4BwKZJTZOWlpaPHv3gxImT11xzDQCk1CBC0wyZc7fb3bZta8qJQmCRwXB4z+c/f+edd9Z1PRgOASmEajAYXrhw8c0335yZmanrChEypxC0WhMKcKSgrlMEwKAqBoBGl4H2N8FOXWv9NmEWziAMgkTE2vMJWQuAqe0PitdC21uqvS8gqt9K90KU+hBBuIoxBMrMWQCQqk5HS23EEKtut+50qlhxFiIKFGOoLl++JFmqKt526yf/4fHHWfiWW26tO51+fyAggShwikIDkBAqYozInJfy8vmpOvWHmQdSd9dR6DEGYKxiFUJEZKLYsipnSioae2ujaONuAAS4LWuHiIAsnBIDNAEZALW2GQBwSmpcUPgwjmWyufaNMC4OTlgoZspRhxKPFwbx4OwP9i37Wb9upXWh1MMMpcaLl0Yn5Fb7VXEtILJIseESAwtAaCEPY4ycc86MLO3+s+RRFoTCBYpAREJTKABR0/baceDoyOm7W8GYR2oqlzR6U6zIVTxpRTtokRJa3yeUwCuLaETNBRdETcxX4lYDARDV3S7nPBgMMGddjwy5qirtziqZlWcq0UOBEB2eVt/QCXNmzpxzE2PQujQIBMIMAiGkCVPzR1xcmm230AShGaa66hAFRAohKjM4fPjwD37wg6WlpX379j377LNvvvnm/Pz8li1b7r777l/84hfD4bCqqrfffvvq1av33Xffa6+9dujwkbNnz/V6vcFgGAJdvbrw2c/e/cgjj/zt3/7t2TNnLl++cvz4iX379j399NNPPvlUjPG+++5Ladg0w6qKGzasP3369MrK8vz8HCEOU9uKev369evWrVNpJaXEWXq9qY0bN117zbVvH3q706lZMgCDkLCAgY2AsGBAEODciipYThhnlooRgHPSSAoA4JxQGIkCorBo1SE1F7YMuRAVIFYxgkhqEgur2sZs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Tte9Ox98NGjw5QZt3TcBQUeLfk9TzD0K5PT0VElTstaSabVa7e7up9pYpjO9Q4LywsxQmL3HT9DaUg79RkVKv3njpZ8v8Ea/eWO5s9vtPICuA9f2GX5Ai0WHKmWTihaVFgElU9I67pWVHnbEc/XTsgtNMPEtco5rhqUoOW5D4PigiDYnnR9lhS6YOaHqyHb0Rg4YY6kJV9yqFBPAO2Cftt9VQ4yiBgtJJAUUNKyAJuSqzMx2nH0U326TFfu+V/PYqJRBWgxdrQEEVHueNFTnREqYzc/3198Sd9ZYcZyxfXCbdJQLmFkE2nRRf8qNTbNdIKLawJuqSZiYiLgUoew5SnX7ao4CtwYUATEi+Y/z8V998pFmUYt2nUmzfmd83DHQnk0pffe73/3rv/7r1Wr1rne9673vfe8f/uEfPvDAA+973/ueeeaZD33oQ1au6D//5/9sfsOnnnrqHe94h+VeEdEbb7yhqnfu3Ln33nt/8IMffOMb3/jQhz70y7/8y6WU73znO8x87ty5ruve9ra3UbMQl1K++93vvvvd73799de//OUvf+ADH3j00UeDTFRznUopX/ziF998883d3d3f+q3fev7557/xjW889NBDH/nIR771rW89++yzDz70wK//+kedlsGDVmgM4HA8ccJtPiO7mmaqwzBUXSnk1qMy52JAsrOzs7PaIapSEvFIykMdHDPujeFRLg0lxTKlw93l+va69MebzBs6WRShLukgxsuLlGXOVu3Iss8ygamBASlIENfWYD7mIjgAuI1SPRSWiKwXeRlYq+Z4N+rj2B52UkGj0jS+rv5vtFeOWfVMBIaFunMLj9K5pcy21AzBCEzX42Yiv/e3YIuYaDARbMM/ZgTIBRAAJvY7G4SFigSNsYSo5TrvhmQ+oC/JNQ4XOONU3ETtwOG0XGTU5hLXBOuZ03F2zL6JZiSqBkJmJlosOqaxOHYpVZY2Js3MLM2+M1Xuouble9UYwkhNHKUxmomALSomoSaZfe9St7365z//+T/5J/8EwHe+853j4+Of/exnwzA88cQTr776qt2wXq/39vZ+67d+axiGvb09x09VffbZZw8PD69du6aqL7/88m//9m//+Z//+SOPPLJYLP7oj/7oE5/4xOnp6cWLFznETIjISy+99K53vevrX//6k08+eeXKFW1is+c95JzX6/X169c/9rGPmdL3t3/7t0899dSzzz779NNPP/fcc088/sT3/ubZhx9+6L777nP4G6FrWunGf4ryjgRXdEpps9nYZzNkGoEe+p4SUkom+nWLTor2m96UFyfirnRwCD3zIyAiKGsRZrly5dxRWpVrcvHy+bx778DLAmImVrasJ4skSjkPa9ms+wx0nUWNi2oRResPiri6GH/gr/YTr3nS7UtSspqSHDYqAFi9bYbhsPB9DjZvl6xhEQgTqcSe6svQUBXeLkSJUGpIne2Pu6REimM2tRaYowYdhDXf5JEgBCSKQY8aNJuWkg54CmwFDmYwMSfWRFWokyLFokDM90dFiLiFv1Oi0c0xu2b01T6UVsdPG9miEI5ofK+ZVJSZNZEHdVDQYqYBbME9byYqE6dFCkIml88nCDTVgjI9sxFK2uVbD8B0Lw7F6NoOaEtrnYR12GhRHHUWwS1e3GD3xz/+8RNPPPGxj33shRdeuPfee0Xk+PiYwrW7u7tYLPb29ozZejmhv/7rv16v16WUxWJx8eLFe++9d3d39+bNm6enp5cvXzYgWywWL7zwQtd1i8Xii1/84maz6fv+2Wef/cpXvnLt2rV//s//+TPPPPPYY49du3bNrEt/9md/dnBwcP/99587d05EDg8Pl8vlpz/96fPnz5+enr788ssf/vCHH3/8iX7YvPHGG29/+9vX67WeFcegQdzzGqOYssRo5qMQmVEqvRx2lzuXLl0+ODhcLBYEpoTFcjGUQuMRhaGaMcTOwim+qHLOQ+lfeumFcvSSDCfXXn2Fdw8v3PMAgwVCFuwEag3UAEpdt1QoMQ/DkLLhxZgsFVExgo2RpKjvmAWpbkWjOCklM6w6FY7i82wD457SVK+hKsUjQGN9VjGX1vxPbvlMCBziTN0lgrrIGKOIMX1sUpQDQeGirdCT0cOiU+VTW/FT1VHFrfjsnFyVICTEVudlTNgfQzkxFVXi4mc3OPVxW4bLTUaJCFzdKcFC4XjrstK4ayFym5mXi1a3sAzExoXGqBbUpJ65pj3bOP/V/+VWnVNDjCkAryUyW7WDhU5jQ/22Usqv//qv/+Vf/uUPfvCDT3/608fHx7/0S7/0yiuvXLt2jVqQ2DAM3/ve965du/bII4986lOfctM+EW02m0cffdSojxUzNMHqpZdees973rOzs3N0dPSjH/3oZz/7mROae+6550/+5E8eeeSRJ5988iMf+cje3t5zzz138eLFl156ablcvvjiix//+Mdfe+21V1999dVXX33ttdfW6/W/+Bf/4urVq9/+9re/+tWvfuQjH3nHO95xcnL8wgsv/MYnPm4QNWGD2oyWAELWkh2Hk11XzezOsQKnFRJQFZHFYnHPPfccHp4z8JEiAKectDocKrlJsbv3tLaBiFQmyiyqi1Va5l1I6XVnw4kKESeRQUQG6TUnmzsxD0MZBlmsUk7dIIOx3FLL18yTASIUyTS6jSzVCVpEoMopwRoslsKqiVNkohF1IyoBDQ1pTN2I/CmGhkWNgVIgZ2FK5o5wd1DAygi8o9DqWxpbqvryo/VwJmHYgx5ymOPZxOMHEwiW+FdKESnaYitTSjlltt5MqkooKqRqflkfgWZiYXtFXMxoNmuHp03AsykaGarFwMDaUqKJKCULYoJTIjQ+WddJpARumZYn/cYgiZXF2kITUSWmNVORzgryHhEpyGuRBs0gI8KKo4Tf4IdEzTvju2SQKiIHBwe/9Vu/9Td/8zc/+tGPTNm5c+fOlStXuNV7VtV7rt7zqU99arFYmm2YW8WPS5cu3blz5/bt2xcuXLA4z8Vi8fOfv/jlL395f3//woUL995773/6T//pX/2rf3VwcHB8fHz//fdfvnx5f3//8PDc4eHhAw88sFgsAHz/+98vpVy5cjWl9Ng7Hjs4OLh169Y//sf/+OGHH/72t7/9wx/+8MEHH+z7/s0339xZ7ajiv//3//6ud7/r8uXLqmo17eJGUQgipWb5qo6tBrgUcAbNEuFWQhFZLpf7B3s7OztU++2QdTxBszcjGGIdK0jHQ2kGRGaCpDRsZDOsy/GdBZ9y3u2IWalYy52UMrHkxAROnHM+LXJyfHq4d75IySmRJWcRiNkaKjmcbwPPBJCoRpBXEB0fhGqNjGMesSYaNyPIjX8HyLTvEnPm6qzIOXvwsBGs+Gz9f6BIscgAnxszc2IrYOKvirBtB2eEHoHRbs8Hge/OxLrsQpfrPjYueeY0cZeyMA2DtamyUsSkrX+eLYQAhYefqogSsZEtF6x8Zr4Mo7Vu6UwtKcZv01ZpsGEptImp5mbSSrxrA1k0K6MhdtctCgqYcq4st3ZxqOYskMJKaoko6YRSzKbhW+lUHAB7uy5YuIQf6HwE/3PGQ7hF6Ps3KaU/+7M/++hHP3rp0qUXXnjh9p3bT77n3S+9+OJPf/ZCYs5dyomLDG+7/96HH3lISlGzDg7DarV649prP/zh969euefg8GCxyIAuunxycvT4P3j8f/qfPv+Vr3xluVrkzP+X/+s/f/2N1/p+rZDVzhKQbpE3m5OUqB82nWSF/O1zP9nZ2Xnk7Q+/8NOj//I7/++jO3eu3nPP/Q/ct7e/e8+9V7/37LOn65OnnvrQen3y+rXXXnvjlctXLj355LtlKLYnkJoHED1EvhvcvGApJGrF7ZUyyFCoWuxEQUX6g8OD8xcu5Ly0M1dUbxWqMG4jmMxOqgomJqily/pbSEFCIF2nBa202+1W5zusBtnZ9D3TacFgHhdKnb2CLKlKB07o+x4FO4ukIgWD1ogcWIIu8YT6CMQkGgDSGhnXBOmaaMKWdGKdHh2aDLcs5EdkkNYESaHktKllpfoeohngN5vNWgGolf0D2j6rUmjs0cpCKVRLPSo187R9bMZs2sYItDqHjto0JpoMaELr+C4QE4taHvF47tkP3qvTO0Mm1GxJImJwx2TFTwgQsxRy6JBpicGo03UTLDWd1qlgxEMXvP293CrUenyQI/xMRB/pgEJbO2pqEq+52AZrusAALzQrp9TSiExEZaDWcqn641RdOpPzRCaA0Zg43hhve4txZofqe2V147/whS+cnJy8613vWm9OP/GJ33jhhRe+/vWvv/DTF77whd9ZLhf33Xf/M898Z7lcMPP73vfevb19kK7XJ5cuX3rf+9739kfe3vf9/ffd98d//MenJydHd+489NCDBwcHJ6cnm83m9u3b73znEz/96U+/++x3l8vu29/+1uHhwbVrb+Qub/pNSrxYdKpy5crlN954Y7laPPnku2/cuH7z5q1hGP78z//soYceev7555fL5X/7b//1Pe95z0svv0REb7zxxic++YnXXnvt0oWLUiYG++3LHQ6zDXGxXK2na91kES19KQeHB5cuX+y6pYKlYtGo8kMtkrSVPWmSez2mMBGqrQ2YRDti4bS3t9/R6nhN3WqvW8nAKtYATdWkbk6JcyYGsVjFpOO+TwnoAMuLp5qZJxBpcV4isuk3BLIQCiWtGWRA0uRp7K2tnmGaQ5SBPVo1QhUvmQTVVnZiG4RqdHXORolKKUMZzELiipijSVUdjHmCBDUXEo2pAm4kPfuamRcc9QyFJdhkFFY/2NTV0QY7NibcFh25hSBLc4R50IGbUQMYxTMenUHcdFptStbM0OX0xemo1YHXaUVuJz1xu9sWEVM1HPq0baNz7kgH4z5DGYh4kNrqs41jQ03m4CPf7fPfKWa/9TUTsmbD9n3/iU984sUXXxSR+++///7733Z8fHz58uWPf/zjzz///O7uLhFduHDhwx/+8M7OjogAxMylL8Tcb/r3ve/9V69cSSnt7u7+6q/+6iuvvPLJT36y67rT09NLly4R0Z07dw4PD9///ve/9tprb3/72//sz/6slPLe9743pfTYY48Z4X7Pe95zeHh448aNK5evfPGLX7xz5861a9c+9rGPrVarb3zjG4vF4tOf/vQ3v/nNP/mTP0kpffKTn/zd3/3dP/yDPzx3eO4fffaz58+fj96Mu+1e3HAXMz3s0JJ3h6GY/LO7u3/h/MXlYoe2JCbfTG0qm6u9EQf8ZqpW8AG0Pj69defo2uJgffPmjdMhyUm6uLpMCxqb1yoUSNX7A6uWx2qmY+nXfeoSUVVsZi8ys6MZ+EurlmeJ3IkTt3KCUxg4m1Gp1jp5dce46vK+RufiruDEIICZEarVRE6jZ6rqWVN/Xv0837rtA43zdAOIiwv+u4zFWkaTPH3x//6vfIgyrWvhb41Q4qNH0QvTIiYINEhr8/LxHpN6yjR7hZppKk0rOcbxEcxsE8BSamLXuLz6K3NHBCnIy3Xaefevfmb/vnec6qLIQOaLre9p0DAF2bjq2VTj5k43+oxrdnK+tBkTo9DhwLpEENXiea6wOPl214GPaZcVr3LQdCCzMOLSqu5rEKRV1Vpf+Az9ZEsp169f/8EPfpBz/uAHP7hYLKjF10nL9LEoDxFJnLrWm4VDqCGCMdVfMZOA7M6+72vbDBWo9sNAKaWcL1y8eO7cOU6JObWSGlMQVxmGPnZxsByI+CLfc7GgTdnQ8PrtV59Z4A0dTvbP3XP9Tj535R90h+8QIdYBlAfKkMKn13/nP/wv1178yaUL5y6dP7dMGWUQDINshDRxZnDKk2BdB1cHp9KqpItIQnKzw9S5MSnb7oSjqFLKmDItZ+eRSZdQ4HRbxrRj9eQHJ2GNhMK6eLMVW7GLR3CdnWD8JrITG9DeMsECPaNAXba4bHfjOXGJXomZr3Sbq8wMSz6bRrnG6RqUO4jHqUQS7pcfz7YHzZ9thrMxGr3eYGXxSDllJSJKxCwCAUz7HSucttI3EloOaOA5uMsVjxZnHdKMeOEs+r69aRyyKzhhvV5H76a0eJkUShy4jUBEqOXBz8LNpdV741ASWFoRCaqiwegBMRp3+fLlq1evxkVxiGCyAU3LkGkYTtwiX6Y2fTz6H7RZHj0euhapADLRufPn9/YPOGdRQCaRFv6Woe9LGdxobb5U3x+/zZmfCsqQOuyC9m7eeuP84UXKFzklTgfQRKSp1tx2mFRjBetNnxfIRF3qFl0nUBW1BlUOgX4ohkdukbRpm/lKWlCiBOc3MNJuio5XqjklM1ybIdH2v365WgBgtVpJSA1FU5GoRduoAsQeacxce/b5Uc6of/Q1YauxYpsMxXv8yjP+MItCTtMCPRoiiPwbDe7niFpt6xjBfLO9d5F+O9vchrB4f/wSZgkOk/GTNsnGrGpFFUTgpJwItbKZh29EIogpxdmmPmce8N/3oiBUYlqsK6INM/ebwW4259RsQ+JGsRVaxbircTk+bQ4RH3GNs4PWJnZJiDX3LCEKIlK0RyAQtbircfBIdJxn+CN12kQK4ZxWu7t7+wfL1Q4ok6hqaeX3xwiMYRiGUqSUqImUlvzlPhrHc1UBGJKJV/vn79vf63Z38mJ1QbrlcnVxowQVMES1FJFhsyDKXWeaVEqJqFaqYSGyYGKe6Aq+tzNAqkcgCoGD+nQD1Y8pHl/iREGinJ3s7IpwFV9tJJ6afhCZqyO7DMWxUapSI9xCzLk5mqXlxGsQwXTaDN4hqkKsYtYP3a7sko4L+TQNTvER/ZrBqITgl20go5aUQCFcikLQvY3gL5oNtQ3EM9QiIgIJhT+d2VpbBxIzfg3VMafiqT6ISvcEYt6avvz/hQbNrsj0HDrF6lKE/fRXz95ebz67qGm94lH+IlPyN8aNdb6tOolrr2OG85Jg5otvlNpbaXA0MJj2vrKqAtLUpb2d3fMXzqecN5tCiRJnRZEWUm+Pr9frk5OTYeg369Oop1uotNPrSICYWcoATZvNpstpsdhXkoHSYne3WEAGjcsnZgyaLMyRabpAVa0WRSciM1BHS7f2tQvVg7be304R3OSqQTActzeo1bMzPfNAdUrx0QxDaFXroyAZYYOIcmPp1CSvM4e1czRDwWKxMNklTsYBBpgjml95G+fdGeHTmgm9jifOGLfHdZhzhc4X4IufyZlnYgVNubcG9hLo6yS8oZUlRe2NoACUiVPKOXemDlLFFkxsb1UKrW86k73MJoO7cKFf8HKsQC1gNJ7fOHgrNuOE3hF7tmOVKBCdfdjNBfOLEyCfZASD+HaaGUExITTbNmB7ygiN8yGFSqmRE3ZP3/dKcrhzsH9wsFrtiJKo5sQKlqKEWklSWqLvMAxD30ei1rCXcx4LLVAwLJycnJbT9SKfvnnzlaOjlyDDzu7FcxcePjy/Q2mFUkVksQ4qhpY5qeh6s87QZc7W+2gmb25vrGyFF1Mwz7mfzv7suhRzOPypomPXuclmolJ84ibU+2mHOycEzoPmZtQH2Gw2Fr01yEBSCVaNuZnCpFP/BgnildVm1MCJst6lgF1G817zNHA7kowSLCOllZKMPFBrtjNhwgJN9hmLbEmr5gvAcqYjEDuU+ySISGs1aCbzPLR9N9Yj7VcEyUXErBhCnDjBEnpVZNktEnP154FapsTc8+5+yOlG/b2pzC9CmFx5JrIifKpac32NLhpwcsvbiKJvxbFgeatzDhOfk9FfgGLOpJVIeihs8t2eoqmk5vefyZDNEyRFiMCZjDaxdQjL3cHhxdVqDyCr0QEpfd+r9otcCzahxZ22reCuW/b9RrU2OBQZpFVqRuOU7TNhqZvT4zs3ryUcdXmQjR69udhbHXar3SJSkgqEkUh0kVfdzv6grJQVRDkjk0KtYxuTF8eofCvSGgqeKT9rApgp54W0kMv2ATl32nQZ9agCqnWQo/hDRGjdAWBGFiuBBCLmCMCGrVUUoGqvyMSllFpiGUpgiKZELT0SCiveU5uMI9hYG+JYZetRuAu6x8S017Zd23/hQmaO+uq4QcEy6qM4hFGw7YeZUYSxUvyt4/1EZM4dS56ckczxvdT6TqpSqpVTylRcMlGlsbuRumqbRymFoYOsu8RJM2jRiIqoFID8KNu64p81BmpEIeAXoUG/CNFxFu1yhGUTUQ3Crqpyoz6TwoORoNQ6zmTmUQJACgiUznDb6ZSi8lnBtY4zukWn4ln7gzOez5b3qyjNlVOmPYXj29tBA0VMYCuDtUCFQEA4d/7ShQtXUkpmAYUqkQiGUgZJnYuo6vqOLqD9YrHscr5952Z1F2pRYY+INCpOqsy8gA79ekHLslodLPcO91WwuHVnI6cn1InV+UGCDkNSqGgv6JUGxaAqDCv7p4Aa/dHi5Z9ne+V8Pe65ha2VMoTdtp1JVadrtc9TygAGjWg8ClM1ALMBFRFxy4SXhpjR/g1VI08iotbm3EyjxFokgaA1shxEztJ82o71zKwKEVioZLvHz3q0lEfhg3mUGZltIVrzyyNYRHlS2oWmQ9LUBe6CNFFN1IqCokYrVKP0Vr/Gfoo+mhlwo+WIc7soGLpieksU82kKBOvNeq2SaUEZyz1NORUiUU01GHXy0jCN+Ze/oMYSFy5Ta/qZVwA+IorsZaQ1ke3YU5EZAC0QuF0872c9siPXF+JocfIz8efMpWG6Y+N7TUodylBqICwFd0Fk3Xas9fuhNwNy3w+DlMVqAaW9vb3z58+vVqsGPwMFGIjJK8aTlsuldtq3MPrdvT0mSomt9lOjvwqAgNP1WkRECpFkURW9fv3G0e3TIrzYeSh32bR3gyxbOprrSkVS7aZSsyiaFn/XyyNCPKjNaQEahXIsUy0WD2HaWY1glJpvdoaIoDUDjkPdL1WVUoTGV4yHFYTiKGRgqli9xXL80InY2o5jCpxEYGZvZuG0Zdt6ZVeOIBKtaJGLzlgih/AK3z5mtcKJ0SbtO4JAvP3d3OKVpeVAaUtNdCexR7tEsRbTyqQzho/Ge7uuA6uUgQpbjwUQjaVYwm5u7y+2Ts6vu53Qttxx5itm349yxxb9ddoRv3S6xi4Zb3Hd+Lqok59J633kt7DoISSpq84lrPEGhWK0bppdGWcZoe1F6r0uRMCUODOnxWJ57vy5/b0DB1kao2FN9x/ieutkCLxcbjYbVdlZrezXnBkgUHIFBEDf98MwAJpYSOXw8HBN+8PmZG9/7+Dc+Spwj2oRt2JSVg1VEieY1AGqJezujrGRXoj7sIBErG0fPPfI/Gtoxl33kYPI7E0OFY5TKSUKgoZnDgDYlGF0yjjiEHm5D5p6kyl0B4ogpKoO/u41atR5Ijg7ZEW9UkPxmTO3qGayzkiPT4uD53WGCfEeE8k06KjbBrN4JGimJQ69SvyKxMg33bX9SWovmaYyiUTwAa3kUqZEKRMym2PCcEzmROf//DXjHvFg7iZWoMHT9vf+YBw2EmK/aSRJ01pLWyNOynqeOZMo5585n+1fDWAqgVBgK1zFyUSkj9IKAJUyKAkYMkgR6Wh57sLFc+fOczNbxMIULUh1THP1y/aw6xYKKxABIqTEAGtz/45ADuLEBCGkrlvuXbzYb4ai6ej4DnebRdfi1lS1fSQAohBNpuaoMpE08Ueane5MHEFjpX6UUgQtGmuqeaSumzjFtKo8pBjB2+832yeFyFtjvbUNTKM+rgvTlirtCO722W3s9r2Yit7VuLalztvOVyR1x4XJRA4J/kj2WDWe9qunIHdMPDXh8oHacDSjL/4at2Jq0IoRBNTJK7aYNrXIcdcHLai0lFKzosOd8ZiLikItA7pbdMSswCAlW/W5qd0UvxjViEAWtxIzfWfKpWf3zL4BEPMY/fGZAciXpqqCWtF59pZ4G0V9mUbKPpuAL4dD8PTMNkfBmOqvmOGbhv5g2wtHUB5VtRQBpKAM0g+DFpHcLc6dv3Dx0uWUOmkM3JULNDOnz8QlBZFaKL/rOtWiYKtXLaKcqhdRQugTJ5aWJX/j5g3qX2N6UynvHV5MmURrGGEpokK2WxZmuTldnxyfLNJOJlaQ1aax9dSRx1CjINuGs6sftlz12+AR2YkYlLdTG2WK1tPRF1jJHICzVCozhHFzYfsZuagS4b+9ToHRhOLTUyVgUn6kwUMlVZjikUcU8tQ3mn1VGhpLz+TtiEvaZCqaytXASCwdlN1D4RglLYfAH4t0EW362CpuhKlU5R40L8USscU3nKr/DEMpIFKy+k9Jmyd+fOkUozAlQL+gvOSP3I14za5IMhBmYsxApuGCCPisqsC4Yx7Xjy2hY3sm299sE6NfZGmuU0zoI86gv/an3y9jxLP0/caszpx4d2/v0pXLi+Wq3xQvZ+P8ub1RnJ1G2XwYimlOjrzVgqNK1d4poxJE1Pc9ky5zFlHp+9WSdnZ39vd3UmKLwymliBRCbdDKTCmlrsvDMGzW66Q5CVNOZoHrujxbbKREfpSe7OLYmHPtCuHsObUGJ27cAKzSQqVN/iUA0kltrHj629aJChUyYS3SKorF85oe9FidA0GxemtooSDExACIbZDL3nMWjSgqoNPC77NXOgu62zy0enbGmlJ+/ETkelp8qQtyzCwhPi3ihpWVpalhqAXrsRuPRqSt/ltwSomSESswMbNu5vN/a0S9237PUPcXpDvb9xNVhNEqGA4U+tvG11FQ3VGdgxMuOoOk2eNnkqS/LwFyPhxRDgBhzqvir36N7X2hyrVTy87u/uWrV1er3SLKKUGUCNp4GEbPy6ieOOsupaho8uxoMhEGgIoqhXkaYtci7cBymS/c/8DmznqzfunWnTu3jl+8eu/l1R6kFMvuYSbUBvCmN2HRdZlzDXjQKpdIiFx3yPS9MlJitnlmhkIYHEJP2snCND5ms3TXrIick1i+kQemuiQFmrUhbRsuIDYPmY9ftaG+NPGEieD9S9xVPzt0ac51CuqYiFihD6cykQJGe3MUhaK5fSRA/WZjXtwqb1VbTq2c5hwjqkgRvJwu2my1asVEZCzaKISpAMTc1AwiaUK1w9A4WhvRXe9MJEFxcH5om8TMAJVi9k54YpcSoCQYmInzMudloiVLqgLzCEPjv2+JigGLmmyKaRwjAqJSLZoF31c/yBlTavcYVJkD3lTIstlsctellBQtPINAxIDAei562QpRTlwrnLdgE68yS1bS+ywW1F4aV0HVp9mOE4CMXRakOYl0PtRWsNl4Wy3c1fgQYNYriCbmxXJ5zz33XDh/IXFe94MKmDQzmHm9XjsyS22sPqYujuyzNY6Gkiisq5kZToiry9nm2XUdAd1iyUwkdzbrNcqwTPni4cFGdrX0vfaDEIFYs0ILaZe4y8tFtxRVZs4pp6RMVKo3gKXCHg39kFrTBIcoJu5yl1KSWofKcIqbr9w1F4PtYpE1fb/RVmoKTIBavPWI8AZSNAdMIlJYY2gFESeyo7S9J5Xq2h8GI0B2SjbllDiqMtraamkTGyVYlBspmHO0GX0IipHhqVg5FLs5axGQDiG2nYhSQ/j4ZbQZN9I4Gia1Zl2gWWSkIqlVagJApMAwFGLKnAwftBkXo2/V0TqZWKRV35DGwWzlOaWqqtghTRAIqgKkpKw6FB6gJNLp0HHKhHZ4OiMBbyHCTKzWVgcbqlLUDsyfdeETYNXaOctkf8MQovFE/aUNx6CNWtjx5bwQUYWkVoIPVdRIKkqUKNnjRQGtNWaskLFY9YPmeucYraBB3VaFiNtuiEC1h12zMlKtn5RqEzhAtKYLREanjd86HXcg0ciapZIGiA7rHoCQnj9/eHhwDuChFBXTo2q2LZrxeKbOb4OiqjIxMVMzWRisWytQt1iw9SmCeS749OT4ziuvdOnmZii0kNXqIeGitEgDs9IGRVgKiGgpSqJFVC3SyjMJASRKlQeAa1C+/aikpcmGpdrsFObqrXywdpqplNoSr0zKG1fH1Y6usAgA1VZSeCQAUfQg1HozzExo9i8iIwV2INbuQqRQiDM0WCplcLsqtUtVTUpyPDWvWimef6cOV2faEFTBnEQ0pc6/zK6X+i5U4Rbq0d8z0cMzdyhoQzPZgWhsP8SUXG5KnABVUbPS65at1HkmEXGrT+a6mASHPYJfMAaqj+RWSVqIdjFbAJGKgiYvikTnrgSIJusLiACfmJu3iFCKEgmPMQp+DFXVcimam+LgvCVKrZWnnyU0+WcJjgINfmGdhrD7eu0KrhbMCLFMPQ8WZ+RTCqcUPmmrttXkSpe0E6dBSikDux8HWPe9SBFVMFbLnStXri4Xy+IzFC1acqLNZjMMg/VfNBZlDRHHMKKQFxKZE1Fdgcqot442IADMpchQpAxycHCu9Kc7O93x0BFRyhmSWFQEzFwwhpuQwa6qMUgmq1t2tlTrO+YbEsUinwyCfjQDOqvgwbzVeTmMTNM8J8zNoBUMSvFO0OqxEX5ntAq5zCGtCY8XgYlPhX0m33mzzEozaTtUR+SNZWTgJVm1mcT8SSvzrNUkUaMBTVSxV1qdZl/nzMLkWyBivZP8J6iiDAOnsTq2hnAsmjosI2r5qTgZKq3GSrS/jtSQQKCUkiaUUsUW06IbO3wrw/P0vOGq1gjNUKakOjoU3JFJo4mqxgrYIEQQURHxXBZ7qbdFj/MZsWWrBEqEQgpE3FqGpsxuU7O5RUdnFBwqyKJyiFgjxvfTVyEt+ca1ZLvE04uUREIrp6YcqUg1VjVxH0wiUKLFcnX/gw8eHB4yMRUdiiamIlZfdaQaGCnjpPwNTevGeBqjYztx5WEOFSJSRLSU1C2I0mYzdJRy6lLusmZpYhYR1To5CjLHWRF4vowFHDM3LapC/eyMIpnQ4P8dd2ycqj0+UaiC8jIhKA5gEU2c38T9sZfmENMQXVpOTbRxMmBinLLSUZG5RkYVX22jeVEXnYYR+BtLqyTlK8pxxHiiaEnB2izzwzAYPfZ5u4I3i2HzlTdYHHl45VFty+MuRChBkymIaLYSX6d75UVqe9kIrBTMuiotgMDIwFlVU+M2bf9kelCDy9FRKFQLUEfFuAawag1cyjlb72YKAl2crY/m++ZLVlVzBTuTGQm9aVyBFzWQrQN6Q1EEylhCrRZfXeKutOIVNn+70xKdjcFOfMakJgj4dvnNmVOkwjbhoe8tdqbyHyB3WaAppfvuv//KPfeanpISmxMdKKTJXOlTI4CI9ERVvnYIcVIY4+bb3Cpddl5l8RwK4rxAv97fP8in1/cOLnSL5XG/v671ulg1oSraAKqNzGyYaoowNWKqqjKzBJ59zXDNj1JVvYhQvN+zVaeKjMYRKGQDOtugoFKIzEOlI0ggmHFnvBON/fvRR9bIwRolIYY5igsRjAHkTCLCpKXVZIe3ZnZ88Jx6J8TU5B2jowiUEq2SvDtEfX5OMpjJumUY1yyl0NicYKw3FGmWvzfKlhKUT+97SV7WY3owdb+agm0j5Jz7YaCUSxm0TOS1EhpUOTmPbMTM9PHg62J1QlkQ1cn/b2FX1yW3bUMvQGrWu04dxzlJHCcv/f+/raenibP2SARuH0BC0Dg91dPs7IiiSPDiGxCYm03dQfb9yPbKRZQA/k54zDmQRBFYUG1VRLo5kgLWCBnveymOlcJjZRhB5ZVesx1blkmMp0dBIgB0N7fwFid0zhF0Tjvh2N0VoiGlikT5uLAfvP/w4f2HH0W7HXdA3aOmz4iDmAxp3/dgv61p5BiSjKfndmdOT4pyJN2npSOrXOVZHebuo3c5wPt+37/+y4j25uP29kMwRzrpbmLatImoiqoMM4Ci4u5Nmw1zme3wcib1yNVz+LDFNaMoJbgUK+P3aXnIk5XwsYZdDpVEwpXpXYEgAVqW7J/nOqeUsIJVtq0eZxZRK7/MQQrzu2zBA0knxBZl2Xs9tFcOmSt2+tKq/9uvknld6/y9iKhoOyMPJxWqSu/dBeYGXqwYdQ563ngqn7lY+doPa3TuNCYrMHcurW34YeI1uiY3SYpElmPmCkgxMRRJhOTl6eszxjjMDIIvX/+KQw5xpx67ZQ/IFCfzHXEtJ6iqw89O3nUR6PRV9jC+WTDkonh6ekJxeKdHP9c5bboAbJnzOD2ss5FuqORpDC5k0DlYYSvehb5yDq+7FrijjHxQAWSM4/sf3v/y6dfb05v7fVdpNHN3s2HDVJW45Hzl59YutRbzxQMoY19iYrfbjdNYfibN4xQTgHCO+3570tfPO4nj619P79iaOlUpZORAWJDQcRymGMPAFd6hyiJSP+zjw9m+UOa10hb+31V5T/4Ze1q5V65AUmMgUa32X49IFT6k8PuK7BW86lSTlirg1qlK8VHEHSjyXYA6KT2NAg90eQnMBVBU6LKLS6leV+TRVfpzuONEqBCDGc2//QQaFLv1GmHSjYqKSjpEgEii9sSClDArkJMEmrYW7mm3xoiXh4JnP2V8I1viysQq5NeFngtDyR9XKBzmX75+cXNVPY4jaqrenm4sGbYokmCiLa7CcP43ySImNL9bZTri9lXrt2+3yVdCDootC5Gh0tOcrbM1JVNol4pTi0AZKMelcA3LQNBTVQSj7tKlbMjcEY+Ebu7H8fn1r9vz008///z88mxGc+52762pSusiFNKJs+VL71theeGjgRfrpl6tPJhp5dP4ettarmHdObcdai8vt/GHHceXd9+/+zJ4HF/bYj1h6hGRpvp0u4mIKuZu3rpopwh55ok+nMykim/I5jRRPcDH/7p02t3OV/BpIdYcmGRrLQz2vFqR+yrUTRLXmnVJYygxykx5tjgoHt6iHplv/1V1xnxU/SPN6l1XbE5FFgCDUXJghm+H9s7C1uo5SaOMyEm+c05r8u4OcN+5bZsIjmM4kG2d467pWestqT/XJ1bGVqvyXNapFdYNjg5BhKivpkut9217enK408MdU3W9ui4JxHV7ZHkZg/XNOQOIYOtlV5uWEVIEW++77+6m0eFaInCet2277/femq2WlSF01O2v9NFbD+Fitn9ZjhgBemtSwDdUvJmnvYxlqqoze4kJ8XkARCQidGju9N6incuxbbdMTYz3mgYRwLlWdTk+wkwQwpqvC4ujjDF8jA459sPA1/u9bf23T7+9vLwdw8mw7PhwNlWFisL2gxKDhBEnvK7BGsOSOpfofr/33lRjqlBtiQMTsdzN5HbbJDp8hTOB0ciJJP/488/9P5+fn7/7178/t6fnl20mnZLiVIl4tuj/KTKPG0L6NIUCYm6ZgpvgXvElvswKEA+n9wEZsSrQPWAWS9EDQFrrIjWu6yJ/xRVuokTu9TMEsEAufSr8LKyRswj6JomS9D/lPVXVib9MOzyK6eak5Dlisa+XN+5txmTMX0/UEcCZbqOFJrOPsfPMVk9GKkWGT9ZEUlWEUD1z6M2OoOous/RBvLANgwOC4+vX222LRYGoNIBwCbya5crcHaEhR7yfR91cAWGw6eYHBffmDexHk0N9bwPedWjUrEkehWLzzplfyIJAuChsGrxDUIkcAlVprkGWK82ZCn1zm9W/p0BBgNwEum2ES4uQSA2EisipvHAm0DVBtJ0KH0kEyUU1ltXerATFcAYR08kwz3VtItJFB/04jt776+urF08EhH1TM7YurXU9IiCNvWugnpm1JoTJ6lyZSD3L0YdVa4nxoWOGLcnMnD4AU+7HgdZ///33H3/6GBqXEkIqle5OHx7BvsEjDGjT4uROzoR4zACl2DtxN8C1BaLMDA93xhENgDVjhF8smHBxCN8Qou0f73/858vN+vPr9vJ+++79Pu2Dcx98oU4wNqhQdUSbcGcLNX+x2BQ9kq6slHx+kBoqBqmquzkjlVQlmlFwxrJippEG7iyRc4qZF/t0TPo4jlRE8txNy8uw5N/DhqpIUxAONUBbF4DObLI5hNHEjMDMxRVl1BUCHDDMw4YIgxIYx7FaXbTemVJV5JpAZ+OWQHYBHDN77VwUQCEpSMsyibXWVBBFwetBTempSl8T3ReZl4WOo67AYwuRCLeTFTckTckocBhGbHkYJDWySY92sb0bB+AiLWC8tUaBDbMhDveo/XbNaZrGmsJPKhKxXAG4iEpgEG3NxlBtq0ISDXN8LfZpJCOaaK6pfseh9dVON59YYVBEosikCFRBP5f6NDqKmFvUypsbN1YUBSaTePv2bVpwuOTKNBYEoKhq61OHim48VeeNcULCIvn6+jq5TlEUpqPKpuYVI/zy8ePHj78aEWVRgokHjR6HnWurJz+bmtTtRvJ+37FUEpmeUMs1mgKXB3syEenbBoebm5sIzaLvE7Q1pZJ6UI4v4/NfXw5Ds/G2u353xqS7u9NC/4wdU9X5verWGjykzfNE1A8VlXBl2HVPE4+4CoxhakxJclOQSXnzIfbn4XNbdbsewvSYBpriUaFzBjVl0d4VCDs/S47v5gKdlOwzYlKWWhCaCKXE6AggKygRGsyD7j5lS6KPMcKVwjBJTLkLijNyP+EzX7WaqfJNUvDO5caixtySjCQCsFIpTitmEFZrbYxDRFLem6fCZkRc3VEUfvJ3X07ZMTYD5LABdqNDKbhO9WJFPiW7yqweqWc2PafRYlmnAkJqk3TZMOPQSIuo6ilAj749ATiOPUqjVHJZi5lPu1CGhDFfTkKPnYLOFIe8y+kZIhiHh1eLVWstuzPVpUBB5+ThyTMqeE2DqJnxJAau5pxEsBH54YcPnz59ak0DNIZZ43lK81my/Gi+4l1TSsUqv7nEoil5ASIqGXEXUoDIVH6TPNaAhPoOhXp/86L6w9be3Q/u3gaeO1WdsdjunlXc4k8zo7turTUlOU3RxRFWKSfJhssxZ98UXZJTdYq9pZktkaCl9KTLNeHFflSJoz43rtgUKS4qc5eldfnKXzOzaCQb3GsmlyWRF/JrvSuRZ5BYwb0BCKT7cHhOtZqDQ70OSSF0wjg5/eEFTqqdcZ+MZJzn52dE/sg33rV6OBN9cB03f5YKmq8eVSnLxL1RpYF0kfAcBQaLliORuzgRwZGIfjGlY/HZ1N3jLElyrHjiGWbql9CMRzio38dnN9OmTvowvcrGcEkDcD2xQdQigjbNhJj2v33bepKpnA7Osp4OykRVgWap4KTseMIYIyULANGm3d2Hu+hpH80V42p5GHsRahpXXF8uaWJT3JvhQixXrRCy73u+SJe+bbdPnz5F315AxxgsPsSK9fHobWsJKBkh2XsHQhaLPFVXvSyRLFPAaYWMwyPauprBbIzjcLGhXdvY2u329l2Dt+f+Rp9dn+hwOLDcLBMirTXFCobskfl8mEC32xaZzvUQ1YPApSUkfdarxONEgtQ0xKhqRl3maLlWuKJYpU9Z+sTtdrvf7+nomItc3C95Sw4a/YpQ1u3yy4gnhUSrBxHZttvhtttB902btkY7CzPG7kfqb+/9MFuW5KUnkf8FbvvoiQo0E/YAAAAASUVORK5CYII=\n", + "text/plain": [ + "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_response(receipts_response)" + ] + }, + { + "cell_type": "markdown", + "id": "fa834925", + "metadata": {}, + "source": [ + "# Q & A over LlamaIndex Documentation" + ] + }, + { + "cell_type": "markdown", + "id": "f1a82a54", + "metadata": {}, + "source": [ + "We now demo the same for Q&A over LlamaIndex documentations. \n", + "This demo higlights the ability to synthesize multimodal output with a mixture of text and image documents" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "d5f04295", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Could not find image processor class in the image processor config or the model config. Loading based on pattern matching with the model's feature extractor configuration.\n" + ] + } + ], + "source": [ + "llama_reader = SimpleDirectoryReader(\n", + " input_dir='data/llama',\n", + " file_extractor=file_extractor, \n", + " file_metadata=filename_fn,\n", + ")\n", + "llama_documents = llama_reader.load_data(concatenate=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "46db4191", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 965 tokens\n" + ] + } + ], + "source": [ + "llama_index = GPTSimpleVectorIndex.from_documents(llama_documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "4a4cc090", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 1592 tokens\n", + "INFO:root:> [query] Total embedding token usage: 13 tokens\n" + ] + } + ], + "source": [ + "llama_response = llama_index.query(\n", + " 'Show an image to illustrate how tree index works and explain briefly.', \n", + " query_transform=ImageOutputQueryTransform(width=400),\n", + " similarity_top_k=2\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "559624a6", + "metadata": {}, + "source": [ + "By inspecting the 2 source nodes, we see relevant text and image describing the tree index are retrieved for synthesizing the final multimodal response." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5c5721d6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "**`Final Response:`** Tree index is a data structure that organizes data in a hierarchical structure. It is often used to store and retrieve data quickly. The image below illustrates how tree index works. \n", + "\n", + "<img src=\"data/llama/tree_index.png\" width=\"400\" />\n", + "\n", + "At the top of the tree is the root node, which contains the main data. From the root node, the data is divided into smaller nodes, which are called child nodes. Each child node can have its own child nodes, and so on. To retrieve data, the tree index is traversed from the root node to the desired node. This allows for quick retrieval of data.\n", + "\n", + "In addition, LlamaIndex offers different methods of synthesizing a response from the tree index. The way to toggle this can be found in our Usage Pattern Guide. For example, the \"Create and Refine\" mode is an iterative way of generating a response. We first use the context in the first node, along with the query, to generate an initial answer. We then pass this answer, the query, and the context of the second node as input into a \"refine prompt\" to generate a refined answer. We refine through N-1 nodes, where" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/2`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 589f9b15-f3b4-4bfc-b50e-28fb1a2d0173<br>**Similarity:** 0.8151716742235475<br>**Text:** file_name: data/llama/tree_index.png\n", + "\n", + "<s_menu><s_nm> Root Node</s_nm><s_unitprice> Parent</s_nm><...<br>**Image:**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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Iscxuro7f/Hzqx5csqi1ue3VZ732iHnHCOmdC//+m2t/Vy6VDzx4/1KbUxdcRDffctOfr/u9ajj+uJPPOP2V9Vr10IPnnf+6CyeMGds8svWjl7+/vX3T5PGtUNruogFTMHYGUESqDLi3Xfy2JUsWXvfXPyelWBRgqme1L375sx3bOt7ylrcGDZ+74rM99e6759921VU/OPnkFx915ItuufU2YuKYf/+n39zw9z+/7oJXn3jy8d/83jcWPbTomKMOO+KQI3xAILErgXcbEQjsMz3nVa8m0p9ffVVUguTfcPL9H35r/vz73nDBG2ceMOMLX/rvFWsfX7Fq+Rf/57MHzN7/FWeeee+991Vr1aiEexfO/8GPv/fS01/y6tee89s//PpvN18/etSYy97+vmEtowJwy+23jBk9dtSoMSL7+tGafc0CoKB8RpMmTn/Tmy7+yVVXrV672iUxO16+4rEnVq1499s/eMS8Y9/x9n/a2t2+4OG7b7nj5hOPPek1r3zNGS992SknnS4pamnXX2/84yGHHRgnPH7CpOaW5ttuv5kUkoLUKanuaq0Zsx1V5XK57T3v/sDfbrzpnnvvS0oJObdla/u9991x8ZveefyRJ1504ZvHTRp9y903zF9819hRY9960dtOPO6E17zqfPKOGX+78Y/7TRs3asyIcqUyZfp+N936RxWSGpUT97ebf/+nv/z2nW9/f7nUkpcCAcTmAArLhoAKRwGQEjSr+Ze+5Ix7737429/5Sua3OUednd1NzXGl1Favabnc3NTc1r61s7unOnPahBDgBaNHjI8QSdBa1a9Ysb6359aQxTP3nztz/1le8oUrjqw1eR6072rtkIbZM+e+5lUXfPvb35w0tYVdc72WiqbD2obVa6CkNGL42K7OaprR8GFjgKhWxbC2UWXXKp66u2tbNnf+9fpbJLhSMmzOAQdlmVTK7ubbb/rGt7/+nss+dMicI7Ka5EuBycK6wOwMoHgIjUZGAO8ufcvb169btXjxfIabNH6/np7uFWuWNbXRmvUr2rdsmTFl9qQJkxc/tCDVmkZY/OACUl9KymNGTzh47uH/evm/fvRf/vnkE08+cObBHioMVUfKO6l4aXaGIBD1NT337FePHj3yppv+HDs3vHVkU7lpydIFSQs6uzc/tvyxaVNnTp00bcUTj7R3bSy1YslDC+r1rojjceMm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\n", + "text/plain": [ + "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x431>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/2`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723<br>**Similarity:** 0.8133374944584655<br>**Text:** How Each Index Works\n", + "\n", + "This guide describes how each index works with diagrams. We also visually h...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_response(llama_response)" + ] + }, + { + "cell_type": "markdown", + "id": "dbd7376e", + "metadata": {}, + "source": [ + "We show another example asking about vector store index instead." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "92569825", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 1567 tokens\n", + "INFO:root:> [query] Total embedding token usage: 14 tokens\n" + ] + } + ], + "source": [ + "llama_response = llama_index.query(\n", + " 'Show an image to illustrate how vector store index works and explain briefly.', \n", + " query_transform=ImageOutputQueryTransform(width=400),\n", + " similarity_top_k=2\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "7cfdd68d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "**`Final Response:`** Vector store index is a data structure used to store and retrieve data efficiently. It is a type of hash table that uses a hash function to map keys to their associated values. The image below illustrates how vector store index works. \n", + "\n", + "<img src=\"data/llama/vector_store_index.png\" width=\"400\" />\n", + "\n", + "In the image, the keys are represented by the numbers on the left side of the table, and the values are represented by the numbers on the right side. The hash function is used to map the keys to their associated values. The hash function takes the key as input and produces an index, which is used to locate the value in the table.\n", + "\n", + "Vector store index is one of the four index types used by LlamaIndex, a search engine for natural language processing. The other three index types are list index, tree index, and keyword table index. Each index type has its own way of storing and retrieving data. \n", + "\n", + "List index stores Nodes as a sequential chain. During query time, if no other query parameters are specified, LlamaIndex simply loads all Nodes in the list into our Reponse Synthesis module. The list index also offers numerous ways of querying a list" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/2`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 80d8d2e9-412f-4b22-bc60-55dd131b73a9<br>**Similarity:** 0.8164705784668993<br>**Text:** file_name: data/llama/vector_store_index.png\n", + "\n", + "<s_menu><s_nm> Nodel</s_nm><s_unitprice> Node2</s_u...<br>**Image:**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x313>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/2`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723<br>**Similarity:** 0.7878578850577496<br>**Text:** How Each Index Works\n", + "\n", + "This guide describes how each index works with diagrams. We also visually h...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_response(llama_response)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/1`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 3949d7d1-96bc-4d46-beb6-79d2acbb1fd6<br>**Similarity:** 0.7981321083637717<br>**Text:** file_name: data/receipts/1100-receipt.jpg\n", - "\n", - "<s_menu><s_nm> Story</s_nm><s_num> 16725 Stony Platin ...<br>**Image:**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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BkSxCQSDjgez1M5hYzxumvGRzfWT483rZrKetFFV0R4DBts0i0taq40CslAIABYhXZyd860FyJ1LjeykikjWROiSaK8AqjT9UurTBa7L2V3n65LRL47LdQPwASZMvp11KSxCTtWaLWTOZShLtc7gUsLvrrkwJfsuFmwKZWyfSTYqWW97nFjTOpSyopRSoFZEPeynJagBwDEslRvZNwlRMYdj6wcgQqToqgnKuILaQJDl8LCkXC5Y22XD4dCavqzk2qrmLLyyiNRWO1sfg0kHKcFOby+gCojD9lphAQfnOllVIQYRwNDEtp0pKhCAgJheyiG9Olpff91+DVV/FhWIjA+UIHYWDgOgkJWS02V+QARlDgXBC6t0hj2CMbDtQJ/6tmnPnT37f/u//F8jEs+6QWyC4py5idHI0q9PGcQ2B5Vbov0HDhif912XmBFAWSeTyXe+851PP/qZjX37k4gCpNT9x//w799666311VXu+hhCbNrU9Ta2fG119YXnnvvv/82//af//J+JagiRpWuaBsqmxWVYXidry3aFqgWXSrDfmlqdEpyS2edoBhIQkS6GYYC2ifsT83DtQwdWVzkeSM3oUt9AM2IBQFZiRCVBIhIWaBABDRGILGxVWNiZv3a+nIAXRFjizR55pCrou/fo/U3Xu+XEF5FBr1kpdTeLsmYscSheAmmqChortWo0uStXVStp/9evg0vW5VK0sWpj2F01Uhxn8NSWn2Awr8yPDcu4ImbumAHQWpy4tMAREVRxe6w6J0XMcIFdG23xb+ccLp2KteznCrwdco9fLq3muiNclIhGo5FZjL537nBSydz77XQ5tez04dQc8rBql48LI9bzrCklAoXYrKytURyAEJTpF6oKIB6b8M3FAp2hpZ/AF1xjzu+VQbuIRkvYz8naTx2Kb2KGbr2lnjjXqntLVHcmOzs7O02I2qdIQbNjGbAYzE40BieYmEWBQvxn//y/2b9/f9d1Xd/1Xd/33Z/86Z+++LOfjZsREjbRZqtolwSVUZkQbrv7rpR4e2un73oQ7uezre2ds++9/9qrrwozEmrqSSBJr5Wq0EWQckHZXGY3OflaNjoVyK62be0dVzALngkqkkSFe0yAHTQUjmweOsRJu7gKsUmSlBkoASZAQRDEhpAMRE1VWBFFKRIRYeGomjNry9FJ2laOogWuKDn/u/T03d51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UIfooRpk5krYtz6EDN1p0YymyUUZKsolId+Ebv3IceZmJgBMmhaik0tceW9v79KlB8bd+M233jpy5Mjjn/rUqdOnf/TKK1u3b1+7fn3z+HEEdLhye7v19fX63Z2SVowXrMxp31JfwMqf6q8fehVqhCbQj1955dGPPTIeT5599nu/8Au/uLm58Qd/8L/t3tkG0Z+9/tNH//pf39vb62fThujF7790/vy5vb29F158/td+7dd+9MrL0+n0nXfePn/+nvl8ePbZZ/f39y9fvvzcc8998Ytf/PrXv/7www+fOHHihz/84cMPP/zcc88dP358NBrZxn73u989evToe++9d+XKlZs3b37zm9/8zd/8zQceeAAAgOlnr7/13jvvDn3/yU988iev/BgJU0q/9MUvmoJh5nfeeedP//RP/+E//IevvPLKiy88d+L48atXr166dGk2mxHRK6+8cu3atY2NjStXr06n0/Pnz3/wwQcbGxumUIcYiTElERLQRAQCabI23t9NW7c+Sjg+efxi17XF50FE5MDUaNu2gKCESqgIyGYdllMrqTdEVADDezdj0Pacl+v4cRkTw8VHzRFY9Ys75Zc/LQ66NorNNkjVFCyo5LLfto4Mqi6CMpCjPKAqVk2aYkKikpJABQVagIE4+VEZk+my0umz/mFFXGaDcanyjnMBiHGj6UPNpmzC0rPutwMw6MGlKm9fBJVZPVLg6yufLhtZZtd4kYg7TW6oo4EJLusHPxRdMmWRiAz6N8bBIxHLqmaJaSsRPgxDn1JUFfsvEQYmSb3EqAqK3E3WsemQ2FkbK1/ShN365uaDV65c/+jmK6+++r/90R/+4Ecvnz53drKx/sijj37605/uus6sU1tP3/deiraiUrQy2eoNr18EqgjLyv6vXM4GK7+XGCUOk/E49v3m+vrxY0f/7N/9u61bH50+ffKdt9+8+tCVtglHNjdOnTwhKe5s3zl58sTmkQ0FGYb+rbfefOSRhx997GOPfOzh/el+CGE8Hl+9etVsk09/+tNme25vb9+4cWNnZ8cid8x87do1RPzVX/3VDz/8cG1t7ezZs/fff/+lS5eI6Nvf/c6dne17zp//wi/8wv0XLz7//PNN0/z2b31lf2c3DnFra+uFF15o2/b48ePj8Xhvby+E8JWvfOXsmTNvvvkmlHK+1157bWNjI6b0jW9845lnnmHmP/3TP93d3U0pIULTNITcNE0GqEcFiW3DR49ubKx3m+tdirMU51iQbxBJBFJKoWkMbFABYkr9MGR4Vl3ocCq06iXjRt6OiWG223w+N87yqz5NLO6Fn5fRg1SZpvok/cNm77s+xqrqyuvgDlK+tZKYi4J52EbOxhg+HRM1oQmcNTotJ1htKTUXu0z02mNc1qk/51LVUPiZLUNk604pGSwPVH395Tu26EXNhT8PKv/QnZ3QNJpHpxqeHIh4kIiYqS4AyQ68qtuRWhUy5GKdUu8AlUnSNI2Wzt2a/aBI7kqAZgllVnqdIm1CYEQBFCTEwKFTyENIsBJA9uFhGE6fPn3y1Gnm8MRnPo1E77/3ngLce++9x06e6LoRhcacUCjm9MWLF80Fw+pQa2myImuwQiw9KHQOfqUmlEPkl6a2bfb297pRe/v2FhDu7Gx/8Yu/9L/8r//rnTu333zzZ1/60pcAdBh6kdS2japwoL6fj7ru1Vd/cvr0qc3Njb29vVde+fF9954H4LfeestcZtt2G0DQ9/36+rolHzxcOB6Ph2Ew7fLjH//44YcfZub9vb2HrlyZrK2Nuu7dd9/91re+9dnPPHn7o1t/9Ed/dP3a9cl4HCWePHlyPp+vra0ZZtDVq1fv3L712k9/+vTTT1vi3dhgfX196/btvb2911577ejRoy+//PJXvvIV64kn5iHGEEq4QIQa3tvd2f7gvaPdjEdhNGlG424GNpuZPIU+nozRZq7kEMniUCo9ZxUY4qdCVTGnqoYyjNe51K75fGDO3Rt4oF/MT606QXUHoyYekcTcmDkPlYL0Zx1mAaX6PhV/LaHi2AcYUTD7psbgNYutCJralHOtfyiJ1lcoLyYpgdUWESEhA7KASBJAErB5HQCqCCIpDiU2pHleCsc4JNW2acAKF0MQUVRlgCFJ4GDmlhYHEhQQBAQIDIpICYmYDB6Elycml3eTYr8kl3iIGKOaKVebhQd3uT4MVTV8e49Si8GSMoImI+7RZCIIMQ4AhsthZ2yGN5lpLYrIoQEkoouXHrSzP3rseNs2NjTFRQwzP/jgg+6Q1gQNy5LIScePs/4NVHrybodaP2JBK4iKdOnylT//8691XXf14Yf/6I//5Njx4xyan/70jaNHj08ma7PZDCBXoIzHaz96+ZXbt29ffOCBZ5555rd+6zeJ+Gtf+8vjx45NJmt37uzevn37rbfems/n4/HYXPXt7e3z589fvXr1lVdeMeFr7DcMQ0oync6n0/nW1p2/9tc+l5KORhOzpG/cuHHq1KknPvPp29vbn/jU4+PRaOvOnf1+vnn0KBLP+t4GIgPSe++9/9KLz//Gb355bW19kEghpJSm8/kzz37vxMmTD119+M727l/+1TcevHxliILIqgmQFCFD06syN6i4MV4/cu4+jh/tD3Lr1nVqT4e1IwqsgDnGTE3ATiIoCQE0xC23jIwFfdMy3ObWqwJUxQ8rbpQuD6QsumGptYJIiWzbF8ddS42MjVGRBJYa0VSGo7kZIWJmzmo1uf+M1eXLYEIAjSnG2RCaplhnUKY1LqIf+UWqW60Q7RJJW1wt/3u5OhEAQAOxfchycorItnRRUQTJ0wWSlu9glb712I0dScusKf+TAJqmU1OD1CRJMqRcNIpc0DNUJFHOw6aUkoI2IYiCj/Rys6VsogJo0+TeRdO0fd9bYwuUThGotMHKNukiyr6waPKHQRMjAzFgQuzGrTJg0lZyM1Fhb1IFylCYoCnDG8NCPEFKi+AflWSEK4eDAuLgVdtxtbhxsr7bFw++bKFyns7jI49+4sy5e0ddt76xsXHk+M7OzsmTJ995660HLj4wnyVQRsAnnvgsU/fZJz/36k9fe/DBM+Px+NIDV44fO60CmxvH7tzZ+/73f/jxj3/iwoULzz///Oc///mu6yaTyfr6+vHjx3/84x//yZ/8ycWLFyeTiR3KxYsXf/rTn/6Pv/8/Xb16tWnac2fvGY8niAgK3/nOdz/7+Sdv3br17LPPzufzT3ziE8++9AIA0Lgdb6y//sYbP33tp7/x67+uomsbG5PJ5C/+/M/fevtnTdc88sjHzp49M6QICqFpfuXpX3vg0qU3Xn/z9KnTv/u7/9E3vvENERUB4pBEgQgolyNqTNw1GvHWzTtrPMc2jAI2mFBAgaOColqhSsNj0g5BGRIOCjOCloRVSJtSSgfAXqSjJSi5xKUHLFynZwunFgsXVY3JFzOI6so4RPOblsK3ZlwXb8sSvo6KvRRJrMnD5Roux2STRADgQMStiIimVJI/ZmYy5jItVEBAq6qu77yIPRWjDQGoSrWJVUspAAIx5a7sH/6b/0vJ8NjKzMhECqykVlHm/K+qqFabrh5Cs02xFlBCGuJgOXJv/UBcGj/v+0IENRQZlMHKWGqcuq6rAQHggIg1H9g7ZqFKwMFydTks2wUexnZGVSs7RsvEU89rjz79W93JB6YJIA2A7GrOJZqhdOliSmpegEscWJaDP8dmWblqS8eX54/w4/j3CjL/vH/ADBNEHGJkotA0cRgCkhX4qILV+1hsjpugiLFCDmsaq6hs+r436ozVbDWP6FkjsQUF+r5vmqbvY2Bu2nY+n1PB4mjbNkGKKc3ncwDtuq7v+74f2q5t23Z3dxcQj25uzmezOESJaT6f37hxfTrdP3v27JEjR8xMfuONN06ePHn8+PGbN2+9//77Tz755Le+9a37779/bW0thDBIAqJx4JbCEBVIWtzjvbfvvPeDo918r5/NYG3z9CPjzas9rEcAhQEE1ht+/ptf/Tf/73+23kjHkIaBAk/W1saTcduGhvJATM4HnRS9e2MRnVihFqziDPU/K3LKLOaixy5mLnD44FpWy8AMZx8pvVomgEwYecTaycRl3M8hEixlN56DqkOfZdGLpNMSK4ElpDSPQir1XAqaIPnn/HHhUAZoQgMMKbs8i6A6IhBQRtVTdQAX3/Q+9lA4n5kt/MbcWEu6VW34vqe0yALYc82bowOZMjdqoGossBta/t6P3O7vvjfcRQ/IYaD0CJAkoYgS4mgUulFSBSUzbLxvwg8PLS9Sbrx0q3LGuKwlDv3Nz79WVv5z7ny3yz5pWxSqwbCIGIcBEYdhaNvWYuSIC3S6GCOUDIOleE1O7e/v2zAVPx2nfou8mO4Rkfl8bu7AeDwWSX0/t9iHtXmFwKmPaRhGbWuWbBuatfEkpjTv+7X1NRUZ5nMEJEAgatvmwoX74jAEa+hPKaV09erVoe/7eX/0yJEjRzan0/1PPf74EAcEALX5OZpiHKxDNjBjSAKj0aQbYTMZb81IJGlJ4ipACAEZR+ORRf5SiqICgv3QU88KkohGbUscFICJAEE0e0NajXXnAo5eH6VvmqXMqIL+kTJLpqhtdNWrGfofpcoC18ICq0APIrj44mUYDQCslXItdLQUkbvZTqV6y/moNkQAl6CIlnThct123lgEr3ss/hYggiW5ckCr0DYlSaCaIAF4or24qYgFpmBRCa2lBsxe2PKjphMmk4nIEmqsZiNoQb5eiAjFgnAtsWJH2HlgVd/lPOnVhqpq9UcrjFpLh5qrXVmhlUAAInEzGlMz6gVF1bzqlY705XNd0MGy4lpccJerloP+yr6fUEkcqBRUve1wQEitrBMqKSwFaRuKv6ClFItKnbrTt4CGwkVO32aZ+sDbEizIMs4klxsCxjZEqJostm3lrClFIkqSiKhtmhhTjNHaKZlYUmqYJA4SU2BOQxSROAyakiZi5jQMjRW8MMe+ZyJCFUkIIFEQkdGOFQnAIM+pHYW2jZISCYcwV93b26euARiNJhOF3PEGgElFFJuubdsWcA6CoW2IObQNt43RyJAiRqCmETVFtATEQ8vzdurzdYVtuEj+lZXgoFZpeACgEiipKcGV6EqtDCJYDU1djrxCErXw8muJEarsjVt2Hj9V1WR3Xq4UQVyC28txojxPLb+AfdZ7HAMzg7UFoVoQWhViHJAzSKxVbZog9odgMczSAexIIrLxpxXvLZizlgLeBVJXZ0PlSHtRj+9jKoN6/G5YzCKX3yaJ3AqrhVS9xcYn/gjInjkAwDwmpoChU2IsJRKACzauXnkh4+r/1gLl5wugmixWROqKn+gXVuZ6LbX9ubRIWa6GIQ/yieZGwdUzUlXipViGVhOx7fc2WlaL8sQKaq4+Wa/Qg2VwbsozthQDMpGIxhgDEUGTdGBiJZIkiACSCIGahokFlIgQEInSEP3FjR+apgHMnZYqAgiEwlbRq2qV3sjcjsbTrVlDOkvY9vPRCA0yBnIGRhFJAfp+oJyn0ZhSiJHaEEJDjIp5ah+AZMSW1XzTErb8wUOs+d+iFlhKFldOVlXrSFP99ZWnFM2dDOd/hU2w6Puafvw+tf6rCYaqrvd6AdYwVhO85sSQx56RCCH3RGV5ZDEb/3gYhgEzno7pMUSEJjQRenO+THxYf63kho5slq8IDn8ZV865GGxIvkRYoBfm/a8VhXOXVh13fmffzTqs68Rn5O7103ggh+01Sr54E3P1Q+2G09l8jVoMDSAjUMCUCiKCrhg+AKoL0VNbeVXgfEnV1D/XkQL7Icbo1dL++noXS6cm4prIDn3WwWsh7Jatu8WzdBFo9D2vbVKP0Pnr2D29QsT/680E5b82YT2iIoGlb0hBkRVEwUpUQEEFNKEKEzZsqRnWRSUO22wcRFQVaFiSiRgILlsJBSIJsIHJAiJzFN3d2590oyHFJAKIRTkbNL8qQNO2URIT2iJANcY4xMhMwoLcEGKSBCEEYixZHWdjrByWg9fKado/PabjMezqfJc434/VyR4WoscEr6Zk3a1My1BKVsS3QipYGex+N5d9y9ElZ8YMuV2zfP4WUyEeUAUDbbPBljElVdOsBQ/IlIndfKEPycbzLSyxYd4nSU1obE6LI8avXHVcQEsaq21bTxbat5qmiXEQUU8EYNXA4qXcXtQEtd0ImFKylfmO0HL5A1QixumgKSUCUrX8hTItmohEEoqErlvntSNHjyE3kpAQCFWR9NDISyGLOkrlJHiwLGDlDu68uDm9ooW0MqMOSpOajOpPVqtTXdYQ9Z8W9FcJIPdwY4xuMcMyt1i0wnVpnVipF08GV1I1f/lS7VxEJWCDBdQGl6Bk8kgGTQnNZFdQqwqhpZLiwjwikgwoJqUEgCIJAJGAMZAIKgGRKCYRBBqNxyc3eGt7q2mPjMdjJQRBBFQEEUgq6xtrk7UJziOhBZIwWIUhQbIsB3mVGjItbexBC3TlctvWVbJWAHL125VbLWmams611EB7bCglUV1CNbRPWpUWM66wFVTCC6v2w/rnFfrR6vJfujrPSGyKJpAcXtkcJ82zA3InZhABKuOKENGC7dZZkhu8ADlwYAaROAwCKVCoYzpQ9fXWcd+aIiEXhsb5vAeAtm1nszkR2GAxH//ipO+a3xnb6q/ZKuKlNIgaGIK7hoWF6qPyk/ZOGbuh4YFqGeRglExEMSUI0Iw7VLSxA6KYYUZsK1XIMvFMAoKiXthdSQGJMbnmOVSCGChPbYKlMolohRqcbw+SMlrIcfk3VUTV/5v/6P/EpTZDzVJIVaGkSrMNYkI2Q23Y5hGRxXEwx3cUMVfua3EWcOltczMBYhZpVn3LRKrJ6vgAs8cEkBviJWkGxwEAVWayTyoAB7YSCERkA9lTYDSgoGyjGf4WKFIGnlNBSYptaIDapN1enwZa71MTZ8P6CBCSLY+YUKXrxl0zmk+3ObBKqkOsFlElYgKzsFRjAgAy/9S4jggqke3HZwdtnkuGCSW0mVb2a9WMFZEjHZih14oLVkulLMi86yAtpnJmvzgWSByrekspQmkccwx1X5sTKsAiPV2PMPAPa+m+cplkR5X1gUXEMAM7ENIwDP0wKLElyjPMkAKohjgsIliIaD3EZhdYZSACShRN2lALAMMwzIeM4uqAQ74pXOYvu0QostkClri2NjaQt7W1sRbMaT+nWoTVARozI8XQkQGjpoJ+AOYV8oHZOD9H+bvaxBI4t78SYUOjGcxjSO04kOIIRoqaoFcUwJTjQMApqYhcv3Zt1I1OnDhx+/Zt27cTx4+Hphn6PhZgUJOAfd+PR91s3pt9m4t0KTAvBW4QIcZV5H+4y2VpORRVVUNSKLg7UKVK87wq+6OUSs6VW4kVXxRoGxvxRkQqSavyX6Nd0QLRUGiv7H2GiMtdjrlF3EWKiUSXaIsrSY7rWQVdkgSAQAESQAIbwSqSCFlRgFAAh5SQCABBFQ0wUBQUU7KQJSGiQZEBIAoQREUVEKXQC4+aY6fveQwaIJUIDGGUIBCZlduklBAocMvUsoYgkFJEAvK54BaCMKWtwCEAi2bZgBI1SSJQJgJZKkbFUiotlcsGCQAymAQIIpCKonXwgxkgGRTMt80qRW3CpWqu5l9pzjKLxArlajp3/qrdZxc0WCpgih7N6/eJ5K4abQfA44ll3BPmUzbZSiKSVJBpFEaYi9EjYkYFISyg9N5xbmuynEjgABGg8i8Q0QLMzhtSQOPn8/l8PrcttkZnX2j9X/U+miKwnCXcOaKqQYbKaA3b+piSyKAiRLyYL0wIBfnQBWIdt/fLxZkztmkJe/owRAk4YNQwGo3XiZgUBYSJxcNqSogEpK+//jMReX/nfQCdzeZf/epXn3rqqf39fWY+e/bsG2+88cADDzjrPvfcc7du3XryySeHYXjmmWcuXLhw4sSJ999/f2Nj4/z587PZ7N57771582YI4fjx4yaUfakHJWmmDEIqedlDxYp/vn7/w39vFF3kcu1D+b7VXLTyrPqfteW7LD0PiXzVyyj1X2Z+aYwRFGNMVoXbtkFVAwclisPAzFBqLySltm1z3h3QYaczvSElAFIljSbAlILQuKcupVY5CEK0HgAlUkJVgCkxtm3bhGZqqTUFVY0pkYj564V4AogCaG3khi6j63mGqI6n5KsK8Sx53wcAJ1dOEqvUDSCILCRIseKxhGNyUa4VTPgh1hUqtRPjLtvKiddH6fLBibC+Q92bhZVsql+ADEG0CrmGg9V6HjyHyuF02bkiBX0HsTTmz2YzT9y6dHOCdsG/Enu2B1lXVy3L/enMrAiKOMigSKCahvKUyjSV5SqvlUBVvdf+ClwQthBR0gDITbM+WT8uiIJRVQxsDSB7Jua+3r59+8knn7x27drt23fuu/feCxcuPPLIw++99/577727t7d37Nixpmlms5kVBNx/8eL62tqFC/ft70/Pnj372GOP/eQnP7l8+cHz5+/d2dn+4z/+47/39/7e1772tS984Quuc/w4DkofsJhIEkCIMZoveReqhZUdWCJn/3kZOMb/5ARXx0RrmoNl2eTkUS/VH+I/HZoqkoJmnyOU1rIDEpqmn09VOAQKTUiAXdsOcRiNxnEYSuBW27bZ39u3frS2bQtQJwhIIgwipKlRBGqFmogMKKIMRBapIFSAAUARlAiUsGnbbtQBooAgYcbLrd5axGb4IMGCde0zeZcgAzK66JEC3VdTY12qk02IuxwmokXDLFpCRSS5TBOPhGqp1PfTVNUYY4wD4tJsUaiEl0scNwvq9AIsB4Nc1tSUJlVK9KCWqiuM3KQKNW1BCZWvPC+V+Tm1stUqemKC1hzOyWTisY86BgwlvO/CbzlostjE+p2hKmhOMSJzYIYim/KJpsVWep6+Bjmr98jfyIusXLYyUYMYmjGNj2C7HgEEkqosYOOssjwjulIIzfb29pEjm1b7i0hnz5599tlnL1xoz58/P5/Pbd4DIk739zc2Ny0sDgDr6+tbW1v7+/s21PzmzZtf/epX33vvvbW1NawK2A4K0AUhltK0envvTrUAHkI47HLHuRZ8WFmRK/T6858Iy9Jt5fLTt396dgKqA1VVJORADTYq6fnnn//hD77/1/7aZy9euPDcCy8R8+OPP/76jdfefPPN0Wj0S7/0Sx9cu3bz5s2HH3749ddfe/DBB1MyGFkVSaKoRKICkoi4IRqQYnYhe0Ur1xUAQU0oAggKXYyAKRmyMAAgIRImzbkLBOCuVZUYlZBCk12blWCtSsacdSK0KKQCRFnN/Ga6hcZDKgDgCML+YVwEhlGSemhyEQCuZAocYHtmBlgyI6Rc/vmaW31caL2GmhhqSjhUJDl3QyUKpRQMquoCRc3T0lp5knW/vz9SREzWOKWmlGazmRUlr9Tm+8r8T/UGQdV+wRWcml0ujLPphCgpofVEiAQii4y1bQFbKC/p0ELT6bTv+7SArM9FALUM1dK9ISIiAwCNR8eYRooELMgCgAgGR8xEhMg7O7sxptdefW3r1tbm5uZsPjevM4Rw//33X778oB/kMAxMNJ/Pjx49mlLqe1PaGuNw4cKFo0eP7O3tXb58eWdn55FHHum6zpbh1LZiXNR6ydvx6rPDEoCuj7y+/FCwuqQa2uUUU5uoWJLutcvszOOEBcvttfXllFP/vEL3/uL2LzO/iPDzTz917tzZRx999LXXXn3ssY/de/78Sy+9dPny5e3t7StXrnRd98ILz3/zm9+MMf7gBz9wS0rNCSJQSSrCTRvaERIDppb6lmYjglagFQzCEBlkDGmMsqZAltzIGN4FGKPmNyLCMoxQRNwLqzcEKh9HSx7Wq5zrDy9OEP3r6uIGEcIC6ky1KlL19IuzmIunmtG8IrEOPhxcoXPlCtvWsuPQ21r/jVZttyJiSTcPjXsY29dpPxzeiuGiQQpMTy1fXbZRlbGqCRqqikH/yoqTWf+MpaseltHb6vvUn4RiuzZNM5/P+36ASvR6sM0FrROlM4AbgbjoJCZCgKQpyWTteNOuT2NMJEzAEBRR0Y4KELFr2xvXb3z/pR9cuP++o0ePXr9+fXNz08wuURl1o3o33nn33VdeeaXrujNnzszn8xBCjGl3dzfGuH1n+86dO1cuX7704IN/9Vd/5XCcvj93Y3WRnBumqlgxv8vdjPgDBR2LO1f3X7mbr2RF0Cx9fTnAf/ADK5dUkYJaJC0vCREFMMfQu65lxp3dnSbwyZPH33//3Y31ybGjm5Nx18+nuzvbly9fevudN0fjdt5Px+NxzrupMohIDBSabq2XABxCmjbpFs13x+GUUhsBe2hEQ5JA1ElSgTuq00nXjdfGUZKw72eu/gfV+XwObdM1DSKCgogS3bUqvdZGYJ4BL2IFNSQpJEz2T17cajabIRoUcksU3MOyI0VZUh6Q02HWurDo81g5Pj8y+70Lpvrzfu4HT3nln3WhqZT5iH7PWhS4EPCn3FUAeZBcDzgCWkwJtx1cdhrze6W/WTe2IJ9JtnIf/6UT4t1eFRVExMbMt20b+9yDak6gqg7DYMdp0Shfp99/5Vm23dZVgIgI2jUQk7ajjaSNkgAnEEQB42v7UooyHk++/OUvD/2ws7c9DMOFCxcstcfMj37sUSogRyIaAo9Go89+9sm1tfVhGCaTycc+9jFmfvzxx61d8/Tp0+Z5Xb161Rp6a7aHZTG9tC3Vb2SRQFBEPdwBKvSBlfl58M5aBXFWeEmL8oJCzQfv4Hx12AoWH3ae9LAdLLNu0oSqhArETDTr58QEIBwYiVNKWizZa9c+vHH9+nQ2tfq3oizVVCyBrjfccDsdaMAQJY1xhvsfbH/wSk/rmyfONOMjFDYjb0y1SbAG1ACqiiDh+saGqqVrFomeFCOGEMocQ6rCZytvoQo2IM+rTKDwp0GsuqWfysXqsMjETKqJmUejcUpDwRo2TrYHZFOxtsuKn2XpfLXlVCei9fnCYToMK49pRf+tnOOhlJmloaqnNWzlZSZaVp9edbkkgOpH1ha4LKdafKxiqpLN/kmzvlQXRmkNq3g3onRTxR2xFWI1X8mMWDO7Mu5H2T4f8SylK9XajogCgNoYGchsuNgIh6cTVU1R4iAtrq1vxqTcBoBICpJzx/afHCnrOuy67ujxI0MciEMXQkoaGu66kajGaEJNk8ipU6dOnjyJAP0wdF03Go0kpUce+ZhhdFl7p4jcd999HpByy3FFF9lWZJWlAMstY+Ap27uEMREJYAnT9sAHlvQeVnLKy8nybKPlL7mslAImB8sCZWUZdeW5Foi7mkLyICEEJlaVJgRV2Ng8+uYbPxtiVMNjVgmEb7333rlz5y49eOmtd95OKd2+vWWY01YmEphIUhoScJcEhQBhGOH+ED+YT6/dHjb6sCHt6dHxi83G+YQbQ2yAGkyUJHWjESBmUa8AqsQ8DJGIAgdViHEADswZNbB+X9+QVPBSQynGEVULJ6mqde1aoso0eqBghRRmpCMiEyEHyPFnRCRmFNUy+2hRBq259Jcoz33Lp1Pp4KVur7zVh2VRTXY44x96jvXHVowsVQUEmyOCJUYMZWyEWy1oUzH8Oy6AjAF8Grcvwn9wJoeqAIFKFgMKLo/fsy5nWqXySsbVJ1e/kmts/72UYlxnv9rXK5sixBCHASmXZqnZ9oDWCoBV9E5VVVkFhLnZaJAHFmRlVUhImis885BKReCWVDRKEvMSFFRl66MtAD1y5EgfY9e1SLy7s/POrVubaxsnjx9viAFh1vchhOl0argWvp9Y7FXfRiwDvLWknK2oTD3lkTUaIGKeLZOHpBU60zxqzjnf2MkqhJyMJBeawMJ8yvmVBalFcUeMwKUelBJGg2wHAcj5Jz87Ey0BvWrEEiWNVLOVTRNjmUtBRJSrEXNn1pNPfh6x/dijj//kJz/en+1/+smn+ihXrj4SuvHR4yd/8f5L99x7vmlHH1679vIPXxmPxw8//MiJE2sppUGbGGgy7HXDHcC25xEgMmoT91iu87DfT/emEPdmYfOezWZzXQKyBpUIhKKoxKKJAVAoxsQtiSizxJgQAoggCDEWY2TZIkAAq/NCZG4UIJbZpLgMEe26XECE1Ar5RFPDmT0Twqzv4zBY1aUFixRVRUEcRYcAlJk0lzJ6PTQi1gtbqLFapVXya2EE1bbbyqVVPt4Z2Z5kL0mlUN6bUbG0lUFl6wR/PFU5cikNE7VvqdVVr8Mlgl9U0J2hZFgsfhkrHMWVu5ksq+WgXVLwT7UatOgVB1Ll1Pyt/I2yWgBgZCAUlUBesrUks7MSR0QOa+sb7ahLkFQMZ4w0ZzSy4WtTvQFAUBAWjDUM8et/+fWL99//6GOPjsajmGJgfuWVV/b39hsO95w9c/nyFRW1Qqr9/f0XXnjhqaeeQsQPP/zw2LFjhi8VmIeSWU8pjUYja6xNMY5G3TCw+bNwQN9mQVbQYzNlq0LV3VPrvYP0ZD+YgDt41EVPKGABjiruw8G7ZbVRKoOhggbXSsHIcibFidkiXDXJnT9/b4zx6NFjn/vc5wE0xjif9w89dFVVL1wYqYIk/eQnH/90aIaht9hnjImZElgSCwmFCBAxKkFYk3Zz1h8lXWsnp9eOXuKNCzI63msA4BQTiiLixsYGAKjZv2Kwc2LeV9/3oNo2QVVihNKZz65FYBXScOlQ6mOwkTCTycS2BPJ83DzosFApjUYj7ToX2aKW0c83iTEBRLdtLXhfTlby+N9l57c+d/25DUOr6694vA6q4rLLJmXMhDtlqODzYF0U5OHrtRHlG8chwGHLXblcCnqg14wdV+MmR02fpworG0vzekqpTmNhZSJh5WbXO+VmC1UZutqMsh/6Pook0Mx+SVOMcRii4RO5El44rkiT9Y2mHUUD4lDNlgGg+yN+AKAKIAg2j1jHbffgxQeOHDnCYEg6AAB933/2s5+9s7X17tvvbG/v3L5z58y5sw8//HAIYT6fM/P169efeeaZX//1X9/e3mamzc3N2Wx269atjz766NixYydPnrx169be3t6o60bj8ebmJgDMZrOu6/zsl04n23hU/c5zaplEahVX3ijbPbWlKbLCKYuzNlcClqtv68/UeosQ03Kvr5dfhDIRF4oN6x49VWV7WOp0U0offbQFoEePHnV9RhneLNeaGf6ZHSgiEkAABcREQTBAaEDH0zjZwZO4ub557PR44yy2J+a63qcGNITQKAIwqaa1jXU01CLQgCAICUqDm72Lxd3KGNgqErdUdgwHIvpacTgRefuxd3cTGc6QpJhEBNjmmC6mhmUGJrQBioiLJJTtGRR0V1VlXsRznYt9qf5PJ4+aog7SmN+kNpfsi0ykiLmDq8DUL+hEFk3jvoylJix/vKu1FVlef0aXTRUt1gpV02ZrcQbLYw61wqZxc9QWUwuF2q2rgx2w3Pha+7G+KiIKgYch5tr8XLsZmobm895CBDXLJZGkSKFFYgTSmFR9UlKGPkE3Z00O5cFJAgAKYXvn9pmzp1QTIhBzjAkRx5Px22+9dfv27RjjlStXXnvj9UuXLhmUsogcO3bM7Ij333+fiNq2e+aZZ2az2aOPPvriiy8+9NBDz3z3mU898am+71997bVHHnnk3XffPXPmzLlzZ1d4vqZy3yJEMGfT/gWVfF++cnYPwFxXUEUL+/iHnTE80OZ7fvCGfsRQKS3/mIcXa3LCyivp+34yHhPQQn8CMPPrr7/+3HPPjsejxx577N5771VVZh6G4Wtf+9p0On3qqadSSs8999ypU6cef/zx0WjUl9A1Igk2ycqIuen5SHf6Y91kzO1GpPF8IMARIDGGOKiiEpJonEwmQIadlvWQcbukZFidtj+u89wlcRbwEzmUk303FoV/lndGDBb0gTwKGSi72M7zzJxkgQLqnGL2MhGpLsoRqBTrOdcALK380JM6uOb6mOyvqeqDzQlxRORFTs1VkaoyLHVZZwFkhcvWrlavlaqKgEOloIdanKxrkQ9VLzsWB+3gz/X97QVMKJhlVFs9ujzpsWakhQCuUEtKQPeQPnVLotXbbRRDzAhNaMdJIUJ2ZEEXkD8rnJYflOe5Y+z7FFMgtrAqMOzu7uzv74cQhn6IMcZhuHb9mo2I2draojLf9ezZs6PR6MKFC9/73vd2d3fPnjnz7e98h5m3tram0/3z5+95/PFPzmbzyWTy0ksvIeInP/nJIiYW1i+Uor4D54X+yZr063dZUSRw4E1X6NJ/plLpX9+/En/oFVi4/CA8EPirj2Ntbc0aW+sIHTO/8cYbTzzxxMmTx7/xjW/ed999Rio//vGPAeBLX/rS17/+9fl8/oUvfGFra+v555//hV/4BSJWESZSJGXMOGVJhde745cSNIMSpEAUUlJU0ASoAgGTCjBO1tYocNJICkgggCDCGYheRUQlM5ulybHMIq81pVPjCrH5TrpAx9J1hQrQAgNC6XNO7pQu0V9GDIDKRPDScPcMsJqL5yyglfUAJWNTmzOHCqOa6fw1a6tNLbSxjAaVl6fKSO4k+bGG0WhkGsmLFOxnr4416Laawkw6GBsfpFG/6q13wek2GCJ6z07tqdnTfVvrCt26xFEK8DNWRpYutbabQNTCfnVnE6S0BEDnESWhdv34SSGWWALbKgrJNt4Ce1IMNABAUNRkpgZI0jiMu1bTkERFExFfu3bt2WefvfHhtfPnz7/zzjtt047X1gDAcvCI2Pf97a2tEMLGxkZK6cMPP/zFX/yFH73yo3vPn19bWwPAydrabDYXkbNnz/75V7/6y1/6kmEGmTtt12w2s5MSES+Q8+OAxVCXw9syqoA0moXnZZsHz9cF0EH16J9ZVbbLf3VclEPvkJmzGl4MlagiYuZg5GeuaN/3R44cMYjoEMLa2towDO+//77LOEYURAUCVZQ5giagBB1Qg8AArACACiCqSUEAiJsgmpqubbtOpsMgUQUpGBY9JBFRUaUkglGJiMOidZEWOZBFeEV18Toe/nCdbT8QEQI2TaOikpLmxMCq+vc2gxCClnGuBz/mF1VpH6g6ttyGlZKTMg6ljMSylJKHZfUDhZEtLFvbQRaEjovxgsWGgAVUa82zweEHoeLwUILtWll9/p620BjjdDpVVW+Lh6qa3s2f2r1aUQV1jJ1KNYTZnLV5X0sKLRW0tWjzneUK6MQ+5TF/ADgQtF3EmPJNEIEYAIaYkgKqoghoSqCMDCWh44RFRGKlN6CCCKpPPPGpEBgAOFgaR3/5l3+57/uHHrwciG1O4bl7zyeRjY2Nzc1NCzN/4pOftAV86lOfatt2fX396tWHt7e3T58+feLECaOGYRiee+65Bx544N57z6tmGV2ro6qO4a4ofPW1TK9mJQEUjVr2Z8mucdHvv6m1JZasWU0Ji32uIsqVNFncbXV5i1PKn08pdd1oOt0fhg0s1Vt937dta+WdhpPvp5kdeURVEWABJIgNRARN2AgySARVsrCZSVuMACqAgUijtl0HgEOMQZMikCRADIFDYBVJKYVAgQMHtub1uukBK1vP/SCPFcCyKwSLfHYyEHIiIgvmZVG+iPQ764qIJgVdtE+tJAScvKlqgaotJl8qVDHWQ0+kZv8VKvKobg65MPVDFBEr6/fVQoGRw2XjOtQbYYOctMLQlFIps/Jgs71dtK/ctBYlvjIoQscbneoDcGmSCmrPwQ2tt9UuL7JUVYvp+rba7RG5oPdbCh1cY7josW0iRCTm0HBoRDRZjamKpZJiUeOZUIq7rhnFJuebR6MRACCAJBWQ8Wg8ajoOHOd9w+HKlSvM3KcY+8Eqp4e+b7vu/D3n+74HwmPHjsc4xBg/+clPosk70SS5mP3KlSubmxuqGaul9OlowcxNiLkIzYxzNLGSM98AqDnOfliRjmo2OkAR0KvJY105UogV/Zd+iH449htLLDiz4QGLyYX4wfMtBIYWfzX1Zkb3I488/N3vfudHP3r5oYce6rrupZdeAoCzZ89++9vf/su//MvxeHz+/HlzY0+fPk1EwzAwkzn8FskjjQgqwKDIGlEBgBXIELRUVVEUaYiJQTkEQGwCt9xAJQJSiokoEGlxgphyi6kRpHXbWNu6cYGWorNDIxsukjKEiS0EUEUzFdTTEStjBBEJl4zNA9u41GUKAHnIPSgoxBSpCo/6t7xNsuZcZ/b66KWky/3DfT+kOISmiWXg6GLZS/SWfx9Mdpr/5VkJL7GREujl5Q7Veikr1qZ3u6yUMopI32c0MqgsQyrDJN1udxns4Ru3Euu90IItEJhVJGDOl6dhEEAiUhFkLbhOYLkqW5ACqSokyf9MCTmAiAQIDQEIyGAZDlVSbBIkUCvDL7yEAACMqEk4BAtHmpaWlNrA2veMgkyz6ZQRUxpUNEXIjVeKKNAG1jgoIoH0Q1RDw0JIEq3wWqwQV5AoTNbWFbgfMppcErUJFqIphJBi4tC4g02AFiZi4mFIzAERunHb9z0hxhTdSyPENAyBuY+DHRcTq0YEJBA1xDe1ggODVhYhULRCBgUoAR5VRSFmBUiSciIZDYdIUdWmQhVcIFXNqJ2QpSTYESEAMUURJEpxaLi1THITwqkTJ3/lS1+KKa6trc3n80uXLgHAZDJ58skn79y+/ZlPP8GB33zzLaJw3/33DzEBN4oKIaImVFFFgc5YvMHUkqJEhdhD21MTI42pwWGKqIiE2nIYhTbMpiJJggZkVJMzCkSsgJI0Rg1BMSEBEhIQWJG02Y+aUXFyZVwtPpy8XfVmwrZCbBFFZOa4VNGTv+7ci4SKKklUlIiUFBSIKUWhShwtJB0AEOa9z/ldVVQEoBBUpWgqFAMqBEx2TG5muKmBWPLDEFWIUAEFYUgRD0g9yOlYMP7JTQUIABA8M4WlIWvFrvZgkMsCqGSwy6B6a9z4TCmZqWw+gjv/iDidTu0mNvasPp7F/pafXRK53MXljTA4PiihcZOnABBLm4U9lxCpNNObWmZanJSIIJECxTikBKDGxCrMpRa6OIxodXqSoo5Ho5iSiPzxH//xxYsXH3/8cQTY39+fjMf9MPzlX31dVX/5l3/5zTfffOGFF44ePfr000+jdfaH8NpPf3r58uWbt25t7+xcfPCStb3e+ujW1tbW/fff//bbb1968FKMIiIqMhmPUkpCrJKLu2LsA3PbtfvT6Xg0nk73Awck5FxRoKia0jAatSmm27e33nnnNgIePXY0d6sRGZoHMe9N98fjcRwG8JSPCmZYQi0pfCszA0RUys0OUllDoMoAgFY2jZoxCS0Kt5oPQizAFLjwuIxJhiECQlRFxPl0BgDj0Xg+m4UQ1tfX+6G3T9uAs9lsdt999125cnl/bxcRLl9+UAT6fkAOijCPA3EEFRJSoYQYmFQSwDAMtznNmkAozO0xxS4lJBkQAyirUhO6ruumIIhEwKqqIF7ikGOLmt0QNbh10ARgjaXWleSvzLyEj1Gzj5NozjrmweUAGfsxhzLScjmVqiopooFYa9JESKKSBrPoF+UpbrwwU1LJEUEEC331MaqIzf61dYOHaUwaFNBRP7u8eET0IngAw59xUPZaaEDl3C04VwEAgnM+lYpbrGoifXe8XSVjlRUzB5bb8327/dkrtR7u9VjEdMWB9Hv65e7YwdOyUBEjaky1MiEii6xrNcXBX7CWdC7X0Nxvq74FGIaYrNlTkgBKETgLOcUMNoBBYSgRu9OnT0spvgohzObzEMLm5ub29raI/OQnP/nKV77y7W9/+9q1a9Z1QUQ//OEPjx49+vrrr4/Go3feeWd7Z+e+++577733/uqv/up3fud3fvazn91zzz3MzWw2ZaabN2+KpMlkbTQa3bp1q+26tckkxrizs3PixIn5fP7iiy+eOnXq8uXLkiMUQVWZMQ5D0zR/9md/dvLk8a7r9vb2tra2vvSlLz3//PPPPvvsb/3Wb4Wme+aZ7/3Kr/xKaEcq6hjRiIiQJAkxARJYgg9BQTQJiOR8n4XPVEAUkDOxIiz8Bl2EGOqzhgNXPscY1QqIYgyhmc/mL//gh488/HDXtt/5znfubN/53Oc+13UjA/1pmubNN9+8cf3a5QcfaNp2d3cPENfXjwj0oWkQVaNaBSUhgsp8Hru22d3Z2r31Y55vUZpHpaP3PBw2zyccQcOKIDEFQiJqu05VkNhqOm3OA6iYt5sdHAFF8/BAE5QiQFJFG1haE1vtkjgd+s+pQuOlasy8x3QXXm1VxcNlHgxy/kDggMtsmDlI8zR7WwcRASgRAy1af+q0T2FI1GpmdH3VnFVbMCtLhSop5k6VfT3UFkft9dWxLiyZPKqS9OaWm2nj9FTLSN+4uhG2DkxSSVfV+77yhnXwjKr0llbR++l0PxCbI2r5kQwpW7Wx+Du7NvC9UHPlzKXhJnAzjwlym66iIop5bEVSA4JKP58zYkpi2SgAMPixGOP+/n7btoiQUjxx4hgi7O5uE2HXNU0THFYJAK5fv/7iiy++8sorH//4x29tbZ06ffqVH/2oaZr5bHbj+vXd7e3nnn326aef/sazz3Rdt31nu+3avb29EydObG9v3/ro1sce/dje7l5M8dixYydOnPjOt7555cqVc2dPf+9737NBAJ976nPE1DYsKTaMv/gLX9hYX79+/frP3vhpGvo3Xn/t+ocfvPKjl+dR33vv/dFoPJ3OQuAMR4+mxAAQUxKirGliSqpJJPqBZTwzIEBFa8b37KOT8sLLqmtHtSIZBVhMxRMVEWHEwPTmB+/98R/94Sc//tj3X3rh2ocfnDl75tvf+uYXf/mLCBJCc/PmjT/7sz/9+KMf++53vnPkyJHXX39jbWPj7Ll7Hv/UEzH2IQQTgrZUBQBNkqQNeOrYeHrt/aMT7WOc3XlvbfPkDEcCLKIgoDb1DCnGJBa4JFQyAWqZEEyg2V7JHGCWn3mcighEwWwEZ2yn3hWZmw2a5aZ2Klngut3S71BzkPkZzlnD0BMs3AWpUlTgzauaUb1hGaSlFoUr7Fz/s2bV2qfxpfoHfLWwnP/KrOeRGimYFfYbN1s8u+TSzvkZER0KpK4nLDbFor/Jq63s6x61WgTJK7gyLK1eUFVC+mvgctoPDSU25bt52NvFsz3anrhSV+nGWjbEiEFArenCKEmSggIlVVVJ9Vf29vb6fq55amGWyCml3d3d+Xw+m81CIBF55+13prMpIty5c/vGjRsffPD+qVOnb9261XXd1tbW0aNHf/CDH5w4ceKDDz64cvWhyw8+GGN8/vnnH7py5Zvf+MaZM6en+/tD3+/v7X34wQdf/OIXVfXZZ5+d7u//2q/+6gsvvHDj+vXZbHb69Onvv/TS3/27f/ehh6489dRTQ99f+/DDz3/+8yklRJCUJCUAeO+9d//tv/nXjzzyyOXLl3e3d9555+35bHb58oPPfu970z498sjHhjgQ4Ww28xIBAGUOADDEiAAm1ERF0mCIM3EY2q4DUERKKTKSIFoE2tim2AjKlYkqi4rh5GScqSUbTWLZK0KMcXjoypVHH/3YbDq9cf3G1YeuPPDgA88++2w/n43H1ibOv/3Xv3L61Kl//f/9n3a27zz9haePHj367/7sq5/97JMiopoYERCN+VClbTjF+XjUrnXrzfak374+ncfm2EkSFuWogRpFEjW0UDbOVLRinCgqiqCzmUoTmhBUBKAhCirmoSICYUasAqLcwCEHIGWWBbFfuOTp06IUs+RVtL6D1nZKJdpsz4swGsxrsZcBzBOlFYQoWO5CtCRSClfWt4LDLlzOdVphupV0r7ypHFbt5eyZLYWUkkWI67d1zq89oNqysvLFVEbcpILL4cLCgtlaah9kGcGj3sG03NHqZpEfUm22YJXmlwJzKVXhdS19zW00Y80b6F0e+35hDkmgJlBGQSVUSUk0imgSUU3ee2PZj/lspkBN09pzh2GYTqdW2Nn3cw6UUpzO9m7fuXPixLEPr31w+86tmzdv3rp1CwDX1iY7Ozuz2ey3f/u3X3311a2trWHeb310a973W7du3XffhW9985uo0HAzn03fe/edc+fO/eEf/MH+dH9tsrYV+H/8/f/Pu+++e+7cuWEYRm27Nhl/dPPG9WsfDv0c2/a+e89//6UX33777b/1t/7WZDwZ4jCdTo9ubv72X//KfD5PcRiN26997c8v3Hfhzvadxx//REzYth2k2M+mwxAhRQooIk1oNA02EwsR0yBipXEWtofc8MNEIsNsOm3bNjDHfgCAJMkcqKZpeLnfOuWGW1VVYlXN4PmIOXWESAoWNFIClDikoVdNjDAM8xTjndu3mxAkJVBdG495Y+O73/7WqRMnjhw79pdf+9qRo0f3dncRIBAKqIiyEZUCoiIqMaTY37r10VoYQbcx7pru6D3zISgGBFQbOQDKhsFGlNGiiAQXkffMUSKqYPoO0Jp5McYUgA0eRKr2gEVkp8SDavPEjAZVcIHlhoPTvxO2M6bzpv818xHndBuX0WB2gSgSMjExiyQVAVIVxVDgH+8icVYuN6+M+G0Y8koDii81pTSfzy1vXvM4WBreEemNRWOMlk72eI2bdrVTA8Wcrhsa6pXVfM5lQqaU8ifzXNIyqKtvNBeseCqlIlIhdWDlUUsFfOlC16UPAHjblNsptRitS4cAMWBQycaroECKSWQAW9XijEWEmWazma1lGIb5fG5msCFDpjTgoKoqKqrSdu36+tq//bf/9tKlBzc3NwG073tD/1lbW0spTSaTZ5555uWXXz5z5owkkZSe+NQTOzs7r7320/39vXfefvvBS5fOnDm9tbUVYzx75kyK6UP6oAnhzu3b1z78sB96UN3d2fn2N7914f4L3/n2t69evfrOW2/f+uijYaPf39+/efPmG2+8/tWv/lmM8cEHH2yb5n/+kz/5x//4H7/yyo+efvrpj25+dP36h6/9+IfrG+spJSZOQ2toIcMQLZMdY0QEJOraLonO+8HoKcYYOAxxmM/ncYijrrMjm8/mo9EoMEtKMX8d/YxKhFEtVp1WsTszhxuriyqAMuFsNmXEOMxvfXTD5r4PQ980zXe+/S0C/aVf/MLe/nRtMtnZ3RuGoZ/NgAlzFZKl2QVAEDQg9P385vUPdrGfjEYzbW/vDuujpgkchyigCpCSJBQAjCkmQoxIgZWViGw0VF5/GeepBkuGICUl06BJswVwKBfIPa6QaurgqYgYmbn57/TmJF3b7HzocM2cZF9YRvW0TlLoh8FkN4ANzslN84fWRKzwe/1PFxqI2Pf9ZDJx7q4/TyVkXAsmt5JCLSOw6nbzW/vDVh4PAFpEuIU8s1AoD8ASzDbp4yDNtfHiok2qUgAto47qgJRTJxNXg1/AwSBgWQn4kbgATQUaEkvNu3tti5szqbhWS9lhzqENK6kBBe3nPRKmoQcMKSVbyOXLl4vzFVKK8+kMEc6dO3vvveeZ+fOf/9z+/v76+gYoW+K6aZonnnhiOp0+8MADiHj//feLyJkzZ/b391NKV69eFZG9vb0kw9WHr2zfufPKj38UQjAk/NdefXU0Hn/myU+/8frr+/v7F+5/ZDrb/+Tjn9ja2hqNuytXHty6fevzTz8VGt7Z3R6Goe2ak6dOvPXWm03T3HvfvadOnfrN3/zy+vr6vfeeR4RR165PWonz+T7cuXOnaRomnvdzZjaQhzgM+/vTyWQcQmi7TjH0SayEpGkaVYkxWZd/yYqAFan2fW/jmGARaED0kCLjEJM1qWvpvUDEvp+rCCERoJrBizjM55ceuPjs88++/MrLRzY3UfWN19/Y398/e+bMSy++9PTnnnrjjdfv3N7e3t2drG+kNLRdO8SURJgxxUiATASomgZkTTIPrd5//4Uh4Z5M5u2ZRIhpGjQO2ooSIQbmrusCcyAmG9AtqpS9RFUFwBC4aYLhF5lUMuq2+YhICyKUKgfk/UbOfbY5/pkl636Z/50X3LGoS40AgPypVQAIF0FPQEQuC3AvT7CqVIbsCuvdBVDtr8zncy01MVDZUFTF3am0Gbs8yQKolkYuSr3R3j+3EGyivkBUTckCKyoxRSk5b8xiAhG5mFtuUrqZAwj9MIBC27WhMdi02A99Exq3cVx+5ZWYoa65NtSkPWkRe8v7lapejbqm0VRHTqJVA1UEBKjPHdTYi/SYgkIAjDaeV6zmUBUBJSZUREYEQcAQEIDns8QEqtESNCE0m5sbRDSf923btq0VoVBKQgzMEJrQz2dNy6PRaH1jwkQicW1tbDI9pbSxMQmBZtPZ5sb6xYv3m1t0/4X7rj50ZTQat0145OGH5/18GOL+3u75c+fuOXcWEa88+OB4Mh76OJtN26ZNqgz4m7/xG6FpVHR7Z5uQHv/EJ+ez2cULF/t5v7axMVobz4YhiQJgiklRSVGScEMqEJM0bRuaDkBTUsAIokmjiARCAI39jED35rMQAqh2XTfMZiCDRRwsX64xzSXGGLXMUFKVBAOiMuSzDiEEoxOfqKWAhJcvXUhpfvr08Y898vBsPr/0wANxGAhgY21t1HUPXX7w/ffenR0/+sADFz98/oV33nnrC7/wizLM0hC7bhxFUppHUpbAFBpuY9wFiCGADrO1ZhyI9jFNpUfq5nFooAGKSQYhACEYAo8aYUVGVgKzjxEEFJiUMKqg9awyEiIyBiNdSViYy/jTghVWrBbjUEUqdTQa516g0mtWU3IdQ3FuIiJrlVFViZIZzyRIBRHnKtkNcso0mtDeAkFBUYFLSjOmaOBMzGyAoFhFnWpL1v67u7u7trYGxbWsPwy1aXYgAwjeDV+LJVwu9rF4sLEEh0BWjFZg1jhPxVGXmgiQYhpSr95MyO7iVlOQCAl5NBrZyoYYAbFpG0BMMduHLlOy9EFQQWsQUFVzzEUFJI/JlSqXb2onFTRYdztrs8itvGw6gojMRSUmjThHmIOsqwbBOaigECLN53PbbiJrBYoceBgclBtUExNb2GAymbRtZ8E1ETGkiJSGlJLMIwBISqHh6XTatsE8shxrSFE0KUg/DAitmYc8YUnSS4+ITAyax4AO8yGmyET7/awbjRgxzoceqe/7oe8ZKPbD+mTShbaPMabExIg4DBm/IsUEnFKS+bynMUdRFBmPmv3ZPIQApETUjcZU8sGAknmASK3ucxhm0/35bDqfzSbjERGl2KeUQTgS0dDP3K0wJkAiEU1p4KAqElUtAhGn/bQfUkrMxMSuKk6cODbd351O908cP4bEe3t78/k8VyFsb3/i448hQkqDSPrUE4+3Tauq27dvEdEwnQ6CGCIwqDJqGAUm6GWYx75/+43XOUKCdd24MDlzWTpS5mE+B9ZB54lCG1rpccCkLEHZBkB6tgkQk0qKMQRsGxZQFQlo2THzuai2AkpUHlRlGAavEpJSbWgmjnsGdeRIq8vo1ordsUCmYLHLsCTeVqynpUBShdiSq7GM4xAQ0LRIjENKidrgQDS13IHSoLe9va2q1kQBVXjLXxlKrKZ2wfwmh2BCu6D1kNJ8PjdjwWKEkhbda1i15/tCLaDj+5WqGiR3drw3xKwXIsYSCaYu5IBZJQTz1wmtLEEgD4+UIYEq0mKcnltPJnosflEn6dwatMtfnIqITDEJC4KSqEJu5i6m7KJAPMbYtC0iDsOwv7+PiCmljCvWBEWYTCZ/8Rd/MZlMHn/8cXujrutefvnlb3/n2ydPnPziF7947PjxOAzEPJvNHI3gxRdfvO+++ywiZmWTlsWw3fPYvE0d0BIyI+Z+d5eIEtKrr7364Ycfnj179vz589n4R4wxxhQB/v+M/emzXMeRJwq6e8Q5JzPvggvcix0EQJAACIAECW5aqRJFlUpqSdW1Wb+qNutP/d73Meu2MZv/Zd70jNVYd5VeVc0rlaq0UtTGRaQIili4kyDABTtwcdfMcyLc54NHeEYmqLaXRqMl8maeEycWX3/+cwgx1nUtue6PReJwyCIEyJE9Uhc7YZbszxum3naF5KSnRgy7rtMlrepKK9GUkRYykwmzcIyhc+OzgkSatdYlA0DE0Hba9aQuKuwxY9B0AG07attUNT0atYhQ1/VaiJE7VodCpK4rDUmEEAAcR6QqaroS2TvhfsMbax8tf/z+lgZhFALOdcuw5BdaXHHOkaDvVQzR116Y68pV3okXmYytQkqnAGDy2Zu68s7pUXZEKaxepN4LhTcR4kDE4TDJaCmCBhZSKZEuUCa2s6VTypr8FZz6CRVoHYuKjp+GMGfnk+BzVCtk+a6Lp5eRPc/Ozm5sbGg+ykK6ZnCUUuUzLnK36LHvmcmg212DOLX3kDgfU1RlyoOzh9TbCwjhH6g5zPIigRUhCWooKhVj6pbDZU5XR5g82jxU84Rj0VTL6tFKHxty62t92JJ+3+xVANA51LUUZnIuhOArt2VhCwLEGHtJ24fK+/m5OSJq2xERMcfK+X5/EEPo2m5D1ivvhaWpGwJcW139kz/+kytXrnz80Uf9Xv/WrZuzs3O9XrOxvq4kfh9d+mjrloWm18zMzHRte2N5ZW5uzjnXjdrhcOgrH0NExLqp27aNIbJwXdfMUjmPIsvLt8+cef2BY8fOnj2ze8/ubtQNBoMQuhBDVVerq2uIQHUV2hYQXF0TQhciaFUOQBRBlI3NDV95IhQEFgldEGFEqqoKQTQAHENoR6Oq8sLca2pEAuDQtdnGZO8zolfAETHHYgNGQQIUgVS04TAxNihvlR1aPQ+5PptC14FptRi88+1oFGOs60pyOJKdQ8Dh5jCE0NR9EuK2i9AxOwmdQ3bC0kUOXT3bD1303q+1w82NjUiRkIQhrEWguMlh+fZtRwQSNTKImAs4aWxfaMyl6zoAAe9Jxa7zVeXH5Rj5y3Y6ymonALAgsckpsyOmlDEUgNtc24DlvgWwdNbETTFjYuxQl3EJ8E75F5UJKgYG0vJAxWdPyCC70XA47Pf7Gn5GRGuBBUUkqxyGXWHCArLH9rmtbTk1Kg4t4x4ja3BuLIbzNNnZNgOEiEAgZllr2jtd0/sU4mFBSMBZIioD+PpDdXBU0QgIR+5C5733zjsiYS16Fk3n2XSXAt6C5bFommij0luEGCqdPq/zBcljYAaJWRAFIg0GiXMoHHXwhEggTZVq05yvqPKO3MEDB27dvk1I3iWHAgTeOH9+NBodOXLk0sWL58+fr6rqy1/+8j//8z9v3bp1MBis3Lnzy1/+0nv/xS9+8fTp02HULmzZcujQodOvvda27a5du/q93he+8IXTp0/3+/1Lly7dvHnz8OHDx0+cqJxDwI31tbn52cOH79u/f18I7S9/+cu6rr/yla9cvHjx0VOP3rx+zXv/4m9+c+vWreMnji8tLf3m178Bwq889dTMlgVhBoxV7WOMzhNLdEjOkUMgrMiR9xWApDx8iJ4AmR2KR2SJgKAWECJaqwsA0P7GZvOquO8U8Ket9QAcIAA6Iqe510IGlWvKUbNpICDekYi2VcYYg+qcuqoI0WnzghglgkfomAnBOxcYnCB3QTjOzczMzwyqeXdnkzoZaLFuNxwhYkRGkNC1zBGAOUQF6IBSnSBipmoTERZxhHXdeK1JJXEa8SyiyPbgKh3052awmzFiR7c00suvmdZkZiT06LVn/eTV9Hbjm5ZvXOboKa+p500AWFgSpkBZQNFq9zjDBSyPrJbazMwM5zy1pdugMHn+kO2jH/rSarKwfJyk4NBXymFVCKy4v/HkxoIKy4LN6RNODxhjVLCAyf4KCQA2N4dVVad5YUEChunxptxcZI6REDgyBEaSEDsAYBnnIy1ibQJI58tMeuMA4YKPta5rRxSgstUyT19XG3GMmssbIKoRKAzOEZagLO9AmLtIHh0Sskjk2IUQA4ggQGi7rVsWlm/dPn78+OWFT997/707y8tbFxa+9c1vhhB+9KMffeOPv/HhxQ/PnTkbu+5LX/rSr3/1qxjjE48/XlXViy++yFu2AMD6xsYHH3ywdevWL3zhC7/5zW+OHDmiT72wsLBly5Z/+Zfvnzhx4ujRo4888vAbb7xx9uyZrutA+Pq1q7du3RoMBl/5ylMXL1769JNPjh8/tnLnzgfvvvfIqUfIOYgCKN47AEFJzTC8gcsRQojtaGTYNsmUF2ovVk2t6cWq8mo0IWKMQXGAIUTbMKk9JAECqDcdYyRET44cKfFPWUmTNRL6zEbgEBmEY3RKwedcBKic1wKtGAKHQOhZGEBYokhgRlJWgBglhE8/+Xhhy4Kb2b5tbuu6CIfQeMcCgBC5E2GOgUOoKwoSUkUtR+195CpC9IiOYLxfCdE7bV+Z4IsldiQrfwUEpNRzeZ7LgJFtYHNEoLB90tcwqfyYobkaAciu7fgwTgmFPJIsEwFiCGIfcvETZjadkbsP6rCZ2bo8wyT4zv5v5+5u6WPnUSuGxqw9JpKkcHDQuIVgokm8CSbMLdYsGze2xDL2bDAYlHPqgBw5Yam8L6cGrRgpSy7nHCBy5Mp7IqqrRISWiNOYQwx6JCxuZ4OcuHK2jKZWJaorL5/lJ+YZK2W6KjEtpFFoiRLEsAghKawOEEbDIYi0o5GOT1jIgyf38MmTO3bs+MUvfvHzZ5+9//77t25ZgCj9pocC/aZX+yp03Ux/MBoOl28v/+6VVwa9Xmi7pq6bplH5JcyDXo9jPH/u3Kcff+K8I8XYCRDhE0889oUvfO6HP/zRaDT86KOPVlZWtu9Y2thYd4R15dvRcO+e3bt27ti1c8f3vve9q5c/jV3Yv39/v2nWNtYTyb7yQZoKFBaO3vu2HY1GoxijMAMCR1XmhAgKgRm13Wg4BADnBk2vIaS19TUNPDNz13YCQohdFwDEORdiyPj6dGhCZAgYQcwQ0HM11MsCgIJWUocJIESSlDlBga5tiSh5fMzihIUZOQpzbCvXdx5DHM7OzXAYbHRr6+tryzc3+7v6c9u3IjsVPwjiCOuqiqFTl0rp+HPulZ1DCDKMsWlq5zyAcGRJEOhxKV0+v1P+i/5/TLltFoBuWmvQMHUMy7OtIUKlKPA4bg9jMHQFNxgtvEWR7g6G6FmgdOxSaStk7hrMxdtQRLL1RtrW5TONlanX/+SvXsuXDPjX7/eVOt4MYDurquEDc+iCBr0ttaQVjGW+3G5JRJJ4GidkoSMiIBbWqYRCHkuiUgHQ/mzZFnWAZviZ1CNEIfLo764XsTCzrW4piUptwyni/j+j8kpPkfPxOgyH5BzGyNE6xDoAiRCRAQgpdJ2IJPpeSv0VXnzhxT1791RV1XXd+vr6xvq60gA5ohjC8vLyu++8c+PGjfm5ua5tTxw//sa58wcPHnjhN8+LSDsaocDFCx++/eZb8/Pz99176P7773/rrbccYGRBgLWV1TPnfv/Y44/Vtf/440vHjh1bW1vrui6E9s7y7WtXLnMMN69fG24cfOfdd+vKH9h/2AN1Xdu1I0cIlNOuCMqgoAUGjjB27cb6Wte23vumrgEVpEMIghwZIAJ3oQ2xq+u67UYCWiK04ZAqIGbWnj0ja+jGnMQda4JYSNIhcI5KF0b3JCgsw8KOme0Cc5poXDOF6JwXCKohowgDC7rAAZk4dE46GY2EIyB4X/d6DREKi9otDhEcQddFjkhJvCJ5RxUiAopCuzVPpPBiAA1qAQIjeHKQXMUyppOAa6kKVHd5KDp3QjbMrXuEqUzbyfZy3hEQSv5n3v9qoEcOZQiirHMoj+fYS9JeuxrfkpzXTgyQ46gFZIFVVZUOcsKV+8PS5w/JPt91oxgjQKV+qS6zWjF4V9QKEUOMkeNwNAwhVKFyzilACwCqAr6JiGqwISI4MjtLrY/IHJkjR59hWyIMkPJoBIkdCgC4CyrCNEKk5A/knE4gOcci2n9ybJ8UfB16xzKeBdnkMc2Q3GxmARQmwAjYASCAB4xALQCBEKTTqAWHmDtmSGAAJHQeJAoIA3YRyAFzCF23fcf2ha0LMQZCjMwxxt17966sr81tmb///vtX7qy8887bBw/dO5idPX7iRIgRCY8cObJ8546r/KlTp86dP//bl1++//Dh+44c3nPPvmvXr1/44IOdO3eee/ONbTu2H77/vldefuVnP3/20cceFUJX+S6EbUuLbdf967/+cM+ePZ/73MPPPvts13WnTp26Z9/cv/zrvzlyDxx74M033/z7f/jHgwcPHrr/8O9f+/1oOPrGN/6YkQAhMruxBvaCjgiJaHO0sb6+QYS+qQmJJeWZhQUJWdsWE8UohE4YuxBCF0nAgQOtZxGOqV9CygSJcF1XeggV7swOPZIIIGGiQippFYmyllYvBgkREDhlJJiQVIByDM57hlwmwYxRBCBydMieYLi21g3Dwty2XtPbNlgcVbOjluu6icM2EDI4ihxGbYyBHantqgF5UO8cxBFVTU97KGOm7nMeuy5z+gsCKH4RANATqcQhRG2qo+LFe59CnJbQJFKzgHNiGzM0DwqjHiE1SCpNGwFBQiQHUVSiWXWknQ4sMCt2ajC5gRxTmbEq6YnmZVO+lfngMOlqlT4jTBZv2XfGpsBv//a/xsgxisJDVErasVSLwwL1zjlF4WhuytxXUqwrj80cO/aROWaCfisNy+NLGJzUpp2w8pWIUM782ezopQzEbNkuzp3eSqFuX7ZFlaI0RD9Ui89QjroAQM7NLR08+flRs60TjyKeOxYK6FAYOWJOS5ttJZBIbWxFbeQ2GJPIzBHJdZEFxKi49fFjjBK5ruvQhcjRMpomxEWk1+sNh8O1tbUt8/POeUIIoYsxCEBd1WaUMXNVVaPRiJn7/X7MzITOuc3NTSIyxeW9F4A2f1MXfWNjo6p8r9cXEe8rQooxbmxudN0QEavKA4gjzzE1aPZFjCNmNoJRO4LIdY7cmUGanjQDxNDI4pTtFli7jMbIAJSQ58zGvQkAhONOnulEaQgjV+SwsMvF6TFGcg4IvEQn0rFrReoKmrjarV7eWPtkx/zsres3RtJbuOch6e2MUEnkUDkE9mHEm3d+9M//OFq7QyKeyKFGygFAyIF3BAiOkKqKfEWEzlHlHEJ0RN55AnAIlpAxY8FXPuIYKVMY/mLbRufH1nTqClPHmAq0BIBGJEnu4j8zpVtuVzFOCEJCAq1eTvoYaJLrQt/YT+yfpQQsRZU9i32//I6+8d5XROKckmFhjKzls+YZ2UnOB3hcrmVbwTlHgILjWmd91KqqADFwNFlm93bOadGfySwOHEMMIdTOq7Arn8ScLwCwPtPm4irWtjRTy+WEIlBlz2+icBwwSus1jqUhEYq6x4TCU7MPmcPMnnoKhaWtZV3uYAWAamupU4mEMUTlk6/ruuMWEZGw9rXKHRu25KgtAMzNzY3atqqk8q5rW33CgKnMRadIQSUqxVTu9Ho9Fco6JM7gUmVT1qVUpIWIjEZtXTd1XatYHg6Ha2urs7MDNUVZuBsOE8oFgDIjgoZxkGh9Y324Oaz1us7Z/EjBNpXPD8CYaw+UtlFDbBxTWtZ0YbpdjveLjDePzVUKbLt06rquQ+fIk+YvglSMyBFjCLeXb/dgNFzvJA67NmysLfd6i11gAuTARAjCoWslxcXROwe5jkEjgEIozMJS5W1AhCJMlKo6IUsfYWFMmydpdLQYwwTK2XYOF53HDSZie5uKCm2bmeLMIxECONXrVFCP2tHQyxocFwDQO3UnkaiaZM4ZWyumLqaoxSZT7KXEGSv44svlSfQaC6wqj+CYua7HeQer3oLpXNL44fVN27XI0NS17jATFjFGQOQi5m9mGyLq5vO5NzZkbcBdqq0vN5lVkNmfXG7LUa6ciWRbMNO35RyZ6LFV4ZxNV7GT+jBJ4nDC3B7ThGC+ApY7CfPLVPfHH3/MzAcOHDA43+3by2fOnFlcXDxy9MjMYEBIzjuFSinF+vXr12dnZ214Npm2bzIfe9eFoEnQcopijNevXx8Oh9u3b5+dnVUQqY6wDDSoZd7r9ShjGvXiiXNDT3iMMfJwOMzd7xCRHJJDSVikutZRWSFxCGE0GlWVJ3Jd1xGSZQ2ntmC2gHQ5IjOTc5oHICJH45BcuXYxxphrp+3cxkyuYKsD2S0iIhBRTpIgEJBQAELnCNuNleXVjW3bFjtB54S5JddLppgAKbJDOIFtVD1RSqEzarpaHfI0wq4LTaXNx/MQCBFJ0eS6kwQkagH65NEtbRk7C5TR53bsY2ZMtrYRthVN6cYYQZHlk/UTpZgz/8ZEAxYhpzhZsC2T/b8KOTCWnqV7YZ+UstXMHzsjSQBlgwVA2M5j6TjgJNMFF8EULsCykYPKbBu9SQGlodUwmD1nVibj0dg01U1jWW2713g/FV5oKeNNpthilKtbAgXsJzatSaomgk2FnGnpYQKgEYhSWZZaV3MX5SHRGYCi8OKdd94JIRw6dEgH4BFv3rjRaxoEeO+dd5988sn1tXUQ5fF0CoY+ffr0E088MTs7azZmCKFt2/n5eRFRm6ULoXLOemerqtBRdV338ssv13X9+9///rvf/a6SAXRdp10KqqpKgNK6Ho1G1hMFc8jMJtZ7L5KMcF/5pNtBVwRHYWTTroKMmVdXV4HQe9/UTcy5YcX1GCRdxg44iFiCxYKUJYXoRN8YycwHKhjLu+uDlwiXdE0AEQ5BUFirYAU0j84zM4MQK+eqpq5mZyvXVMPQMTmJQnXPESJL17XAEdWCCYJa5KnrK4Ii5BBJx4BE6B1VVaWcy0lciniHACgIzKKVTMLCELHwaGw/m2UnhV1jS6M2i/nUunbWkGZKV/GkVILCCKWCGnRsYfAY62A58VJklHLHzk7pGNq9SvMH/jDZaRJARCnoLYm1f1yoWR5g0+p50ON9o5oQBULXcYbqmxnmnONM+WsmSU4B0NTIVBzEgrrBWhRx7kNks2bTbfpwypotpbINTAWBhipsKgtRm2eQEg8uIVHyqCd2BgBgot2diP9Lttr0yB0+fPjSpUtGRqGF5lu2bCGkrmsvfPDBiy++tLS0dPLkQ2fPnVvf2Jidmem67kc/+tHs7OxTTz313nvvvfvuuwcPHnzooYd+8pOfDIfDAwcOLC4uLi4t3bxxHUSuXr366aefHjlyRGlevfcbGxtN0/zVX/3V7373u7W1tbfffruu6yNHjty+fXvr1q3Xr18PIaytrS0vL+/bt29mZubcuXNN0xw7dqzX63WZQts5h4lklUXEk7Jig8KdKctKczmHw6EyATT9nnMucmzqejQc2ndMi9oOzgcMzKkHEcylmKa9NN2rah809ixieq48vbYEY02juHkSvT2TE5EIkWLcWFsfrQ3nG//xp9ewt63XG8VBiBAcUWxbcOQxxtABCEjKN6DmWxAE01So18kirPHBnDpRvYWOIgBlMjNEFErwDW2nq1NRMumURx0nSbLsuUzQgKJnQ7C0vSlCEfA5Q22aqTz/WDhHAIkiWoc+IcEnoT1UgJVMuJiraGLIHA5b6/Ka9mZCADErrbQHUGOyK6fDbgbJmjA5MhYrPjtflJE4BrKCwsYznUYkiBPxechKoKJEm2ICy97DpKdjVqKZS/bYeajjUJyZsph9B5syZhZmwERN4JwLLOPaGAXXT+5vm8rynzzZ+lqNGv2/niIRCG370vMv9Hq9Q4cObT92/OGHHjp9+vTawYMXLlz4xje+QUQvvfTSqVOnNjc31ZD5kz/5k9/+9revvPLK3Nzcvn37Xn/99a1btz7zzDOffPLJ5U8/rev62LFj58+f37Nnj6LCZmZmlpeXv//97588eZKI+v3+p59+ur6+HmP8xje+8dZbb129enV5efnw4cPvvfee9340Gq2vr3/wwQfHjx+3neS0vQ+kZkdNrxmNNvMmTjNv4lgzsl3XkSN16AqxPmZB5BxSLNwx4VRYo84sZ6cMQSTGqBaujPme9I9JHRobp/WqL3ZXJr0E4MgsjBwBBZFCiDVA24UWeyuj1mGPA3lwhJUjr5iRdjQEbtfXVmPoPAjlwquUuCIVxCIIKfvCDFEIMWB0JN57YAkhIAPHWNe103RtjEjkiLyvLLej6Qidk1A05oPCCcKiuZidRANqlsaB/qootEw7tnxvRkqSa9k2NK+kFBBTmxwnv2CBkVLTQ6EPSnFTOlL2uc+iATM8YYLZS1NF9mDOubxjwE67SKKjxESENHZfFUFhN56yzVS1EKUddvdl7UMN99iaQY5DmylkcgQKdhEo+MxosrjGasHUi3HOiXAXmMZyBhARWGLkNkbvyBXzPpZ3iDDZsKkUjt57rVmBcdw01nX99NNPHz58+F9/8IPf/va3y8vLK3fuAMD27dsXFhYGg0HTNLt27docDi9evHjt2rXNzc3l5eVer3fs2LHFxcV33nkHANbX1wHw1q1bRLS5ubm+vm594Jqm+fa3v3358uUXX3zx1KlTly5deueddx577DEb88bGxuHDhx85dWpzY+MHP/hBv98PIdy6dcvMGVOqtqs2N4fMKlDIZEraguQUAqYJB/3+YDCIXfJGzcA0jhcz+0XSAdZacCRMcafIIMkwL9sfZO0iujMtrMYZkgtZWpUnyBaHWSJyXdcwguGo683vjBt35gcz129vDMRJBIgRBAIIx9ZjbEcjiVFBRin1r/YIqufFhaODVNBnIQASCaDzFGMc5VwEorUfS5uTirJH21qlgKAifmcq31QdFeg2+2ZkBmZPY1hQCdAr1bndRQ1eO/jF7I0DTPZ9G0a5KPZ+cvKnJZENw+7iNd7hyEHi1ZiwlKzEQZ8aks0MtjspV+4wa1MEQFaXMnZdEGbnnRRGgd1bnwUT3CChQpLh7EgxIArzYGYFaWZ5n9ZDT0KM9vy2DJqZBVVanIeeKIoAEZEl2fZ6PBK5X4w+++FmjyKicwTCIXaaoJTsZJnUybfDCVUDqNcZbg5jjKr9EDGGsL6xvra22nXdtatXv/zlL7/88ssAMtMfdF23ubmhzZo3h5uOaMv8/GOPPfbO22+HEE6ffnVhYevm5gYCjIbD1Tt3QMQRHTt27OKHF7Wrb4xxdXX17bfffuaZZ27evPmb3/zm+PHjBw8evHLlyubmZghhOByGruvatqnrjz/6KHTdtr17EXFubs7MacjGNjM7R4TkPHVBOGpndGItlhcBgKquRqPR+saGiNR15byPIW6srysiXLRQBh1zIHIsHGKoqwoJRAAZUuNA1i7Yuh8cETIDFdx1mD0yyn31UjEQpZ7KIgnKqPJhAnKKCHpc1W3n6F29tGt/Rzi7uMd1w20+unqW0UcGzTQo09VoNIwcgbTXIwqreyAwZm7WrcUEhEQMyneKLOg1GY5Elcdczem8CoUxDVCpkkXEsP7MqdpLd5uGswWRY3Q5y6Y5E0muK+nPc78vExCoMa9ib44VNhZ58Qm/yGQ2oiJR1fh0SJDujuqHmugpd74JOBNGdjspLLUkgJR1nBzlVII55HpFtW/UzdFmp94gUiaqCBGcQ5+iNnoFBtHGobEgBrMqkiyY9Qpj8jBEGHWj5P0SKqbDOcfCqMXGRZwFAL0f8yvGqMwfCiMHEXCat0DERJqQO+QCYkH/mAwi1kIfJtKGb0nQOiQAHI2GejJLbI4KTSKHoC53aqukBQeh7Zq62b1rF4eIgA4JWGbnZ8+9cW5tfe3UY6dWV1d//oufz83NIeHClrlBr/HeL8zPvfzbl7que/rpp997991f//IXW+bnv/CFL3x6+fInn3wyOxgsLS39+Ec/rHx19MjR99577+zrZ3bv3t3UtVKC9Hu9Dz/88G//9m9Ho9Hx48ffeOMNJV3s9/v/+i8/uHHjxpEjRy5+ePHG9Rsicvj+w5cuXVrbWD958mS/34ccW0mhTdGm6FhV3hEOh0MEInRARE4EYuBI4kZd23ZtqkISqLwfjUbosaoqci6GECEKRgYOEHztXWVKUnuXJfUuqfwDAVlJ5EtzPXkcqEcefeUjRwHwlSci0Tp13eVJPGhEibRxrEcJulzkO9dU3nuqWDpEN5irRlR3wkDEMQKxJxfjiFkQnQAqo5VS1TNziIKs5XIoEgWgixGIKnARxPtakBjJI0rU4JFGH5LqNmrffHR1P+ufrEl9RABKHCKUTCQRl3HfLuclE/WiACJFNPvCcUy5TrW7nctUakJToVI9O+DGgI9SoDhA0uorpQPHjDwEiGOVn6SMrRQW0RIoskb2fmxY/e6//z+mgkbpn5lszUzojaTl6injcEpkSn5ZDNjEPBVResgurkXa7Ic4GfcZm+6ADpGc09ibpSSr3AdWqayhcJGAEQu3014M4xwkESXaUPI42Hrw5Oe7/mLERmJ0sVUgInDsRkMTfPZQLBERHOnCqCoyIkciIk1vx0wDwMyQjXXTBorWsYIYnQHNW2mCfDAYAEBVVZubm0r0s7KyQoggsLa2Njc31+/3RUTxh977m7dvra+va/v5y5cvE1Gv12uaZmX5jr5ZX19fXV3dvXs3EX3wwQfo6MCBA71eLxT9pwAAZSJ8gzmyw8JIpE+r7ej0MYVZT1csaI8RMcTgPYpI17V13di+BwCKn9H7uzwbd20qbfCTAkDOucpXkVmEnXOpgLsE/qJjhh5FCt0oQKBakCvcbCiyxB6FdnV5daMbbL9nRD3EiiQyMHB0YfTumdPvnHu976kCct5z6tlOLBFzvS4A69IjQF3X3vler1dXVQyxdk4zy74i9TSNxAOLl5SJvGy8hNzwigvAgQUTDG9RJmHKQC0kTD+DAQiAc6W7KyfW3iuunAo0WRIiAj53DbN9G6I2Y50OhpYLNw7DTZ7rbM1kICIWcXLL8MWoXfrGN/DeDwYDQwDakbZnmBJyeqoxE9YqMFflsfo7FtApA2nlw9ik2ycowDFyCAYdstNiv+UifUDkyBFzwi4jlsYnKKDGpAkAATDlpG/ECMkx0BL9cYdFmwFRT02bLVgkNQtfPbeW9Sx99Slf2mXGIi5SdU3TaCK/aRqTTVVV7du3DxFnZ2eFuWu7hYUFtVxEpG1b73wIcXZ2dvv27Yg4Go3uvfdeRQnGGOdn53Rzz87O7tixo+u6uq6PHz/OMA72qWpJocSMrylFQHpABOc8EQELcNLMnKt5plRfXVVVrbHncTsE2zbljiqF3WfKI0zAInbksEqKk7QxsnoMarYCpdwOkfcKs41q0DsHjuXapxcxrDYYiGOgnnf7AgAQpN6vIKlCgiXGmCBhnjCzDEcOHKPz2hLMETnvXOIkZJbIqRcQUn4uIRo/UflQttVhnIOSYqOi7Q3K0BZVA6ahy6y5WUDOOUlJZGaOuiDoSOF+pezL40lFjly08dBrSm4/z8KpWlWS/wmf9bItLQXkwjaSfa4/Hx9C+3E+k4Iwzv+p6NHYJEwaL+VmKndSWYRiocRClY2jzja4KfNML5IxKYkdgnOYvZwmg2ubQEkCETRvCowSQ3CpmIMdTXSgTmZLCMCsdruI9oohBCIgBHGYIHx2NtSV05ATB1Hkq9rSkiN/IYSNjY25uTkl7iZHmleyiK89+3A43NzcnJ+ft3lLFc+IMG5lkyymqqqGm5slWiKZliDeO0/eQNjKmhhCcOQMRWJ97NJuduPtbpHdLK8hhLRfzY4jTAEAk6SSZ1+0lY1zhmIVkaqqY+iGo1GmKDPhJFigt0wr4l1cTrZ5KGWgMQQT3Do5egjF4rx2hyQ9fNVUHoUIA43ilr6TUaikG24OEdCnvuoMEkWEEL3zqGUNCMACAiQgkUNsU59qIYbAKIQsJChqATkU6EYjRGyZEaHXa2pX5dDkBG5A0sDGtMgZiDYRysUi+iuFf2CzZCcOxmYIxxiQtMmzU7wxM3NurlkeWBUkGlqSwhxLp4O1G7UwsIY187mYxivJpO2jsqwUozJpT+gn3jrwlBhfALAS43If2P1yUlmsPktvU4oVw6eWA+LcBcjC26Wff7cdZLDpyAxxXGxls18+0oTcBQCAwIoDAPLe5c706pepWZFtpZR7pkKRolb5C5NLWPixqBo7kgIoREQONTALhfauqurHP/5x0zTPPPOMShyH7urVq8Ph8IEHHoAiQzQcDl988UWVql/96le1wdv6+vprr732xS9+0RbSrKGynqsUDZyyG2KqAizbItb1AAx1onfkwpJVgE/aHzlgUW6sJIB0NhABUZFajigwS06FmBhSeNFo1IGgcLFGkAKO5mtAUXlQTqP5BQBw+fKVhYWtGos0nEddV+vr67qTb9++vWXLFqIEjUFC4agdJgMIEBBwU7utW+d5tOkhrK77lbZhhmRHATKCI4qx7ULQPB1qKY4IYkqYKjZaGAgBKMUfYwgEQEjKCEQVAogGa2KMiIAw7YKZIEifTxLCcM5blbEI+77J61Ip5mC26PkQbX+KmASaVrBOcjzrmygT4fDxeSQKkoHRAJEjaTSrcNVl0r0qZQUVsZ3ylRUWe60bogzesSoHbW5v37aB2i/NErE5mt7xxT/L7VX+06beTVYJUSZCNJ0PGSAwJeZwMvuOGW0EGu6H3A0xaw+tk8FJn8KGqraPzgCHoPMcmR1C5quZqMRDhC60MbDuM5FoGTEd/8mTJy9cuGD2c1VX1nq01GnLy8v9fv+pp546c+bMysrKRx99FELYv3+/trtt27Zpmvfee284HB46dEgRCUSO/DSxZhqTPcKEbZsQH1MWuIgUQILxvtQndVmOTOgxkTGTRnFTyjSAkDvPEFHbtvoUVVWZWFT3IcboRAjHRXOcITxlKFSfoq7rZ599VgSI3BNPPNnr9ULodBpv3Ljx3HPP/cVf/MULL7xw+/btvXv3njr1KBEyMzkSAieIDA4cCwhH5NGVTy7F0U2QTqDpbdtGriGpCJAkeueQEFkr41iZY0SsBRgAALnUjSF5TAgIwCF0gcF7Iamco7oShBgTZ6M6LZjtl6m8cBZAfzgbVZQyUIa/lxhaE20AoG2QIFF1OF00yGnlUgqMz7sfb0hnBDg5f18cn3FlIioCeXJHSaHM7AHt/9bvzJ7Fl4Bgs/QQMXIESNVbMdOY2ixUVQUFg9fY5WFmq24vSLbtyXXcVpFko9Qh2pzq9tWnSpaOaNMBKX+iz1yyGUCGsTjnAEkySaidw8gMjA5IE16ci+wVfBLakYioMgcQLUYVkRBZYjBYdlpsQEQgoswPOa7wEZEYuaqqfr+v51CnV5lkzfJKUx2jc244HDLziRMnfv/73yvw56233kLEX/3qV0tLS03TvPXWWwsLCy+88MJXvvIV1RYISkU80YrAe+9wXLtXboVSQUHpopfByOzbhhCw2EO2uVnz5SmyKaB0zqDAccj5R3HOM8e2bYfDYV3XKSqRJTgAOucdOZIgHCl7rPYqzVvdDLdv397c3Pirv/pffvjDHy8v39mzZwZRIyD08su/W18f3rhxi8j/2Z/9xY9//OPRqE3sd8LOkQeUCIEBBJ2jOByh8MK2pX7TbIyEmzmBCsE7RE8cUTA1m1ZqIQBALSgBAWKomlorzCAjVPXP2shMmyCmcL5HIgQkEQIQKqSJPaNtg/LcTr3MjsDsj0PRcyFPKSBCTF6CZugYx+QBqeUhCE5dVh1z5ggIhDkIbaqdEJLLDYDagwoQyWMlkdUSLyWjKTZTV/a+fAp79jFvpkmiLG4l5wvHfEjpNtnPVG/QMARY9EiL2rrXdr9aIZBCJswMBWpxvAaAGuVpR21SBgLK/Y7p76k+q3QNrM0bF/VyIYQx70NZsI4oznEXkbB2dfHUwILUNETUMYsQIREwIGIEFo4Kx8hBsRijgAhLVVUgidnDzjvnEjNhSUzdMSrmyQwELY6LMWq8Uw0EEbl9+/axY8f6/f7zzz9/5syZuq7/y3/5Ly+//LKijZeXl5mZSEOJ024yIgpA13bKOJMRUSktLRwpUVWAol6TdzNp+Sfvq9ig5dGQEqCRLdnIUZ1W55wDqqqqqvz6+khEZmZmUvc2EW0YpzuZyAEgiXQxmElra8oihmkA5WAVGczMRmbnSDNQRFhV1Ycffjg7O7Nly5aua+uq6vUa750IO0eRGdEhBNCdo2gyVGLZbnWzHQ5HLJVzUjEBkiNyWBFG4RBDGA43RdlXBKuqIoX7E7ajFpDJaYAQyTkUEGbwRESAQspRx6GmxjkC0NICIMncNYhWhVc+9R+SQGPRDwiZP4A5MWcgaqGb/prVM2ZmEbYDnS+DpTMkua4VAAQhcqKjQEKvRIBqkxSMBZn/EhgFJtm1puIANuws4NgMi9KR9MwhG8bMDMJpGyn2ryxf0EPlKLsiukk5IqJDABAyUQLgvNr/XDmvz6wiLB1LAEBI5owIITIAAQKBQw9uHAZj4dh2MRuR6lwjgBR4XG2u5ps625PeOQci0HWALq8EECJHTki1ws7XF5HjqNg6TLaCkl8DsWBkZgFCUkZaTPgVcYAQGIUdAnDI/FCAypoV2RMhi0dqOVTe0zjrn6wMlYBGlHH+/Hm1s/STkydPzs3Mvv/uewRYOb8wv8WTowTOBHLEYRznS3ZcjBwjOQJOtdpK2o+pUXpKUVlIzjmn5ZPJLkslKVEbVEQOQGrbiKQETRJ7CCCZoiTlphCoIhFBB0DiawchsZkAYIy6+uwqEhGWqEZBmdBkqztVaZAtBREZsYivmQC1Xgii94TAp1995dbNm23bzgyaQb8WCYiiwCxCASIWjxyJvBNgFiFs+oNtS9s2R1crgNhKz4n3AEQM3EkkqoF83FwnkcY7EkbyQl5QhLSeiwABHUWOLOIjVuSQYGN9bdDv+4o6ZiQIgbEjohoThlacQ3Mt7WRC0RIDJm0HGqd3QWkaRZjIZyuDks42S4rB5eCXurMwDtZ4EUFAcuM0jhkvRLqq4rwXS+dHRj2VmPGQKiI5YTGhYPbAnHq2TLHJLNtvhhsoA0MeEULoiBJYSsz5d858LimQYBwDx2jZ5VJ+q5adFNsiktjLzO4qX2PbJP18XNWmV/A0rgA2Gydmc0zPjC2k/lYjLKmYAGRieFnJTMXGJP+DElzWkVDuy8wiqeBDRDjL8mSmUkr85t/qpVhnS0QAccuWLSwMiJEjB3HOvfbaa1evXl1aWnrwwQfVe1pYWFhfX//e975X1/WhQ4deeuml4XC4Z8+etmtPnjz54osvaunW5cuXtXZEcqaz3MoWvjUPVzeBLdPUVNC4gn+C/6XUYDkll+AkamFxZEywAxKBGIPe3dd1VdeqVcqwkd5cZa5pPwDlPyFrLGO4DSQSVynqT4s8kaiuGy3fX11fq+oqxtBG9s59+ctfun79+uuvvz4zM7hz5w7H2Lat8wQIgRkTb5pSqqJn8M6P1tuN9TXvGVi873nvUEHzyb5LJZcIEEJoKl9VNaBHCJh5Ap1XHhsSYeFkGBDi+sb6YNAg1QTkfWIUUfpERFRuSSicX1udVHBbmEB2pFMKGM3YmYocYd7AGi/X5GZUJBpkY9zWfSxxpmomss+eorH6NQBV0WqOyPTpHr/sTwkvepdr6ZxTpL7cjQMCAB09EQlSDjGPwwT2pusCZe5ns7iykJ44zNkbRIGxy4dFmFlfFvEpg9mGa9DvK/Qxxpj61xU3xcwxhIglqEdRagBA5I2zwq6Jk8ERuxrl81KkIlXcT4wZJ8cQBRkIUBQuIQgiyCAdR+fc7PzcsQdPaDcGBuAQ9u3b953vfEeVng2s3+9//etfX15enp+fn5mZ2bZt22g02rJlS9t18/PzTz31lM7J6urq/v37zVzSl82/1SWXErlYlOlcQbFYaBauZsF0aUCASEterBhY93eKf4kgAAg6JCRfI3kWyAhMnX8NRnxGaDVtCZAYOKRoSzKWiJD16nmqQwhbt2713v/9339vaWlx29L25du3f/vCi19/5us7duyem93y6SdX7tl34L33nvvb/+9/P3jw4Nz8wqgd1XUvhA5TGSkRI1VOwqZzbn5ufm39TlPVscPNUVtFDsRA5J1Xau18nLwbJ/jVttUHF0Tw3gMKRCAg5tjv92MMIhxD1OiPigAV3czaysnZs0uumyWrIoux3GySizGd80Qu5m6gMLaSFPFkZzQtaIyBORDVJmhKdWs/t2NOBc4ojcTsl0SGlIyDqc0DhQ1hl8W76ADtduXx0T/5LBoUW8ljQAii0tBgzsxVVZXGBsCFnoRCokt+QSEjbYgx1/KXrxijyg4tGhYZK09T76bYrR2QxXFLXa3/VIEFSauko8VFXhARJUx0KLOpUQtA+TgoiR6UnPeZkn225pBmBTgn2ipyGoPC7BUn/grvu9Dt2LHDZoNzmm8wGGiDN2ZeWloq11ihhgcOHFAwJDMrarmccyz4GG3VqahytLW3nWEz6XJNjGU9UmyIY5YgkKN/GJVat9hkiXtY8wZEYhUVAIjj3TkV+R6fgcIcSyaYAMOYgs7wHE8//bX19ZWZmZnI3B8MvvTUU0g0akfk3ROfe3LLwsIff+MbK6sr23fu6GKAFBd2oLFYRHKkTv9wOIzr68IQOt7Y3JyZdVTXBBWieBBwDh0OV6MGbgQkhkCezAQQEY6xqjwiaKmEIyeiPAp12w27ruv1epQ4jtPMsySvqkTPjTfk5JHRl81ADgtMZWAVlcPOOzXx0n5kRTZUUCja8o6feUj1jRUV2AJZoBbuen3mhzCp3aduYX8aCyDJuaQU2iikmlpNnJnumLlpGgX7mgtmT1JaQIgYc+Mn732MgTKTSCkaMVcbmpdnAoUyXNjcCiJSC8jWwJKFtn6Ui+Nt/VRF29aHQmSo12BXILI+zECIjpzEZCuqloJsJ9M4NKs7ANE5jjFKqtABgMCMjlikqirRUBphjEww7vPJua2IYaz1/5pl1x3AzCBQ5Sh1qnjIEsdGbo1MdE4URV3Xtea/9ZMYE8+krqnNPCYzfpx40hIH55zTWI6oHEkOF4KijoljlElSiDT5AjEKADFH1fzOVQC5j0hBFxVCcIgMlPL3wKDExIhoJUFFGbdzNDe3BVKis659IyK+JgTsNX0gml/YOrdlgUWCMKFElpR1QJLIGoHwIs47X/dmZ3asra4s7tiKc/NSVZ4aCQFFEIhjwMzioKz7OueGZs7ea1Sj0JbSOfJVBRncREg+dRwVRwgIibu2MBYmYw5lDANgjLBNdZTWpBuKJDoLK7YE0qQhopOMOSyVtP3QplQn2aphdGNMZvch3gXiLyVIKRNNqE0Z4KXQse+nB4yJKlDlawAhV1QGIGLTNFSATWKMkIPnls+3G9ijQlawpTyyHFn5PDp0BZuU0QfKsat03gCExqEsyJX6pYEDkwLeVs4maDx9iFiwuqlTw5LbcYgwCEJinJ+S9Caz9MBleEj+Z3o81md49hfPDYfDb37zm10IkbkiunLlyp07dx566KGXX375gQceUJ3Tdd0//MM/qPP1hS98odfr2S6pMjOGyo7RaGRd5G/evLm8vHzfffeZaiWitm1/+MMf6peffvppAMgdVGA43Bxb++lIO0Q0rLn+VVcclLEAQFuEgQiC0+0YAcghkHOEWsysyU0EkGjWvqZ9BIGEhSXFDe0k6KLnhjYavRjvHwKRHNuSEtrvCBCrVHeWSDIIgNR2E0EiTsdSAIUwNzoDQCKPCB0gYNu1m+ubvV5fyHWRvXMABIieHJD3jV9dS3wgkDWiEkYQEYAQgbJksrDipDUJDwBOJY/uQ+0LRqpsoHSvYu45TkTaEUBxD6V4khxPiDEtjc0hpPIOPR0xRqWXYDOapIjbStFF3QwO2wN6Oz2eU9JBRDVO+hrnFxbYn7vtoFI+Yq5nMBlSiioA8MpBp+gA7x2CM8lq/zeDSERAoB2N1tfXlYFFX9a2CQB0+xqxQwiBMPUVMbShWaGmzHWTlU0NzS5LCBoABsF8R5uIMvxsF8/CwSXPaJKMEgAckkhOkDOTNk1MtTspuSCJB0CS7V1Ys+ZaA6JKLZcTxogozI5SLcL8/PzNmzfHWg5xc3PznXfeuffee19//fXjx48jYlVV169f37Vr11e/+lXdBMpYuHXrVhG5tXKzaZotW7ZsbGysrKwsLS3FGJeXl2dnZ1dWVq5fv764uNjv9xFRm7Wtra19+umnX/ziF/VD59z6+rrW35058/rhw0fU1Q0hNE0jIjFy09S6H1QSoTk+5FDjskDkiqayIhaMS3uRyKnwDepqZK0LSE5NobF+sm2q+LcuBAGIGitFAECNu2Wjg5IaUYUhGcmCDjEBkgEABaPifwEB0ftaqxkJhSSiMBCREAsg0czsrMACMS7fuRNJZuc8IwVmYtDGrDG2IsKKLciJCULBsQASJGSWrKdyzATBzrnmDZnZ8h7K36tbxU1WS6nzTkVnukkjBWPktm2dc4osAwBEdq4ynCAAi0wUXavW1y9rJNQsBrMux4raMBlxbDoBQBc6zgZdOWCZDNeWrymDyIZUhpl4HIQGRMg8/oDkEp0aZFS+FPlRAEAQm2KtM9Lcvn7Z/LUkJoSrqtL4ndY6uVwEoG8s6FNOOlrVdZY+ydQE8FVq4aCiSp2F0rPDojYva2Uwg38sOMS6DFkdCVj0USQ3yWZt/CO2qpDx3CpoOH8fihC7ak290YEDB+7cuWPqQhfjrbfeGgwGV65csU/UDrp69er27dtv3779ox/9aM+ePTt27FheXr5981Zd1bt27zp9+vT27du3bdvW7/cvXryIiPv379eEWl3XzzzzjFaragjp8OHDAHD16tXf/va3m5ubR44cOXBg/+uvn9m//wCz/OQnP0aAPXv3zs7Ovvrq75yrvv71ry8uLjZNo921En7fkTagLo1n7z26lC3FzHDAzF3osjWItpqqeBIoAcS0jskgyGajrZpOM2FKX5SBLUREAUYAQZpQ0hgByDuNgDjvARBEIRdCLBCZAJwWkwpJkPWNIfBwdn5LM7c91L1NZkLnPAJ06san3eK9ekXMjCBEKMyAogA9TOBD53K2Wp8pma7VmA9ARYz1m4ocVdeVMelEoJ9zQGZfiAgAVVWtsOPiYOsGHIMATQeXSppzkLHMUdhOhtxuiwo6t9I40FmOWYVjkVAqDaVS+kBBCihFYbbdAgqvwjvxumOUD0qVFRAQpHIGyIoonV4Rzqaa5adKD8hKvRKtJKZSI7WYsMAu64dusgiDJ+LB6Zo69RoACm1HqfGukNrwwpbYUjCq/dM5zRwLIaJ3zMwxgABnVWNz7b1TwnAUgiACQIIoCDESEojyn7AIVk0FCDEyAyCRSGr7oWsqCcketSCLyMUEL9LQLPmq3r5z1+/PnH3g2HEBROcA0NfNJ598DMCnTp3quu6++w59/etfX1lZ+bu/+x+f/9znz587d+nShydPPvTEE09873t/Pzc39+/+3TfX1tbfe++9e+7Z961vffP73//+xsZar9eLsWua5v33P/gf/+PvHnvssX6/Pxq1f/EXfzkcDufn5w8fPoroPv7409nZuRMnHnzxxRdHo+Ejpx4bzM6AgwBRLb/AIQIjIRIDACBw+hMCoBDnDZ/jiFkZRGbU+DRLjEHlEyMwAIMSiQEiYK4EVoQtmxWQva0QAgh7ryQ4MR170D7ROVWWe4Gpi6AZZ3TqKrLkjvUCFMRVCXOEQWJd9YabuNwK9eYDNbdvb85sDb4hhgieBaJw5zXpDCwkDhEESNiBkKR+FqgyT7EEKOBAsWYOibVzfN7VIURidYWSGwEiPiHnQKKyDrBRXxGRSPA+oR8o9ewEERaJInq2UWTclW8qS2uHyKS2WQ9UIIrNwrImBWOtkJUNEXnyWSsLs6BkJZ1t2SnpI5MdpU3BS9nOr8hfeQSUXPiuxmISN6kvTZZ8kOh1KZOG6KsMx+RRjomcvfchBuGELzAHtXRNS5fSpk9XwrkJ6gDRSlylRJmkQdLIlIh24CyKiTWCWoSTLLlbzhoRhRAZsCInQciTJy8hIkBd90YRQrcZupGvKucdC3ACATmOnGnL0GxLAQgx+pxRygsAymoaYjx48OCXv/zlCxcudCH4qgKQrmsPHjr0rX/3TQB46803fVMxSOCwtrlx6aNLgtD0mrktc5FDb9CPHH1V7dy188bNG4FD1dTkHSDWvabrulHXHjl69Omnn67r+uLFizt37er1ehocGczMVnWztrb+5ltv316+45x77PEnfv/67zvuPve5JxZ3LHVtp8tdV56ZrURLxDowgqAIs0FaSkVthmqa5cyzDogpNZMBEyLiq4pj7HJoPGbu5M3Nza7rBv3a9K9aEckucBUisUVJx6o+SAwKfy18bfWgCbSrF6JzdZTWN7N799/XOXEca6qo3tq5PmMtHFipRYBDDKN21COJwo33Dj1gIBpjbUAEZSJPZHtqanL0YIYQSMA554hU7thRZxFiBKeuwrhSzGRILvtIGJ+8r9EsrNKiMSlgt5BxvUXyv0rnRpej5Dgul9XQNqXpVYobKcJD5mGU1oN9/7NjQOMv4fjboi5r4byN52uceJ44eGYBqnsScleWrusc+TLkBjBGEkGuYzI3igsej7ycY64Gm6DSSjS7MUmovDDpgjFaxkrGdSgTj8DMoet83TivkcYkrSrnh6MRo9dSgKY3EMAuBBZGckio4OkyuiQ5buXyRSiHD2Mq1+D5+fkTJ068/fbbLjNLdV1A59oYQbCNzEhC6Jve1sWluS1bl5fv1HXDDALUdZGZz5w9d+3ataZp6rpiBmY9oqJhrxDC3Nxc27aj0QgAQoy64dQOr5tm3759jz766Pnz57uue/LJJ8+9cf6Tj6888MAJiTAatY5IBEPHIohAwhgj+MrlKgrkyUkuY5Om8bxzXHzBnDib8BiC9izTxkG6d13GhTvnQ1QWGy3BdzF2IsghatJnQosgEjlKAfUhpBpR8L5i5gjRkSBAF4HJOay8qzz1vRMeDddXNuu5LegrkUbYxS4KBKQYQ1DumxijOFGxi/m0lzp4QtAkBWmuPXjvSSkkHaVCohQVGifU7HBlETOOlUwe+XGEwTQ9FHkuszXKM2vio4xP2zIZ8MJNVOpNv+zsjEUEgtpRmE0KlWIaB7BfTUmJKWECANq90jFzGzoFXuvqscQE35qUapj6kIw9z7KytByo8rHXdd21wUCuJnc0pa3DlQLBrblGuzhmI6sUqBNBgUL8W7TILLJSMJufqMZIObn687Ztw8aGEnIwgoYZIsc2RCIAdMNRq6ZEiIwMyNJ145akeqMUvYrMjp1zg8HgkUceGQ6H+pht227fvn1paWlzc/Pxxx/XTCICNk1z7MTxKCAct+/aNZidXdscCuKTn//8hffev+/wkaWlpcFgEGI8+sADs7Oz58+f37p168GDB9fW1zeGw+MnTqDzgQUAml7vvsOHV9bXCHHb0qKva+0k7Sq/uH2p6jUzc3NNv/+LX/3y5MMPu8r/8le/8pV/8sknNzeGAJKTngwA3nk7b44cZQFE6ugUXCi21TjXBEHuVuaco8RlMcaDUE5T6OZp25aZtblYSsyFMBwNXba/nPchue0OkUQSrRJZsAZVDKWXSNoPm5sbjCIOkSEwRKQegbRhY+P2zAx1w807d9bnm7lmNiICihaOAmCOcCFWVcUsKNo2eiJQYGJC30uuCE0fpggkSIo5UN0oqEVtOihnA4u4LBRibkrKlCJpbObflWs3g8AsEZjUGbYWMdeClDe6W2GUFDppBiCZLJShEohoKNapw2UDgCL6nj58+b/917RLHDGly4UYPTjMo5kSloprKJ/WysRtmgo5hyBQZgHtIdVKopyfk1xXUl4cMhDRLmsf6isVvhdPaI6uRd0s1GfrUUp5G9Kw7eqFPUcff3pUbWnBO2TP3frmcBgFRTgG7ysBIOdHbQtI5HwMgXKg1OYqMjuHnlKira5r5dMwC8huba5HF0LM2gQJOdmGHgGcACcWscDMKRCCIKLhOB9CZxpUn0W7gylvJGYbG5E498hWHeUyA6xzDhEUOekcOedz1EAQx8yWulMxF1Jiduw1majrqA9oXEuaoFDNCoWPoFvcAEcbGxvMrNFQyGpjNBpWdR1DFOGm6bVta2Ob2nJVVXEMIFJVdRe6KkMKui6sDzeqnvMIoWWmfhukcUFWPlm7+p6jFY4dud6O/cdpfn+gGRJw3QhEHMSL75//5Y//pYboQTxWDr33oPX35UHVf2ohsSp4cuicpim0aoDIJWuoqrNlxNOBEnsp0sdmLwt0sAnE7BappNa1sKSNbXJXYErt1Fh4pJR9+l57NMBdqSco/AzJDoQoysEh5NaVtqvticwoLgVQOXv6ode2RDHGwFEIQwisYVQJHJNUcwV4hzn2B31m1pIrsy/MjhgrBBFFkSpfuGSIsz2JNVYuM3/2JHfDggy2Y0qDCmIUl7vlaS65vKPuj3I6Su2Rl0RmfCW+0jyvJOIOdZvRehSyhuLIO18RkbA4QrXjiCj3QUbhKCiaNFWHSL0h772ifnTAKiMIqQudd9Vw1PZ6DTP3ml5Qgv3IjMiMbReEGRClY3Ku8j6G6H3FwnXdD4oVEWmaOsZQ1XU/BWoRQMg7Ncq8r7q2dZWPzAIShUHAew8pUKY1X8gsISQ3S61+dY+YOUZxDnXkJnBtEW3pfX7ZbpOcSLQFNWoYzEVP5akYjkZArtfrD4dDzXGQ82WCXyWXnlJEREAOMQYGRhBFEREANlXTq3073GBmX/uOO+Z2aevMPVv3Eyx37ealT66DG6HvEKNj8A4iY0WVcmZqdss559ARiVk39lxmWUuinGIWYdYdhSDU7/dUMbgSrln0wLEtXRiM43wWpABram6hc2hAVjML1JQuhYXeyP5pE1vqP/uTFLRwIbeccJN4QLusPmUUJhzXLVBmqi5lUHnKpu5oJ9EbQY+WL9V1zSKj0ajros+kc23bGlYSEdquNbvDRM/UbZLJQw4cam3DlPArF0CH5XODR/uTiWEdg6RoccDCrZUp6ywnZTS4oDLOrC1m9t7XdWO8QlAoZHSkvQEAERiQCARd5b0QMDAjOZ9bNaMAdCEys27QGONzzz23Y8eOEydOEDFHrCv37nvvzc3Nbdu27fTp0977Y8eOffzxxzHGvXv3CoD3/vLly6+++upgMHjiiSfrhgZN3xMtr6388sXn1jc2nnziieFwuGfvvrTRs82iOft+vz8ajd5//8KVK5fvvffe3bt3i0jbdoDw4ksv6pMePXpUaXHatlWh7KtK+ZLqqg4hrK2tzc/NO+fv3LkzOzvr3EToTbSfaPbBs3YF23YwmbWEIoFgNny5cctNaRprNBqNRiPtUm8yyFcVMzOIryrUmszKi0jlnBbuqMVk16m8H4VY13XaHkjMHLrAHKQFL8REzmFVY80Suzsra59KWBsNN2dnZnv9QSvEjMza5ScECW07Aq2VLUKetvH0viosNL0rIgAMIOQgmyekJCT5mxNn2MQHIq6vrzNzXde6RpBxOibfuYjv2mxLAVx2k9gi/ZNqYoP7S+F52csCw1DUMJtqUTjr1BlHRPKeciLMDAUzl6Awdsofmv0LpQVkYBkpzLaqqnzVxJDiGi7TpzIzC8cYQm5GbsLSLEMA0LlWLx0RM53IeAtapGBsH5o5eheNlssARb1ISQRny1N+YgT4ZiWphPU+kR9NpS3FupvFSIVsRkJgVdQeACQ6712IwqLJY0CCpq4kBuUnWllZqeu6rmsBaUcjX1W3b9323oPI+++9PxwNDx069Prrrx88cND6Gp87e/bYsWPLt5c//vijhx58aH1tQ5x754035mdn9+3Zc/7sOe/d3r17AVFbWYQQZmdnY2YjWF1dPX/+3JEjR15//fW9e/dqu/fRaHju3LlTp04hYr/fr+t6OByqqaVS3tCGdV2fPn362LFjseO33377O9/+zqgdqbunAAsEHLUj3dYqtrIW0RUbqxDMfqiZJ+U+0+Zf4yUTgaR4WONKvV4vIS3yFteoBAg45ypfOe+uX7v2q1/9enNj/eTJk4cPH1ardri5+evf/PrKlStHDh+9795DP/zhD5n5q1/96tLSkkRAxMpXldKEsQCBYybsOKx3GyvrKyvkvBPh4KnXl64Gdgjs3MghBAXOOK8EY6hJ/cK4oHF99TjCQIQCMTO+EKK3XykZo+5MB+MyGiJS4Lu+DD1o8XhJLsLYojGjSTJez/RBKUFU46pV7r2ReIxfWPiAFg8pXapSosEkoxgSdjFCCdApoiXxs0oxQowOEUl5RbIAClEQcy1JVAYZAhCOTDnAbE9FRA6prmuOhktEAIiBM8wMAYC1exxDkKhU+3oyLdUnzOS9VksBKFFUztxXPradFBaTTZZqdVcAEVX6mq7gDJfKutGELkIiiHPMiROnlNMq+AgRIaIElOCcowR5QJSUNtX/EyrmVBwRgnQS1It59LFHrl27hihtO6oqr8+zcnu58RUBXP308u9fPX3u9TMH79lfO88YlCdo/757jt5/eH1t7Qf//H92XTeYmamr6sEHH9y1a9fePbu+9/d/f+vW9bm5uaNHj7700ktEdOLEiYcfeaRrWwnMbTs/GDx84sSBfXt7lQfh+cHg05Xlew8eeOrLXxLhK1euPvuzn6ysrDz66GOj4eixU4+eP//G0uLizl27RCSE7uC+ey6+f4EAjxw69NLzv/nk44/vu//+ew8e/PlzzxHS0eMP3Hf4cExdLlR5oHMeCzIm58ZV2mVHb9uySftp7pSFHIEiD8mh8vyjq/szqXZCQcVAnlBIEAlBSyhcHHUnHnhgx46dLz7//KmTD3dd59Gt3lnphu13vvWdF1544c6t20ePHCGiM6+//swzzzjEmUSKGCCEGgmoJ95R7Gbmt9d9viZv9ma2zGw7FKr5IK4mJoyIAuAIidAjEHdREKRyReotsX8lpk0QIlEeFod6dFGECUiJXZUATkBQxJFjZomZZxDMReJs0VdTx14yt5+jBApFR0QYWSIHksQZIAWAkHKiuRBeMIHCLc6UmQV20s2qMBViwsKklTacpOKI6el3SEAJ2KWBnYk7sgCRsEQQzIUEyeiKUYSFHDnnhJkjk0siDQqjQJSKQbv0wrgzERZl4vZsuY5u3B9CR9N1XV3Vm6OhOL0MAINzDtRW8tRgHbpxFl9y8y8NPKn0MSijySP9pwWeIWOA8sjzJGSs9lj0mGYgqhGIJME9GLW8QMl1c8wfdVMAAAhrFwq1CRILJ2FV+djF2ldd2549e7bf7yPAzp07X3rppbm5uZmZmdB1IELeO+cuf/rpW2+99eCDJ6LEb37rG/3+4LlfPLc53ADkmZlef9D7X/7DX/3mN8//7pXfbl9afOSRh7uuQ2BCcc7v3rXr7UH/e3//d5/73OfuLC+fP3+eEO+9794zZ15fW1t54oknnHM3blz/D//hPyDiC8+/cPnTy5c//XTvnj3daETOVc4f3H/gxedf6FX18aNH3zx79onHHjt79uy1y5fv2bNHAN55++0jDxyNMcQYiiCaGjHjWKPtVJy08MvYp1Ouy1ShJQBqJWAMQZi1pE4jI7qgqk8kbXeJMe7ZvXvPnj0fffRRr9+PIXrnQaRtu9nZuaXFpX6vd3t5efeePcz86aefVlXVdZ0kRBIRkkMnAjVVzvWWr69tXv+ohuFwOLz24Sd77t3tvGcgwMAkIk4QmNGD8yQVgXceKi2lV0YedaCgqpzzJAwSsyGA2hFWefMQKSKCgQmyniPR3iuIACogWEmjTYKbQEmmFkfRijNEAW2GCQSOBCAqI1HyA0oPSK2kqST13XEZk0F2xu0gTxlNZv2l95I+VTPQEHZYYAjUmIoxAosDVNQhgLCWfSOOiXiU/zDdOPurLleRYZHrscfTZY6TxEB2yPVrnCu21PJPUUPCXtN0HBExMscYYogI4LyTKBzS7URE65vMBx6NUtNULvBm5vpB9mMhcWiViIZx8rKcYiijGFop5Bw5Z13fkYi0wepkTtEmKkOmUES0m0XXhcp7Vejf+ua3lrYvff+f/3lufv7YsWO3b98OIWgwO4xGgLhz5861tbVLlz7avn173fR9VXlf1U3P+erW7eXtO3bMzM457x859ejly5dfePGlPXv23LP/QFU3HCVy+NKXvuS9/5d/+ZevfvWrz3zta4C4tr528OC9f/zHfzIzM/PhhQsPPfTwtq2LzHzw4KFf/epXTdMsLi5ubGxU5CLHLQsL991/f6+uA8fFHTseOH7s/QsXbt26dfKRR+7cWb55Z9l8DZ1/KVI/khFANhtUxDixIJqgPE0yDp1mkISI856yC69JbEtnogBSajTmqmp5efnFF1+cmZkh55xzo9FoaWnpxRdf/Lu//7ubN28++eST//Zv/7axsXHo0CHnXFBsqh4VR8gIEgnFS2gozG6ZHTi30dV1f8m7OrIjrAQr4QgIyQRJJHMCUAaCUiiaKEkV7xx5lJSaZPOeAMT7KlO5JCCuTU4qMBTRhGaW42QxJtVnyZY3ejlCyD3PEo2JS2zFmCu6zU2z+YeMtjNtUUqfUrjAXa/yw1L63P3NfB3gnLDjXP+kDiDFfAYRFObMIL6MPGGBYNZ7lGUWJlP0CbPR6CyOY8LVFUW3tik1AaQcQxsbG845jfia5hARBFTAqAkvm0cdQIpN5L9OTYRF4xCRCHIZYJo7zuiGKWFvRyUKAAggiaDyuCKAgJabgjnzk/MNAiiMiMhRHHlE513VdcHVFYNQ5QJHV1WB45efeuqXv/pl4AiE5F3lmi6Ed9579+zZs/v3H4hdB4jOVyzw7nvvXfroo6tXr/qqiizkq1u3l7ctLi0ubT937tyXnvqKNgW7ev3am2++efLkyWHbzszNNk0DgG3otsxv2bZ1W13XiKTJr+FwePz48R/924/+9N//e0Goe00IkRwJQn8wmB0MAHFldWVzOLyzcuf+w/f/5Kc/6bpu+86dkM3JMspmitQc8yk1MLVfNZcUhaOqftJ8ImuDTSKKwpD9rSicyFsVYSzgKt+2XQhhMDPzp3/27//t3/5NS1hd5R3Hb3/3OyDw8+d+vm//PfcfObJ8+/b7H7zfcdRUJuflQxIRhhgAhtxujNZuC2wOuR/rmUHstKRfmy8DSma3SKXwSv6t0Ar1DJzHqtLGGKjkLfbUBuC1PWPxgbwzCcQljahcxJm3k5lFpo0OZkYBltQ9IagJkS0VzsvBBX1NKYPMMhgvR3FxW8fPlD62juX7/4n0Ka9shyVtGNS+VYxEQJhLt8CXKks5E8u7lrtKCg/THk//ZNFr+zIWUCCLB2NBfhg12hYiOaqrOkbVPA7UjcnCCwpOSZvoqfkiq8kugEiQrHyaOh52KZudctoANPKDMbIjEEYRsEKvz14dUJQ/3HPPfhEJXRBJ3GkPnTzZNE2v1zv5yMO9Xq+L4eC999ZKWooICCcfefjSpUsPP/LI4uJi13WA1IVw8uGHX3rppY3N4ZefeurKlSuAuGvXrrppfvfK7zY3Nz/3+c8jksKRlrZvh7fe+slPf3rixIkmBTK5qutdu3aplzoYzGzbxszctt1vfvPc0o7tB+89qGuvBaVdCP2ZQdP0tm7durGx8d//x/9YWlyMzAcPHrx85crM3KzLHDSQNZAtpa0v5vzD1FaZmF5CiaDGOSBGYWYGRFcER533nDmDU1ICQUBC1/X6vQsXLrz88stzc3NqMX304YdqAf3kJz/Zv3//qG3fe/99Zr6zsrJ1YYGca7sOISEqEkUag/dEAeZmBt4tzPRmb69FGsyA65iGqWzZJVM58rhik4iYEESQVHii8wZ6RKXrJqfESSqjszqHaAaRaWUTQCIJnGAJbKJx0ABKTQkpHUzomCXEAAjOV45QQoQivYNFdRRkeWcNjSXHQ0pJYXrlrp09DlHDH+D9mfp/3tcT6ab0p1yhjdkZ0VASvvT/+q/2Y8ppIxtNAVQbF/vcfde7D7ZJBCxseADY3NxUMFsSfCoFIHUB1iuwCAJwUb2m5utnzpH932wuznAsLU0wUzDmujPM8Sn9rZWJoPODnQfvffgLm25LCx45UuyYsQOHAgBjCyi/EcQEnCtda2ZmDl7VJdFoNKrrqu06rTIncsyRyIkwAFaVB9DOPN5YTZq6IcLhaJQC9s4JC3Os66br2i4E73zkwMzeO+e8CMfIifwdKXTjVs5GC/f666/v3LVj+/YdmJENiiEkQmRABC0Br6pqeXn5lVdeGY1Gf/TVr27ZskVEFDEokyEAsx8l1/RNbYmJrYwgqWouYYB1BokSrY46L/r1rHiUj1EiMyE5R+fOnb99+/bDDz/c7/dv3rwRQti9e/eZM2euX79+6L77tszPv/76mRjD5z73+bm5uS50pCV4CFWMlXPMECQM/PrypdMztOxg7dqtdejvWrznQT/Y2YkHdg4pims8vv7CL1969l9nPTSeEB045x14kqryVeW1bwQ6JMK6qiryrFWT5EA7UrA4P30i0uwJEFWIKe8CIJol5CSTx2hb3caj0UhiRIS6rpEoAkfmyBGJKnKJwaQ4tqWG1qU3E0zBaE3TGIKvdH3KE4GTHZ+hiEDbN++WVpJE791bAECArKcWAjgSEFZmMfWMYqbjKxOipSqTu3rd2chiVlzlRJhZVCJ3fNHcmRAlA3JctvOTN+ccTPYPmNrfNh02TXY8TEITjUFGiKhMg3odbZSssW1NgoYQWMC7SpRZBiptoyIIoMzWd00pKeZQIPcFtnge1XWvCyNAFhZf+RAjInahQ0QBqZtGREQoxhgyfiyMRtplnJm7EACgrpuu63xVJ3wj0kbiM6GghWHJiukoMekkUV5VdYya4cbcmZNPnnw4cDcOqaCLMQ5mBm3bIqXFqp2LzFsWFp75+tcVoaqiZ8q6mVKGUrS4untfIiIACmQeaUwiSFJbtlRwr2ZdtG4frEIRVB4hYhfjgw89KNp0wLtti4uIyCIPnnxIK11jjF975mt6X91yDMDCDgEdClIkQNd0MuqobqHeXIf5pf3X12QYZIAEQg6IwMU0HHTOkaZGQAiRCEJonUMBh4BIkJIVAAKslD1daBNQ1pPh2rjgXU5iO2YoeZIXY8ptyDUapqT7/T4wh9B577vQtaEjp6z4kwc87/NysTCDPDG3xIGCHLk0UkrNYYJMcUAwCUS6O/QhhbsHIgx/0CufGi0oJavCxQt0TBIL/X5f0W6QsXw42bm1FO2cK6EUMVjuWjNMpkwtBfqm5UE0MjAWzXDDZ9o+tqI8RTOGoC1xx7I8CzUbpNkpvV4vMf1k9Z72jVNAp7NET94TEwPIF6ScPSuLPNQy0lgAXLx4kTnu338Asppi5ueff35lZeWxxx5fXNwGAJKKKlyqwPJe51OL0Q1ypeaJxvIBAYEiJxCpOc764gy5JMSojeGdml3Uha7X9JTtuKor/ZMnFzNInVL7XbexsVFVVeWrUTuiTFpe7nLb4uWHZUzavqCJTluCmFnATdvrWTDRpuUp+rAGoay8162lM6NbUUWzfkd9emZWE1tXjmOMIQIRI2wGwMp5AD+z5cpHn8zNbHP9XbVw1VsU6CF4FM2OR0eoKkqX2nuP3hPGulfXTZMDkYCoYmj8XFoeoE+qwELTkaVqlHFbWZXdicHD8rZmv+Tzkmq8q6pC7xhAhOMYiD6O79gPNZJbohDtpZJR5+ru1YTCfTNA0P9coJjNpaJUciWdmyw8+qyX+OQFIUjmhI4RtfGbIvqwSHVPRYgsBlkO3SSUVU6U6tH+RESqWyJHjZsgoq+qyieYSSx6h44nV6WPVkMa7xxnUwwBkfWJULl6DF6UDdG0D5gdOY18Z9XE5KvIHFmElDIKSGkYi759OOEtI6YMRJ5OYf17CEExx88//8LitsXDh48ON4cAVFf1m+fPb6yuHrznnjfOnvnqV7/KzMJcOU+EHLhpakRs266ufIxChDEolw5UTd2FrtdUgNC1AT15VwlI23ZK3Jc3q9P+jgAQmIXZK4UruhCDI9+1QREPIOhIKyoEySmiJ7CQqxyRcz5yDLEFVKItEE2Pckq42ppSrpLBIqFbWkxoxkwaIYnxukHKP+gmrrwHhHbUshIMxegyd7X2ELcdxbkBr54ozMa14eAhWeiIrkJEAqw9tcziqD+3sOfg4V7TQxrs3DKD1YyIB9Ay19TBWsfADEJOWIBFPFZ1z7tKBLzz3mtxBhIkraZCUwrYt0w6rWCRCkUzsH1ilkuCJ6hepAxbQUhF4GlWhVHAoSZvpqEPBgLUi5gIKE0eWzWYFHaln2HnxS4lJRdoNouwqMOwchDDNI5HhgIuafWc5AcQ8UiizQijCCWYgxZDs+VKbR6njBEqKr9MGtsnVFRvmfTVD0MIIoyUpruqa5FUS8yCMQYt5ysvyMwWeEjZ8fR4AoLM43i5SKJ8BgEeRxbACL2ZGQVCTKhIzpouhqCcnYBE6EAiQGJgEsDy0fKiWuYy6UORZAEBQAxM6L78xacufXQpkYUyA0M3HA2a3tH7j9yzZ++P/+1Hd+7cabv2W9/61gsvvLC+tnb0gQd27979i+d+4Zz78pe/9MKLLy7fvHX4/vt37d49Ozc3t2X+3Q8/PHnq4RgCiFaooXdVTC108s7QEhadq4yiEADtIKl6QGE3uSeXKgMAJFQqCc2MEHk32UAtySCRSRlk29QEs76Sb47occw2lUxX78ERMhGS8k8ikLbfq6q6qqapoLjItFpQo/T3IatiC1mKsCC5qiEJyOxQ+s47X2PrR8wraysxrs9vrbxj4Q6QAJlFkLDr1AWuPbEjJ6BSRiKDB6ycr7xTPk0gIIfKYG+3xqJ1gs2eCSARUYCIgLld42kzpWvYZVQkLHMKlzETjmvS7LKlvCuXzJwsO4Pl+U3LWhgH+rIyF/u+AcFszvWMTy0EEXnvTJxxER4VkvJeoJZdCBEAvK+qqgpdUN9BBEQgxjGN6ZQ5Y+M2KTgl6S3uowEmyu6V6ivnXOQoEgWAowgrelCJ9TYBOEYqw/h2riCLZMqhZUQ07uep6UaFheWQMxWcuJ7SHJkzjIghcqW7QNem8GtwrL8BCvU+9SqXXzX8cDQs1hsj8+EjR375y1/+4z/905e//OWrV69+57vffe+99379699s37796ae/9rOf/ezjjz/5whe/uLa29sILL47a9i//8q+ee+65+a1bb96+vW1xcX1jkxnIOUmYLsSiNFdEEh6yqFqCgj4CEl1WOq6YfQdbPipI80y7mg5IeyDTUnzmASv3RlosREwZ7TSLmEwi0FyVXdmQZV7S7yw0qV0J1bXU46EkHjpyTfRYiSyObyaOEJmYYxeZQ+xjvHX9aly75jG0kUZtXNrVA3IAjOTAARBI1NqA1CpOgYzKXCopZAO5zzfGKA5JY6lSIJIt1FKWTZj8tflHTCFUn0nTy6XJj+NU5kQNPqTsmZhCDUUH43LJbCdwftlCT61dOUJb66nNY1Etk5ImYsYKID+gFEWaMUaRSJmgDhGVnA8AfQhdjBJCJNQASrpfXTeWTSzP25QENeewWPVxsMMsMRu0mYiQWJORUIT1sqihN+VzMq+Si5A+TsIZiIiFY0iVMvrlsaRHQCLjOjEJKCIas1VbLKGkiIjIa+l/FBamiUjbhMwptX35kkI+xoLhyH5PRFHkO9/97uXLV06/dnrn7t1LO3Z88umnbRe2LS5tXVyse72NjY0du3b5m7dGIezYuXP33r0zs7OLi0vnzp9/5913v/2nf6o7UnFstj/KMz9lqJbCqLQjpsSozozBSovPpLyOHWz7ZAouX+7RhL5LC5d+mpWVzhQLj+180xPCAjTWwOUuh/HRTV4/FjgAnQQNGyFilMAc1dshcgy8ubE+XF/Zs3VuYQCrm/Hq7XWADj0yIYhyZXDT1EQ4Gg3rmsgRioYInffOUcJwa5kqCzvvYoya3lXSFckmjA3YDgvmaKlJAVMbbdtCjrxYAiefZNG7moU1Tt0WYVk79lKkaMpDZOFFMx1g0sWxhdZzanFrKJw7yE4WFvaajF1vjX2MX/lhHUtI9JEiCGrlsDYOFSIShq7rnEvOYdeNJBem2uGBcaIn3dssHVM+MJkILGtM7NkANGaRiCYzGaPCST1nCAYXESxJrtC4kWGKHKtfUFiGhsVScxoANHiJiFpyHUIgl7g7feZvDF3HqT4l0dNicksAs8K35YHCkrRls9Nie0vBOHb+EdFX1bvvvb++vr60tLSyulZVFSAFFiD65PLlHbt2rayuNU1z5eq169ev9/qDM+ffCCFe/uTy17/xJx9/8uny6uquXbs3h0MBcOQmxzXWVHaY7z63pdTQzw13ajvM9jQrH3N+Ujs/kJM3U6LNdIZdxHxzV8BbnHOYyRXKumDNYCQ1q4c7axQtbNa6c7Wp7cwQjY1cs0FMVjpyCIwISE4LFr2jmX5z+9qFNV4N2BvM31PXVeeS8BIWECFClpgDzNogzxOhc1B57xzV3lfegc6xsHNOk4YausYcFinP83j27kqJUC6pBwCDYtieyT+ZyKOZnrONN7UPp/SBfV9K+tDCa3MFnwQUPa9sS2MRP9JT5jNdUamiBCRmBHAp0QCgcrXdgnLgzzNzVdWIBAL9fl+jGKpLdCJiidDJfKlacyDZ24KM9bahm/Az8iqYtJ5AxsRwaMoxPRuFEE2nWb2/yzNiIlxEVDYqRoeKbBQiOkLI7bR0ynQ8kiv0TGAlxQKICDFEBo6MSXBa2riY5fF0T+qcEgKuNvni4uKWLVtsCWOMBw4e/MVzv/jggwtPPvnk6uoqAA4GM48+9ti5s+f+z3/+58cee6zf6//s2WcH/cHJkycF4L77Dn/h81+4efPma6+//p3vfjfECETC3IXoCmZSxPF7e5Xawk4pFiBPfenxKJMmaavJxJKN3xdy1i5lmr8cTBqSajyF/hQOI2Qn3U6IWaPaz8f2j+lbK1AwbikuGC/tuI7PNmr7eelijEKCGEO7dW5Q+YWw2XbYr+bn0vKCCEdCQALWZqpEzqF3RE7rUzXsBs4RIghH5wiBAJ0gWrzcRAAzKyuu4Vpc0ZSxHHNpUBt3FWT0ifc+KIAj7+1SlpWrPOVqQFY5sWgJaQez1O6lRWYn3faG/aqcXimMZS6aaGlGC/JWtDEDgBptWnUMkGw63+8PiNzm5mZixBZQL8y5MY9XCEEl9HA4VP2jRaGm5Uxam9Sc8jtw0sPUaStz25PHhuo6KWe9iEbg1aHTc2LHBkDaNiBMi/Y0fSAm420eHSWyxzwv6S6ElEx37UP1B1wwnDA4p13ucm0QcdeuXVgQbonIwsK2v/6b/8jMMXIIXRf46APHRfjQoft1rkIIRx84pgGO3Xv27t29h2P84MKFP/rq1+7Zf6BTZgZyCOPAzZQVbcMrJ8QkIGYj3/x8mxyeBO/nioSx9EnrqBtlUuTZg0O2wsqZSXzIIupwgUbKC+xouZGqqgIcuww2q+bUW0LWnoImCbG4CIvm23KMACQ973htGNth7MJGHAKuLcwCkCcggOgFhIgIUsWIc86h81TVnpwgoHBsW+5AHIojUttKIKFsVF6YMdg0jUYAtKUXZ5ZO3cM0GaaAwrV0uSBe/1RVtYafTRCXmqY8d1P705ZGh2TRKLN2XeZasXvZubDt4YoeXOXKliLs/8oL06kqfTrRydJQhUa5jZMtQoLOo4EstEm5Dno0GmnnXx2c2ZwqL2KmKLR5mdrHuoc/8xWLKn5VdGpw5c2eYEqahYhRvPcg494jUJIqYaZZEnaQi2nJsj/j08XMnLOhwtMjw7ssi/KfZlakEyhje1BPi7n3zFzX1ebmZl3XIXQu1QqHSUoXVGtUgT/rG+uO3D379yPCqOvIESSolFN8gI1ZUmn1hFjEnBzFwiMuF6UUW/qJcy6GIMlEnX5q1BQyIpYJSgAovD+T+OkNAMfkbgukNt9eW5sQDAaDUmRkpx5U65hsNVA+JLiDXj+dLu1nZ9ANDe2R4jMRPHpE78VHaWus1tbX/OZar2lmevPNth3o6gCotdpeQgDFs0RIzOsOEEWkqny/V1feA4gnJECOXRc6AWEWpf0uJaMrcPzKjy45L44ZPg4AWrA6rgPPr9JmsSWwmM5Ya97V7rzc2PYrs1PGG6b4lRSk7HxXWskuoi/zSKQwhP8vvqY0FiJ6Pa2YC1gAREMwIqxZJIFE4Y4IiuXlDP9RTHexacbKX8MfhiS8ex+n+pxkmZcODoB2fssHZuwUaGwyPQIyc9d1CFDVteZa9PecIbZIDlD5lREQht1Q/SlyqcxaWLz3mlomIBBw5FGQGEAY09CAcQxQndItoNEKkNwCVIQTkwkRCcjNmzf7/cHc7KyxTC0vL1dVBSC3by87R9u2bWvbljlWdR1DAETv3c1bN+fm5uq6RsHcD0e6EByRHq21lZVeU/V7fRFWRjlyWeGD6Eg4xsRqkBdexRxkRALlduMhBOeddxkpKxzVElYE4XjhlAGHURAIUjKeiBwJs82KIjwREVByZZOgdwp11chyp+B7jgQOwhi0oUPSLqkhhq7TDlmZ80yByQBKt6qmVYzBEVW+bttRibnHTElT+UoIGEQoYowOaceOnbDWjoa3b63eIb62ONhDgAAE6CVlFQtTCrEC6FU1CocQPDnntBxdyLmGMETlq0dFYBTOS2SWqkpGnG0A51yMIYTIHEUAYOR9ZXkD1DJxVo7tEIsWPUQEgFq3oQTe5kOY6cRFLmhqr5ZCqrSYAECLBIonRvsOZAVjUswexHRDeQtJIDxF+SRvXT9JAT9Jzo+awcQSARlRIJEniaQmRIAIvnJEWNVVryRVdJoAAQAASURBVN/UTd00deUrM3bM5LGkA2QmJO/9YDBQCaXBxbZtda93XacI19BFLTrPvlG6r3bq0MuRlickCisP4Lo2tKMQuigMla+dq9pROxxuRA6RQ4ytlkCTw8o7T847752rnK+rypMjRIksCJF5bWN9fbgRYggxdrELzIQNsPfokRm13yFgSJRTE0uYrIYcDmEQFmFhoTTowHFjc/P/+b//79rYKwp3MZCjV199ZW3tzq1bN19++aXTp1/13r366itXrlwmh+jQeWKI//T/+4dz58/6ytX9qu7V5Ml56vWaXq+qvQPhX/782SuXLzvvfFW5ygOmWnM9+jqSl17+bYgREH3lyRGLfPDBB3omlaxWvelevzeYnUklPIRCGGKMHPVSgE7/EyBAEiAApVVwSB7QI3oAJ+AE9JuE6ARQybMEkAUYMF0csqOHiAAOyXmvkyOEgsAg5J3zDtF5VwsDoa98jUDe1SIYuqgQSu+qyjeOvDIQcEyHRM2Q7EISCkmLXYwBuiCbCG033FxbG60Oo/O0bWF2pl95CcCRBZl6HfUFKhBCdDGwMABHCZ20LQoyy6httVtx1nMAAkRKRI+Y2ETAORRhAA6hC6GLMajfIxIBuKpcv9/0+71+v+n1GnU0iYAInCPvqa4rACHCxDYFoLsKAJkVhOuJvO5HPYZd12kIHDJLOhTgwymtaa43ZEdPm7J57/WNujWbm5tGgGNOonqUw+HQHHbz7BDR68iUtJgZWIANTMcCDMAiTCAojBJ9kqOSNAaCXY5ZeDRqMafx8ojRFrs0Kang0zYxbJ6UlWioU6avEMYCXiYCN0mWFjY/IGoVX+qSSkV9dt1UqgqmgBiIiSpl0u9TUSfOufn5ec7lbJmUTbRDrHNOqVccoDYtH+fwJzLclFWWEQyMYaxN0zzxxBPm+bdt64iYuWl6XddVVfXOO+88+uijv/vd7/bu3avZvaqqbty4MRyOrl+/fufOnd/97nfra2snjp8AgA8//BARn3zyyaZp9u/fPxqN2rZ96aWXQgiPP/641ezodIUQlpeXb968ubi4uLq66pxbXV09ffr0rl27qqo6f/48ER04cEBEzp49u3PP7j27d2tZgz0LF6lunb3s1zhFrjvvkk00nhNUn0jFnMVcAUR5I2xX9Hq9tHzkLQdnIXznHEGxWMxq+esAVNsZME01XNd1SGC5JNXPSOjAofhInaAgoCeqpb6xssLDlSGsUW9+COtz28k5F0EEAiUcnNR1U9e1c9jUrqkbJCSiqnbJFhY9TwIAVV2RdnOFce+tMroskxFitc7t9FIROUbE0kfTwxJjJHIhcIwpdWh4HO89gFghJxTdYlToJPM2s4JhQUdRJun0aqqTbEGxwPEBgMKv1LAoYTe2+lhk/XEy8AIAfBcPsuruTC0IGgX0hCn6qzBNycmdsXMIydkuY+D6T31UM4BtWDqVdkLsmfWfCqiPRXWcn8xf2nu5K/aW1i2K9h43WVY+qm2IMmY2NmEKSTdqWzX8RESUWRIEAB2SYjjhM15jKGB5O0qCppmZmbGwiHMOEDc2Np599lmNVq6vr//DP/zDjRs3ZmZmIIfVP/7444ceeqht2w8//PCdd975ylNPnTlzZnV1df/+/bdu3XrjjTeeeOKJrm1xdubdd99dWVlZWFh46aWXvva1r2nKX3Llbdu2r7766tNPP72ysvLJJ58c2H/g008+BYAzZ8688847/X7/9u3bV69ebZrm/JtvfOtb3xoMBi5XV5m6m9hD2RcWAUXJh9CZdjX8mqmisakPGeeeEQCmP2DScdDlICLtyELjcHi6mnKkx0xTNV5rVOtjvKwafROE2EUAzc07x+x91es1M3NL7SoP5pc+vc2RxXmKUcmqRQRhzDmbuhg1vZ5rvK+dRxJgEI5t0ORU5OB8VcodGwAXKblSC9p3yhTz3TtTHzPG6H0FMKF07XzlL3izgyC31rEvlyfC7miqV3JLDIPpmmeDRQn31JagnNGHnGUzJIRZDFPxqYljozaRSI6wJCAARwEQiCECiq/GAUu2rJ6WDhXpN9NmNnosel2UQhcLrCpkpWpBL33OEEKYRMphTgrEyIhjOCZYFZJEJLD0is27ZcBslm0TcIbwUc5oOudnZhpXOUaIzILE2tMgi3gpSAlsr0gBsrCFMd+YmUejkS/6z+jz7tu3bzgcfvjhh3v27Ll69erx48d11+vpunTpEjPfvHlzYWHh8ccff+jBh95+623n3KlTp27evHnp0iUiCjE2Te/9D96/cuWK9lTQ+9rk60ZUk8Fuuu+efV3X3bp160tf+tLu3bs//PDDc+fOHT9+/NLHH924cePee++12ncowgo2pRpC0t1iUsZkgU37VBhCJ8/OJGaJkw9SIXTynmHmGII9C+SyZKuilIJDJ12WMMbWbj2e7cASODom5wld140qDt67uqpcbwYAmqZnkf/kMkqyqmJkcpXJPn2eDKQkdI40SIoSi2SiSQfKzOV3x0qgYJu3TW7zUOK5MXX7Q5u38fYGiDEggqr2MgNj11SXSqfCKngtOm4THifp621LYw6qmP6mIlHgMvpZL2JxdBuGHZa0BxDsSe0oJY53BAfJfQAR8ZVHQut+oQ+fwk48vujdD1woyeLeBYBICtMOi3ih7XXnHGeJqz/UlH9d1yIIuS5UsiEKkESPJiBiCeTN3EhQwLpMb9hNkyAXQeeoqsRTFARyxBEZhQX1UsXEjX8LEHncAMAe1oQv53Yr9kmv13vggQdu3bp19erV2dnZP/uzP/vVr37FzORIgqyvr9+6devAgQMrKyuXL1/e2NgIbXfnzh0Reeutt65evbp161YTo8PhcN++fQsLC+r/6zA++OADIrr33ntzksV3XYeEkSPlLIGF8NbX14ej4fbt2weDAdyF/JSCvwoLEJ3iFTg3F5QCVmsSIUx00RAu1KwqzKSl8951ucsTIrZtqwwbhrdAHPssphFN1hCRQ1Ikj/oRamACABGiI3AISCEIChG5pqnX1682wu1oNDu7jZmBI5J3CBrowcQ47BW+V1e19167jbGII9QuBSDSxY7cBHDfdr4OrNwtUPg7pVLHAuMnGW5iy8HMAIpYmMhhIaJz0y4e5GgxWG4301ToZoiZM0ByEa9JRu2Rbc4aZuyifaF0R+xV6JKxhLV5KD9U1nklo7U/pW1ESAAQmTUkzMxKp2RohZCb4WQI/ljnmzCSIhttCq0UVbb7dbixKNQot9coNzJW8885q0ukGMYNwkzkq9NuBmSxR2U83AIvI5MzmLEVLECJ6wBRhJ36g0SMBHfNpl2zPHh2/FTtOOeWlpbUC0syKDUmq4loYWFhMBhs3bp1dnZ2MBiASNM0IYQDBw5897vfffXVV8+cOTMajW7cvPHkk0++9tprFy9enJ2dffjhh0283n///c8///zVq1cfeuihmZmZ9fV159xgMPjZz3726quv9vv9pml++MMfXrx48XOf+5yOeTAYzMzMvPTSSwCwZ8+enTt3gsD169dnZmYwN8Mphamto0vsZVTXNYL6X2M1mJtBaiHxGNGTt69Q7gBhUoyVtTv32yvvi5hRi1mAlrraVs3OD3MmeS96ZI9vTcLADMQsta+QUYBHo43hcFX8PMjq4qLXNhUAiECIUU9hSKIy3cU5hx4c5Uo4BOV4VGCEsabgpPVnG8N2uwkXU42lxWFSY3K/oaYC7ShlGTQ+7ZitGyxiMebEqQWkk5ZPDVm0SAWT2Uq6uLqmpRdJk3EGfdlxhiLAUvp36YUgqLoZEMClpDXgb/8//7cQggh65wFIWUYAAAlKEWiWsBmhNHb+ZUrMGxxjSiTFGJ3zGkvTA2lUe+WpvrO8HLpu1+7dysBgX4iBY5wIFqh5SwRIqaQg3yXVtWlT1pirDQyjwSBxku5DhIX8PU880+w4NMSeANUcHEcBClgBKE30eD+lNUC0agITiLYYqo0p90EXEQTQfkecufp7vZ7CgiJHlxWUfvjpp5/WdX3fvYc21jdeP/P6g5l3NYSwvr5eNzU6d+Xy5bqul5YWEcns+Y8//ng43Ny7d19d1yq2lIv+40sf7d27d2Nj48KFCwBw/PjxDz/88NKlS7v37Dly9Ijue0xqVmcYytCAGL4UCIEMjGPnQYQV3FR+roeRJUVJzaZONQfopjZJ2gYyLe6tD4odsJhBlW3bMQdVmQryGsu4yATCDsj3WJyPcQbv8Pp767ffgdGd2a17b6xVS/c8HKttDD1EhyKRRw3xCz/5wZkXn1ucqbfO9mcHs1XTo8qBFwcIKChCeqaINIljenoKdGKqkYpgsykq89HKKi25y18DSKA5ycSmklweQYTSyzNHVQr05pTctz2si1sKQRPolKMikC0pmfTLxjM8yUc4fUDsqILoEULlO8kgM/zd3/4XFcR5HySQHgsriaa6XajhG425AgoIIQlIRusrDm7CHJDC8FEvnWNUxj/9Ewur1g1dKo9gYUJyGZ9i85KsWQbO3HdZymCMMXLM8jQ9fJL9kZ2vEKlrW1UOTdMQUYghocHF+IxQAMTVh77wTb/tnhE2kcFz9BIBqNOiaAsHjU2oTJsOE/MuuaWkTUIs29uHaLAL03je+zZ0zNzr9UJubGBbVmtBmCMAtm2r0BhEREL9fhwjrUHjpqVBnr7AydMk5/wYlYtN07ShFQCdpbxqCJA23FRskpkJnSqh0tLWbaAWUGmW537KOm0QQ0QEci50XYzMCXY/xm0msYKJu0Evor4eZCWsJo9u1ASNiwHduDImF+EDx4gcmBz6PkDlwqjh23cuvzpT34nD2xutr2bv2bL7REdbBAeAWjcbGoy//sn3z7z43LyXLTO9LXNzvcGsqx05IEDJAkjzEuMs8mfxsVFGIVMR5IIcpbL8lGWQ7Ve2o/JyICIgpjIOlR0hdBm+Nw5pm4y2W2MRPXCTNV93n1Yo6mZjbjlvIQv9rSpUzOELzK5ALNDV05IUgUliZE3JWxWjl4hqRHjnmdlngwqLvvdmbiBi4BRqioZoIiRyHkmrB3X0xoSEqAwzkLBHCFXt1SBUCTIcbqI11UJkkDAaUyuY3tMndEQAQpoSIEREFnBA2uTEjNisxikVnVYeAAJHaUfpC448odNNTNgGFqo6cOAHzvXqTgIjQRXBAQogK9JQMYfkiqp6QmVH0Dy3Al7LcMCNGze2bNliCWZm9nV1/eaNmZkZLV8EAG3W7jK+3B5B1anzLrLEGJ13IUb0LgIQaccYHI26bPjo/mDWLzvImzJ3ZENkASKnPe00RgMAw7bNQsQxgz5L3oqJlREncQ8skbTHTiZa1ZnRiQ3KtICoXM5EFEPIpD9Kt4QxigKNAMZUCjZ1+nOFv+qGZJGqqYkIUFk4RA0P3QWDfr/dHDIIelJlpo3kEYm8OHEMTRdcjBEhCMS6P4fAzaCOnnx/a2BETwICGBmYAH3dtCFEEarIeQKH4MURKPSc1Bsics4zC2ojzsK6SY+g566wGuz/WBg4JtZNJ5WCzL6Z/TIFImoxb9JCZpto0l2vYPFQWzWTIMUBGf9VsutnGtS+X+ozyLFtuKtMDHJayYxcC8gSESEBA0GigrareURqGm8qVAWHGTI5kjdRLFdK9BADIXVdp8hmmzilJlCtBTAe3+bmhq1KqSeV5lLvUvvaVKsmhkwMO6erPmZUcc6BA5t0ncGqqpTsHdBZrazIGDERuo4RtJTeVR7JkffgaudqEGCOHBB9BegAGTEad5dpDMgmKCLUdf3888+fPXv2P//n/8xFIvb73/++epF//ud/bs72r371q7feeqvX6/35n//53Nwc5WpM9R9XV1dfe+21L37xi/r9jY2NjY2NpaUlAiDAxlcRUwR3NGqV376qKiv3x+yxmo4yXURFrZYUNrn9sNyLOVHCnCVjeWZgsh7SribZCyjvaGfM3CtmNv2krkcOIdEY5o9iEQ01EEIIN27ciMILCwt1XXdtV1cVEYWuu3n9xsL8vK+q5dUVR1Qr/JVjF4IjICEACN0IHQWIneCIe+sba47csAOPvHXOk7hkQAqgI+bYa3p1XTc9PxgM6l4DAhwj0djvKBYa1Bs18VFOiBksdo5KcQBFz2v7lf5/c3PTOaeNaiQ7pyF0RZIu7QTLUunOtzWSqYhbsTr2oY5NcjSKc5GDFMUZFreCSbBP6biZTOj3+yoHKWMm9JFjjELjKTJBkTJH2v/PHl5yzsLOOWTDTAGu+ldLPJEjBFKAYsxMJcPhUET6/b6WJuhYZ2Zm9LxBgRuc0hXGGEOTqdnyOW3KdMta5B/Hujq5eC67Gzoj6tw554GjcESAEEIbO6qgnh2QkrESVZVPfSgRWdvBFWlmmw0ADKEdDoeLi4szMzN6cXXsb9265Zz767/+6zfffHN1dXXr1q1d121ubt68efM//af/dObMmatXr16+fPnOnTv33nvvzMzM+++/LyKDwWB1dZWINjc3m6Z544036rrWVoI3b95smmbnzp137ty5fevW9h07+/0BZKPJhgfZGjf5YirURAnlnCDk8IqFFVTBZEN9jLeY0smm6CyKAXdpftv3tqdNRFLRgJxygbF+GELQjF6pgRHxwoULp0+fbkN36pFTJ44fr3wFACt37vzkJz9BgfvuPSQIp3//Gjn3ne98Z2n79qSamYQ9o4CLvkYiJ7E/2HqPW9hNbnM46nxvq9Asi0fyAKlmI81V9pW6tvOVIIwrOUvZrU6YInFk8mWywGavPFD6MntTcmZQJ20wGJSaHgtWeSg4JzCjDSEXIdji2hgoB4NgMhoA2YqxW9gDSuFPyF2EX1BYVaV8kGw6GehvPACAKNP+KSgpvWinAWVlz5QI6vvYbUwKQC7/MzmSBi0RAG0KOHOqd6HjNpqAGNvYOQ5t0mR8C0n+RWlDUo7Dl8on5EbM+lvb00mACQCOF0+XU0TIOWWaQK36IRKELlGdkwASkQDlgP0k8GdcD6lzDcoqsHv37pmZGc6YXZVE77zzzn/7b//t4MGDhw8fVkWnmB0F9Vy5cuWnP/3p/Pz89evXFRY4Go327NnT6/V+/vOfLy0tHT9+/MKFC4P+4PFHH/vJr3/cdd3q6uqpU6eef/75wWAwNz//ne/+qUbxTaHdva1NBnGmbiktC87QIduCkk1xTuVdWAov0y6lW1HKHTOl9VeqA21gdgvdo1qRg4h1XUNhqakWLcWoqrpvfOMbm6Ph73//++PHjin+5YMPPjh69OiJ48f/6R/+EYn++m/++pNPPr106dKOHTsAoGlqFOdi1fKQkAMPHbkgzvsFFgHckJ6w61e+L+AIAJCRQSA9rEIHFEMrAByjkPMFzVgpZWx6TRHa/EwJI9vS5aGFDLeRwtWwLJX9liYj2TaZmsCyhTMZNGVu2KhMuKgpqmAxLHL5d6sNexB7mXYvBYodT7tF+rywsEohnig1AEDlqIhoBg7uEpZ2g5iLBidOu3FvZuMtdQUA1L2upoqtlq1BKeYoV+u5DDMLuZ8XZyiAXl9Hq7Ek3awwqYF1sKW8s5XAXDRUVZUjfQpBBAWXYeG2pJUWkc9si1oM3lwee4oQwsGDB//qr/7q+vXrKysrJRwRAOq6XllZeeyxx/7iL/5iY2Pj+vXr3/jGN5588skbN2788Ic/fO21106cOAEAX/nKVwb9/srKyqVLl44eOdo0zZtvvjno90+dOvXII4+U6gGz6UeTeQDTZrbXy008npO8L0vfSist7AzYzLhM52a3K8MEWJQr211shJgpRE2BQWHsaB8ELsoUKCOD7r///oWFhffff3/njp0ionW22xYXX3nllX/8x3/s9Xre+67trl27RkQap8sQSXHkPLnKVwgEUAn2sJoPbhBdH6gRIBQTE4JEgOicd86p311VfjAY9Pt9XdbhcLi+vq67Tne1BVx0hi1sD4V1UO7DcjLLI1aec5NKmMkVbR3LlSrtxynxYUesFEZU8LdxAUHCwnQtR1JKpfIiNhI9jPrUdsalcL3zj8YPW4pUb5LMdBqMqXbGFhqa8Unj35cWI8BYs9nWVEImC1nFz8J065sSRomADGNPEAp1gYVW0Vmz2rlYAvyTo+G0asR+qLMWmSFxbggmwYyO3MzMLJEa3lNJ0D/4IqIQEug2pdiyJokx7tq1a+fOnRroUb9dRzg7O/vRRx9dv359+/btLreI6/f7VVWNRqOjR482TbOysrK4uLi5uQki3rnNjY0LFz4QkUcffXR1ZeWll16anZ3787/Yaz+3hbdlLgcJk32rbX+bVCqtaCi8OSzCB2qnQM6saRoBsk6SSZCXXaoUcHldUpcFKEKwmHOdmF1CLLSozup7773nvD9+/HjXdegrQtrY2FhcXDy4/8D777575IEH/umf/mltbe2JJ59UVplR2wYO6MR7B+K142XlK2CKHCJqxRmABAICYBaJACQALCIcuiBgLMiaC05UPvZoGm3sutZOiq2ChdtKAWSiwRYFi7DdZ4bb7BhOHV27lymDkEnaTLpZBqm8rORgKI7jFRPfKXVtuR/M/+AiXEO5GDVbzclkLiVy+m1G80pGETOzt5NptzGRbHfSVxJ1zOTIqmZte3nnNUms4tCEZb/f15wbF9TZKm7MHiu3JiJma2NcxmKDNkFjLlW5480GTtdE0NxzOd360mJU4cgxAqH3rhNSTLO9EpUEAhCCIPBnSKWYkV3WIsaWbXZ29syZM7du3drc3DRSxJmZmY2NjR//+MeffPLJkSNHzp49+8knnwwGAw1O37lzZ/v27fv27du2bduZM2eeeeYZk+kLCwsqj27furWysnLsgQfOnD1XN7W6YObamCSy+Ydss5TaQkSappGcdih3LRU8cyKxPEtY0B4Yyx/nWDIVwDZbShtAOWkqbVVhqqOhs+cz23y5Q+y5Ll26dP369af+6I82NzaautZs1+rKyn333ffg8RMXP/xwfsv8//q//a9nXj+ztr7O2bsEBwAhioRWtJSnrtm5ABA9CbAgRAJAYE3kMYiwY21mH0NxRJUUcaJwOis2MRSPPr7JC8kGkRkvupqYWfRL44IKHCMWzgsUUmy8tycdCCkcJfPjyj+VDjjkpmB239L4uHuH2wjNJSoHZtGVcmYgu+2Uo7SAaAKIM+4JAIqQVeE9UhHQtd2ZuKxi1MaVWrqN2YTTAIr3PmODciaPUAmG8C5bziAJJjVUpngaFy5AEcoyFhssjHxbCbOt0jFAJOfBqGRypkCno42dxOiJek2jXbeEIykhwlgAQRJACh+YTIHl7yjrAi0sLHz+85/XiIY+yLZt27797W/fvn173759dV2rxV5V1de//vUPP/zwqaee2rVrl0Kfjx49OmpHly5eWlxc3LVr13A43LNnz8LCQoxx29atg2O9yvnPPfHEhQsf7tqx88Sx46+++uqNa9e/+c1vUnaEzY6AjIec2s3215RYQCjX2oIaUypBZJyvxAwLoMz7B5OKEbIylALWbAep3LXlLrQl0/ca6ymbdyvpxczM4I033tjY2PjBD35w+P77jx458sorL2/bum1paekXv/jF+++/7yv/xhtvnj1/7vq1609+7nOgMRTmwEFEhBkBK6oR0IkgtETREYIIAZOkxRYBFiBgANJAOeH4aMViT1JRZhmjiJR5CSjPDuaIrK4L85h7zAREnOyi9ZmyoDSgpLBxpAhKJuXKXJ4pygywXCDOS2NKJjJ600Akk63lU5frjgVe0UZbrn7Km4t0MRXxTSQuXv1//9+zvaCFwOn5o3D5kFNKrBTJRISEoYve1WDJacLQhRijIHtPqNAJSIkVAAEZF5ExMxKBiGTSotJzLiZ07EGUU1CGVHWdxu4YJGgMgCGmEBEidyOWKFQh1BIFpINqftehg5/79lDqNNpUqg2geQ5JcWsdHosQIhCahiEaY5ETRi5vQcv3CQgjOO9jCCHGslqBAEGSkO26jpyLIaRyNpa6qTlGJGrbttfr6QK0iclAQ3moI4zjguFU+wOIKkuUIVk1RPLIBITZIXFOdbtMmUipxyObVJJJF0MfzSRI0rrManWSU852QVRyqhSD1OGlJdYVhOR92GnhxBysWUoSAV+55eUb165dRcTFxe0LC1uuXbvmvZ+Zmfnwwofra2v33X8/Irz55ptVVZ98+KQWSEfmEAGwImkdhBorYQdEnQyp4ggtsFSuIUCJoBMpACQ4qPGln//bCz/9/r7F2W3zM4Ner6prcsQ8pi4tT0G5IRExxpBlxBhQowdnyoiw02vyhZkVp6oaS/0MLPxTkyMmquyHNh7ItkkZ8oPCKbNjUh5nG2ecBAHZsF0BbrQBlJNgV6PJjJONM2HBACC5uezLL1EOpkxJ3HK+yuuKiGZM67oGSHWJ+tgqOL3zgkyYEEoWcjfZKTlYlXw9w0d6zzmRL9n+KgemX1NzxkIGNiNogQPSszAOyGdlhbWvIzgPTO0mAkbyzjcABAl4bKNJP/REUsSq7Ct2ZS7zlAi+YEeCAuNL3pFAFKjIRY4QudNWcyzl9EpRjqt+ihk76smG3KkZQMaKGsAlV5T7/cFoNFJrIoQgIEiYaS6wbnpd25IjQeeUgjLLHdMiFu8zmCjc9Zry03V7JfllzjWMa7uooBAASAqHcmBVPYWu65xDIl9VlVIId6HdunVx69aFqqrathuNRjt37tSdduLBE0TUtq0AfPmpp6iojxURTxWij6Fl4EgMII6jiyuNg4h9cLUwEXnxxCJBoggjgDA3Vd3v9aqqcphSCk6U3n5sAtipLkUAIooknSAykcOyg2oywtxP0+UxRt326lV0Xdfv9+2E3i1oyhNhC5HlYLxb3pUYQgXfGHYRsmpR2gPdYLYhzc4qb2oiwrSUnQIs6DhswNpeSK9CAELkbXzqk9vQkaa7L2JhjZsVp3KBmYU5hDG1OEfuQte2LRJ477RZooYhjE7BJqhE8UChWPr9PucWvfp0ykSp4V6bbruOCaCqqhwpCnecmLNHwFw8AcwhBu8cAYEQeg+Ayq9qkwhZoocYzbuxP/2hFyGGEH72s5+trKw88cQThw4dUlCC9/53p1/94IMPjh07Nj8/Pz83N5iZ8eQAk2SUDL/UuJXVW7777ruXL1/evXv3jh07qqpS/iALAHER0ddH7vV6bdtubGy8//77+/btW9iyxdd1KDguAncxxrZt67rWxsxYWPiQsRtYJNdsx9sZsClNunQykDk1J3ZZVUV6O19XdobtMHivBYMRySNijAypbFBidDo/kMvKJMez83cmShBIorQbDEG8YyDktsera1fP0gB7M/f53lamWsAHxIgYWSKINiRSqw0RZ2ZmnCMWJbqdaMVhcwVZEHMu3AUtxMfxbNipMQNEf9vr9WzabYNRkasynae9ibAwTPAPGFa2HyymVtosdt6NoIOKAIj91iSO6VeYTOdNedn62/JXJo8o5xZKUZj0un3PEoqouGQGpInCaJN55XRjLqFuQ6sX3thYI0eIVFXeqWrn2LaJDQARjaC7DD2Ug54S2Jp8UV73up5QO7pU5qbqy3KitkftapA9KcLowAsRRGQWIIwCSF4Ayj7r9ppKGZSy/zMlkffVa6dPK/PGBx98cO+99xJRXdcfffTRR5cuPXLy4ddee212bvbkyYcHgxmlcw4x6naMuT2WLfPy8vIrr7xy5MiR06dP792798iRI7Ozs2okvvPOO7t27dq2bZtNYxng/9d//dcdO3Z88MEHf/qnf0qITd2ErnPeNU1NROfPn7958+bnP/95/eGVK1dEZGlpSVPaHHmzHdq2m1qmu8VKmpDMYxfjtPLnokg9HWBIKQK1i2PuQoOIABQjc+y0H2mMmpCOIXREzliyyiySDqY0KABAYqiRsfIj8kGodgHbO7R5cWP5Wlt91MzumF3cj/3t4ucIKpJMzFATMwuI4pj0NJJTZuCS9ZnLqVD4iE1XjGHqQNrB0xflkJkNnj8rWGO5YxXcFu/jIopczjnnqg4zfs1WwMxIpX9VVgbOTEA4jgdMIIagEHDl5udJanr7rQ2ePgtILJPmm7dEnRS8hSIiIDGbGyZ6bOpt+jiX0s3Ozqi3oml4ERmNRjoeSxWr1WMjjpNAOEMV5jPs1Q7UW2eFA2ZDWvLSHtioBmwWTNjbI4iII4Qo2gDNEwFjFzkIIlVy12+h0DN0Vw7iD9tBsrKyovidkydP2n5dWVlZ2LLw4IMP7tix4+c///m//uAHVVV98YtfvHnz5rvvvruwsPCVr3zlpz/96dra2oMPPvj444/rMNbW1hYXF7/4xS8eOHDgzJkzZ86c+cUvfvHEE09s37792Wef/Y//8T9ev37917/+dYzx6NGjjz76qHKw3rx5c35+/tvf/vbZs2dv3rx55syZ4XD4xBNPtG37+9//fseOHUtLS0S0trYWYxwMBi+88MIDDzywZ8+ec+fOXbx48Z577jl+4nibkzW6EJyTKSoCdJOZuMTM1gUFeshmrIwLSE4eS+GPWEyamZ2rmFvJ5S/OOeZAJAnYU4BcSrvMObeysjI7O2vn3IGodhfAELmWWFE38EMcXfPxRndn5ubGxd7iA83WQ7XfJlzVWIUUqNJCM4oxVpUH0H7h0wkgExM2pFLt6+krD6dpRzUbp9yfzzyiLhNdG1oiTpLAcQa4GJp86sCac2MHJA8v+Yym7ezRTM5OiTn9gqU7S+1uJ+JuWWPvpyYKAMYxcxHRXlT6DL2mUUIZk4ifed7MIAohxBhiDMyx69qu6xChaeq6rlUkYZEnVl56vakhuywSGTPyEAqcvoimURO3GwDoD7mowyhXBYueyIZs1Dtubm4Oh+ujzQ1hjoG7NnZtZMa66SOOHd3SqLYl4SLecffLFt45v7a2duvWra7rXn75ZZisFR4Nh1sXFkLXfe7JJ7/29NPnzp69fu3a3/zN3/R6veeff37v3r1/+Zd/aehKQ52IyJ49ezRA8Pjjj58/f35xcfHQoUMisrKy0u/3n3nmmTfeeENZgWy0IYSHHnrowoUL3vuDBw78/rXXfvfKK8ePHbt548alixeXb9/+h//j/9Dij7m5uWvXrq2vr587d+7QoUNnz55dXV1VNaAbrjSnbQOZoNEwk82Yvin3qG3umHul4B/IZua1JjsY5aEqp7q8rE7y1q1bzbJGRABhxMjcjoYQg5PoUE0D9m61qtZG7c1by5+sr952wC4yhAAZJa+ZftED3AUFteXyRtDb6d6m/LKZ0QmjDLOK2X9XaTJ1fO7eQlOfSFHGaE+q6ER9U9e1HtWQeX9sr3rve72ecf1g8TLPS5fDVsFQgbbbdUjaWsLUeQhhc3NThYadEcgySEny2rY1xKnkgG85Y758zixHIgC46CiH3226pYi9waQVUL7PWg5KCgW4y260bmIuU0aUte/m+lqlJeWQE2YSBpcB066AhEvBOWAuq84OKsElxzDc3BiuU8DKUY3IAm0XmTMLDowP2Gc+6WcaPuXWiTH0+/3vfve7Sg+mD940Tdu2vaap6mptdc17f999962srIjI7OzswpYtVVWtrKw88MADi4uL6hlZtd3s7KzOiXPu1KlTCpkhooWFBZURBw8e3L59u4o5dVpjRh4yc9u2991339aFhTfffHNmZubIkSPr6+tvv/32Cy+88Ed/9Ed79+7tum7Pnj3Ly8vx/0/Zn35Lch33oWhE7J1ZVWfseQK6G+gGMRAAuwmABEGABDFxEEVSlCld616/5Xvf8rI/vPfues//gP8Hf7B0ZV/Zks0lirQ4WKAgEBwwEARIzI2h0egG0OgRPQ9nqqrcO+J9iNxRUXUOIDmJ1TynTlbmHmL/Yo7I+ejRoyGEM2fOXF1YmC66ngm8XjYEJwgAlJoRFvC5VscBKHlMrQjAo8rinlJFsggAqv0bEFuKyjlXVY2IZr+wZVdTABRhSh84SFmqUHXqbpOJkVg4Y8Oxz10J80tNZ2rTJ7obbw69a1ZSYCRs95paaifEdjpBgLWq0YSuAU7Kw3Err4omVqc5l0BNK/QFxdSyGt89aRn12kk0fLebjQ2M1M8iHHnK9E82BjCxobmUr5+o4+7VZMseN0HJnmP7Is4dZiOcEISjneEJ0ahpGmkay4afGPrEwdORaLAMc24alfeCidB+mWzc6BL2p6amDHG4uLRtKZk5EAGSaXB+SvoQ46tSAuSpNPbVWpP68JRSjKE3PdPDaiiRAJAzYRzkiCEKQDFQt1ODtX5e8/K4HDqd4XB4+PDhuq41JUVhVETOnT174oPjr732am6agDTsDwhgcWHh7LlzV69eDSFcunTpxIkT77zzzhfuuy+lVNd1TmlhYWF5efmZZ54ZDAbdbncwGAhzCEEzUZeWll566aWTJ08igFYI8vbL559//tKlS9dfd11/ZSUQDVb6nPPK8nKk8OWHH2lSOn369NatW1dWVgBgOBxOTU3t+9SnYoidUrfIVgDHRfE25EBEhImCWov1T8F5VCdWzwYm0oY2KHaMyzgh5wyjFZUQUGRkhvOhT+D8xLmUsMHWNlRhDFm4E4kyVBBi1clhCmeupaldm9ddG2d3rMD8QqqZKATIaRABRRgJq7pNZOMMiASEMUQZvybIA104YlVVyhlDSYdWSCIaVQsgH7qxSqDz4l4uNYOy86N7NUrv9BzXr7mlChma+MGPxrDKveXBAYpdSZyNwltyQ8mhw1XiiD3E28tFJHrIBMfGm5Qy5+QqvKk8TEjQtoIA7VWirlQGQhFkEAYUFJac2vqnQBJC0OAaQBTWzscEhFRCkLRkljY0axtFISTOkpOG2yRmRNFygnWttb5KdAshgBWuz6blxRgRoL+yMhwM9EAWmyJl0NZNCDkHFAkYMMZuDUSAuW3K5xoTA7QtAtv/B2AtZlbsqdpJztZwOGxuvvnmJ598stvtPvTQQ3Yq9u7d+/JLLz32D/9w6+23bd66FQN1er1P3HzzsWPHfvzjH69bv+6uz3zmp4/+9MAbr99zzz2CEKrYHw5277n+2eee+6/f/W979+y5fs+eWEUB2Lx1KwN0er260x0Mm3UbNlCIn/v8vdqKC5DWrd9w4eKl//xf/nJ2bu7W227/h5/9rBkO7rnn88ePH//e93+QUrr++r2bN20GxCPvvb95y9aq7gjizOycID773PMAMDU9jS7EKY+SwgiRmJPG9OQsIUREZMgAgKRJWExII3O+OwxmuW1SohAJMWcNXHJxjAgYYk4skkGkqqsQKDXW13cEcMUBBwSqcbEAAosWzceqyoCccqCAKFhVQ5wddq+b3nTT1Nwewd5SwxkjUeCUhpx0zxFRgxsQAUlEcsoCDBrc5G2XbSyVYFsvgVkYiSIhSmkaF6MCmSsDJlysWZBzMssZhlZPtwNvDNtbPD1T98KX+bMMvwwCDJiMhdvzwWVchRJV73FqYjCtpNZmLGigLhIgUSAKOWfUxsXoYlBAY6wmgRsR8dk/+z/bNSmQ3MIYiNqAwUlAImI0pXNTRbRVAlmklNEbiQMgWWP2sP2dW/wGGY1InZdRhJthw8wCQIghhMyMCERB11JK2KFZ1wqUjvQjYxS6siY36hczc26GLFliTaEKwpRzElrC6ZvufnBmx439ZN0GPUcaE39MVrR1CyFqwLd9IVAbAmsWK6UAU1hMl9SY8mFq6rrWc5tLqRfL7jElrugpUtfdJuVmOOx2u8eOHavreuvWraptAUCn0x0M+sy8tLQ0PT1dVdWVK5ebZjA7O5dzXlhYnpmZ5gx13SEikRwiqXWpqqqFhYWzZ89u2LBhy5bNUkoomK4hCs4UUspVNepErOxdoG23Ii66wlO8kbV2vKuq1sWhPtqqqlZWVjS3kjnrh57zhxg1vINKOo7SJ4L2Xh0pniIizE3OggiCAQNwCpgQBogNIArOZUbEVqUacebMM51w8KVnnv/5T/des3GmS8AZAgGgCKbU9u3St+u/IkCIQQPcFFla4hFxbqP2ZwUgBxNiMUSBbMelWEzYh7CXh0IRdpIrCGEb5ARJWP2hv9PMN8xsFcGllPT0Tjp7Y6uGy2gk/rFjRlIBdiU4uMSC+QHE4AoU2SNERBule4mrpR63BACg5mRy3jtZ5YIlB6hYQt3ALJbFMKQRtLoKFvujtAXOaZJdOGK5Ri4GcFG5XNzSHhMRMVYVQkgYsqq7CqwhaK+rf/RqodBJmIoIfssR2xa6XhOk8SwhKMp8XVVcgqQI234SADAYDBRxoGjgtgi6BTGEzsxMv9/ftm2bFIVfRDqdzmDQFvafmZlh5sFgMDU1hdgDwKqqer1pEdFWKCHEnJsQsapmdXjr16/ftm3bcDjULdUZmQGIiJgBEasqmt/KHYmxhZJVUI7F1KgCtSnaWCrAtKU5QKS0//ZquwKiJYIU9A9YzHZ2MxGJcjlmggAoObMggoaIovJkDjTKV9KtIWw96BRUM0BEDDECYM6j9BEuJnYdWmaV/8ZKapjcYaMVEaK2gr5Nyi+X0ardYEYcdgZ7cJY1KiWM28Pg2P/qy0OAnZ9Qmow6eh6r5gPOElQAaLSrfoK2jO3l8rpxPIFW/x79xEbfAoDiFPQL1D5xfHpWRBGLP88TnAqZRKXbKgtpw3IB1cNAAAmIiDMLi5r2Q5uV3mKmzqzhxjYgl5RUcNlPE6zGRsUlPKysDjBnJhQIGhcUQuh0NKv+ozZu8tKV0UA+ALh06ZK2om63FuDMhx9euHhRvd3gbI1qJLZq/KRVzUUQcGVlpdvthlIHvtPpqDggTmc26kwpEYXFxUVlEkYixpkBoN/va8V7W8VCKFyoUXIeVlXw/cuISIeXc+NJ2U7FxIkCx5DKFo+UKdsae455hZW4jNzNSMkaGl4c1cHnG3OJUxtP9U6pEW5biapdzAJKAmgVn5hyoEg5JwHBQMJJreaWq2znOUasqgoLIylpQ6NwTVUOTGcJQTsm58GgzfgzCvFYWRYQZCRDj5QREQGXfGcLji6Vx2+0/2EiVN2gf/Xl/6Q2UzvjZoqxhbVoWM9+2lkU4Q60y560gjEBYIsQY4QB46hnMDqKp9TNnrDGk7sMnMZwCqDT6fR6PUsKV+FFd6h9GhQRRaWezMIiqhNnbRPetpoiq2XrsJZKUhUVl3wIwRZlOBw2zVA9gsvLy95NaMIkOAmWSra3rokyz9DGIgUYXy93xia9EjrOTqcDAK+//vqf/dmfmdKn+/Too48ePHjw0UcfHQwGaoeuqurFF1+8fPmyjl8jwXTAAFBV1XPPP6cFcXSEy8vLf/7nf37x4kUNfe50OioVd7tdIlJn0A9/+ENtZGiJwVLcf8ePH/+Lv/iLH/3oR7/4xS8A4MyZs5cvX8bi3QihjRkJIaTcBt2HkiqdSmlUz8PByTLoyg/Yr1gcHzieNOD5PBTv9QRx6yJoP/KUkjm8uTj1h8Ph0tLS1YUFKiF5Jg9evHQRkZj5nXfeee+99/zuS6sNSeIMBJmZhULoCtZWwcrPCAA4sz5N2mhmVL+xWgx0xbrd7tTUVKkZpoOxYP2maYYqERtUeeHFI4WMV7dgGVVDNklf6cQkLyytL8wWod5xe5RSpmM2o0ifCWHC7qSSpm88QJ9fVZVGperD1bPezkg4IzCCAGRRpZQYBWPAEITQ/mOEDJKdTGcUJSJtTUJvXoLinvBwNfqrCOexsCIPn/Z5LiktChg5JYUN89QiAItUMTZNE7DkItnqAAgzqJym2dIhcJHMwSm9oQ32IcNmo1ozsuQ2vWhkGggRBQNQq0yJCLP8E1Uwvyz6w549ez7xiU+Yx4eZl5aXZ+fmvvOd7/yP//E/Ll68eOrUqbNnz959992KyBcuXJiamjp58uThw4c3bdp00003HT58+PzFC2c+PJNS0pIdnU5HK5mdO3dufn7+7bffXlhYuOWWW5aXl7Xm1k033RxjtXPnTqWJQ4cOAcB1111nLTeuXLlyww033H///X/3d3+3sLDw3nvvbdmyadu27QsLC+fPX1y/fv3szLzyrUCBqO3javilszSyNlkSEZkluY6VJnUr/QfXncKLpTDO85WsTdyjkrTdvsjpbuYA+su//Mu9n7jhoYce4mIXjzE+88wzH3zwwb/51//6yeefP3bs2HA4vOeee7RmEDOHEGNVs0jTDAQAgABIpJQ35WyGTh5Va2wVSctix0DaxaDQZiuKFuG0C9CGAlZVBOhAyz5FVzW7vkZVVdVVpSgBTujQ8STOHrhxLR3WQMSrLF4e9OKCxzsv+EgpsYROmDUly8DRP8HmK62yz6BKbnsDa+1t4bFi5EikR9skprLI7Q/RBG/Pu0RGfVT9EAGBUMODxiw+MK4o6q/T09P6rYDYKI8YL4yCiDklKnhkqwkAugntBjC3aexODvHinNrRPHuxXQwubl3MLEoIwESYWYZpWJO2ZqYQ4lhBoI+4PN9Qbjw7O2vRDGWt+P333//3//7fLy0tfeELX9DT9cQTT2zZsuXNN988e/bs1772tWefffaOO+44dOjQysrKBx98cN2e68+dO6c1yRQ3jx49etddd50/f35paentt9/eunXrs88++8EHH9x4441nzpyJsfrkJ29tmmZubu7tt98+dOhQr9c7d+7c/fffzyXEYXp6Osa4srJCRO+8887UVHc4HP7qV7/KWQaDwTe/8QeazhoCYmlIiaVABxEOh0lK1xfvnamqOufWbAmFjWt8GeJYaWSjKE9F5lDzB0P5h6awqQVU7zYVLOd83333nT7zoX5L5SNE3L9//7lz51ZWVs6dO/ftb3/7ww8/PHbs2E033aQDTsxNk0JEIQTIKIIgIEhaJkEkp8mMcCoFj0LQULiccxbOnkgNTwFAJAMIIlifUpMNQ6hNzaHiGEk5p+HAbAhU4negdC7l8YgEw/cJALLRVq4TvFk8TaXVr5iFyNYtuDD07JLm7UX2dv2i1yV12xisJRFoCwAAyDkBIiG10duc22XjthKpnUd9S/Qn2b8Yxztt6ZSGg6EqTT5IyeYPRW9Cp8fGEMB1+IWiv2DRvX2ctA2GneUfEYXZoEcvgxsWlVxGSfA2EjNa+yME0HruNWOZQkC1IGryx8chz2jXjSeISF3XKysrImz9QhCx3+/Pzc199atffe655w4dOnTixIkjR47s3r375MmTTzzxxL/7d/8OEbUU2dGjR7UK4p133fnBB0ftySmld95554a9N5w8efLaa6/93Oc+t3v37kcffXTbtm0PPfTQK6+8cunSJS7RJceOHZubmyOis2fP+kV+4oknXn311a1bt87Nzd15553DYX9lZeXkyZMPPPDQU089dfHSxS2bt8QYc1bqBFUJ2+VizikhjgjRfLQ5s6VflJNmNr7WiZtXFdwjIiRCBaCRS6Ht0WZqSLt3RORyShWGZqanS4s0RsROp5Nznp2dnZqeEoG6ro8cOXLu3DmdgtL6IA0gBAiq+6cAQBCAmaoISIEoQ1KRR1vdGSjUVd1yEpYYUBAFsM1SRkBzZykz1xwxYWn9myzCIUQ7O0oqnW5Xvfix21UU9kYcIkLXeVycOO/ZmypKqTSPs0Xz74IJdu7KzmvsmAmbFpCFxd4i4/oyjHB2dASRCEECAli1HACtFh9iG3OXckq5ZGJqRRYZa2Cvg4y5VbtEABC1EHcBoyIA2/iqqoIoWnLBOqsoxk/iArPlEOiI1T6J1GrXKEIhIBGLQCFujzukfyomiazBuC3HaIvgaMgTAnLbDKsEhoqQ0oU615BCDCKtRZCVfeckiBUhgSQAihVTZBGAkXDnQcf8QcY0WBgYEULOghgRgjBq0BoCbdmyZc+ePcePH3/zzTd37dr1rW9968033wSAf/bP/tlrr732+c9/vtfraa0yrW06aFJmECDdzIuXrly6fOXd999fWVmZnp4BwKZJTZOWlpaPHv3gxImT11xzDQCk1CBC0wyZc7fb3bZta8qJQmCRwXB4z+c/f+edd9Z1PRgOASmEajAYXrhw8c0335yZmanrChEypxC0WhMKcKSgrlMEwKAqBoBGl4H2N8FOXWv9NmEWziAMgkTE2vMJWQuAqe0PitdC21uqvS8gqt9K90KU+hBBuIoxBMrMWQCQqk5HS23EEKtut+50qlhxFiIKFGOoLl++JFmqKt526yf/4fHHWfiWW26tO51+fyAggShwikIDkBAqYozInJfy8vmpOvWHmQdSd9dR6DEGYKxiFUJEZKLYsipnSioae2ujaONuAAS4LWuHiIAsnBIDNAEZALW2GQBwSmpcUPgwjmWyufaNMC4OTlgoZspRhxKPFwbx4OwP9i37Wb9upXWh1MMMpcaLl0Yn5Fb7VXEtILJIseESAwtAaCEPY4ycc86MLO3+s+RRFoTCBYpAREJTKABR0/baceDoyOm7W8GYR2oqlzR6U6zIVTxpRTtokRJa3yeUwCuLaETNBRdETcxX4lYDARDV3S7nPBgMMGddjwy5qirtziqZlWcq0UOBEB2eVt/QCXNmzpxzE2PQujQIBMIMAiGkCVPzR1xcmm230AShGaa66hAFRAohKjM4fPjwD37wg6WlpX379j377LNvvvnm/Pz8li1b7r777l/84hfD4bCqqrfffvvq1av33Xffa6+9dujwkbNnz/V6vcFgGAJdvbrw2c/e/cgjj/zt3/7t2TNnLl++cvz4iX379j399NNPPvlUjPG+++5Ladg0w6qKGzasP3369MrK8vz8HCEOU9uKev369evWrVNpJaXEWXq9qY0bN117zbVvH3q706lZMgCDkLCAgY2AsGBAEODciipYThhnlooRgHPSSAoA4JxQGIkCorBo1SE1F7YMuRAVIFYxgkhqEgur2sZs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Tte9Ox98NGjw5QZt3TcBQUeLfk9TzD0K5PT0VElTstaSabVa7e7up9pYpjO9Q4LywsxQmL3HT9DaUg79RkVKv3njpZ8v8Ea/eWO5s9vtPICuA9f2GX5Ai0WHKmWTihaVFgElU9I67pWVHnbEc/XTsgtNMPEtco5rhqUoOW5D4PigiDYnnR9lhS6YOaHqyHb0Rg4YY6kJV9yqFBPAO2Cftt9VQ4yiBgtJJAUUNKyAJuSqzMx2nH0U326TFfu+V/PYqJRBWgxdrQEEVHueNFTnREqYzc/3198Sd9ZYcZyxfXCbdJQLmFkE2nRRf8qNTbNdIKLawJuqSZiYiLgUoew5SnX7ao4CtwYUATEi+Y/z8V998pFmUYt2nUmzfmd83DHQnk0pffe73/3rv/7r1Wr1rne9673vfe8f/uEfPvDAA+973/ueeeaZD33oQ1au6D//5/9sfsOnnnrqHe94h+VeEdEbb7yhqnfu3Ln33nt/8IMffOMb3/jQhz70y7/8y6WU73znO8x87ty5ruve9ra3UbMQl1K++93vvvvd73799de//OUvf+ADH3j00UeDTFRznUopX/ziF998883d3d3f+q3fev7557/xjW889NBDH/nIR771rW89++yzDz70wK//+kedlsGDVmgM4HA8ccJtPiO7mmaqwzBUXSnk1qMy52JAsrOzs7PaIapSEvFIykMdHDPujeFRLg0lxTKlw93l+va69MebzBs6WRShLukgxsuLlGXOVu3Iss8ygamBASlIENfWYD7mIjgAuI1SPRSWiKwXeRlYq+Z4N+rj2B52UkGj0jS+rv5vtFeOWfVMBIaFunMLj9K5pcy21AzBCEzX42Yiv/e3YIuYaDARbMM/ZgTIBRAAJvY7G4SFigSNsYSo5TrvhmQ+oC/JNQ4XOONU3ETtwOG0XGTU5hLXBOuZ03F2zL6JZiSqBkJmJlosOqaxOHYpVZY2Js3MLM2+M1Xuouble9UYwkhNHKUxmomALSomoSaZfe9St7365z//+T/5J/8EwHe+853j4+Of/exnwzA88cQTr776qt2wXq/39vZ+67d+axiGvb09x09VffbZZw8PD69du6aqL7/88m//9m//+Z//+SOPPLJYLP7oj/7oE5/4xOnp6cWLFznETIjISy+99K53vevrX//6k08+eeXKFW1is+c95JzX6/X169c/9rGP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\n", - "text/plain": [ - "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(receipts_response)" - ] - }, - { - "cell_type": "markdown", - "id": "fa834925", - "metadata": {}, - "source": [ - "# Q & A over LlamaIndex Documentation" - ] - }, - { - "cell_type": "markdown", - "id": "f1a82a54", - "metadata": {}, - "source": [ - "We now demo the same for Q&A over LlamaIndex documentations. \n", - "This demo higlights the ability to synthesize multimodal output with a mixture of text and image documents" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "d5f04295", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Could not find image processor class in the image processor config or the model config. Loading based on pattern matching with the model's feature extractor configuration.\n" - ] - } - ], - "source": [ - "llama_reader = SimpleDirectoryReader(\n", - " input_dir='data/llama',\n", - " file_extractor=file_extractor, \n", - " file_metadata=filename_fn,\n", - ")\n", - "llama_documents = llama_reader.load_data(concatenate=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "46db4191", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 965 tokens\n" - ] - } - ], - "source": [ - "llama_index = GPTSimpleVectorIndex.from_documents(llama_documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "4a4cc090", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 1592 tokens\n", - "INFO:root:> [query] Total embedding token usage: 13 tokens\n" - ] - } - ], - "source": [ - "llama_response = llama_index.query(\n", - " 'Show an image to illustrate how tree index works and explain briefly.', \n", - " query_transform=ImageOutputQueryTransform(width=400),\n", - " similarity_top_k=2\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "559624a6", - "metadata": {}, - "source": [ - "By inspecting the 2 source nodes, we see relevant text and image describing the tree index are retrieved for synthesizing the final multimodal response." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "5c5721d6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** Tree index is a data structure that organizes data in a hierarchical structure. It is often used to store and retrieve data quickly. The image below illustrates how tree index works. \n", - "\n", - "<img src=\"data/llama/tree_index.png\" width=\"400\" />\n", - "\n", - "At the top of the tree is the root node, which contains the main data. From the root node, the data is divided into smaller nodes, which are called child nodes. Each child node can have its own child nodes, and so on. To retrieve data, the tree index is traversed from the root node to the desired node. This allows for quick retrieval of data.\n", - "\n", - "In addition, LlamaIndex offers different methods of synthesizing a response from the tree index. The way to toggle this can be found in our Usage Pattern Guide. For example, the \"Create and Refine\" mode is an iterative way of generating a response. We first use the context in the first node, along with the query, to generate an initial answer. We then pass this answer, the query, and the context of the second node as input into a \"refine prompt\" to generate a refined answer. We refine through N-1 nodes, where" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/2`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 589f9b15-f3b4-4bfc-b50e-28fb1a2d0173<br>**Similarity:** 0.8151716742235475<br>**Text:** file_name: data/llama/tree_index.png\n", - "\n", - "<s_menu><s_nm> Root Node</s_nm><s_unitprice> Parent</s_nm><...<br>**Image:**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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Iscxuro7f/Hzqx5csqi1ue3VZ732iHnHCOmdC//+m2t/Vy6VDzx4/1KbUxdcRDffctOfr/u9ajj+uJPPOP2V9Vr10IPnnf+6CyeMGds8svWjl7+/vX3T5PGtUNruogFTMHYGUESqDLi3Xfy2JUsWXvfXPyelWBRgqme1L375sx3bOt7ylrcGDZ+74rM99e6759921VU/OPnkFx915ItuufU2YuKYf/+n39zw9z+/7oJXn3jy8d/83jcWPbTomKMOO+KQI3xAILErgXcbEQjsMz3nVa8m0p9ffVVUguTfcPL9H35r/vz73nDBG2ceMOMLX/rvFWsfX7Fq+Rf/57MHzN7/FWeeee+991Vr1aiEexfO/8GPv/fS01/y6tee89s//PpvN18/etSYy97+vmEtowJwy+23jBk9dtSoMSL7+tGafc0CoKB8RpMmTn/Tmy7+yVVXrV672iUxO16+4rEnVq1499s/eMS8Y9/x9n/a2t2+4OG7b7nj5hOPPek1r3zNGS992SknnS4pamnXX2/84yGHHRgnPH7CpOaW5ttuv5kUkoLUKanuaq0Zsx1V5XK57T3v/sDfbrzpnnvvS0oJObdla/u9991x8ZveefyRJ1504ZvHTRp9y903zF9819hRY9960dtOPO6E17zqfPKOGX+78Y/7TRs3asyIcqUyZfp+N936RxWSGpUT97ebf/+nv/z2nW9/f7nUkpcCAcTmAArLhoAKRwGQEjSr+Ze+5Ix7737429/5Sua3OUednd1NzXGl1Favabnc3NTc1r61s7unOnPahBDgBaNHjI8QSdBa1a9Ysb6359aQxTP3nztz/1le8oUrjqw1eR6072rtkIbZM+e+5lUXfPvb35w0tYVdc72WiqbD2obVa6CkNGL42K7OaprR8GFjgKhWxbC2UWXXKp66u2tbNnf+9fpbJLhSMmzOAQdlmVTK7ubbb/rGt7/+nss+dMicI7Ka5EuBycK6wOwMoHgIjUZGAO8ufcvb169btXjxfIabNH6/np7uFWuWNbXRmvUr2rdsmTFl9qQJkxc/tCDVmkZY/OACUl9KymNGTzh47uH/evm/fvRf/vnkE08+cObBHioMVUfKO6l4aXaGIBD1NT337FePHj3yppv+HDs3vHVkU7lpydIFSQs6uzc/tvyxaVNnTp00bcUTj7R3bSy1YslDC+r1rojjceMm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\n", - "text/plain": [ - "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x431>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/2`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723<br>**Similarity:** 0.8133374944584655<br>**Text:** How Each Index Works\n", - "\n", - "This guide describes how each index works with diagrams. We also visually h...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(llama_response)" - ] - }, - { - "cell_type": "markdown", - "id": "dbd7376e", - "metadata": {}, - "source": [ - "We show another example asking about vector store index instead." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "92569825", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 1567 tokens\n", - "INFO:root:> [query] Total embedding token usage: 14 tokens\n" - ] - } - ], - "source": [ - "llama_response = llama_index.query(\n", - " 'Show an image to illustrate how vector store index works and explain briefly.', \n", - " query_transform=ImageOutputQueryTransform(width=400),\n", - " similarity_top_k=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "7cfdd68d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** Vector store index is a data structure used to store and retrieve data efficiently. It is a type of hash table that uses a hash function to map keys to their associated values. The image below illustrates how vector store index works. \n", - "\n", - "<img src=\"data/llama/vector_store_index.png\" width=\"400\" />\n", - "\n", - "In the image, the keys are represented by the numbers on the left side of the table, and the values are represented by the numbers on the right side. The hash function is used to map the keys to their associated values. The hash function takes the key as input and produces an index, which is used to locate the value in the table.\n", - "\n", - "Vector store index is one of the four index types used by LlamaIndex, a search engine for natural language processing. The other three index types are list index, tree index, and keyword table index. Each index type has its own way of storing and retrieving data. \n", - "\n", - "List index stores Nodes as a sequential chain. During query time, if no other query parameters are specified, LlamaIndex simply loads all Nodes in the list into our Reponse Synthesis module. The list index also offers numerous ways of querying a list" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/2`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 80d8d2e9-412f-4b22-bc60-55dd131b73a9<br>**Similarity:** 0.8164705784668993<br>**Text:** file_name: data/llama/vector_store_index.png\n", - "\n", - "<s_menu><s_nm> Nodel</s_nm><s_unitprice> Node2</s_u...<br>**Image:**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x313>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/2`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723<br>**Similarity:** 0.7878578850577496<br>**Text:** How Each Index Works\n", - "\n", - "This guide describes how each index works with diagrams. We also visually h...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(llama_response)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb b/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb index 33cf51fb19..5bc6fde2e2 100644 --- a/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb +++ b/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb @@ -251,7 +251,7 @@ { "data": { "text/markdown": [ - "--" + "---" ], "text/plain": [ "<IPython.core.display.Markdown object>" @@ -289,7 +289,7 @@ { "data": { "text/markdown": [ - "--" + "---" ], "text/plain": [ "<IPython.core.display.Markdown object>" @@ -327,7 +327,7 @@ { "data": { "text/markdown": [ - "--" + "---" ], "text/plain": [ "<IPython.core.display.Markdown object>" @@ -408,7 +408,7 @@ { "data": { "text/markdown": [ - "--" + "---" ], "text/plain": [ "<IPython.core.display.Markdown object>" @@ -498,7 +498,7 @@ { "data": { "text/markdown": [ - "--" + "---" ], "text/plain": [ "<IPython.core.display.Markdown object>" diff --git a/examples/optimizer/OptimizerDemo.ipynb b/examples/optimizer/OptimizerDemo.ipynb index 539a468ddb..34da2d8eca 100644 --- a/examples/optimizer/OptimizerDemo.ipynb +++ b/examples/optimizer/OptimizerDemo.ipynb @@ -1,204 +1,198 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "479810ee", - "metadata": {}, - "source": [ - "# Token Usage Optimizer Demo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "839c4a87", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "markdown", - "id": "40cf0773", - "metadata": {}, - "source": [ - "### Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fa34cd83", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import download_loader\n", - "\n", - "WikipediaReader = download_loader(\"WikipediaReader\")\n", - "\n", - "loader = WikipediaReader()\n", - "documents = loader.load_data(pages=['Berlin'])" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f59e6c18", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "<class 'llama_index.readers.schema.base.Document'>\n" - ] + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "839c4a87", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "40cf0773", + "metadata": {}, + "source": [ + "### Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fa34cd83", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import download_loader\n", + "\n", + "WikipediaReader = download_loader(\"WikipediaReader\")\n", + "\n", + "loader = WikipediaReader()\n", + "documents = loader.load_data(pages=['Berlin'])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f59e6c18", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<class 'llama_index.readers.schema.base.Document'>\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 18390 tokens\n" + ] + } + ], + "source": [ + "from llama_index import GPTSimpleVectorIndex\n", + "index = GPTSimpleVectorIndex.from_documents(documents)\n", + "# save index to file\n", + "index.save_to_disk(\"simple_vector_index.json\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "827ada33", + "metadata": {}, + "source": [ + "Compare query with and without optimization for LLM token usage, Embedding Model usage on query, Embedding model usage for optimizer, and total time." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a04e4535", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Without optimization\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", + "INFO:root:> [query] Total embedding token usage: 7 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total time elapsed: 2.8928110599517822\n", + "Answer: \n", + "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\n", + "\n", + "With optimization\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [optimize] Total embedding token usage: 7 tokens\n", + "INFO:root:> [query] Total LLM token usage: 1779 tokens\n", + "INFO:root:> [query] Total embedding token usage: 7 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total time elapsed: 2.346346139907837\n", + "Answer: \n", + "The population of Berlin is around 4.5 million.\n", + "Alternate optimization cutoff\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [optimize] Total embedding token usage: 7 tokens\n", + "INFO:root:> [query] Total LLM token usage: 3215 tokens\n", + "INFO:root:> [query] Total embedding token usage: 7 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total time elapsed: 2.101111888885498\n", + "Answer: \n", + "The population of Berlin is around 4.5 million.\n" + ] + } + ], + "source": [ + "import time\n", + "from llama_index import GPTSimpleVectorIndex\n", + "from llama_index.optimization.optimizer import SentenceEmbeddingOptimizer\n", + "# load from disk\n", + "index = GPTSimpleVectorIndex.load_from_disk('simple_vector_index.json')\n", + "\n", + "print(\"Without optimization\")\n", + "start_time = time.time()\n", + "res = index.query(\"What is the population of Berlin?\")\n", + "end_time = time.time()\n", + "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", + "print(\"Answer: {}\".format(res))\n", + "\n", + "print(\"With optimization\")\n", + "start_time = time.time()\n", + "res = index.query(\"What is the population of Berlin?\", optimizer=SentenceEmbeddingOptimizer(percentile_cutoff=0.5))\n", + "end_time = time.time()\n", + "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", + "print(\"Answer: {}\".format(res))\n", + "\n", + "print(\"Alternate optimization cutoff\")\n", + "start_time = time.time()\n", + "res = index.query(\"What is the population of Berlin?\", optimizer=SentenceEmbeddingOptimizer(threshold_cutoff=0.7))\n", + "end_time = time.time()\n", + "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", + "print(\"Answer: {}\".format(res))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + } }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 18390 tokens\n" - ] - } - ], - "source": [ - "from llama_index import GPTSimpleVectorIndex\n", - "index = GPTSimpleVectorIndex.from_documents(documents)\n", - "# save index to file\n", - "index.save_to_disk(\"simple_vector_index.json\")" - ] - }, - { - "cell_type": "markdown", - "id": "827ada33", - "metadata": {}, - "source": [ - "Compare query with and without optimization for LLM token usage, Embedding Model usage on query, Embedding model usage for optimizer, and total time." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "a04e4535", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Without optimization\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", - "INFO:root:> [query] Total embedding token usage: 7 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total time elapsed: 2.8928110599517822\n", - "Answer: \n", - "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\n", - "\n", - "With optimization\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [optimize] Total embedding token usage: 7 tokens\n", - "INFO:root:> [query] Total LLM token usage: 1779 tokens\n", - "INFO:root:> [query] Total embedding token usage: 7 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total time elapsed: 2.346346139907837\n", - "Answer: \n", - "The population of Berlin is around 4.5 million.\n", - "Alternate optimization cutoff\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [optimize] Total embedding token usage: 7 tokens\n", - "INFO:root:> [query] Total LLM token usage: 3215 tokens\n", - "INFO:root:> [query] Total embedding token usage: 7 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total time elapsed: 2.101111888885498\n", - "Answer: \n", - "The population of Berlin is around 4.5 million.\n" - ] - } - ], - "source": [ - "import time\n", - "from llama_index import GPTSimpleVectorIndex\n", - "from llama_index.optimization.optimizer import SentenceEmbeddingOptimizer\n", - "# load from disk\n", - "index = GPTSimpleVectorIndex.load_from_disk('simple_vector_index.json')\n", - "\n", - "print(\"Without optimization\")\n", - "start_time = time.time()\n", - "res = index.query(\"What is the population of Berlin?\")\n", - "end_time = time.time()\n", - "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", - "print(\"Answer: {}\".format(res))\n", - "\n", - "print(\"With optimization\")\n", - "start_time = time.time()\n", - "res = index.query(\"What is the population of Berlin?\", optimizer=SentenceEmbeddingOptimizer(percentile_cutoff=0.5))\n", - "end_time = time.time()\n", - "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", - "print(\"Answer: {}\".format(res))\n", - "\n", - "print(\"Alternate optimization cutoff\")\n", - "start_time = time.time()\n", - "res = index.query(\"What is the population of Berlin?\", optimizer=SentenceEmbeddingOptimizer(threshold_cutoff=0.7))\n", - "end_time = time.time()\n", - "print(\"Total time elapsed: {}\".format(end_time - start_time))\n", - "print(\"Answer: {}\".format(res))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/examples/paul_graham_essay/DavinciComparison.ipynb b/examples/paul_graham_essay/DavinciComparison.ipynb index 40670a9fb4..978ad7d6a6 100644 --- a/examples/paul_graham_essay/DavinciComparison.ipynb +++ b/examples/paul_graham_essay/DavinciComparison.ipynb @@ -1,17 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "7096589b-daaf-440a-b89d-b4956f2db4b2", - "metadata": { - "tags": [] - }, - "source": [ - "# Comparing text-davinci-002 vs. text-davinci-003\n", - "\n", - "Does text-davinci-003 do better?" - ] - }, { "cell_type": "code", "execution_count": null, @@ -24,6 +12,18 @@ "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" ] }, + { + "cell_type": "markdown", + "id": "7096589b-daaf-440a-b89d-b4956f2db4b2", + "metadata": { + "tags": [] + }, + "source": [ + "# Comparing text-davinci-002 vs. text-davinci-003\n", + "\n", + "Does text-davinci-003 do better?" + ] + }, { "cell_type": "markdown", "id": "d8cfbe6f-4c50-4c4f-90f9-03bb91201ef5", @@ -209,7 +209,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/paul_graham_essay/GPT4Comparison.ipynb b/examples/paul_graham_essay/GPT4Comparison.ipynb index 5ca0f796b4..e555cc38b5 100644 --- a/examples/paul_graham_essay/GPT4Comparison.ipynb +++ b/examples/paul_graham_essay/GPT4Comparison.ipynb @@ -1,654 +1,646 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "14787bed", - "metadata": {}, - "source": [ - "# GPT4 Comparison w/ Paul Graham Essay" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "4921c412", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index import GPTListIndex, SimpleDirectoryReader, LLMPredictor, PromptHelper, ServiceContext\n", - "from gpt_index.response.notebook_utils import display_response\n", - "from langchain import OpenAI\n", - "from langchain.chat_models import ChatOpenAI\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "261d923e", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()" - ] - }, - { - "cell_type": "markdown", - "id": "f23b5169", - "metadata": {}, - "source": [ - "## davinci-003" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "0c635cdb", - "metadata": {}, - "outputs": [], - "source": [ - "llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name=\"text-davinci-003\"))\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "b8ad1a2a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 0 tokens\n" - ] - } - ], - "source": [ - "davinci_index = GPTListIndex.from_documents(documents, service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "c9925597", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Document is split into 6 nodes.'" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f'Document is split into {len(davinci_index._index_struct.nodes)} nodes.'" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "fa1d7242", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.indices.common.tree.base:> Building index from nodes: 5 chunks\n", - "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 19882 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 0 tokens\n" - ] - } - ], - "source": [ - "response = davinci_index.query(\n", - " \"What happened on one night in October 2003?\", \n", - " response_mode=\"tree_summarize\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "d758bdb7", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** It is not possible to answer this question with the given context information." - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" + "cells": [ + { + "cell_type": "code", + "execution_count": 62, + "id": "4921c412", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index import GPTListIndex, SimpleDirectoryReader, LLMPredictor, PromptHelper, ServiceContext\n", + "from gpt_index.response.notebook_utils import display_response\n", + "from langchain import OpenAI\n", + "from langchain.chat_models import ChatOpenAI\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "261d923e", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "f23b5169", + "metadata": {}, + "source": [ + "# davinci-003" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "0c635cdb", + "metadata": {}, + "outputs": [], + "source": [ + "llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name=\"text-davinci-003\"))\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "b8ad1a2a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 0 tokens\n" + ] + } + ], + "source": [ + "davinci_index = GPTListIndex.from_documents(documents, service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "c9925597", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Document is split into 6 nodes.'" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f'Document is split into {len(davinci_index._index_struct.nodes)} nodes.'" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "fa1d7242", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.indices.common.tree.base:> Building index from nodes: 5 chunks\n", + "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 19882 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 0 tokens\n" + ] + } + ], + "source": [ + "response = davinci_index.query(\n", + " \"What happened on one night in October 2003?\", \n", + " response_mode=\"tree_summarize\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "d758bdb7", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "**`Final Response:`** It is not possible to answer this question with the given context information." + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before college the two main things I worked on, outside of schoo...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** whereby the students wouldn't require the faculty to teach anything, and in return the faculty wo...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 3/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husba...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 4/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hacke...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 5/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\n", + "\n", + "As w...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 6/6`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** and some people dislike being told such things.\n", + "\n", + "[11] People put plenty of stuff on the internet ...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_response(response)" + ] + }, + { + "cell_type": "markdown", + "id": "3f843a73", + "metadata": {}, + "source": [ + "# gpt-4" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "0849d860", + "metadata": {}, + "outputs": [], + "source": [ + "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-4\"))\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "bb9eff4a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 0 tokens\n" + ] + } + ], + "source": [ + "gpt4_index = GPTListIndex.from_documents(documents, service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "cb56a205", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Document is split into 3 nodes.'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f'Document is split into {len(gpt4_index._index_struct.nodes)} nodes.'" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "44dda700", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gpt_index.indices.common.tree.base:> Building index from nodes: 2 chunks\n", + "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 18006 tokens\n", + "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 0 tokens\n" + ] + } + ], + "source": [ + "response = gpt4_index.query(\n", + " \"What happened on one night in October 2003?\", \n", + " response_mode=\"tree_summarize\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "42bd0984", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "**`Final Response:`** On one night in October 2003, there was a big party at Paul Graham's house, organized by his friend Maria Daniels. At this party, Paul met Jessica Livingston, who would later become his partner in starting Y Combinator. Additionally, Paul Graham had a conversation with his friend Robert Morris about starting a new kind of venture firm that would fund startups in batches, which eventually led to the creation of Y Combinator." + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/3`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** 0.740238551627948<br>**Text:** What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before college the two main things I worked on, outside of schoo...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/3`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** really good. He recommended Trevor Blackwell, which surprised me at first, because at that point ...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 3/3`**" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd t...<br>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_response(response)" + ] + }, + { + "cell_type": "markdown", + "id": "fd981e5e", + "metadata": {}, + "source": [ + "# gpt-4-32k" + ] + }, + { + "cell_type": "markdown", + "id": "9d9f20a9", + "metadata": {}, + "source": [ + "NOTE: not available yet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71137f57", + "metadata": {}, + "outputs": [], + "source": [ + "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-4-32k\"))\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb619782", + "metadata": {}, + "outputs": [], + "source": [ + "gpt4_32k_index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d417f6a", + "metadata": {}, + "outputs": [], + "source": [ + "len(gpt4_32k_index._index_struct.nodes_dict)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before college the two main things I worked on, outside of schoo...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** whereby the students wouldn't require the faculty to teach anything, and in return the faculty wo...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 3/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husba...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 4/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hacke...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 5/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\n", - "\n", - "As w...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 6/6`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** and some people dislike being told such things.\n", - "\n", - "[11] People put plenty of stuff on the internet ...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(response)" - ] - }, - { - "cell_type": "markdown", - "id": "3f843a73", - "metadata": {}, - "source": [ - "## gpt-4" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "0849d860", - "metadata": {}, - "outputs": [], - "source": [ - "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-4\"))\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "bb9eff4a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [build_index_from_documents] Total embedding token usage: 0 tokens\n" - ] - } - ], - "source": [ - "gpt4_index = GPTListIndex.from_documents(documents, service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "cb56a205", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Document is split into 3 nodes.'" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f'Document is split into {len(gpt4_index._index_struct.nodes)} nodes.'" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "44dda700", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gpt_index.indices.common.tree.base:> Building index from nodes: 2 chunks\n", - "INFO:gpt_index.token_counter.token_counter:> [query] Total LLM token usage: 18006 tokens\n", - "INFO:gpt_index.token_counter.token_counter:> [query] Total embedding token usage: 0 tokens\n" - ] - } - ], - "source": [ - "response = gpt4_index.query(\n", - " \"What happened on one night in October 2003?\", \n", - " response_mode=\"tree_summarize\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "42bd0984", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** On one night in October 2003, there was a big party at Paul Graham's house, organized by his friend Maria Daniels. At this party, Paul met Jessica Livingston, who would later become his partner in starting Y Combinator. Additionally, Paul Graham had a conversation with his friend Robert Morris about starting a new kind of venture firm that would fund startups in batches, which eventually led to the creation of Y Combinator." - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/3`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** 0.740238551627948<br>**Text:** What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before college the two main things I worked on, outside of schoo...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/3`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** really good. He recommended Trevor Blackwell, which surprised me at first, because at that point ...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 3/3`**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416<br>**Similarity:** None<br>**Text:** make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd t...<br>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(response)" - ] - }, - { - "cell_type": "markdown", - "id": "fd981e5e", - "metadata": {}, - "source": [ - "## gpt-4-32k" - ] - }, - { - "cell_type": "markdown", - "id": "9d9f20a9", - "metadata": {}, - "source": [ - "NOTE: not available yet" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "71137f57", - "metadata": {}, - "outputs": [], - "source": [ - "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-4-32k\"))\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb619782", - "metadata": {}, - "outputs": [], - "source": [ - "gpt4_32k_index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d417f6a", - "metadata": {}, - "outputs": [], - "source": [ - "len(gpt4_32k_index._index_struct.nodes_dict)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/examples/paul_graham_essay/InsertDemo.ipynb b/examples/paul_graham_essay/InsertDemo.ipynb index a97b4d8952..3e6e23cd6c 100644 --- a/examples/paul_graham_essay/InsertDemo.ipynb +++ b/examples/paul_graham_essay/InsertDemo.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "78531a12", - "metadata": {}, - "source": [ - "# Index Insert Demo" - ] - }, { "cell_type": "markdown", "id": "46e5110c-ed35-463e-a9f6-cff9cda6221b", @@ -329,7 +321,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/paul_graham_essay/KeywordTableComparison.ipynb b/examples/paul_graham_essay/KeywordTableComparison.ipynb index a9ca975fcb..23c964f600 100644 --- a/examples/paul_graham_essay/KeywordTableComparison.ipynb +++ b/examples/paul_graham_essay/KeywordTableComparison.ipynb @@ -1,428 +1,428 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "a6457769-dfaf-4241-ab32-dcf901dde902", - "metadata": { - "tags": [] - }, - "source": [ - "# GPT Keyword Table Index Comparisons\n", - "\n", - "Comparing GPTSimpleKeywordTableIndex, GPTRAKEKeywordTableIndex, GPTKeywordTableIndex.\n", - "\n", - "- GPTSimpleKeywordTableIndex - uses simple regex to extract keywords.\n", - "- GPTRAKEKeywordTableIndex - uses RAKE to extract keywords.\n", - "- GPTKeywordTableIndex - uses GPT to extract keywords." - ] - }, - { - "cell_type": "markdown", - "id": "075080e5-c255-4a5c-9330-9da11532e1c8", - "metadata": { - "tags": [] - }, - "source": [ - "#### GPTSimpleKeywordTableIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "b367b7ef-6a7d-4aee-b174-dba6ec4d2e21", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package stopwords to /home/jerry/nltk_data...\n", - "[nltk_data] Package stopwords is already up-to-date!\n" - ] - } - ], - "source": [ - "from llama_index import GPTSimpleKeywordTableIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f8248fa-e0bd-494a-ad68-8192ccc87696", - "metadata": {}, - "outputs": [], - "source": [ - "# build keyword index\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTSimpleKeywordTableIndex(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53833655-0296-4bcb-b501-259b043d68b3", - "metadata": {}, - "outputs": [], - "source": [ - "response = index.query(\"What did the author do after his time at YC?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "62bcca18-b644-4393-ad29-6c5f0424fb22", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "The author went on to write essays and work on other projects, including a new version of the Arc programming language and Hacker News. He also started painting, but stopped after a few months. In 2015, he started working on a new Lisp programming language, which he finished in 2019. The author then moved to England in 2016 with his family and continued writing essays. In 2019, he finished Bel and wrote a bunch of essays on various topics.\n", - "\n", - "The author also worked on building online stores in 1995 after finishing ANSI Common Lisp. He ran the software on servers and let users control it by clicking on links, which was a new concept at the time. In 1996, he co-founded Viaweb with Robert Morris, which was later acquired by Yahoo in 1998. After leaving Yahoo, the author moved back to New York and started painting again. In 2000, he had the idea for a web application that would let people edit code on a server and host the resulting applications, which later became known as \"Reddit\".</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "d24f9a20-48a6-4131-91b9-b01448c6ecb5", - "metadata": {}, - "source": [ - "#### GPTRAKEKeywordTableIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "c4d3f293-e608-4b90-86aa-9bce666dbcd5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package stopwords to /home/jerry/nltk_data...\n", - "[nltk_data] Package stopwords is already up-to-date!\n" - ] - } - ], - "source": [ - "from llama_index import GPTRAKEKeywordTableIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "66b1da3b-8231-4da9-8026-4f95481c79df", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "# build keyword index\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTRAKEKeywordTableIndex(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f13e5543-c6cb-4651-986c-ecde0f4bf789", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at YC?\n", - "Extracted keywords: []\n" - ] - } - ], - "source": [ - "response = index.query(\"What did the author do after his time at YC?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "5ae01ac3-55fa-43a3-9b24-f733072d5f8d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>Empty response</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "59cee6cf-92df-40d8-8dad-a40b792de96f", - "metadata": {}, - "source": [ - "#### GPTKeywordTableIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "78d59ef6-70b0-47bb-818d-7237a3b7de75", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5a3f1c67-6d73-4f37-afcf-9e637002fcff", - "metadata": {}, - "outputs": [], - "source": [ - "# build keyword index\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTKeywordTableIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "69d4f686-6825-49cf-a113-d2fdd484de77", - "metadata": {}, - "outputs": [], - "source": [ - "response = index.query(\"What did the author do after his time at Y Combinator?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "a483514d-4ab5-489d-8b99-7250df491ce3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "After a few years, the author decided to step away from Y Combinator to focus on other projects, such as painting and writing essays. In 2013, he handed over control of Y Combinator to Sam Altman. The author's mother passed away in 2014, and after taking some time to grieve, he returned to writing essays and working on Lisp. He continued working on Lisp until 2019, when he finally completed the project.\n", - "\n", - "In 2015, the author decided to move to England with his family. They originally intended to only stay for a year, but ended up liking it so much that they remained there. The author wrote Bel while living in England. In 2019, he finally finished the project. After completing Bel, the author wrote a number of essays on various topics. He continued writing essays through 2020, but also started thinking about other things he could work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "112e21ee-587c-4d8b-871e-cb99b94e3778", - "metadata": {}, - "source": [ - "## GPT Keyword Table Query Comparisons\n", - "Compare mode={\"default\", \"simple\", \"rake\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3029961a-ec22-42a1-90d6-f5892eb81e34", - "metadata": {}, - "outputs": [], - "source": [ - "# build table with default GPTKeywordTableIndex\n", - "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display\n", - "\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTKeywordTableIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "d75b31da-4788-4295-8642-07ac5c4f11a5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at Y Combinator?\n", - "Extracted keywords: ['y combinator', 'combinator']\n", - "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n", - "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", - "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", - "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" - ] + "cells": [ + { + "cell_type": "markdown", + "id": "a6457769-dfaf-4241-ab32-dcf901dde902", + "metadata": { + "tags": [] + }, + "source": [ + "## GPT Keyword Table Index Comparisons\n", + "\n", + "Comparing GPTSimpleKeywordTableIndex, GPTRAKEKeywordTableIndex, GPTKeywordTableIndex.\n", + "\n", + "- GPTSimpleKeywordTableIndex - uses simple regex to extract keywords.\n", + "- GPTRAKEKeywordTableIndex - uses RAKE to extract keywords.\n", + "- GPTKeywordTableIndex - uses GPT to extract keywords." + ] + }, + { + "cell_type": "markdown", + "id": "075080e5-c255-4a5c-9330-9da11532e1c8", + "metadata": { + "tags": [] + }, + "source": [ + "#### GPTSimpleKeywordTableIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b367b7ef-6a7d-4aee-b174-dba6ec4d2e21", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package stopwords to /home/jerry/nltk_data...\n", + "[nltk_data] Package stopwords is already up-to-date!\n" + ] + } + ], + "source": [ + "from llama_index import GPTSimpleKeywordTableIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f8248fa-e0bd-494a-ad68-8192ccc87696", + "metadata": {}, + "outputs": [], + "source": [ + "# build keyword index\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTSimpleKeywordTableIndex(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53833655-0296-4bcb-b501-259b043d68b3", + "metadata": {}, + "outputs": [], + "source": [ + "response = index.query(\"What did the author do after his time at YC?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "62bcca18-b644-4393-ad29-6c5f0424fb22", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "The author went on to write essays and work on other projects, including a new version of the Arc programming language and Hacker News. He also started painting, but stopped after a few months. In 2015, he started working on a new Lisp programming language, which he finished in 2019. The author then moved to England in 2016 with his family and continued writing essays. In 2019, he finished Bel and wrote a bunch of essays on various topics.\n", + "\n", + "The author also worked on building online stores in 1995 after finishing ANSI Common Lisp. He ran the software on servers and let users control it by clicking on links, which was a new concept at the time. In 1996, he co-founded Viaweb with Robert Morris, which was later acquired by Yahoo in 1998. After leaving Yahoo, the author moved back to New York and started painting again. In 2000, he had the idea for a web application that would let people edit code on a server and host the resulting applications, which later became known as \"Reddit\".</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "d24f9a20-48a6-4131-91b9-b01448c6ecb5", + "metadata": {}, + "source": [ + "#### GPTRAKEKeywordTableIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c4d3f293-e608-4b90-86aa-9bce666dbcd5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package stopwords to /home/jerry/nltk_data...\n", + "[nltk_data] Package stopwords is already up-to-date!\n" + ] + } + ], + "source": [ + "from llama_index import GPTRAKEKeywordTableIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66b1da3b-8231-4da9-8026-4f95481c79df", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# build keyword index\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTRAKEKeywordTableIndex(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f13e5543-c6cb-4651-986c-ecde0f4bf789", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at YC?\n", + "Extracted keywords: []\n" + ] + } + ], + "source": [ + "response = index.query(\"What did the author do after his time at YC?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5ae01ac3-55fa-43a3-9b24-f733072d5f8d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>Empty response</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "59cee6cf-92df-40d8-8dad-a40b792de96f", + "metadata": {}, + "source": [ + "#### GPTKeywordTableIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "78d59ef6-70b0-47bb-818d-7237a3b7de75", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a3f1c67-6d73-4f37-afcf-9e637002fcff", + "metadata": {}, + "outputs": [], + "source": [ + "# build keyword index\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTKeywordTableIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69d4f686-6825-49cf-a113-d2fdd484de77", + "metadata": {}, + "outputs": [], + "source": [ + "response = index.query(\"What did the author do after his time at Y Combinator?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a483514d-4ab5-489d-8b99-7250df491ce3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "After a few years, the author decided to step away from Y Combinator to focus on other projects, such as painting and writing essays. In 2013, he handed over control of Y Combinator to Sam Altman. The author's mother passed away in 2014, and after taking some time to grieve, he returned to writing essays and working on Lisp. He continued working on Lisp until 2019, when he finally completed the project.\n", + "\n", + "In 2015, the author decided to move to England with his family. They originally intended to only stay for a year, but ended up liking it so much that they remained there. The author wrote Bel while living in England. In 2019, he finally finished the project. After completing Bel, the author wrote a number of essays on various topics. He continued writing essays through 2020, but also started thinking about other things he could work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "112e21ee-587c-4d8b-871e-cb99b94e3778", + "metadata": {}, + "source": [ + "## GPT Keyword Table Query Comparisons\n", + "Compare mode={\"default\", \"simple\", \"rake\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3029961a-ec22-42a1-90d6-f5892eb81e34", + "metadata": {}, + "outputs": [], + "source": [ + "# build table with default GPTKeywordTableIndex\n", + "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display\n", + "\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTKeywordTableIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d75b31da-4788-4295-8642-07ac5c4f11a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at Y Combinator?\n", + "Extracted keywords: ['y combinator', 'combinator']\n", + "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n", + "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", + "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", + "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" + ] + }, + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# default\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"default\")\n", + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "07b713f4-adfc-46f7-a795-5b333e33d49d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at Y Combinator?\n", + "Extracted keywords: ['combinator']\n", + "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n", + "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", + "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", + "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" + ] + }, + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# simple\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"simple\")\n", + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d2e19ad9-3190-45e5-a28d-235c28296d70", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at Y Combinator?\n", + "Extracted keywords: ['combinator']\n", + "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to /home/jerry/nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", + "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", + "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" + ] + }, + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# rake\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"rake\")\n", + "display(Markdown(f\"<b>{response}</b>\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "myvenv", + "language": "python", + "name": "myvenv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.0" + } }, - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# default\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"default\")\n", - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "07b713f4-adfc-46f7-a795-5b333e33d49d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at Y Combinator?\n", - "Extracted keywords: ['combinator']\n", - "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n", - "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", - "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", - "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" - ] - }, - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# simple\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"simple\")\n", - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "d2e19ad9-3190-45e5-a28d-235c28296d70", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at Y Combinator?\n", - "Extracted keywords: ['combinator']\n", - "> Querying with idx: 235042210695008001: of excluding them, because there were so many s...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package punkt to /home/jerry/nltk_data...\n", - "[nltk_data] Package punkt is already up-to-date!\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Querying with idx: 7029274505691774319: it was like living in another country, and sinc...\n", - "> Querying with idx: 1773317813360405038: browser, and then host the resulting applicatio...\n", - "> Querying with idx: 3866067077574405334: person, and from those we picked 8 to fund. The...\n" - ] - }, - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "The author went on to write a book about his experiences at Y Combinator, and then moved to England. He started writing essays again and also began working on a new Lisp programming language. He also wrote an essay about how he chooses what to work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# rake\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\", mode=\"rake\")\n", - "display(Markdown(f\"<b>{response}</b>\"))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "myvenv", - "language": "python", - "name": "myvenv" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/paul_graham_essay/SentenceSplittingDemo.ipynb b/examples/paul_graham_essay/SentenceSplittingDemo.ipynb index 2617040759..9a1a0a3c84 100644 --- a/examples/paul_graham_essay/SentenceSplittingDemo.ipynb +++ b/examples/paul_graham_essay/SentenceSplittingDemo.ipynb @@ -1,150 +1,152 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "2d202140", - "metadata": {}, - "source": [ - "# Example of using sentence splitter chunking\n", - "Compare the diff of splitting_1.txt and splitting_2.txt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a23c1a8-71ea-4b6d-ae42-5c1cf4014dff", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index.langchain_helpers.text_splitter import TokenTextSplitter\n", - "from llama_index import SimpleDirectoryReader, Document\n", - "from gpt_index.utils import globals_helper\n", - "from langchain.text_splitter import NLTKTextSplitter, SpacyTextSplitter, RecursiveCharacterTextSplitter\n", - "\n", - "document = SimpleDirectoryReader('data').load_data()[0]\n", - "text_splitter_default = TokenTextSplitter() # use default settings\n", - "text_chunks = text_splitter_default.split_text(document.text)\n", - "doc_chunks = [Document(t) for t in text_chunks]\n", - "tokenizer = globals_helper.tokenizer\n", - "with open('splitting_1.txt', 'w') as f:\n", - " for idx, doc in enumerate(doc_chunks):\n", - " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", - "\n", - "from gpt_index.langchain_helpers.text_splitter import SentenceSplitter\n", - "\n", - "sentence_splitter = SentenceSplitter()\n", - "text_chunks = sentence_splitter.split_text(document.text)\n", - "doc_chunks = [Document(t) for t in text_chunks]\n", - "with open('splitting_2.txt', 'w') as f:\n", - " for idx, doc in enumerate(doc_chunks):\n", - " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", - "\n", - "nltk_splitter = NLTKTextSplitter()\n", - "text_chunks = nltk_splitter.split_text(document.text)\n", - "doc_chunks = [Document(t) for t in text_chunks]\n", - "tokenizer = globals_helper.tokenizer\n", - "with open('splitting_3.txt', 'w') as f:\n", - " for idx, doc in enumerate(doc_chunks):\n", - " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", - "\n", - "# spacy_splitter = SpacyTextSplitter()\n", - "# text_chunks = spacy_splitter.split_text(document.text)\n", - "# tokenizer = globals_helper.tokenizer\n", - "# with open('splitting_4.txt', 'w') as f:\n", - "# for idx, doc in enumerate(doc_chunks):\n", - "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", - "\n", - "# from langchain.text_splitter import TokenTextSplitter\n", - "# token_text_splitter = TokenTextSplitter()\n", - "# text_chunks = token_text_splitter.split_text(document.text)\n", - "# doc_chunks = [Document(t) for t in text_chunks]\n", - "# tokenizer = globals_helper.tokenizer\n", - "# with open('splitting_5.txt', 'w') as f:\n", - "# for idx, doc in enumerate(doc_chunks):\n", - "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", - "\n", - "# recursive_splitter = RecursiveCharacterTextSplitter()\n", - "# text_chunks = recursive_splitter.split_text(document.text)\n", - "# doc_chunks = [Document(t) for t in text_chunks]\n", - "# tokenizer = globals_helper.tokenizer\n", - "# with open('splitting_6.txt', 'w') as f:\n", - "# for idx, doc in enumerate(doc_chunks):\n", - "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n" - ] - }, - { - "cell_type": "markdown", - "id": "7e62ef7d", - "metadata": {}, - "source": [ - "## Testing with Chinese" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "44711ded", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index.langchain_helpers.text_splitter import SentenceSplitter\n", - "from gpt_index.readers.schema.base import Document\n", - "from gpt_index.indices.service_context import ServiceContext\n", - "from gpt_index.node_parser.simple import SimpleNodeParser\n", - "from gpt_index.indices.vector_store import GPTSimpleVectorIndex\n", - "import wikipedia" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e1262b9", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "sentence_splitter = SentenceSplitter()\n", - "wikipedia.set_lang('zh')\n", - "page = wikipedia.page('美国', auto_suggest=True).content\n", - "sentence_splitter.split_text(page)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "78dc563c", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "node_parser = SimpleNodeParser(text_splitter=sentence_splitter)\n", - "service_context = ServiceContext.from_defaults(node_parser=node_parser)\n", - "documents = []\n", - "documents.append(Document(page))\n", - "index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)\n", - "index.save_to_disk('zh_tokenizer.json')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "2d202140", + "metadata": {}, + "source": [ + "# Example of using sentence splitter chunking\n", + "Compare the diff of splitting_1.txt and splitting_2.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a23c1a8-71ea-4b6d-ae42-5c1cf4014dff", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index.langchain_helpers.text_splitter import TokenTextSplitter\n", + "from llama_index import SimpleDirectoryReader, Document\n", + "from gpt_index.utils import globals_helper\n", + "from langchain.text_splitter import NLTKTextSplitter, SpacyTextSplitter, RecursiveCharacterTextSplitter\n", + "\n", + "document = SimpleDirectoryReader('data').load_data()[0]\n", + "text_splitter_default = TokenTextSplitter() # use default settings\n", + "text_chunks = text_splitter_default.split_text(document.text)\n", + "doc_chunks = [Document(t) for t in text_chunks]\n", + "tokenizer = globals_helper.tokenizer\n", + "with open('splitting_1.txt', 'w') as f:\n", + " for idx, doc in enumerate(doc_chunks):\n", + " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", + "\n", + "from gpt_index.langchain_helpers.text_splitter import SentenceSplitter\n", + "\n", + "sentence_splitter = SentenceSplitter()\n", + "text_chunks = sentence_splitter.split_text(document.text)\n", + "doc_chunks = [Document(t) for t in text_chunks]\n", + "with open('splitting_2.txt', 'w') as f:\n", + " for idx, doc in enumerate(doc_chunks):\n", + " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", + "\n", + "nltk_splitter = NLTKTextSplitter()\n", + "text_chunks = nltk_splitter.split_text(document.text)\n", + "doc_chunks = [Document(t) for t in text_chunks]\n", + "tokenizer = globals_helper.tokenizer\n", + "with open('splitting_3.txt', 'w') as f:\n", + " for idx, doc in enumerate(doc_chunks):\n", + " f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", + "\n", + "# spacy_splitter = SpacyTextSplitter()\n", + "# text_chunks = spacy_splitter.split_text(document.text)\n", + "# tokenizer = globals_helper.tokenizer\n", + "# with open('splitting_4.txt', 'w') as f:\n", + "# for idx, doc in enumerate(doc_chunks):\n", + "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", + "\n", + "# from langchain.text_splitter import TokenTextSplitter\n", + "# token_text_splitter = TokenTextSplitter()\n", + "# text_chunks = token_text_splitter.split_text(document.text)\n", + "# doc_chunks = [Document(t) for t in text_chunks]\n", + "# tokenizer = globals_helper.tokenizer\n", + "# with open('splitting_5.txt', 'w') as f:\n", + "# for idx, doc in enumerate(doc_chunks):\n", + "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n", + "\n", + "# recursive_splitter = RecursiveCharacterTextSplitter()\n", + "# text_chunks = recursive_splitter.split_text(document.text)\n", + "# doc_chunks = [Document(t) for t in text_chunks]\n", + "# tokenizer = globals_helper.tokenizer\n", + "# with open('splitting_6.txt', 'w') as f:\n", + "# for idx, doc in enumerate(doc_chunks):\n", + "# f.write(\"\\n-------\\n\\n{}. Size: {} tokens\\n\".format(idx, len(tokenizer(doc.text))) + doc.text)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "7e62ef7d", + "metadata": {}, + "source": [ + "## Testing with Chinese" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44711ded", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index.langchain_helpers.text_splitter import SentenceSplitter\n", + "from gpt_index.readers.schema.base import Document\n", + "from gpt_index.indices.service_context import ServiceContext\n", + "from gpt_index.node_parser.simple import SimpleNodeParser\n", + "from gpt_index.indices.vector_store import GPTSimpleVectorIndex\n", + "import wikipedia" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e1262b9", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "sentence_splitter = SentenceSplitter()\n", + "wikipedia.set_lang('zh')\n", + "page = wikipedia.page('美国', auto_suggest=True).content\n", + "sentence_splitter.split_text(page)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78dc563c", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "node_parser = SimpleNodeParser(text_splitter=sentence_splitter)\n", + "service_context = ServiceContext.from_defaults(node_parser=node_parser)\n", + "documents = []\n", + "documents.append(Document(page))\n", + "index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)\n", + "index.save_to_disk('zh_tokenizer.json')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/examples/paul_graham_essay/TestEssay.ipynb b/examples/paul_graham_essay/TestEssay.ipynb index 5ad8d6866e..3e1661492c 100644 --- a/examples/paul_graham_essay/TestEssay.ipynb +++ b/examples/paul_graham_essay/TestEssay.ipynb @@ -1,668 +1,660 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "7668c1cb", - "metadata": {}, - "source": [ - "# Paul Graham Essay Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a712b56", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "markdown", - "id": "be3f7baa-1c0a-430b-981b-83ddca9e71f2", - "metadata": { - "tags": [] - }, - "source": [ - "## Using GPT Tree Index" - ] - }, - { - "cell_type": "markdown", - "id": "0881f151-279e-4910-95c7-f49d3d6a4c69", - "metadata": {}, - "source": [ - "#### [Demo] Default leaf traversal " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "1c297fd3-3424-41d8-9d0d-25fe6310ab62", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "370fd08f-56ff-4c24-b0c4-c93116a6d482", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "index = GPTTreeIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", - "metadata": {}, - "outputs": [], - "source": [ - "index.save_to_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", - "metadata": {}, - "outputs": [], - "source": [ - "# try loading\n", - "new_index = GPTTreeIndex.load_from_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd14686d-1c53-4637-9340-3745f2121ae2", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What did the author do growing up?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "b4c87d14-d2d8-4d80-89f6-1e5972973528", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>The author wrote short stories and tried to program on an IBM 1401.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What did the author do after his time at Y Combinator?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "a5ab5943-7c84-4c2b-ac99-ec4b5fc67e64", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>The author went on to start his own company.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "85c62ec3-c3cf-467e-ab0f-88ffb9f990be", - "metadata": {}, - "source": [ - "#### [Demo] Leaf traversal with child_branch_factor=2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "46714db4-9592-4c55-9ca7-916758f2ce68", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# try using branching factor 2\n", - "response = new_index.query(\"What did the author do growing up?\", child_branch_factor=2)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "1ea7f891-b7e1-497a-a965-14201b220404", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>The author grew up writing simple programs on a TRS-80 computer, as well as trying to program on an IBM 1401. In the early 1990s, the author was a student at the Rhode Island School of Design (RISD) and then the Accademia di Belle Arti in Florence, Italy. They eventually dropped out of RISD and moved to New York City, where they got a job at Interleaf, a software company. While working there, they learned about a new markup language called HTML, which would later become a big part of their life. He also wrote a book on Lisp programming.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "3c572726-bb95-49c3-a762-d966de59ee5f", - "metadata": {}, - "source": [ - "#### [Demo] Build Tree Index during Query-Time" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "255fb052-1ff6-4f27-881f-28d4790e9520", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "85371256-292c-473e-9485-7de5c1997a59", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [build_index_from_documents] Total token usage: 0 tokens\n" - ] - } - ], - "source": [ - "index_light = GPTTreeIndex.from_documents(documents, build_tree=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "77b0acb3-5593-4f00-8eef-315a031fedc2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at Y Combinator?\n", - "> Building index from nodes: 5 chunks\n", - "0/57\n", - "10/57\n", - "20/57\n", - "30/57\n", - "40/57\n", - "50/57\n", - "> [query] Total token usage: 18200 tokens\n" - ] + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a712b56", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "markdown", + "id": "be3f7baa-1c0a-430b-981b-83ddca9e71f2", + "metadata": { + "tags": [] + }, + "source": [ + "## Using GPT Tree Index" + ] + }, + { + "cell_type": "markdown", + "id": "0881f151-279e-4910-95c7-f49d3d6a4c69", + "metadata": {}, + "source": [ + "#### [Demo] Default leaf traversal " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1c297fd3-3424-41d8-9d0d-25fe6310ab62", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "370fd08f-56ff-4c24-b0c4-c93116a6d482", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "index = GPTTreeIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", + "metadata": {}, + "outputs": [], + "source": [ + "index.save_to_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", + "metadata": {}, + "outputs": [], + "source": [ + "# try loading\n", + "new_index = GPTTreeIndex.load_from_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd14686d-1c53-4637-9340-3745f2121ae2", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What did the author do growing up?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b4c87d14-d2d8-4d80-89f6-1e5972973528", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>The author wrote short stories and tried to program on an IBM 1401.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What did the author do after his time at Y Combinator?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a5ab5943-7c84-4c2b-ac99-ec4b5fc67e64", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>The author went on to start his own company.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "85c62ec3-c3cf-467e-ab0f-88ffb9f990be", + "metadata": {}, + "source": [ + "#### [Demo] Leaf traversal with child_branch_factor=2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46714db4-9592-4c55-9ca7-916758f2ce68", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# try using branching factor 2\n", + "response = new_index.query(\"What did the author do growing up?\", child_branch_factor=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1ea7f891-b7e1-497a-a965-14201b220404", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>The author grew up writing simple programs on a TRS-80 computer, as well as trying to program on an IBM 1401. In the early 1990s, the author was a student at the Rhode Island School of Design (RISD) and then the Accademia di Belle Arti in Florence, Italy. They eventually dropped out of RISD and moved to New York City, where they got a job at Interleaf, a software company. While working there, they learned about a new markup language called HTML, which would later become a big part of their life. He also wrote a book on Lisp programming.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "3c572726-bb95-49c3-a762-d966de59ee5f", + "metadata": {}, + "source": [ + "#### [Demo] Build Tree Index during Query-Time" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "255fb052-1ff6-4f27-881f-28d4790e9520", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "85371256-292c-473e-9485-7de5c1997a59", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [build_index_from_documents] Total token usage: 0 tokens\n" + ] + } + ], + "source": [ + "index_light = GPTTreeIndex.from_documents(documents, build_tree=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "77b0acb3-5593-4f00-8eef-315a031fedc2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at Y Combinator?\n", + "> Building index from nodes: 5 chunks\n", + "0/57\n", + "10/57\n", + "20/57\n", + "30/57\n", + "40/57\n", + "50/57\n", + "> [query] Total token usage: 18200 tokens\n" + ] + }, + { + "data": { + "text/plain": [ + "'\\nThe author went back to painting.'" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index_light.query(\"What did the author do after his time at Y Combinator?\", mode=\"summarize\")" + ] + }, + { + "cell_type": "markdown", + "id": "f9773497-9aa6-4a16-884a-cd882e63d012", + "metadata": {}, + "source": [ + "#### [Demo] Build Tree Index with a custom Summary Prompt, directly retrieve answer from root node" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "8ab6d3ad-95e1-477a-a0dc-2ce4763ff2c4", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import SummaryPrompt" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5a91a445-6ab2-457c-850e-79c5386129db", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Building index from nodes: 5 chunks\n", + "0/57\n", + "10/57\n", + "20/57\n", + "30/57\n", + "40/57\n", + "50/57\n", + "> [build_index_from_documents] Total token usage: 18031 tokens\n" + ] + } + ], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()\n", + "\n", + "query_str = \"What did the author do growing up?\"\n", + "SUMMARY_PROMPT_TMPL = (\n", + " \"Context information is below. \\n\"\n", + " \"---------------------\\n\"\n", + " \"{context_str}\"\n", + " \"\\n---------------------\\n\"\n", + " \"Given the context information and not prior knowledge, \"\n", + " f\"answer the question: {query_str}\\n\"\n", + ")\n", + "SUMMARY_PROMPT = SummaryPrompt(SUMMARY_PROMPT_TMPL)\n", + "index_with_query = GPTTreeIndex.from_documents(documents, summary_template=SUMMARY_PROMPT)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "985dad0c-1ede-4576-a4c9-c077b815edd8", + "metadata": {}, + "outputs": [], + "source": [ + "index_with_query.save_to_disk(\"index_with_query.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "de04fce5-88f9-41b7-87d9-dcde8f84a872", + "metadata": {}, + "outputs": [], + "source": [ + "index_with_query = GPTTreeIndex.load_from_disk(\"index_with_query.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9223ffa8-d49d-4de3-821a-701b2a0352d4", + "metadata": {}, + "outputs": [], + "source": [ + "# directly retrieve response from root nodes instead of traversing tree\n", + "response = index_with_query.query(query_str, mode=\"retrieve\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "fdca6970-2f3f-4741-ae98-555db8d3d9a0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>\n", + "The author was homeschooled and then attended a prestigious art school. The author grew up writing essays and thinking about other things he could work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "a6457769-dfaf-4241-ab32-dcf901dde902", + "metadata": {}, + "source": [ + "## Using GPT Keyword Table Index" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "78d59ef6-70b0-47bb-818d-7237a3b7de75", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5a3f1c67-6d73-4f37-afcf-9e637002fcff", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Processing chunk 0 of 6: \t\t\n", + "\n", + "What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before col...\n", + "> Keywords: ['painting', 'computers', 'programming', 'lisp', 'ai', 'college', 'graduate school', 'graduate', 'school', 'writing']\n", + "> Processing chunk 1 of 6: of excluding them, because there were so many s...\n", + "> Keywords: ['school', 'students', 'painting', 'florence', 'risd', 'accademia', 'still lives', 'still', 'lives', 'color', 'new york', 'new', 'york', 'yorkville', 'idelle weber', 'idelle', 'weber', 'harvard', 'world wide web', 'world', 'wide', 'web', 'y combinator', 'combinator', 'software', 'lisp']\n", + "> Processing chunk 2 of 6: an alarming prospect, because neither of us kne...\n", + "> Keywords: ['windows', 'unix', 'lisp', 'web app', 'web', 'app', 'browser', 'store builder', 'store', 'builder', 'ecommerce', 'startup', 'painting']\n", + "> Processing chunk 3 of 6: browser, and then host the resulting applicatio...\n", + "> Keywords: ['y combinator', 'combinator', 'investment', 'summer founders program', 'summer', 'founders', 'program', 'microsoft', 'goldman sachs', 'goldman', 'sachs']\n", + "> Processing chunk 4 of 6: person, and from those we picked 8 to fund. The...\n", + "> Keywords: ['y combinator', 'combinator', 'yc', 'lisp', 'bel', 'essays', 'writing', 'software', 'programming', 'arc']\n", + "> Processing chunk 5 of 6: it was like living in another country, and sinc...\n", + "> Keywords: ['software', 'technology', 'y combinator', 'combinator', 'essays', 'online publishing', 'online', 'publishing', 'venture capital', 'venture', 'capital', 'startups', 'space aliens', 'space', 'aliens', 'lisp']\n" + ] + } + ], + "source": [ + "# build keyword index\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTKeywordTableIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7ec97988-0190-4df7-b19a-e3130122298f", + "metadata": {}, + "outputs": [], + "source": [ + "# save index\n", + "index.save_to_disk('index_table.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "d94d0fe0-43c1-41cd-901b-0d748d30f1c7", + "metadata": {}, + "outputs": [], + "source": [ + "# reload index\n", + "index = GPTKeywordTableIndex.load_from_disk('index_table.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "69d4f686-6825-49cf-a113-d2fdd484de77", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: What did the author do after his time at Y Combinator?\n", + "Extracted keywords: ['y combinator', 'combinator']\n", + "> Querying with idx: 7143669651211954504: of excluding them, because there were so many s...\n", + "> Querying with idx: 4978118451876167434: browser, and then host the resulting applicatio...\n", + "> Querying with idx: 7378313280237489139: person, and from those we picked 8 to fund. The...\n", + "> Querying with idx: 2670584622494666310: it was like living in another country, and sinc...\n" + ] + } + ], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a483514d-4ab5-489d-8b99-7250df491ce3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "After a few years, the author decided to step away from Y Combinator to focus on other projects, such as painting and writing essays. In 2013, he handed over control of Y Combinator to Sam Altman. The author's mother passed away in 2014, and after taking some time to grieve, he returned to writing essays and working on Lisp. He continued working on Lisp until 2019, when he finally completed the project.\n", + "\n", + "In 2015, the author decided to move to England with his family. They originally intended to only stay for a year, but ended up liking it so much that they remained there. The author wrote Bel while living in England. In 2019, he finally finished the project. After completing Bel, the author wrote a number of essays on various topics. He continued writing essays through 2020, but also started thinking about other things he could work on.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "aae1bea9-b534-430a-a52b-1f4414957ac9", + "metadata": {}, + "source": [ + "## Using GPT List Index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1aa8c8c1-7fce-4737-9141-d14fd37a779c", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "191caa65-a77f-4d8c-b095-4aed61300ea5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Adding chunk: \t\t\n", + "\n", + "What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before col...\n", + "> Adding chunk: only up to age 25 and already there are such co...\n", + "> Adding chunk: clear that it was even possible. To find out, w...\n", + "> Adding chunk: a name for the kind of company Viaweb was, an \"...\n", + "> Adding chunk: get their initial set of customers almost entir...\n", + "> Adding chunk: had smart people and built impressive technolog...\n", + "> [build_index_from_documents] Total token usage: 0 tokens\n" + ] + } + ], + "source": [ + "# build linked list index\n", + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTListIndex.from_documents(documents)\n", + "# save index\n", + "index.save_to_disk('index_list.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "af2d049d-518d-4ec4-b84f-1fab8aece04f", + "metadata": {}, + "outputs": [], + "source": [ + "# load index from disk\n", + "index = GPTListIndex.load_from_disk('index_list.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1b3d4bd8-7540-4c6f-8616-ab2d8c6ae2b2", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5101b979-175f-490e-9b32-27689fe4b789", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "<b>\n", + "\n", + "After his time at Y Combinator, the author moved back to Providence to continue at RISD. However, he found that art school was not what he expected it to be and dropped out. He then moved to New York City and started writing a book on Lisp. When that didn't work out, he started a company to put art galleries online. However, that also failed. He then had the idea to start a company to build online stores, which became a success.\n", + "\n", + "The author then left his position at Yahoo to pursue painting full-time. However, he found it difficult to get back into the painting mindset and eventually returned to New York City. It was there that he had the idea to create a web application that would allow users to create and host their own web applications.</b>" + ], + "text/plain": [ + "<IPython.core.display.Markdown object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65cfce56-853e-431b-888e-946771c3b07e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } }, - { - "data": { - "text/plain": [ - "'\\nThe author went back to painting.'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "index_light.query(\"What did the author do after his time at Y Combinator?\", mode=\"summarize\")" - ] - }, - { - "cell_type": "markdown", - "id": "f9773497-9aa6-4a16-884a-cd882e63d012", - "metadata": {}, - "source": [ - "#### [Demo] Build Tree Index with a custom Summary Prompt, directly retrieve answer from root node" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "8ab6d3ad-95e1-477a-a0dc-2ce4763ff2c4", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import SummaryPrompt" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "5a91a445-6ab2-457c-850e-79c5386129db", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Building index from nodes: 5 chunks\n", - "0/57\n", - "10/57\n", - "20/57\n", - "30/57\n", - "40/57\n", - "50/57\n", - "> [build_index_from_documents] Total token usage: 18031 tokens\n" - ] - } - ], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()\n", - "\n", - "query_str = \"What did the author do growing up?\"\n", - "SUMMARY_PROMPT_TMPL = (\n", - " \"Context information is below. \\n\"\n", - " \"---------------------\\n\"\n", - " \"{context_str}\"\n", - " \"\\n---------------------\\n\"\n", - " \"Given the context information and not prior knowledge, \"\n", - " f\"answer the question: {query_str}\\n\"\n", - ")\n", - "SUMMARY_PROMPT = SummaryPrompt(SUMMARY_PROMPT_TMPL)\n", - "index_with_query = GPTTreeIndex.from_documents(documents, summary_template=SUMMARY_PROMPT)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "985dad0c-1ede-4576-a4c9-c077b815edd8", - "metadata": {}, - "outputs": [], - "source": [ - "index_with_query.save_to_disk(\"index_with_query.json\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "de04fce5-88f9-41b7-87d9-dcde8f84a872", - "metadata": {}, - "outputs": [], - "source": [ - "index_with_query = GPTTreeIndex.load_from_disk(\"index_with_query.json\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9223ffa8-d49d-4de3-821a-701b2a0352d4", - "metadata": {}, - "outputs": [], - "source": [ - "# directly retrieve response from root nodes instead of traversing tree\n", - "response = index_with_query.query(query_str, mode=\"retrieve\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "fdca6970-2f3f-4741-ae98-555db8d3d9a0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>\n", - "The author was homeschooled and then attended a prestigious art school. The author grew up writing essays and thinking about other things he could work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "a6457769-dfaf-4241-ab32-dcf901dde902", - "metadata": {}, - "source": [ - "## Using GPT Keyword Table Index" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "78d59ef6-70b0-47bb-818d-7237a3b7de75", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTKeywordTableIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "5a3f1c67-6d73-4f37-afcf-9e637002fcff", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Processing chunk 0 of 6: \t\t\n", - "\n", - "What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before col...\n", - "> Keywords: ['painting', 'computers', 'programming', 'lisp', 'ai', 'college', 'graduate school', 'graduate', 'school', 'writing']\n", - "> Processing chunk 1 of 6: of excluding them, because there were so many s...\n", - "> Keywords: ['school', 'students', 'painting', 'florence', 'risd', 'accademia', 'still lives', 'still', 'lives', 'color', 'new york', 'new', 'york', 'yorkville', 'idelle weber', 'idelle', 'weber', 'harvard', 'world wide web', 'world', 'wide', 'web', 'y combinator', 'combinator', 'software', 'lisp']\n", - "> Processing chunk 2 of 6: an alarming prospect, because neither of us kne...\n", - "> Keywords: ['windows', 'unix', 'lisp', 'web app', 'web', 'app', 'browser', 'store builder', 'store', 'builder', 'ecommerce', 'startup', 'painting']\n", - "> Processing chunk 3 of 6: browser, and then host the resulting applicatio...\n", - "> Keywords: ['y combinator', 'combinator', 'investment', 'summer founders program', 'summer', 'founders', 'program', 'microsoft', 'goldman sachs', 'goldman', 'sachs']\n", - "> Processing chunk 4 of 6: person, and from those we picked 8 to fund. The...\n", - "> Keywords: ['y combinator', 'combinator', 'yc', 'lisp', 'bel', 'essays', 'writing', 'software', 'programming', 'arc']\n", - "> Processing chunk 5 of 6: it was like living in another country, and sinc...\n", - "> Keywords: ['software', 'technology', 'y combinator', 'combinator', 'essays', 'online publishing', 'online', 'publishing', 'venture capital', 'venture', 'capital', 'startups', 'space aliens', 'space', 'aliens', 'lisp']\n" - ] - } - ], - "source": [ - "# build keyword index\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTKeywordTableIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "7ec97988-0190-4df7-b19a-e3130122298f", - "metadata": {}, - "outputs": [], - "source": [ - "# save index\n", - "index.save_to_disk('index_table.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "d94d0fe0-43c1-41cd-901b-0d748d30f1c7", - "metadata": {}, - "outputs": [], - "source": [ - "# reload index\n", - "index = GPTKeywordTableIndex.load_from_disk('index_table.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "69d4f686-6825-49cf-a113-d2fdd484de77", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: What did the author do after his time at Y Combinator?\n", - "Extracted keywords: ['y combinator', 'combinator']\n", - "> Querying with idx: 7143669651211954504: of excluding them, because there were so many s...\n", - "> Querying with idx: 4978118451876167434: browser, and then host the resulting applicatio...\n", - "> Querying with idx: 7378313280237489139: person, and from those we picked 8 to fund. The...\n", - "> Querying with idx: 2670584622494666310: it was like living in another country, and sinc...\n" - ] - } - ], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "a483514d-4ab5-489d-8b99-7250df491ce3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "After a few years, the author decided to step away from Y Combinator to focus on other projects, such as painting and writing essays. In 2013, he handed over control of Y Combinator to Sam Altman. The author's mother passed away in 2014, and after taking some time to grieve, he returned to writing essays and working on Lisp. He continued working on Lisp until 2019, when he finally completed the project.\n", - "\n", - "In 2015, the author decided to move to England with his family. They originally intended to only stay for a year, but ended up liking it so much that they remained there. The author wrote Bel while living in England. In 2019, he finally finished the project. After completing Bel, the author wrote a number of essays on various topics. He continued writing essays through 2020, but also started thinking about other things he could work on.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "aae1bea9-b534-430a-a52b-1f4414957ac9", - "metadata": {}, - "source": [ - "## Using GPT List Index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1aa8c8c1-7fce-4737-9141-d14fd37a779c", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "191caa65-a77f-4d8c-b095-4aed61300ea5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Adding chunk: \t\t\n", - "\n", - "What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before col...\n", - "> Adding chunk: only up to age 25 and already there are such co...\n", - "> Adding chunk: clear that it was even possible. To find out, w...\n", - "> Adding chunk: a name for the kind of company Viaweb was, an \"...\n", - "> Adding chunk: get their initial set of customers almost entir...\n", - "> Adding chunk: had smart people and built impressive technolog...\n", - "> [build_index_from_documents] Total token usage: 0 tokens\n" - ] - } - ], - "source": [ - "# build linked list index\n", - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTListIndex.from_documents(documents)\n", - "# save index\n", - "index.save_to_disk('index_list.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "af2d049d-518d-4ec4-b84f-1fab8aece04f", - "metadata": {}, - "outputs": [], - "source": [ - "# load index from disk\n", - "index = GPTListIndex.load_from_disk('index_list.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1b3d4bd8-7540-4c6f-8616-ab2d8c6ae2b2", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "5101b979-175f-490e-9b32-27689fe4b789", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "<b>\n", - "\n", - "After his time at Y Combinator, the author moved back to Providence to continue at RISD. However, he found that art school was not what he expected it to be and dropped out. He then moved to New York City and started writing a book on Lisp. When that didn't work out, he started a company to put art galleries online. However, that also failed. He then had the idea to start a company to build online stores, which became a success.\n", - "\n", - "The author then left his position at Yahoo to pursue painting full-time. However, he found it difficult to get back into the painting mindset and eventually returned to New York City. It was there that he had the idea to create a web application that would allow users to create and host their own web applications.</b>" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "65cfce56-853e-431b-888e-946771c3b07e", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/examples/playground/PlaygroundDemo.ipynb b/examples/playground/PlaygroundDemo.ipynb index a1b278f0ed..b73d81c932 100644 --- a/examples/playground/PlaygroundDemo.ipynb +++ b/examples/playground/PlaygroundDemo.ipynb @@ -1,423 +1,413 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "fa56fee3", - "metadata": {}, - "source": [ - "# Playground Demo\n", - "\n", - "The playground allows you to compare and contrast results from several different types of indexes." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "839c4a87", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "d726e871", - "metadata": {}, - "outputs": [], - "source": [ - "# Hide INFO logs regarding token usage, etc\n", - "import logging\n", - "logger = logging.getLogger()\n", - "logger.setLevel(logging.CRITICAL)" - ] - }, - { - "cell_type": "markdown", - "id": "40cf0773", - "metadata": {}, - "source": [ - "## Setup\n", - "\n", - "### Generate some example Documents" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fa34cd83", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import download_loader\n", - "from llama_index.indices.vector_store import GPTSimpleVectorIndex\n", - "from llama_index.indices.tree.base import GPTTreeIndex\n", - "\n", - "WikipediaReader = download_loader(\"WikipediaReader\")\n", - "\n", - "loader = WikipediaReader()\n", - "documents = loader.load_data(pages=['Berlin'])" - ] - }, - { - "cell_type": "markdown", - "id": "0c32392b", - "metadata": {}, - "source": [ - "### Create a list of any sort of indices (custom LLMs, custom embeddings, etc)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f59e6c18", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 18344 tokens\n", - "INFO:root:> Building index from nodes: 5 chunks\n" - ] - } - ], - "source": [ - "indices = [GPTSimpleVectorIndex.from_documents(documents), GPTTreeIndex.from_documents(documents)]" - ] - }, - { - "cell_type": "markdown", - "id": "827ada33", - "metadata": {}, - "source": [ - "## Using the Playground\n", - "\n", - "\n", - "### Initialize with indices" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "a04e4535", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index.playground import Playground\n", - "\n", - "playground = Playground(indices=indices)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "5f6999fc", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 110.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n" - ] + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "839c4a87", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d726e871", + "metadata": {}, + "outputs": [], + "source": [ + "# Hide INFO logs regarding token usage, etc\n", + "import logging\n", + "logger = logging.getLogger()\n", + "logger.setLevel(logging.CRITICAL)" + ] + }, + { + "cell_type": "markdown", + "id": "40cf0773", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "### Generate some example Documents" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa34cd83", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import download_loader\n", + "from llama_index.indices.vector_store import GPTSimpleVectorIndex\n", + "from llama_index.indices.tree.base import GPTTreeIndex\n", + "\n", + "WikipediaReader = download_loader(\"WikipediaReader\")\n", + "\n", + "loader = WikipediaReader()\n", + "documents = loader.load_data(pages=['Berlin'])" + ] + }, + { + "cell_type": "markdown", + "id": "0c32392b", + "metadata": {}, + "source": [ + "### Create a list of any sort of indices (custom LLMs, custom embeddings, etc)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f59e6c18", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 18344 tokens\n", + "INFO:root:> Building index from nodes: 5 chunks\n" + ] + } + ], + "source": [ + "indices = [GPTSimpleVectorIndex.from_documents(documents), GPTTreeIndex.from_documents(documents)]" + ] + }, + { + "cell_type": "markdown", + "id": "827ada33", + "metadata": {}, + "source": [ + "## Using the Playground\n", + "\n", + "\n", + "### Initialize with indices" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a04e4535", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index.playground import Playground\n", + "\n", + "playground = Playground(indices=indices)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5f6999fc", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 110.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1mQuery:\u001b[0m\n", + "What is the population of Berlin?\n", + "\n", + "Trying 10 combinations...\n", + "\n", + "\n", + "\u001b[1mGPTSimpleVectorIndex\u001b[0m, mode = default\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 90.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", + "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 90.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", + "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 80.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", + "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", + "INFO:root:> [query] Total embedding token usage: 7 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[36;1m\u001b[1;3m\n", + "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\u001b[0m\n", + "\n", + "\u001b[1mGPTSimpleVectorIndex\u001b[0m, mode = embedding\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", + "INFO:root:> [query] Total embedding token usage: 7 tokens\n", + "INFO:root:> Starting query: What is the population of Berlin?\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[36;1m\u001b[1;3m\n", + "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\u001b[0m\n", + "\n", + "\u001b[1mGPTTreeIndex\u001b[0m, mode = default\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:>[Level 0] Selected node: [1]/[1]\n", + "INFO:root:>[Level 1] Selected node: [3]/[3]\n", + "INFO:root:> [query] Total LLM token usage: 5168 tokens\n", + "INFO:root:> [query] Total embedding token usage: 0 tokens\n", + "INFO:root:> Starting query: What is the population of Berlin?\n", + "INFO:root:> Building index from nodes: 6 chunks\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33;1m\u001b[1;3mThe population of Berlin is approximately 3.7 million people.\u001b[0m\n", + "\n", + "\u001b[1mGPTTreeIndex\u001b[0m, mode = summarize\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 21617 tokens\n", + "INFO:root:> [query] Total embedding token usage: 0 tokens\n", + "INFO:root:> Starting query: What is the population of Berlin?\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33;1m\u001b[1;3m\n", + "The population of Berlin is approximately 3.7 million people.\u001b[0m\n", + "\n", + "\u001b[1mGPTTreeIndex\u001b[0m, mode = embedding\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 368 tokens\n", + "INFO:root:> [query] Total embedding token usage: 4598 tokens\n", + "INFO:root:> Starting query: What is the population of Berlin?\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33;1m\u001b[1;3mApproximately 3.7 million people.\u001b[0m\n", + "\n", + "\u001b[1mGPTTreeIndex\u001b[0m, mode = retrieve\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 1439 tokens\n", + "INFO:root:> [query] Total embedding token usage: 0 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33;1m\u001b[1;3m\n", + "The population of Berlin is 3.75 million registered inhabitants.\u001b[0m\n", + "\n", + "\n", + "Ran 6 combinations in total.\n" + ] + }, + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Index</th>\n", + " <th>Mode</th>\n", + " <th>Output</th>\n", + " <th>Duration</th>\n", + " <th>LLM Tokens</th>\n", + " <th>Embedding Tokens</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>GPTSimpleVectorIndex</td>\n", + " <td>default</td>\n", + " <td>\\nThe population of Berlin in 1949 was approxi...</td>\n", + " <td>52.319133</td>\n", + " <td>3545</td>\n", + " <td>7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>GPTSimpleVectorIndex</td>\n", + " <td>embedding</td>\n", + " <td>\\nThe population of Berlin in 1949 was approxi...</td>\n", + " <td>8.192025</td>\n", + " <td>3545</td>\n", + " <td>7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>GPTTreeIndex</td>\n", + " <td>default</td>\n", + " <td>The population of Berlin is approximately 3.7 ...</td>\n", + " <td>12.542335</td>\n", + " <td>5168</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>GPTTreeIndex</td>\n", + " <td>summarize</td>\n", + " <td>\\nThe population of Berlin is approximately 3....</td>\n", + " <td>18.665586</td>\n", + " <td>21617</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>GPTTreeIndex</td>\n", + " <td>embedding</td>\n", + " <td>Approximately 3.7 million people.</td>\n", + " <td>3.573458</td>\n", + " <td>368</td>\n", + " <td>4598</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>GPTTreeIndex</td>\n", + " <td>retrieve</td>\n", + " <td>\\nThe population of Berlin is 3.75 million reg...</td>\n", + " <td>2.269598</td>\n", + " <td>1439</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Index Mode \\\n", + "0 GPTSimpleVectorIndex default \n", + "1 GPTSimpleVectorIndex embedding \n", + "2 GPTTreeIndex default \n", + "3 GPTTreeIndex summarize \n", + "4 GPTTreeIndex embedding \n", + "5 GPTTreeIndex retrieve \n", + "\n", + " Output Duration LLM Tokens \\\n", + "0 \\nThe population of Berlin in 1949 was approxi... 52.319133 3545 \n", + "1 \\nThe population of Berlin in 1949 was approxi... 8.192025 3545 \n", + "2 The population of Berlin is approximately 3.7 ... 12.542335 5168 \n", + "3 \\nThe population of Berlin is approximately 3.... 18.665586 21617 \n", + "4 Approximately 3.7 million people. 3.573458 368 \n", + "5 \\nThe population of Berlin is 3.75 million reg... 2.269598 1439 \n", + "\n", + " Embedding Tokens \n", + "0 7 \n", + "1 7 \n", + "2 0 \n", + "3 0 \n", + "4 4598 \n", + "5 0 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "playground.compare(\"What is the population of Berlin?\")" + ] + }, + { + "cell_type": "markdown", + "id": "8829a829", + "metadata": {}, + "source": [ + "### Initialize with Documents" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dfbc8ade", + "metadata": {}, + "outputs": [], + "source": [ + "# Uses documents in a preset list of indices\n", + "playground = Playground.from_docs(documents=documents)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1mQuery:\u001b[0m\n", - "What is the population of Berlin?\n", - "\n", - "Trying 10 combinations...\n", - "\n", - "\n", - "\u001b[1mGPTSimpleVectorIndex\u001b[0m, mode = default\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 90.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", - "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 90.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", - "INFO:openai:error_code=None error_message='Rate limit reached for default-global-with-image-limits in organization org-ehTdCqs0FpsxuTTwsJIlNSdZ on requests per min. Limit: 60.000000 / min. Current: 80.000000 / min. Contact support@openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method.' error_param=None error_type=requests message='OpenAI API error received' stream_error=False\n", - "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", - "INFO:root:> [query] Total embedding token usage: 7 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[36;1m\u001b[1;3m\n", - "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\u001b[0m\n", - "\n", - "\u001b[1mGPTSimpleVectorIndex\u001b[0m, mode = embedding\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 3545 tokens\n", - "INFO:root:> [query] Total embedding token usage: 7 tokens\n", - "INFO:root:> Starting query: What is the population of Berlin?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[36;1m\u001b[1;3m\n", - "The population of Berlin in 1949 was approximately 2.2 million inhabitants. After the fall of the Berlin Wall in 1989, the population of Berlin increased to approximately 3.7 million inhabitants.\u001b[0m\n", - "\n", - "\u001b[1mGPTTreeIndex\u001b[0m, mode = default\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:>[Level 0] Selected node: [1]/[1]\n", - "INFO:root:>[Level 1] Selected node: [3]/[3]\n", - "INFO:root:> [query] Total LLM token usage: 5168 tokens\n", - "INFO:root:> [query] Total embedding token usage: 0 tokens\n", - "INFO:root:> Starting query: What is the population of Berlin?\n", - "INFO:root:> Building index from nodes: 6 chunks\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33;1m\u001b[1;3mThe population of Berlin is approximately 3.7 million people.\u001b[0m\n", - "\n", - "\u001b[1mGPTTreeIndex\u001b[0m, mode = summarize\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 21617 tokens\n", - "INFO:root:> [query] Total embedding token usage: 0 tokens\n", - "INFO:root:> Starting query: What is the population of Berlin?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33;1m\u001b[1;3m\n", - "The population of Berlin is approximately 3.7 million people.\u001b[0m\n", - "\n", - "\u001b[1mGPTTreeIndex\u001b[0m, mode = embedding\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 368 tokens\n", - "INFO:root:> [query] Total embedding token usage: 4598 tokens\n", - "INFO:root:> Starting query: What is the population of Berlin?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33;1m\u001b[1;3mApproximately 3.7 million people.\u001b[0m\n", - "\n", - "\u001b[1mGPTTreeIndex\u001b[0m, mode = retrieve\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 1439 tokens\n", - "INFO:root:> [query] Total embedding token usage: 0 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33;1m\u001b[1;3m\n", - "The population of Berlin is 3.75 million registered inhabitants.\u001b[0m\n", - "\n", - "\n", - "Ran 6 combinations in total.\n" - ] - }, - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Index</th>\n", - " <th>Mode</th>\n", - " <th>Output</th>\n", - " <th>Duration</th>\n", - " <th>LLM Tokens</th>\n", - " <th>Embedding Tokens</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>GPTSimpleVectorIndex</td>\n", - " <td>default</td>\n", - " <td>\\nThe population of Berlin in 1949 was approxi...</td>\n", - " <td>52.319133</td>\n", - " <td>3545</td>\n", - " <td>7</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>GPTSimpleVectorIndex</td>\n", - " <td>embedding</td>\n", - " <td>\\nThe population of Berlin in 1949 was approxi...</td>\n", - " <td>8.192025</td>\n", - " <td>3545</td>\n", - " <td>7</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>GPTTreeIndex</td>\n", - " <td>default</td>\n", - " <td>The population of Berlin is approximately 3.7 ...</td>\n", - " <td>12.542335</td>\n", - " <td>5168</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>GPTTreeIndex</td>\n", - " <td>summarize</td>\n", - " <td>\\nThe population of Berlin is approximately 3....</td>\n", - " <td>18.665586</td>\n", - " <td>21617</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>GPTTreeIndex</td>\n", - " <td>embedding</td>\n", - " <td>Approximately 3.7 million people.</td>\n", - " <td>3.573458</td>\n", - " <td>368</td>\n", - " <td>4598</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>GPTTreeIndex</td>\n", - " <td>retrieve</td>\n", - " <td>\\nThe population of Berlin is 3.75 million reg...</td>\n", - " <td>2.269598</td>\n", - " <td>1439</td>\n", - " <td>0</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Index Mode \\\n", - "0 GPTSimpleVectorIndex default \n", - "1 GPTSimpleVectorIndex embedding \n", - "2 GPTTreeIndex default \n", - "3 GPTTreeIndex summarize \n", - "4 GPTTreeIndex embedding \n", - "5 GPTTreeIndex retrieve \n", - "\n", - " Output Duration LLM Tokens \\\n", - "0 \\nThe population of Berlin in 1949 was approxi... 52.319133 3545 \n", - "1 \\nThe population of Berlin in 1949 was approxi... 8.192025 3545 \n", - "2 The population of Berlin is approximately 3.7 ... 12.542335 5168 \n", - "3 \\nThe population of Berlin is approximately 3.... 18.665586 21617 \n", - "4 Approximately 3.7 million people. 3.573458 368 \n", - "5 \\nThe population of Berlin is 3.75 million reg... 2.269598 1439 \n", - "\n", - " Embedding Tokens \n", - "0 7 \n", - "1 7 \n", - "2 0 \n", - "3 0 \n", - "4 4598 \n", - "5 0 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "playground.compare(\"What is the population of Berlin?\")" - ] - }, - { - "cell_type": "markdown", - "id": "8829a829", - "metadata": {}, - "source": [ - "### Initialize with Documents" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dfbc8ade", - "metadata": {}, - "outputs": [], - "source": [ - "# Uses documents in a preset list of indices\n", - "playground = Playground.from_docs(documents=documents)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb b/examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb index c834035ce4..70eb75082d 100644 --- a/examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb +++ b/examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb @@ -1,1708 +1,1700 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "28c67608", - "metadata": {}, - "source": [ - "# Test NYC Wiki Benchmark GPT4" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "9080b39e", - "metadata": {}, - "outputs": [], - "source": [ - "import logging, sys\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", - "\n", - "# Uncomment if you want to temporarily disable logger\n", - "logging.disable(sys.maxsize)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "7de92ce3", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: only necessary for querying with `use_async=True` in notebook\n", - "import nest_asyncio\n", - "nest_asyncio.apply()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index import GPTTreeIndex, SimpleDirectoryReader, LLMPredictor, GPTSimpleVectorIndex, GPTListIndex, Prompt, ServiceContext\n", - "from gpt_index.indices.base import BaseGPTIndex\n", - "from gpt_index.langchain_helpers.text_splitter import TokenTextSplitter\n", - "from langchain.chat_models import ChatOpenAI\n", - "from langchain.llms import OpenAI\n", - "from gpt_index.response.schema import Response\n", - "import pandas as pd\n", - "from typing import Tuple" - ] - }, - { - "cell_type": "markdown", - "id": "707662e5", - "metadata": {}, - "source": [ - "## Setup data" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", - "metadata": {}, - "outputs": [], - "source": [ - "# fetch \"New York City\" page from Wikipedia\n", - "from pathlib import Path\n", - "\n", - "import requests\n", - "response = requests.get(\n", - " 'https://en.wikipedia.org/w/api.php',\n", - " params={\n", - " 'action': 'query',\n", - " 'format': 'json',\n", - " 'titles': 'New York City',\n", - " 'prop': 'extracts',\n", - " # 'exintro': True,\n", - " 'explaintext': True,\n", - " }\n", - ").json()\n", - "page = next(iter(response['query']['pages'].values()))\n", - "nyc_text = page['extract']\n", - "\n", - "data_path = Path('data')\n", - "if not data_path.exists():\n", - " Path.mkdir(data_path)\n", - "\n", - "with open('data/nyc_text.txt', 'w') as fp:\n", - " fp.write(nyc_text)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "523fbebe-6e79-4d7b-b400-188b711a0e8f", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DEBUG:gpt_index.readers.file.base:> [SimpleDirectoryReader] Total files added: 1\n", - "> [SimpleDirectoryReader] Total files added: 1\n" - ] - } - ], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()" - ] - }, - { - "cell_type": "markdown", - "id": "f4a269bd", - "metadata": {}, - "source": [ - "## Setup benchmark" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "62f01ddf", - "metadata": {}, - "outputs": [], - "source": [ - "from dataclasses import dataclass\n", - "from typing import List" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "4ff13cd4", - "metadata": {}, - "outputs": [], - "source": [ - "@dataclass\n", - "class TestCase:\n", - " query: str \n", - " must_contain: List[str]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9c653b72", - "metadata": {}, - "outputs": [], - "source": [ - "@dataclass\n", - "class TestOutcome:\n", - " test: TestCase\n", - " response: Response\n", - " \n", - " @property\n", - " def is_correct_response(self) -> bool:\n", - " is_correct = True\n", - " for answer in self.test.must_contain:\n", - " if answer not in self.response.response:\n", - " is_correct = False\n", - " return is_correct\n", - " \n", - " @property\n", - " def is_correct_source(self) -> bool:\n", - " is_correct = True\n", - " for answer in self.test.must_contain:\n", - " if all(answer not in node.source_text for node in self.response.source_nodes):\n", - " is_correct = False\n", - " return is_correct" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "b9cd18ae", - "metadata": {}, - "outputs": [], - "source": [ - "class Benchmark:\n", - " def __init__(self, tests: List[TestCase]) -> None:\n", - " self._tests = tests\n", - " \n", - " def test(self, index: BaseGPTIndex, llm_predictor: LLMPredictor, **kwargs) -> List[TestOutcome]:\n", - " outcomes: List[TestOutcome] = []\n", - " service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", - " for test in self._tests:\n", - " response = index.query(\n", - " test.query,\n", - " service_context=service_context,\n", - " **kwargs\n", - " )\n", - " outcome = TestOutcome(test=test, response=response)\n", - " outcomes.append(outcome)\n", - " return outcomes" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "8edad985", - "metadata": {}, - "outputs": [], - "source": [ - "def analyze_outcome(outcomes: List[TestOutcome]) -> None:\n", - " rows = []\n", - " for outcome in outcomes:\n", - " row = [outcome.test.query, outcome.is_correct_response, outcome.is_correct_source]\n", - " rows.append(row)\n", - " df = pd.DataFrame(rows, columns=['Test Query', 'Correct Response', 'Correct Source'])\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "4bc38077", - "metadata": {}, - "outputs": [], - "source": [ - "test_battle = TestCase(\n", - " query=\"What battles took place in New York City in the American Revolution?\",\n", - " must_contain=[\"Battle of Long Island\"]\n", - ")\n", - "\n", - "test_mayor = TestCase(\n", - " query='Who was elected as the mayor after the Great Depression?',\n", - " must_contain=[\"Fiorello La Guardia\"]\n", - ")\n", - "\n", - "test_tourists = TestCase(\n", - " query='How many tourists visited New York City in 2019?',\n", - " must_contain=['66.6 million']\n", - ")\n", - "test_airport = TestCase(\n", - " query='What are the airports in New York City?',\n", - " must_contain=['LaGuardia Airport']\n", - ")\n", - "test_visit = TestCase(\n", - " query='When was the first documented visit into New York Harbor?',\n", - " must_contain=['1524']\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "f159dadb", - "metadata": {}, - "outputs": [], - "source": [ - "bm = Benchmark([\n", - " test_battle,\n", - " test_mayor,\n", - " test_tourists,\n", - " test_airport,\n", - " test_visit,\n", - "])" - ] - }, - { - "cell_type": "markdown", - "id": "65ddbd56", - "metadata": {}, - "source": [ - "## LLM based evaluation" - ] - }, - { - "cell_type": "code", - "execution_count": 592, - "id": "ed175de5", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index.prompts.prompt_type import PromptType\n", - "\n", - "EVAL_PROMPT_TMPL = (\n", - " \"Given the question below. \\n\"\n", - " \"---------------------\\n\"\n", - " \"{query_str}\"\n", - " \"\\n---------------------\\n\"\n", - " \"Decide if the following retreived context is relevant. \\n\"\n", - " \"\\n---------------------\\n\"\n", - " \"{context_str}\"\n", - " \"\\n---------------------\\n\"\n", - " \"Then decide if the answer is correct. \\n\"\n", - " \"\\n---------------------\\n\"\n", - " \"{answer_str}\"\n", - " \"\\n---------------------\\n\"\n", - " \"Answer in the following format:\\n\"\n", - " \"'Context is relevant: <True>\\nAnswer is correct: <True>' \"\n", - " \"and explain why.\"\n", - ")\n", - "\n", - "class EvalPrompt(Prompt):\n", - " prompt_type: PromptType = PromptType.CUSTOM\n", - " input_variables: List[str] = [\"query_str\", 'context_str', 'answer_str']\n", - "\n", - "DEFAULT_EVAL_PROMPT = EvalPrompt(EVAL_PROMPT_TMPL)" - ] - }, - { - "cell_type": "code", - "execution_count": 593, - "id": "93c498b6", - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "def extract_eval_result(result_str: str):\n", - " boolean_pattern = r\"(True|False)\"\n", - " matches = re.findall(boolean_pattern, result_str)\n", - " return [match == \"True\" for match in matches] " - ] - }, - { - "cell_type": "code", - "execution_count": 594, - "id": "4c8109c3", - "metadata": {}, - "outputs": [], - "source": [ - "def analyze_outcome_llm_single(outcome: TestOutcome, llm_predictor: LLMPredictor) -> Tuple[bool, bool]:\n", - " try:\n", - " source_text = outcome.response.source_nodes[0].source_text\n", - " except:\n", - " source_text = \"Failed to retrieve any context\"\n", - " result_str, _ = llm_predictor.predict(\n", - " DEFAULT_EVAL_PROMPT,\n", - " query_str=outcome.test.query,\n", - " context_str=source_text,\n", - " answer_str=outcome.response.response\n", - " )\n", - " is_context_relevant, is_answer_correct = extract_eval_result(result_str)\n", - " return is_answer_correct, is_context_relevant, result_str\n", - "\n", - "def analyze_outcome_llm(outcomes: List[TestOutcome], llm_predictor: LLMPredictor) -> None:\n", - " rows = []\n", - " for outcome in outcomes:\n", - " is_correct_response, is_correct_source, result_str = analyze_outcome_llm_single(outcome, llm_predictor)\n", - " row = [outcome.test.query, is_correct_response, is_correct_source, result_str]\n", - " rows.append(row)\n", - " df = pd.DataFrame(rows, columns=['Test Query', 'Correct Response (LLM)', 'Correct Source (LLM)', 'Eval (LLM)'])\n", - " return df" - ] - }, - { - "cell_type": "markdown", - "id": "5a9f43a6", - "metadata": {}, - "source": [ - "## Build Indices" - ] - }, - { - "cell_type": "code", - "execution_count": 643, - "id": "790bad05", - "metadata": {}, - "outputs": [], - "source": [ - "vector_index = GPTSimpleVectorIndex.from_documents(\n", - " documents, \n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 473, - "id": "64c970e0", - "metadata": {}, - "outputs": [], - "source": [ - "list_index = GPTListIndex.from_documents(\n", - " documents, \n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 468, - "id": "bacc4f1c", - "metadata": {}, - "outputs": [], - "source": [ - "tree_index = GPTTreeIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 632, - "id": "a600d4de", - "metadata": {}, - "outputs": [], - "source": [ - "# Save indices\n", - "vector_index.save_to_disk('vector_index.json')\n", - "tree_index.save_to_disk('tree_index.json')\n", - "list_index.save_to_disk('list_index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", - "metadata": {}, - "outputs": [], - "source": [ - "# Load indices\n", - "tree_index = GPTTreeIndex.load_from_disk('tree_index.json')\n", - "list_index = GPTListIndex.load_from_disk('list_index.json')\n", - "vector_index = GPTSimpleVectorIndex.load_from_disk('vector_index.json')" - ] - }, - { - "cell_type": "markdown", - "id": "5b2e7fdd", - "metadata": {}, - "source": [ - "## Create LLMPredictors" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "4766ac56-ac8d-4f33-b994-6901964241ea", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# gpt-4\n", - "llm_predictor_gpt4 = LLMPredictor(\n", - " llm=ChatOpenAI(temperature=0, model_name=\"gpt-4\")\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "id": "c8692cf6", - "metadata": {}, - "outputs": [], - "source": [ - "# gpt-3 (text-davinci-003)\n", - "llm_predictor_gpt3 = LLMPredictor(llm=OpenAI(temperature=0, model_name=\"text-davinci-003\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "fb74ec62", - "metadata": {}, - "outputs": [], - "source": [ - "# chatgpt (gpt-3.5-turbo)\n", - "llm_predictor_chatgpt = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-3.5-turbo\"))" - ] - }, - { - "cell_type": "markdown", - "id": "1354f668", - "metadata": {}, - "source": [ - "## Benchmarking " - ] - }, - { - "cell_type": "markdown", - "id": "01124a3f", - "metadata": {}, - "source": [ - "### Tree Index + GPT4" - ] - }, - { - "cell_type": "code", - "execution_count": 583, - "id": "6f418554", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_tree_gpt4 = bm.test(tree_index, llm_predictor_gpt4)" - ] - }, - { - "cell_type": "code", - "execution_count": 584, - "id": "de98ceba", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... False \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? False \n", - "4 When was the first documented visit into New Y... False \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False " - ] - }, - "execution_count": 584, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_tree_gpt4)" - ] - }, - { - "cell_type": "markdown", - "id": "f5ef33a0", - "metadata": {}, - "source": [ - "### Tree Index + GPT3" - ] - }, - { - "cell_type": "code", - "execution_count": 549, - "id": "ba871d2a", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_tree_gpt3 = bm.test(tree_index, llm_predictor_gpt3)" - ] - }, - { - "cell_type": "code", - "execution_count": 550, - "id": "7d4c6930", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... False \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 False \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False " - ] - }, - "execution_count": 550, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_tree_gpt3)" - ] - }, - { - "cell_type": "markdown", - "id": "30a9ba34", - "metadata": {}, - "source": [ - "### List Index + GPT4" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "bc0f05d1", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "outcomes_list_gpt4 = bm.test(list_index, llm_predictor_gpt4, response_mode=\"tree_summarize\", use_async=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "2d2e879d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... False \n", - "1 Who was elected as the mayor after the Great D... False \n", - "2 How many tourists visited New York City in 2019? True \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_list_gpt4)" - ] - }, - { - "cell_type": "markdown", - "id": "8cba793c", - "metadata": {}, - "source": [ - "### List Index + GPT3" - ] - }, - { - "cell_type": "code", - "execution_count": 501, - "id": "66cfa3fa", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_list_gpt3 = bm.test(list_index, llm_predictor_gpt3, response_mode=\"tree_summarize\", use_async=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 502, - "id": "06bc98d8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor during the Great ...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor during the Great ... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 502, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_list_gpt3)" - ] - }, - { - "cell_type": "markdown", - "id": "c4d0b3eb", - "metadata": {}, - "source": [ - "### List Index + ChatGPT" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "f146c74e", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_list_chatgpt = bm.test(list_index, llm_predictor_chatgpt, response_mode=\"tree_summarize\", use_async=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "8eb9d392", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... False \n", - "1 Who was elected as the mayor after the Great D... False \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_list_chatgpt)" - ] - }, - { - "cell_type": "markdown", - "id": "38fc1438", - "metadata": {}, - "source": [ - "### Vector Store Index + GPT4 " - ] - }, - { - "cell_type": "code", - "execution_count": 487, - "id": "5349d1e7", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_vector_gpt4 = bm.test(vector_index, llm_predictor_gpt4)" - ] - }, - { - "cell_type": "code", - "execution_count": 488, - "id": "7fc53e19", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor during the Great ...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor during the Great ... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 True \n", - "2 False \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 488, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_vector_gpt4)" - ] - }, - { - "cell_type": "markdown", - "id": "70eb711f", - "metadata": {}, - "source": [ - "### Vector Store Index + GPT3" - ] - }, - { - "cell_type": "code", - "execution_count": 644, - "id": "e35ebdf9", - "metadata": {}, - "outputs": [], - "source": [ - "outcomes_vector_gpt3 = bm.test(vector_index, llm_predictor_gpt3)" - ] - }, - { - "cell_type": "code", - "execution_count": 645, - "id": "95c49697", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False " - ] - }, - "execution_count": 645, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_vector_gpt3)" - ] - }, - { - "cell_type": "markdown", - "id": "a36ba2ee", - "metadata": {}, - "source": [ - "## LLM based Evaluation" - ] - }, - { - "cell_type": "code", - "execution_count": 646, - "id": "59ff561c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response</th>\n", - " <th>Correct Source</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source \n", - "0 True \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False " - ] - }, - "execution_count": 646, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analyze_outcome(outcomes_vector_gpt3)" - ] - }, - { - "cell_type": "code", - "execution_count": 647, - "id": "e4ffaca6", - "metadata": {}, - "outputs": [], - "source": [ - "eval_gpt4 = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_gpt4)" - ] - }, - { - "cell_type": "code", - "execution_count": 657, - "id": "85c4e415", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response (LLM)</th>\n", - " <th>Correct Source (LLM)</th>\n", - " <th>Eval (LLM)</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>Context is relevant: True\\nAnswer is correct: ...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response (LLM) \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... True \n", - "2 How many tourists visited New York City in 2019? True \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source (LLM) Eval (LLM) \n", - "0 True Context is relevant: True\\nAnswer is correct: ... \n", - "1 False Context is relevant: False\\nAnswer is correct:... \n", - "2 False Context is relevant: False\\nAnswer is correct:... \n", - "3 False Context is relevant: False\\nAnswer is correct:... \n", - "4 False Context is relevant: False\\nAnswer is correct:... " - ] - }, - "execution_count": 657, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eval_gpt4" - ] - }, - { - "cell_type": "code", - "execution_count": 651, - "id": "3efb66d6", - "metadata": {}, - "outputs": [], - "source": [ - "eval_chatgpt = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_chatgpt)" - ] - }, - { - "cell_type": "code", - "execution_count": 652, - "id": "4c452767", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response (LLM)</th>\n", - " <th>Correct Source (LLM)</th>\n", - " <th>Eval (LLM)</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>False</td>\n", - " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>False</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response (LLM) \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... False \n", - "\n", - " Correct Source (LLM) Eval (LLM) \n", - "0 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", - "1 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", - "2 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", - "3 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", - "4 True \\n\\nContext is relevant: True\\nAnswer is corre... " - ] - }, - "execution_count": 652, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eval_chatgpt" - ] - }, - { - "cell_type": "code", - "execution_count": 649, - "id": "61e8dad2", - "metadata": {}, - "outputs": [], - "source": [ - "eval_gpt3 = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_gpt3)" - ] - }, - { - "cell_type": "code", - "execution_count": 650, - "id": "170400c3", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>Test Query</th>\n", - " <th>Correct Response (LLM)</th>\n", - " <th>Correct Source (LLM)</th>\n", - " <th>Eval (LLM)</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>What battles took place in New York City in th...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>Who was elected as the mayor after the Great D...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>How many tourists visited New York City in 2019?</td>\n", - " <td>False</td>\n", - " <td>False</td>\n", - " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>What are the airports in New York City?</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>When was the first documented visit into New Y...</td>\n", - " <td>True</td>\n", - " <td>True</td>\n", - " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " Test Query Correct Response (LLM) \\\n", - "0 What battles took place in New York City in th... True \n", - "1 Who was elected as the mayor after the Great D... True \n", - "2 How many tourists visited New York City in 2019? False \n", - "3 What are the airports in New York City? True \n", - "4 When was the first documented visit into New Y... True \n", - "\n", - " Correct Source (LLM) Eval (LLM) \n", - "0 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", - "1 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", - "2 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", - "3 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", - "4 True \\n\\nContext is relevant: True\\nAnswer is corre... " - ] - }, - "execution_count": 650, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "eval_gpt3" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "cell_type": "code", + "execution_count": 17, + "id": "9080b39e", + "metadata": {}, + "outputs": [], + "source": [ + "import logging, sys\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", + "\n", + "# Uncomment if you want to temporarily disable logger\n", + "logging.disable(sys.maxsize)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7de92ce3", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: only necessary for querying with `use_async=True` in notebook\n", + "import nest_asyncio\n", + "nest_asyncio.apply()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index import GPTTreeIndex, SimpleDirectoryReader, LLMPredictor, GPTSimpleVectorIndex, GPTListIndex, Prompt, ServiceContext\n", + "from gpt_index.indices.base import BaseGPTIndex\n", + "from gpt_index.langchain_helpers.text_splitter import TokenTextSplitter\n", + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.llms import OpenAI\n", + "from gpt_index.response.schema import Response\n", + "import pandas as pd\n", + "from typing import Tuple" + ] + }, + { + "cell_type": "markdown", + "id": "707662e5", + "metadata": {}, + "source": [ + "# Setup data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", + "metadata": {}, + "outputs": [], + "source": [ + "# fetch \"New York City\" page from Wikipedia\n", + "from pathlib import Path\n", + "\n", + "import requests\n", + "response = requests.get(\n", + " 'https://en.wikipedia.org/w/api.php',\n", + " params={\n", + " 'action': 'query',\n", + " 'format': 'json',\n", + " 'titles': 'New York City',\n", + " 'prop': 'extracts',\n", + " # 'exintro': True,\n", + " 'explaintext': True,\n", + " }\n", + ").json()\n", + "page = next(iter(response['query']['pages'].values()))\n", + "nyc_text = page['extract']\n", + "\n", + "data_path = Path('data')\n", + "if not data_path.exists():\n", + " Path.mkdir(data_path)\n", + "\n", + "with open('data/nyc_text.txt', 'w') as fp:\n", + " fp.write(nyc_text)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "523fbebe-6e79-4d7b-b400-188b711a0e8f", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DEBUG:gpt_index.readers.file.base:> [SimpleDirectoryReader] Total files added: 1\n", + "> [SimpleDirectoryReader] Total files added: 1\n" + ] + } + ], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "f4a269bd", + "metadata": {}, + "source": [ + "# Setup benchmark" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "62f01ddf", + "metadata": {}, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from typing import List" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4ff13cd4", + "metadata": {}, + "outputs": [], + "source": [ + "@dataclass\n", + "class TestCase:\n", + " query: str \n", + " must_contain: List[str]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9c653b72", + "metadata": {}, + "outputs": [], + "source": [ + "@dataclass\n", + "class TestOutcome:\n", + " test: TestCase\n", + " response: Response\n", + " \n", + " @property\n", + " def is_correct_response(self) -> bool:\n", + " is_correct = True\n", + " for answer in self.test.must_contain:\n", + " if answer not in self.response.response:\n", + " is_correct = False\n", + " return is_correct\n", + " \n", + " @property\n", + " def is_correct_source(self) -> bool:\n", + " is_correct = True\n", + " for answer in self.test.must_contain:\n", + " if all(answer not in node.source_text for node in self.response.source_nodes):\n", + " is_correct = False\n", + " return is_correct" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b9cd18ae", + "metadata": {}, + "outputs": [], + "source": [ + "class Benchmark:\n", + " def __init__(self, tests: List[TestCase]) -> None:\n", + " self._tests = tests\n", + " \n", + " def test(self, index: BaseGPTIndex, llm_predictor: LLMPredictor, **kwargs) -> List[TestOutcome]:\n", + " outcomes: List[TestOutcome] = []\n", + " service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", + " for test in self._tests:\n", + " response = index.query(\n", + " test.query,\n", + " service_context=service_context,\n", + " **kwargs\n", + " )\n", + " outcome = TestOutcome(test=test, response=response)\n", + " outcomes.append(outcome)\n", + " return outcomes" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8edad985", + "metadata": {}, + "outputs": [], + "source": [ + "def analyze_outcome(outcomes: List[TestOutcome]) -> None:\n", + " rows = []\n", + " for outcome in outcomes:\n", + " row = [outcome.test.query, outcome.is_correct_response, outcome.is_correct_source]\n", + " rows.append(row)\n", + " df = pd.DataFrame(rows, columns=['Test Query', 'Correct Response', 'Correct Source'])\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4bc38077", + "metadata": {}, + "outputs": [], + "source": [ + "test_battle = TestCase(\n", + " query=\"What battles took place in New York City in the American Revolution?\",\n", + " must_contain=[\"Battle of Long Island\"]\n", + ")\n", + "\n", + "test_mayor = TestCase(\n", + " query='Who was elected as the mayor after the Great Depression?',\n", + " must_contain=[\"Fiorello La Guardia\"]\n", + ")\n", + "\n", + "test_tourists = TestCase(\n", + " query='How many tourists visited New York City in 2019?',\n", + " must_contain=['66.6 million']\n", + ")\n", + "test_airport = TestCase(\n", + " query='What are the airports in New York City?',\n", + " must_contain=['LaGuardia Airport']\n", + ")\n", + "test_visit = TestCase(\n", + " query='When was the first documented visit into New York Harbor?',\n", + " must_contain=['1524']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f159dadb", + "metadata": {}, + "outputs": [], + "source": [ + "bm = Benchmark([\n", + " test_battle,\n", + " test_mayor,\n", + " test_tourists,\n", + " test_airport,\n", + " test_visit,\n", + "])" + ] + }, + { + "cell_type": "markdown", + "id": "65ddbd56", + "metadata": {}, + "source": [ + "# LLM based evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 592, + "id": "ed175de5", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index.prompts.prompt_type import PromptType\n", + "\n", + "EVAL_PROMPT_TMPL = (\n", + " \"Given the question below. \\n\"\n", + " \"---------------------\\n\"\n", + " \"{query_str}\"\n", + " \"\\n---------------------\\n\"\n", + " \"Decide if the following retreived context is relevant. \\n\"\n", + " \"\\n---------------------\\n\"\n", + " \"{context_str}\"\n", + " \"\\n---------------------\\n\"\n", + " \"Then decide if the answer is correct. \\n\"\n", + " \"\\n---------------------\\n\"\n", + " \"{answer_str}\"\n", + " \"\\n---------------------\\n\"\n", + " \"Answer in the following format:\\n\"\n", + " \"'Context is relevant: <True>\\nAnswer is correct: <True>' \"\n", + " \"and explain why.\"\n", + ")\n", + "\n", + "class EvalPrompt(Prompt):\n", + " prompt_type: PromptType = PromptType.CUSTOM\n", + " input_variables: List[str] = [\"query_str\", 'context_str', 'answer_str']\n", + "\n", + "DEFAULT_EVAL_PROMPT = EvalPrompt(EVAL_PROMPT_TMPL)" + ] + }, + { + "cell_type": "code", + "execution_count": 593, + "id": "93c498b6", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "def extract_eval_result(result_str: str):\n", + " boolean_pattern = r\"(True|False)\"\n", + " matches = re.findall(boolean_pattern, result_str)\n", + " return [match == \"True\" for match in matches] " + ] + }, + { + "cell_type": "code", + "execution_count": 594, + "id": "4c8109c3", + "metadata": {}, + "outputs": [], + "source": [ + "def analyze_outcome_llm_single(outcome: TestOutcome, llm_predictor: LLMPredictor) -> Tuple[bool, bool]:\n", + " try:\n", + " source_text = outcome.response.source_nodes[0].source_text\n", + " except:\n", + " source_text = \"Failed to retrieve any context\"\n", + " result_str, _ = llm_predictor.predict(\n", + " DEFAULT_EVAL_PROMPT,\n", + " query_str=outcome.test.query,\n", + " context_str=source_text,\n", + " answer_str=outcome.response.response\n", + " )\n", + " is_context_relevant, is_answer_correct = extract_eval_result(result_str)\n", + " return is_answer_correct, is_context_relevant, result_str\n", + "\n", + "def analyze_outcome_llm(outcomes: List[TestOutcome], llm_predictor: LLMPredictor) -> None:\n", + " rows = []\n", + " for outcome in outcomes:\n", + " is_correct_response, is_correct_source, result_str = analyze_outcome_llm_single(outcome, llm_predictor)\n", + " row = [outcome.test.query, is_correct_response, is_correct_source, result_str]\n", + " rows.append(row)\n", + " df = pd.DataFrame(rows, columns=['Test Query', 'Correct Response (LLM)', 'Correct Source (LLM)', 'Eval (LLM)'])\n", + " return df" + ] + }, + { + "cell_type": "markdown", + "id": "5a9f43a6", + "metadata": {}, + "source": [ + "# Build Indices" + ] + }, + { + "cell_type": "code", + "execution_count": 643, + "id": "790bad05", + "metadata": {}, + "outputs": [], + "source": [ + "vector_index = GPTSimpleVectorIndex.from_documents(\n", + " documents, \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 473, + "id": "64c970e0", + "metadata": {}, + "outputs": [], + "source": [ + "list_index = GPTListIndex.from_documents(\n", + " documents, \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 468, + "id": "bacc4f1c", + "metadata": {}, + "outputs": [], + "source": [ + "tree_index = GPTTreeIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": 632, + "id": "a600d4de", + "metadata": {}, + "outputs": [], + "source": [ + "# Save indices\n", + "vector_index.save_to_disk('vector_index.json')\n", + "tree_index.save_to_disk('tree_index.json')\n", + "list_index.save_to_disk('list_index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", + "metadata": {}, + "outputs": [], + "source": [ + "# Load indices\n", + "tree_index = GPTTreeIndex.load_from_disk('tree_index.json')\n", + "list_index = GPTListIndex.load_from_disk('list_index.json')\n", + "vector_index = GPTSimpleVectorIndex.load_from_disk('vector_index.json')" + ] + }, + { + "cell_type": "markdown", + "id": "5b2e7fdd", + "metadata": {}, + "source": [ + "# Create LLMPredictors" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4766ac56-ac8d-4f33-b994-6901964241ea", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# gpt-4\n", + "llm_predictor_gpt4 = LLMPredictor(\n", + " llm=ChatOpenAI(temperature=0, model_name=\"gpt-4\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "id": "c8692cf6", + "metadata": {}, + "outputs": [], + "source": [ + "# gpt-3 (text-davinci-003)\n", + "llm_predictor_gpt3 = LLMPredictor(llm=OpenAI(temperature=0, model_name=\"text-davinci-003\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fb74ec62", + "metadata": {}, + "outputs": [], + "source": [ + "# chatgpt (gpt-3.5-turbo)\n", + "llm_predictor_chatgpt = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-3.5-turbo\"))" + ] + }, + { + "cell_type": "markdown", + "id": "1354f668", + "metadata": {}, + "source": [ + "# Benchmarking " + ] + }, + { + "cell_type": "markdown", + "id": "01124a3f", + "metadata": {}, + "source": [ + "### Tree Index + GPT4" + ] + }, + { + "cell_type": "code", + "execution_count": 583, + "id": "6f418554", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_tree_gpt4 = bm.test(tree_index, llm_predictor_gpt4)" + ] + }, + { + "cell_type": "code", + "execution_count": 584, + "id": "de98ceba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... False \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? False \n", + "4 When was the first documented visit into New Y... False \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False " + ] + }, + "execution_count": 584, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_tree_gpt4)" + ] + }, + { + "cell_type": "markdown", + "id": "f5ef33a0", + "metadata": {}, + "source": [ + "### Tree Index + GPT3" + ] + }, + { + "cell_type": "code", + "execution_count": 549, + "id": "ba871d2a", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_tree_gpt3 = bm.test(tree_index, llm_predictor_gpt3)" + ] + }, + { + "cell_type": "code", + "execution_count": 550, + "id": "7d4c6930", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... False \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False " + ] + }, + "execution_count": 550, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_tree_gpt3)" + ] + }, + { + "cell_type": "markdown", + "id": "30a9ba34", + "metadata": {}, + "source": [ + "### List Index + GPT4" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bc0f05d1", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "outcomes_list_gpt4 = bm.test(list_index, llm_predictor_gpt4, response_mode=\"tree_summarize\", use_async=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "2d2e879d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... False \n", + "1 Who was elected as the mayor after the Great D... False \n", + "2 How many tourists visited New York City in 2019? True \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_list_gpt4)" + ] + }, + { + "cell_type": "markdown", + "id": "8cba793c", + "metadata": {}, + "source": [ + "### List Index + GPT3" + ] + }, + { + "cell_type": "code", + "execution_count": 501, + "id": "66cfa3fa", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_list_gpt3 = bm.test(list_index, llm_predictor_gpt3, response_mode=\"tree_summarize\", use_async=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 502, + "id": "06bc98d8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor during the Great ...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor during the Great ... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 502, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_list_gpt3)" + ] + }, + { + "cell_type": "markdown", + "id": "c4d0b3eb", + "metadata": {}, + "source": [ + "### List Index + ChatGPT" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f146c74e", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_list_chatgpt = bm.test(list_index, llm_predictor_chatgpt, response_mode=\"tree_summarize\", use_async=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "8eb9d392", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... False \n", + "1 Who was elected as the mayor after the Great D... False \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_list_chatgpt)" + ] + }, + { + "cell_type": "markdown", + "id": "38fc1438", + "metadata": {}, + "source": [ + "### Vector Store Index + GPT4 " + ] + }, + { + "cell_type": "code", + "execution_count": 487, + "id": "5349d1e7", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_vector_gpt4 = bm.test(vector_index, llm_predictor_gpt4)" + ] + }, + { + "cell_type": "code", + "execution_count": 488, + "id": "7fc53e19", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor during the Great ...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor during the Great ... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 True \n", + "2 False \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 488, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_vector_gpt4)" + ] + }, + { + "cell_type": "markdown", + "id": "70eb711f", + "metadata": {}, + "source": [ + "### Vector Store Index + GPT3" + ] + }, + { + "cell_type": "code", + "execution_count": 644, + "id": "e35ebdf9", + "metadata": {}, + "outputs": [], + "source": [ + "outcomes_vector_gpt3 = bm.test(vector_index, llm_predictor_gpt3)" + ] + }, + { + "cell_type": "code", + "execution_count": 645, + "id": "95c49697", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False " + ] + }, + "execution_count": 645, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_vector_gpt3)" + ] + }, + { + "cell_type": "markdown", + "id": "a36ba2ee", + "metadata": {}, + "source": [ + "# LLM based Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 646, + "id": "59ff561c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response</th>\n", + " <th>Correct Source</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source \n", + "0 True \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False " + ] + }, + "execution_count": 646, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyze_outcome(outcomes_vector_gpt3)" + ] + }, + { + "cell_type": "code", + "execution_count": 647, + "id": "e4ffaca6", + "metadata": {}, + "outputs": [], + "source": [ + "eval_gpt4 = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_gpt4)" + ] + }, + { + "cell_type": "code", + "execution_count": 657, + "id": "85c4e415", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response (LLM)</th>\n", + " <th>Correct Source (LLM)</th>\n", + " <th>Eval (LLM)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>Context is relevant: True\\nAnswer is correct: ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " <td>Context is relevant: False\\nAnswer is correct:...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response (LLM) \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... True \n", + "2 How many tourists visited New York City in 2019? True \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source (LLM) Eval (LLM) \n", + "0 True Context is relevant: True\\nAnswer is correct: ... \n", + "1 False Context is relevant: False\\nAnswer is correct:... \n", + "2 False Context is relevant: False\\nAnswer is correct:... \n", + "3 False Context is relevant: False\\nAnswer is correct:... \n", + "4 False Context is relevant: False\\nAnswer is correct:... " + ] + }, + "execution_count": 657, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eval_gpt4" + ] + }, + { + "cell_type": "code", + "execution_count": 651, + "id": "3efb66d6", + "metadata": {}, + "outputs": [], + "source": [ + "eval_chatgpt = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_chatgpt)" + ] + }, + { + "cell_type": "code", + "execution_count": 652, + "id": "4c452767", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response (LLM)</th>\n", + " <th>Correct Source (LLM)</th>\n", + " <th>Eval (LLM)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>False</td>\n", + " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>False</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response (LLM) \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... False \n", + "\n", + " Correct Source (LLM) Eval (LLM) \n", + "0 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", + "1 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", + "2 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", + "3 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", + "4 True \\n\\nContext is relevant: True\\nAnswer is corre... " + ] + }, + "execution_count": 652, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eval_chatgpt" + ] + }, + { + "cell_type": "code", + "execution_count": 649, + "id": "61e8dad2", + "metadata": {}, + "outputs": [], + "source": [ + "eval_gpt3 = analyze_outcome_llm(outcomes_vector_gpt3, llm_predictor_gpt3)" + ] + }, + { + "cell_type": "code", + "execution_count": 650, + "id": "170400c3", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Test Query</th>\n", + " <th>Correct Response (LLM)</th>\n", + " <th>Correct Source (LLM)</th>\n", + " <th>Eval (LLM)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>What battles took place in New York City in th...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Who was elected as the mayor after the Great D...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>How many tourists visited New York City in 2019?</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>\\n\\nContext is relevant: False\\nAnswer is corr...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>What are the airports in New York City?</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>When was the first documented visit into New Y...</td>\n", + " <td>True</td>\n", + " <td>True</td>\n", + " <td>\\n\\nContext is relevant: True\\nAnswer is corre...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Test Query Correct Response (LLM) \\\n", + "0 What battles took place in New York City in th... True \n", + "1 Who was elected as the mayor after the Great D... True \n", + "2 How many tourists visited New York City in 2019? False \n", + "3 What are the airports in New York City? True \n", + "4 When was the first documented visit into New Y... True \n", + "\n", + " Correct Source (LLM) Eval (LLM) \n", + "0 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", + "1 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", + "2 False \\n\\nContext is relevant: False\\nAnswer is corr... \n", + "3 True \\n\\nContext is relevant: True\\nAnswer is corre... \n", + "4 True \\n\\nContext is relevant: True\\nAnswer is corre... " + ] + }, + "execution_count": 650, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eval_gpt3" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/examples/test_wiki/TestNYC-Tree-GPT4.ipynb b/examples/test_wiki/TestNYC-Tree-GPT4.ipynb index d868399ac6..0e4865b09c 100644 --- a/examples/test_wiki/TestNYC-Tree-GPT4.ipynb +++ b/examples/test_wiki/TestNYC-Tree-GPT4.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "6337a1b3", - "metadata": {}, - "source": [ - "# Test NYC Wiki Tree Index GPT4" - ] - }, { "cell_type": "code", "execution_count": 18, @@ -992,7 +984,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/test_wiki/TestNYC.ipynb b/examples/test_wiki/TestNYC.ipynb index 2c60b62999..dd0526b19e 100644 --- a/examples/test_wiki/TestNYC.ipynb +++ b/examples/test_wiki/TestNYC.ipynb @@ -1,188 +1,180 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "5be57480", - "metadata": {}, - "source": [ - "# NYC Wiki Tree Index Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9080b39e", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", - "metadata": {}, - "outputs": [], - "source": [ - "# fetch \"New York City\" page from Wikipedia\n", - "from pathlib import Path\n", - "\n", - "import requests\n", - "response = requests.get(\n", - " 'https://en.wikipedia.org/w/api.php',\n", - " params={\n", - " 'action': 'query',\n", - " 'format': 'json',\n", - " 'titles': 'New York City',\n", - " 'prop': 'extracts',\n", - " # 'exintro': True,\n", - " 'explaintext': True,\n", - " }\n", - ").json()\n", - "page = next(iter(response['query']['pages'].values()))\n", - "nyc_text = page['extract']\n", - "\n", - "data_path = Path('data')\n", - "if not data_path.exists():\n", - " Path.mkdir(data_path)\n", - "\n", - "with open('data/nyc_text.txt', 'w') as fp:\n", - " fp.write(nyc_text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTTreeIndex, SimpleDirectoryReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTTreeIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", - "metadata": {}, - "outputs": [], - "source": [ - "index.save_to_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", - "metadata": {}, - "outputs": [], - "source": [ - "# try loading\n", - "new_index = GPTTreeIndex.load_from_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", - "# set Logging to DEBUG for more detailed outputs\n", - "\n", - "new_index.query(\"What is the name of the professional women's basketball team in New York City?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", - "metadata": {}, - "outputs": [], - "source": [ - "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", - "# set Logging to DEBUG for more detailed outputs\n", - "\n", - "new_index.query(\"What battles took place in New York City in the American Revolution?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97f3ddf1-8dc2-4fb8-831f-2c06649e0955", - "metadata": {}, - "outputs": [], - "source": [ - "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", - "# set Logging to DEBUG for more detailed outputs\n", - "\n", - "new_index.query(\"What are the airports in New York City?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53265fd4-da98-4cf9-abfb-3f76105fd2ff", - "metadata": {}, - "outputs": [], - "source": [ - "# Try using embedding query\n", - "new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9080b39e", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", + "metadata": {}, + "outputs": [], + "source": [ + "# fetch \"New York City\" page from Wikipedia\n", + "from pathlib import Path\n", + "\n", + "import requests\n", + "response = requests.get(\n", + " 'https://en.wikipedia.org/w/api.php',\n", + " params={\n", + " 'action': 'query',\n", + " 'format': 'json',\n", + " 'titles': 'New York City',\n", + " 'prop': 'extracts',\n", + " # 'exintro': True,\n", + " 'explaintext': True,\n", + " }\n", + ").json()\n", + "page = next(iter(response['query']['pages'].values()))\n", + "nyc_text = page['extract']\n", + "\n", + "data_path = Path('data')\n", + "if not data_path.exists():\n", + " Path.mkdir(data_path)\n", + "\n", + "with open('data/nyc_text.txt', 'w') as fp:\n", + " fp.write(nyc_text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTTreeIndex, SimpleDirectoryReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTTreeIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", + "metadata": {}, + "outputs": [], + "source": [ + "index.save_to_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", + "metadata": {}, + "outputs": [], + "source": [ + "# try loading\n", + "new_index = GPTTreeIndex.load_from_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", + "# set Logging to DEBUG for more detailed outputs\n", + "\n", + "new_index.query(\"What is the name of the professional women's basketball team in New York City?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", + "metadata": {}, + "outputs": [], + "source": [ + "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", + "# set Logging to DEBUG for more detailed outputs\n", + "\n", + "new_index.query(\"What battles took place in New York City in the American Revolution?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97f3ddf1-8dc2-4fb8-831f-2c06649e0955", + "metadata": {}, + "outputs": [], + "source": [ + "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", + "# set Logging to DEBUG for more detailed outputs\n", + "\n", + "new_index.query(\"What are the airports in New York City?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53265fd4-da98-4cf9-abfb-3f76105fd2ff", + "metadata": {}, + "outputs": [], + "source": [ + "# Try using embedding query\n", + "new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/test_wiki/TestNYC_Embeddings.ipynb b/examples/test_wiki/TestNYC_Embeddings.ipynb index 5cd40b71ee..f2b79c1d07 100644 --- a/examples/test_wiki/TestNYC_Embeddings.ipynb +++ b/examples/test_wiki/TestNYC_Embeddings.ipynb @@ -1,445 +1,445 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "7a9f093e-e027-405b-ae3d-17dda9e30cd0", - "metadata": {}, - "source": [ - "# NYC Wikipedia Tree Index Embeddings Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cadae9f2", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "markdown", - "id": "3e594a62-110e-40b3-ad1e-c99f49a4e537", - "metadata": {}, - "source": [ - "Demonstrate embedding capabilities in GPTTreeIndex and GPTListIndex" - ] - }, - { - "cell_type": "markdown", - "id": "b145f093-afb0-46b8-a81f-466af8478439", - "metadata": {}, - "source": [ - "### Setup + Data Prep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d038dcc1", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", - "metadata": {}, - "outputs": [], - "source": [ - "# fetch \"New York City\" page from Wikipedia\n", - "from pathlib import Path\n", - "\n", - "import requests\n", - "response = requests.get(\n", - " 'https://en.wikipedia.org/w/api.php',\n", - " params={\n", - " 'action': 'query',\n", - " 'format': 'json',\n", - " 'titles': 'New York City',\n", - " 'prop': 'extracts',\n", - " # 'exintro': True,\n", - " 'explaintext': True,\n", - " }\n", - ").json()\n", - "page = next(iter(response['query']['pages'].values()))\n", - "nyc_text = page['extract']\n", - "\n", - "data_path = Path('data')\n", - "if not data_path.exists():\n", - " Path.mkdir(data_path)\n", - "\n", - "with open('data/nyc_text.txt', 'w') as fp:\n", - " fp.write(nyc_text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "markdown", - "id": "def4eca7-ba03-48e2-b18f-fd669b91a5fc", - "metadata": {}, - "source": [ - "### GPTTreeIndex - Embedding-based Query" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.\n" - ] - } + "cells": [ + { + "cell_type": "markdown", + "id": "7a9f093e-e027-405b-ae3d-17dda9e30cd0", + "metadata": {}, + "source": [ + "# NYC Wikipedia Embeddings Demo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cadae9f2", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "markdown", + "id": "3e594a62-110e-40b3-ad1e-c99f49a4e537", + "metadata": {}, + "source": [ + "Demonstrate embedding capabilities in GPTTreeIndex and GPTListIndex" + ] + }, + { + "cell_type": "markdown", + "id": "b145f093-afb0-46b8-a81f-466af8478439", + "metadata": {}, + "source": [ + "### Setup + Data Prep" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d038dcc1", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4b4387b-413e-4016-ba1e-88b3d9410a38", + "metadata": {}, + "outputs": [], + "source": [ + "# fetch \"New York City\" page from Wikipedia\n", + "from pathlib import Path\n", + "\n", + "import requests\n", + "response = requests.get(\n", + " 'https://en.wikipedia.org/w/api.php',\n", + " params={\n", + " 'action': 'query',\n", + " 'format': 'json',\n", + " 'titles': 'New York City',\n", + " 'prop': 'extracts',\n", + " # 'exintro': True,\n", + " 'explaintext': True,\n", + " }\n", + ").json()\n", + "page = next(iter(response['query']['pages'].values()))\n", + "nyc_text = page['extract']\n", + "\n", + "data_path = Path('data')\n", + "if not data_path.exists():\n", + " Path.mkdir(data_path)\n", + "\n", + "with open('data/nyc_text.txt', 'w') as fp:\n", + " fp.write(nyc_text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1a9eb90-335c-4214-8bb6-fd1edbe3ccbd", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "markdown", + "id": "def4eca7-ba03-48e2-b18f-fd669b91a5fc", + "metadata": {}, + "source": [ + "### GPTTreeIndex - Embedding-based Query" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d0b2364-4806-4656-81e7-3f6e4b910b5b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.\n" + ] + } + ], + "source": [ + "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTTreeIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", + "metadata": {}, + "outputs": [], + "source": [ + "index.save_to_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", + "metadata": {}, + "outputs": [], + "source": [ + "new_index = GPTTreeIndex.load_from_disk('index.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What is the name of the professional women's basketball team in New York City?\", mode=\"embedding\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1000018-18de-410d-b6d9-c66bf37ccf1d", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", + "metadata": {}, + "outputs": [], + "source": [ + "response = new_index.query(\n", + " \"What battles took place in New York City in the American Revolution?\", \n", + " mode=\"embedding\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5588289b-9fdc-4b86-bab9-808c97be05e1", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53265fd4-da98-4cf9-abfb-3f76105fd2ff", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc08060f-b031-4dc5-a980-427dd2407b5d", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "63009734-deda-4159-9f2b-0af19720e913", + "metadata": {}, + "source": [ + "### GPTListIndex - Embedding-based Query" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd8920ae-8115-457c-b092-21e50cc3bcc0", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27c8bbee-daf5-494d-ba66-b60142592a96", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('data').load_data()\n", + "index = GPTListIndex.from_documents(documents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3d5a589-ee75-40bd-9529-75f693874ed7", + "metadata": {}, + "outputs": [], + "source": [ + "index.save_to_disk('index_list_emb.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9dfbef52-50fb-46ca-b82b-c44cfa2301ef", + "metadata": {}, + "outputs": [], + "source": [ + "# try loading\n", + "new_index = GPTListIndex.load_from_disk('index_list_emb.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2cbf24c2-060e-4216-9188-a6746af1830d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What is the name of the professional women's basketball team in New York City?\", mode=\"embedding\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14e1b19f-fbf7-49fd-a96f-cbb37bafd498", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "48b86c8d-9149-4395-9d52-6070597c814d", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What battles took place in New York City in the American Revolution?\", mode=\"embedding\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57fbd90c-a8d3-4738-8531-e8f48a953167", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ab01446-9b07-4222-a577-eeb4617ce4fc", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "091afaea-a61e-4a7c-b2f1-7df387380b8b", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"<b>{response}</b>\"))" + ] + }, + { + "cell_type": "markdown", + "id": "aca03087-d6cc-4d87-8ec6-185fa03d9fea", + "metadata": {}, + "source": [ + "## Try out other embeddings! \n", + "(courtesy of langchain)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27c24411-7049-45c7-862c-0857c03db580", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, SimpleDirectoryReader, ServiceContext\n", + "from IPython.display import Markdown" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9ff1944-a06a-4b05-adae-a2ef25e74e8b", + "metadata": {}, + "outputs": [], + "source": [ + "# load in HF embedding model from langchain\n", + "from langchain.embeddings.huggingface import HuggingFaceEmbeddings\n", + "from llama_index import LangchainEmbedding\n", + "embed_model = LangchainEmbedding(HuggingFaceEmbeddings())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3049d517-05db-459b-9e32-711e380fda67", + "metadata": {}, + "outputs": [], + "source": [ + "# try loading index\n", + "new_index = GPTListIndex.load_from_disk('index_list_emb.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1494cabb-0123-408a-9d81-8e02db9b3acd", + "metadata": {}, + "outputs": [], + "source": [ + "# configure\n", + "service_context = ServiceContext.from_defaults(embed_model=embed_model)\n", + "\n", + "# set Logging to DEBUG for more detailed outputs\n", + "response = new_index.query(\n", + " \"What is the name of the professional women's basketball team in New York City?\", \n", + " mode=\"embedding\", \n", + " service_context=service_context, \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d96a2e7-4eb1-474e-b855-eca3efed1bad", + "metadata": {}, + "outputs": [], + "source": [ + "response" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "80510d3a-8bf8-47f2-b1d4-3d1bd0d5a1bb", + "metadata": {}, + "outputs": [], + "source": [] + } ], - "source": [ - "from llama_index import GPTTreeIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1298bbb4-c99e-431e-93ef-eb32c0a2fc2a", "metadata": { - "tags": [] + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } }, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTTreeIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b4fe9b6-5762-4e86-b51e-aac45d3ecdb1", - "metadata": {}, - "outputs": [], - "source": [ - "index.save_to_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5eec265d-211b-4f26-b05b-5b4e7072bc6e", - "metadata": {}, - "outputs": [], - "source": [ - "new_index = GPTTreeIndex.load_from_disk('index.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "68c9ebfe-b1b6-4f4e-9278-174346de8c90", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What is the name of the professional women's basketball team in New York City?\", mode=\"embedding\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e1000018-18de-410d-b6d9-c66bf37ccf1d", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4fc3f18a-0ef9-453c-acf8-7aedd784cdcf", - "metadata": {}, - "outputs": [], - "source": [ - "response = new_index.query(\n", - " \"What battles took place in New York City in the American Revolution?\", \n", - " mode=\"embedding\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5588289b-9fdc-4b86-bab9-808c97be05e1", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53265fd4-da98-4cf9-abfb-3f76105fd2ff", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bc08060f-b031-4dc5-a980-427dd2407b5d", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "63009734-deda-4159-9f2b-0af19720e913", - "metadata": {}, - "source": [ - "### GPTListIndex - Embedding-based Query" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fd8920ae-8115-457c-b092-21e50cc3bcc0", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27c8bbee-daf5-494d-ba66-b60142592a96", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('data').load_data()\n", - "index = GPTListIndex.from_documents(documents)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c3d5a589-ee75-40bd-9529-75f693874ed7", - "metadata": {}, - "outputs": [], - "source": [ - "index.save_to_disk('index_list_emb.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9dfbef52-50fb-46ca-b82b-c44cfa2301ef", - "metadata": {}, - "outputs": [], - "source": [ - "# try loading\n", - "new_index = GPTListIndex.load_from_disk('index_list_emb.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2cbf24c2-060e-4216-9188-a6746af1830d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What is the name of the professional women's basketball team in New York City?\", mode=\"embedding\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14e1b19f-fbf7-49fd-a96f-cbb37bafd498", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "48b86c8d-9149-4395-9d52-6070597c814d", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What battles took place in New York City in the American Revolution?\", mode=\"embedding\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57fbd90c-a8d3-4738-8531-e8f48a953167", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7ab01446-9b07-4222-a577-eeb4617ce4fc", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\"What are the airports in New York City?\", mode=\"embedding\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "091afaea-a61e-4a7c-b2f1-7df387380b8b", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"<b>{response}</b>\"))" - ] - }, - { - "cell_type": "markdown", - "id": "aca03087-d6cc-4d87-8ec6-185fa03d9fea", - "metadata": {}, - "source": [ - "## Try out other embeddings! \n", - "(courtesy of langchain)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27c24411-7049-45c7-862c-0857c03db580", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, SimpleDirectoryReader, ServiceContext\n", - "from IPython.display import Markdown" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b9ff1944-a06a-4b05-adae-a2ef25e74e8b", - "metadata": {}, - "outputs": [], - "source": [ - "# load in HF embedding model from langchain\n", - "from langchain.embeddings.huggingface import HuggingFaceEmbeddings\n", - "from llama_index import LangchainEmbedding\n", - "embed_model = LangchainEmbedding(HuggingFaceEmbeddings())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3049d517-05db-459b-9e32-711e380fda67", - "metadata": {}, - "outputs": [], - "source": [ - "# try loading index\n", - "new_index = GPTListIndex.load_from_disk('index_list_emb.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1494cabb-0123-408a-9d81-8e02db9b3acd", - "metadata": {}, - "outputs": [], - "source": [ - "# configure\n", - "service_context = ServiceContext.from_defaults(embed_model=embed_model)\n", - "\n", - "# set Logging to DEBUG for more detailed outputs\n", - "response = new_index.query(\n", - " \"What is the name of the professional women's basketball team in New York City?\", \n", - " mode=\"embedding\", \n", - " service_context=service_context, \n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d96a2e7-4eb1-474e-b855-eca3efed1bad", - "metadata": {}, - "outputs": [], - "source": [ - "response" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "80510d3a-8bf8-47f2-b1d4-3d1bd0d5a1bb", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/test_wiki/TestWikiReader.ipynb b/examples/test_wiki/TestWikiReader.ipynb index 6e2d7bf4a3..a919e7c340 100644 --- a/examples/test_wiki/TestWikiReader.ipynb +++ b/examples/test_wiki/TestWikiReader.ipynb @@ -1,297 +1,289 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f26ea319", - "metadata": {}, - "source": [ - "# Test WikiReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52295407", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c5d167a5-81f8-4d2c-b42f-0a190577132f", - "metadata": {}, - "outputs": [], - "source": [ - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" - ] - }, - { - "cell_type": "markdown", - "id": "575750cc-479f-4b1f-b93f-4b00ed756d52", - "metadata": {}, - "source": [ - "## Wikipedia Reader + Keyword Table" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "5f60348e-731d-4a95-bae2-426e184a914e", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTKeywordTableIndex, WikipediaReader" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "952c4659-7fbb-447e-8caf-06916412cc37", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "page: Covid-19\n" - ] - } - ], - "source": [ - "wiki_docs = WikipediaReader().load_data(pages=['Covid-19'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3be202db-a4c7-41d2-ba7d-446d1f934830", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTKeywordTableIndex.from_documents(wiki_docs)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "7f5667a9-6758-447b-9af2-5e5a4d008a29", - "metadata": {}, - "outputs": [], - "source": [ - "# save index to docs\n", - "index.save_to_disk('index_covid.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "77340460-8319-474f-91eb-545ea5790127", - "metadata": {}, - "outputs": [], - "source": [ - "new_index = GPTKeywordTableIndex.load_from_disk('index_covid.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "28d7163e-f26f-4ad8-89d5-9cb7662c4d9c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: Which country included tocilizumab in treatment for covid-19?\n", - "Extracted keywords: ['tocilizumab', 'treatment', 'covid-19', 'covid', '19']\n", - "> Querying with idx: 1105763466456338724: of age or older weighing at least 40 kilograms ...\n", - "> Querying with idx: 2820318727532393752: Coronavirus disease 2019 (COVID-19) is a contag...\n", - "> Querying with idx: 897499143815831368: if the mask includes an exhalation valve, a wea...\n", - "> Querying with idx: 8628144746434065339: pulmonary fibrosis, cystic fibrosis. Evidence s...\n" - ] + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "52295407", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5d167a5-81f8-4d2c-b42f-0a190577132f", + "metadata": {}, + "outputs": [], + "source": [ + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"INSERT OPENAI KEY\"" + ] + }, + { + "cell_type": "markdown", + "id": "575750cc-479f-4b1f-b93f-4b00ed756d52", + "metadata": {}, + "source": [ + "## Wikipedia Reader + Keyword Table" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "5f60348e-731d-4a95-bae2-426e184a914e", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTKeywordTableIndex, WikipediaReader" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "952c4659-7fbb-447e-8caf-06916412cc37", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "page: Covid-19\n" + ] + } + ], + "source": [ + "wiki_docs = WikipediaReader().load_data(pages=['Covid-19'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3be202db-a4c7-41d2-ba7d-446d1f934830", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTKeywordTableIndex.from_documents(wiki_docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "7f5667a9-6758-447b-9af2-5e5a4d008a29", + "metadata": {}, + "outputs": [], + "source": [ + "# save index to docs\n", + "index.save_to_disk('index_covid.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "77340460-8319-474f-91eb-545ea5790127", + "metadata": {}, + "outputs": [], + "source": [ + "new_index = GPTKeywordTableIndex.load_from_disk('index_covid.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "28d7163e-f26f-4ad8-89d5-9cb7662c4d9c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: Which country included tocilizumab in treatment for covid-19?\n", + "Extracted keywords: ['tocilizumab', 'treatment', 'covid-19', 'covid', '19']\n", + "> Querying with idx: 1105763466456338724: of age or older weighing at least 40 kilograms ...\n", + "> Querying with idx: 2820318727532393752: Coronavirus disease 2019 (COVID-19) is a contag...\n", + "> Querying with idx: 897499143815831368: if the mask includes an exhalation valve, a wea...\n", + "> Querying with idx: 8628144746434065339: pulmonary fibrosis, cystic fibrosis. Evidence s...\n" + ] + }, + { + "data": { + "text/plain": [ + "'\\n\\nChina'" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", + "# set Logging to DEBUG for more detailed outputs\n", + "new_index.query(\"Which country included tocilizumab in treatment for covid-19?\")" + ] + }, + { + "cell_type": "markdown", + "id": "addb0c4d-f1ae-40c1-8b69-5a989609672f", + "metadata": {}, + "source": [ + "## Wikipedia Reader + List" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0fc24e1-eca5-4267-a962-f7fe0fc5c7df", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, WikipediaReader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "872a651a-ca4a-43e2-8b29-e4f667f9d3c5", + "metadata": {}, + "outputs": [], + "source": [ + "wiki_docs = WikipediaReader().load_data(pages=['Covid-19'])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "37e85af0-b1c3-4c18-b239-6e32a7acf8d6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Adding chunk: Coronavirus disease 2019 (COVID-19) is a contag...\n", + "> Adding chunk: people with COVID‑19 and acute respiratory dist...\n", + "> Adding chunk: encourage or mandate the use of face masks or c...\n", + "> Adding chunk: have elevated liver enzymes, reflecting liver i...\n", + "> Adding chunk: insofar as their drug use may have caused lung ...\n", + "> Adding chunk: treatment of mild-to-moderate COVID‑19 in adult...\n" + ] + } + ], + "source": [ + "index = GPTListIndex.from_documents(wiki_docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ec0119ef-786e-40ea-89af-f1ca0ad26de6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: Which country included tocilizumab in treatment for covid-19?\n" + ] + } + ], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "# with keyword lookup\n", + "response = index.query(\n", + " \"Which country included tocilizumab in treatment for covid-19?\", \n", + " required_keywords=[\"tocilizumab\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b4087a84-0939-444f-93f2-a1a7aa32db3f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'China'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(response.strip())" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "fb155bc7-cb50-47b6-b92b-895852c2d8f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> Starting query: Which country included tocilizumab in treatment for covid-19?\n" + ] + } + ], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "# without keyword lookup\n", + "response = index.query(\n", + " \"Which country included tocilizumab in treatment for covid-19?\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5b45c07a-4e76-4a45-86b6-6b2df1ef4f7b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'There is no definite answer to this question as different countries have different treatment methods for covid-19. However, according to the context information, it is known that the virus SARS-CoV-2 can cause severe damage to various organs in the human body by inducing systemic inflammation. Therefore, it is possible that tocilizumab, which is a drug that inhibits the virus, may be included in treatment for covid-19 in some countries in order to prevent or reduce the severity of a cytokine storm. Additionally, passive antibodies may be used to treat people with active COVID-19 in order to help them recover.'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(response.strip())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } }, - { - "data": { - "text/plain": [ - "'\\n\\nChina'" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# GPT doesn't find the corresponding evidence in the leaf node, but still gives the correct answer\n", - "# set Logging to DEBUG for more detailed outputs\n", - "new_index.query(\"Which country included tocilizumab in treatment for covid-19?\")" - ] - }, - { - "cell_type": "markdown", - "id": "addb0c4d-f1ae-40c1-8b69-5a989609672f", - "metadata": {}, - "source": [ - "## Wikipedia Reader + List" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a0fc24e1-eca5-4267-a962-f7fe0fc5c7df", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, WikipediaReader" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "872a651a-ca4a-43e2-8b29-e4f667f9d3c5", - "metadata": {}, - "outputs": [], - "source": [ - "wiki_docs = WikipediaReader().load_data(pages=['Covid-19'])" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "37e85af0-b1c3-4c18-b239-6e32a7acf8d6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Adding chunk: Coronavirus disease 2019 (COVID-19) is a contag...\n", - "> Adding chunk: people with COVID‑19 and acute respiratory dist...\n", - "> Adding chunk: encourage or mandate the use of face masks or c...\n", - "> Adding chunk: have elevated liver enzymes, reflecting liver i...\n", - "> Adding chunk: insofar as their drug use may have caused lung ...\n", - "> Adding chunk: treatment of mild-to-moderate COVID‑19 in adult...\n" - ] - } - ], - "source": [ - "index = GPTListIndex.from_documents(wiki_docs)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "ec0119ef-786e-40ea-89af-f1ca0ad26de6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: Which country included tocilizumab in treatment for covid-19?\n" - ] - } - ], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "# with keyword lookup\n", - "response = index.query(\n", - " \"Which country included tocilizumab in treatment for covid-19?\", \n", - " required_keywords=[\"tocilizumab\"]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "b4087a84-0939-444f-93f2-a1a7aa32db3f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'China'" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(response.strip())" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "fb155bc7-cb50-47b6-b92b-895852c2d8f4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> Starting query: Which country included tocilizumab in treatment for covid-19?\n" - ] - } - ], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "# without keyword lookup\n", - "response = index.query(\n", - " \"Which country included tocilizumab in treatment for covid-19?\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "5b45c07a-4e76-4a45-86b6-6b2df1ef4f7b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'There is no definite answer to this question as different countries have different treatment methods for covid-19. However, according to the context information, it is known that the virus SARS-CoV-2 can cause severe damage to various organs in the human body by inducing systemic inflammation. Therefore, it is possible that tocilizumab, which is a drug that inhibits the virus, may be included in treatment for covid-19 in some countries in order to prevent or reduce the severity of a cytokine storm. Additionally, passive antibodies may be used to treat people with active COVID-19 in order to help them recover.'" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(response.strip())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/vector_indices/OpensearchDemo.ipynb b/examples/vector_indices/OpensearchDemo.ipynb index d485f92f97..5a4e6ac040 100644 --- a/examples/vector_indices/OpensearchDemo.ipynb +++ b/examples/vector_indices/OpensearchDemo.ipynb @@ -1,222 +1,228 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Opensearch as a vector index.\n", - "\n", - "Elasticsearch only supports Lucene indices, so only Opensearch is supported." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note on setup**: We setup a local Opensearch instance through the following doc. https://opensearch.org/docs/1.0/\n", - "\n", - "If you run into SSL issues, try the following `docker run` command instead: \n", - "```\n", - "docker run -p 9200:9200 -p 9600:9600 -e \"discovery.type=single-node\" -e \"plugins.security.disabled=true\" opensearchproject/opensearch:1.0.1\n", - "```\n", - "\n", - "Reference: https://github.com/opensearch-project/OpenSearch/issues/1598" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [], - "source": [ - "from os import getenv\n", - "from llama_index import SimpleDirectoryReader\n", - "from llama_index.indices.vector_store import GPTOpensearchIndex\n", - "from llama_index.vector_stores import OpensearchVectorClient\n", - "# http endpoint for your cluster (opensearch required for vector index usage)\n", - "endpoint = getenv(\"OPENSEARCH_ENDPOINT\", \"http://localhost:9200\")\n", - "# index to demonstrate the VectorStore impl\n", - "idx = getenv(\"OPENSEARCH_INDEX\", \"gpt-index-demo\")\n", - "# load some sample data\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 17598 tokens\n" - ] - } - ], - "source": [ - "# OpensearchVectorClient stores text in this field by default\n", - "text_field = \"content\"\n", - "# OpensearchVectorClient stores embeddings in this field by default\n", - "embedding_field = \"embedding\"\n", - "# OpensearchVectorClient encapsulates logic for a\n", - "# single opensearch index with vector search enabled\n", - "client = OpensearchVectorClient(endpoint, idx, 1536, embedding_field=embedding_field, text_field=text_field)\n", - "# initialize an index using our sample data and the client we just created\n", - "index = GPTOpensearchIndex.from_documents(documents=documents, client=client)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 29628 tokens\n", - "INFO:root:> [query] Total embedding token usage: 8 tokens\n" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using as a vector index.\n", + "\n", + "Elasticsearch only supports Lucene indices, so only Opensearch is supported." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note on setup**: We setup a local Opensearch instance through the following doc. https://opensearch.org/docs/1.0/\n", + "\n", + "If you run into SSL issues, try the following `docker run` command instead: \n", + "```\n", + "docker run -p 9200:9200 -p 9600:9600 -e \"discovery.type=single-node\" -e \"plugins.security.disabled=true\" opensearchproject/opensearch:1.0.1\n", + "```\n", + "\n", + "Reference: https://github.com/opensearch-project/OpenSearch/issues/1598" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "from os import getenv\n", + "from llama_index import SimpleDirectoryReader\n", + "from llama_index.indices.vector_store import GPTOpensearchIndex\n", + "from llama_index.vector_stores import OpensearchVectorClient\n", + "# http endpoint for your cluster (opensearch required for vector index usage)\n", + "endpoint = getenv(\"OPENSEARCH_ENDPOINT\", \"http://localhost:9200\")\n", + "# index to demonstrate the VectorStore impl\n", + "idx = getenv(\"OPENSEARCH_INDEX\", \"gpt-index-demo\")\n", + "# load some sample data\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 17598 tokens\n" + ] + } + ], + "source": [ + "# OpensearchVectorClient stores text in this field by default\n", + "text_field = \"content\"\n", + "# OpensearchVectorClient stores embeddings in this field by default\n", + "embedding_field = \"embedding\"\n", + "# OpensearchVectorClient encapsulates logic for a\n", + "# single opensearch index with vector search enabled\n", + "client = OpensearchVectorClient(endpoint, idx, 1536, embedding_field=embedding_field, text_field=text_field)\n", + "# initialize an index using our sample data and the client we just created\n", + "index = GPTOpensearchIndex.from_documents(documents=documents, client=client)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 29628 tokens\n", + "INFO:root:> [query] Total embedding token usage: 8 tokens\n" + ] + }, + { + "data": { + "text/plain": [ + "'\\n\\nThe author grew up writing short stories, programming on an IBM 1401, and building a computer kit from Heathkit. They also wrote programs for a TRS-80, such as games, a program to predict model rocket flight, and a word processor. After years of nagging, they convinced their father to buy a TRS-80, and they wrote simple games, a program to predict how high their model rockets would fly, and a word processor that their father used to write at least one book. In college, they studied philosophy and AI, and wrote a book about Lisp hacking. They also took art classes and applied to art schools, and experimented with computer graphics and animation, exploring the use of algorithms to create art. Additionally, they experimented with machine learning algorithms, such as using neural networks to generate art, and exploring the use of numerical values to create art. They also took classes in fundamental subjects like drawing, color, and design, and applied to two art schools, RISD in the US, and the Accademia di Belli Arti in Florence. They were accepted to RISD, and while waiting to hear back from the Accademia, they learned Italian and took the entrance exam in Florence. They eventually graduated from RISD'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# run query\n", + "res = index.query(\"What did the author do growing up?\")\n", + "res.response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use reader to check out what GPTOpensearchIndex just created in our index.\n", + "\n", + "Reader works with Elasticsearch too as it just uses the basic search features." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "embedding dimension: 1536\n", + "all fields in index: dict_keys(['content', 'embedding'])\n" + ] + } + ], + "source": [ + "# create a reader to check out the index used in previous section.\n", + "from llama_index.readers import ElasticsearchReader\n", + "\n", + "rdr = ElasticsearchReader(endpoint, idx)\n", + "# set embedding_field optionally to read embedding data from the elasticsearch index\n", + "docs = rdr.load_data(text_field, embedding_field=embedding_field)\n", + "# docs have embeddings in them\n", + "print(\"embedding dimension:\", len(docs[0].embedding))\n", + "# full document is stored in extra_info\n", + "print(\"all fields in index:\", docs[0].extra_info.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total number of chunks: 10\n" + ] + } + ], + "source": [ + "# we can check out how the text was chunked by the `GPTOpensearchIndex`\n", + "print(\"total number of chunks created:\", len(docs))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "chunks that mention Lisp: 10\n", + "chunks that mention Yahoo: 8\n" + ] + } + ], + "source": [ + "# search index using standard elasticsearch query DSL\n", + "docs = rdr.load_data(text_field, {\"query\": {\"match\": {text_field: \"Lisp\"}}})\n", + "print(\"chunks that mention Lisp:\", len(docs))\n", + "docs = rdr.load_data(text_field, {\"query\": {\"match\": {text_field: \"Yahoo\"}}})\n", + "print(\"chunks that mention Yahoo:\", len(docs))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.4" + } }, - { - "data": { - "text/plain": [ - "'\\n\\nThe author grew up writing short stories, programming on an IBM 1401, and building a computer kit from Heathkit. They also wrote programs for a TRS-80, such as games, a program to predict model rocket flight, and a word processor. After years of nagging, they convinced their father to buy a TRS-80, and they wrote simple games, a program to predict how high their model rockets would fly, and a word processor that their father used to write at least one book. In college, they studied philosophy and AI, and wrote a book about Lisp hacking. They also took art classes and applied to art schools, and experimented with computer graphics and animation, exploring the use of algorithms to create art. Additionally, they experimented with machine learning algorithms, such as using neural networks to generate art, and exploring the use of numerical values to create art. They also took classes in fundamental subjects like drawing, color, and design, and applied to two art schools, RISD in the US, and the Accademia di Belli Arti in Florence. They were accepted to RISD, and while waiting to hear back from the Accademia, they learned Italian and took the entrance exam in Florence. They eventually graduated from RISD'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# run query\n", - "res = index.query(\"What did the author do growing up?\")\n", - "res.response" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Use reader to check out what GPTOpensearchIndex just created in our index.\n", - "\n", - "Reader works with Elasticsearch too as it just uses the basic search features." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "embedding dimension: 1536\n", - "all fields in index: dict_keys(['content', 'embedding'])\n" - ] - } - ], - "source": [ - "# create a reader to check out the index used in previous section.\n", - "from llama_index.readers import ElasticsearchReader\n", - "\n", - "rdr = ElasticsearchReader(endpoint, idx)\n", - "# set embedding_field optionally to read embedding data from the elasticsearch index\n", - "docs = rdr.load_data(text_field, embedding_field=embedding_field)\n", - "# docs have embeddings in them\n", - "print(\"embedding dimension:\", len(docs[0].embedding))\n", - "# full document is stored in extra_info\n", - "print(\"all fields in index:\", docs[0].extra_info.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "total number of chunks: 10\n" - ] - } - ], - "source": [ - "# we can check out how the text was chunked by the `GPTOpensearchIndex`\n", - "print(\"total number of chunks created:\", len(docs))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "jupyter": { - "outputs_hidden": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "chunks that mention Lisp: 10\n", - "chunks that mention Yahoo: 8\n" - ] - } - ], - "source": [ - "# search index using standard elasticsearch query DSL\n", - "docs = rdr.load_data(text_field, {\"query\": {\"match\": {text_field: \"Lisp\"}}})\n", - "print(\"chunks that mention Lisp:\", len(docs))\n", - "docs = rdr.load_data(text_field, {\"query\": {\"match\": {text_field: \"Yahoo\"}}})\n", - "print(\"chunks that mention Yahoo:\", len(docs))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.0" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/examples/vector_indices/SimpleIndexDemo-multistep.ipynb b/examples/vector_indices/SimpleIndexDemo-multistep.ipynb index f122d74528..120c2cd156 100644 --- a/examples/vector_indices/SimpleIndexDemo-multistep.ipynb +++ b/examples/vector_indices/SimpleIndexDemo-multistep.ipynb @@ -5,7 +5,7 @@ "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", "metadata": {}, "source": [ - "# Simple Index Demo + MultiStep Queries" + "# Simple Index Demo" ] }, { @@ -739,7 +739,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/vector_indices/SimpleIndexDemo-streaming.ipynb b/examples/vector_indices/SimpleIndexDemo-streaming.ipynb index c4c3f5d9e7..af20ea2071 100644 --- a/examples/vector_indices/SimpleIndexDemo-streaming.ipynb +++ b/examples/vector_indices/SimpleIndexDemo-streaming.ipynb @@ -1,140 +1,140 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", - "metadata": {}, - "source": [ - "# Simple Index Demo + Streaming" - ] - }, - { - "cell_type": "markdown", - "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", - "metadata": {}, - "source": [ - "#### Load documents, build the GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", - "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", - "\n", - "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", - "metadata": {}, - "outputs": [], - "source": [ - "# load documents\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 18509 tokens\n", - "> [build_index_from_documents] Total embedding token usage: 18509 tokens\n", - "> [build_index_from_documents] Total embedding token usage: 18509 tokens\n" - ] - } - ], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=1024)" - ] - }, - { - "cell_type": "markdown", - "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", - "metadata": {}, - "source": [ - "#### Query Index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "85466fdf-93f3-4cb1-a5f9-0056a8245a6f", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response_stream = index.query(\n", - " \"What did the author do growing up?\", \n", - " streaming=True,\n", - " similarity_top_k=1\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16c15a25-15ed-4aed-813a-5c4c9182d7eb", - "metadata": {}, - "outputs": [], - "source": [ - "response_stream.print_response_stream()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bdda1b2c-ae46-47cf-91d7-3153e8d0473b", - "metadata": {}, - "outputs": [], - "source": [ - "# can also get a normal response object\n", - "response = response_stream.get_response()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "gpt_retrieve_venv", - "language": "python", - "name": "gpt_retrieve_venv" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.16" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", + "metadata": {}, + "source": [ + "# Simple Index Demo" + ] + }, + { + "cell_type": "markdown", + "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", + "metadata": {}, + "source": [ + "#### Load documents, build the GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import sys\n", + "\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)\n", + "logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", + "\n", + "from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", + "metadata": {}, + "outputs": [], + "source": [ + "# load documents\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 18509 tokens\n", + "> [build_index_from_documents] Total embedding token usage: 18509 tokens\n", + "> [build_index_from_documents] Total embedding token usage: 18509 tokens\n" + ] + } + ], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents, chunk_size_limit=1024)" + ] + }, + { + "cell_type": "markdown", + "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", + "metadata": {}, + "source": [ + "#### Query Index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "85466fdf-93f3-4cb1-a5f9-0056a8245a6f", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response_stream = index.query(\n", + " \"What did the author do growing up?\", \n", + " streaming=True,\n", + " similarity_top_k=1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16c15a25-15ed-4aed-813a-5c4c9182d7eb", + "metadata": {}, + "outputs": [], + "source": [ + "response_stream.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdda1b2c-ae46-47cf-91d7-3153e8d0473b", + "metadata": {}, + "outputs": [], + "source": [ + "# can also get a normal response object\n", + "response = response_stream.get_response()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gpt_retrieve_venv", + "language": "python", + "name": "gpt_retrieve_venv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file -- GitLab