From c811e2d4775b98f5a7cf82383c876018c4f27ec4 Mon Sep 17 00:00:00 2001 From: Jerry Liu Date: Mon, 3 Apr 2023 22:02:24 -0700 Subject: [PATCH] Revert "Add Notebooks to Docs/Sphinx (#1039)" (#1040) This reverts commit 684cdbca00f1650ba8a5f80f41ffebcf3e7b535f. --- .github/workflows/dev_docs.yml | 2 - .gitignore | 3 +- docs/Makefile | 1 - docs/build_notebooks.py | 27 - docs/conf.py | 8 +- 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 - .../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/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 - .../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 - .../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/OpensearchDemo.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 - .../vector_indices/WeaviateIndexDemo.nblink | 1 - docs/requirements.txt | 6 +- .../async/AsyncComposableIndicesSEC.ipynb | 10 +- examples/async/AsyncGPTTreeIndexDemo.ipynb | 270 +- examples/chatbot/Chatbot_SEC.ipynb | 10 +- .../ChatGPTRetrievalPluginIndexDemo.ipynb | 2 +- .../ChatGPT_Retrieval_Plugin_Upload.ipynb | 10 +- .../composable_indices/QASummaryGraph.ipynb | 10 +- examples/cost_analysis/TokenPredictor.ipynb | 706 ++-- .../data_connectors/DatabaseReaderDemo.ipynb | 409 +- .../GithubRepositoryReaderDemo.ipynb | 222 +- examples/data_connectors/MboxReaderDemo.ipynb | 208 +- .../data_connectors/ObsidianReaderDemo.ipynb | 275 +- examples/data_connectors/TwitterDemo.ipynb | 216 +- examples/data_connectors/WeaviateDemo.ipynb | 352 +- examples/evaluation/GuardrailsDemo.ipynb | 680 ++-- .../LangchainOutputParserDemo.ipynb | 662 ++-- examples/evaluation/TestNYC-Evaluation.ipynb | 10 +- examples/gatsby/TestGatsby.ipynb | 374 +- .../knowledge_graph/KnowledgeGraphDemo.ipynb | 10 +- examples/langchain_demo/LangchainDemo.ipynb | 2 +- examples/multimodal/Multimodal.ipynb | 1201 +++--- examples/optimizer/OptimizerDemo.ipynb | 398 +- .../paul_graham_essay/DavinciComparison.ipynb | 26 +- .../paul_graham_essay/GPT4Comparison.ipynb | 1294 ++++--- examples/paul_graham_essay/InsertDemo.ipynb | 10 +- .../KeywordTableComparison.ipynb | 852 ++--- examples/paul_graham_essay/TestEssay.ipynb | 1322 ++++--- examples/playground/PlaygroundDemo.ipynb | 830 ++-- .../HyDEQueryTransformDemo.ipynb | 2 +- examples/struct_indices/PandasIndexDemo.ipynb | 2 +- .../struct_indices/SQLIndexDemo-Context.ipynb | 636 +-- .../SQLIndexDemo-ManyTables.ipynb | 798 ++-- examples/struct_indices/SQLIndexDemo.ipynb | 4 +- .../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 ++- .../AsyncIndexCreationDemo.ipynb | 426 +-- .../SimpleIndexDemo-ChatGPT.ipynb | 851 ++--- .../SimpleIndexDemo-multistep.ipynb | 4 +- .../SimpleIndexDemo-streaming.ipynb | 278 +- examples/vector_indices/SimpleIndexDemo.ipynb | 4 +- 118 files changed, 9223 insertions(+), 9684 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/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/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.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/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/OpensearchDemo.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.nblink diff --git a/.github/workflows/dev_docs.yml b/.github/workflows/dev_docs.yml index e1cbb57ad8270..f0b2e907ffde9 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 c31c85352ca25..0900a937e6bbf 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,7 @@ target/ # Jupyter Notebook .ipynb_checkpoints +notebooks/ # IPython profile_default/ @@ -137,4 +138,4 @@ dmypy.json # Jetbrains .idea -modules/ +modules/ \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile index d7e778614b95a..d4bb2cbb9eddb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -17,5 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - python ./build_notebooks.py @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/build_notebooks.py b/docs/build_notebooks.py deleted file mode 100644 index ed7fb0ca33f91..0000000000000 --- 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 f989990cf0a23..4d37d641e5006 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -37,8 +37,6 @@ "sphinx_rtd_theme", "sphinx.ext.mathjax", "myst_parser", - "nbsphinx", - "nbsphinx_link", ] myst_heading_anchors = 4 @@ -47,7 +45,7 @@ suppress_warnings = ["myst.header"] templates_path = ["_templates"] -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # -- Options for HTML output ------------------------------------------------- @@ -55,7 +53,3 @@ html_theme = "sphinx_rtd_theme" html_static_path = ["_static"] - -# nbsphinx options -nbsphinx_execute = "never" -nbsphinx_allow_errors = True diff --git a/docs/guides/notebooks.rst b/docs/guides/notebooks.rst index 5e6773fabc0fc..5fae146bab339 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 `_. \ 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 27f243d52e587..0000000000000 --- 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 a553014c27bfa..0000000000000 --- 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 a61033974b95e..0000000000000 --- 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 e5a19ec1c49ec..0000000000000 --- 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 318e9bf7fe404..0000000000000 --- 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 5156a52750e4b..0000000000000 --- 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 424014f345276..0000000000000 --- 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 bcad633aa0278..0000000000000 --- 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 526d471354336..0000000000000 --- 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/ComposableIndices-Prior.nblink b/docs/guides/notebooks/composable_indices/ComposableIndices-Prior.nblink deleted file mode 100644 index c5dec604c4017..0000000000000 --- 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 bccfa5cc2dcb9..0000000000000 --- 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 edab307b2b750..0000000000000 --- 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 1648510d8d4a7..0000000000000 --- 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 915e93b1da7fe..0000000000000 --- 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 6d11f643b1a60..0000000000000 --- 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 287ef6077921a..0000000000000 --- 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 1d4952cb11d01..0000000000000 --- 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 1151a573b476d..0000000000000 --- 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 689936b1da42b..0000000000000 --- 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 60f687b022f0c..0000000000000 --- 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 edf9cd5a93b9f..0000000000000 --- 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 beeb32654de6c..0000000000000 --- 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/MongoDemo.nblink b/docs/guides/notebooks/data_connectors/MongoDemo.nblink deleted file mode 100644 index e627ac29f59d3..0000000000000 --- 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 401c1c4873d39..0000000000000 --- 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 6faffd22b69c6..0000000000000 --- 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 a5a213bb9aba4..0000000000000 --- 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 900ea79354d35..0000000000000 --- 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 231dbf937f7d5..0000000000000 --- 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 0b208c3f9090a..0000000000000 --- 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 ab9e2427f6dbb..0000000000000 --- 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 829d3854eb546..0000000000000 --- 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 3f379a2f68e48..0000000000000 --- 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 c67b10a4b4873..0000000000000 --- 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 a7a4722097300..0000000000000 --- 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.nblink b/docs/guides/notebooks/evaluation/TestNYC-Evaluation.nblink deleted file mode 100644 index 977b921aa1df4..0000000000000 --- 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 45dbaa9346b5a..0000000000000 --- 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 44bcf85d6431d..0000000000000 --- 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 251948c9bfc27..0000000000000 --- 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 db221882e80d1..0000000000000 --- 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 bb855d8169884..0000000000000 --- 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/optimizer/OptimizerDemo.nblink b/docs/guides/notebooks/optimizer/OptimizerDemo.nblink deleted file mode 100644 index c9d893cf657f4..0000000000000 --- 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 6d585c00e7389..0000000000000 --- 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 63768b3834d26..0000000000000 --- 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 94c77662619b9..0000000000000 --- 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 df536641f02c8..0000000000000 --- 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 ad1fb314c2d52..0000000000000 --- 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 e2988e067b6af..0000000000000 --- 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 b19e6d309e2a3..0000000000000 --- 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 c7e84b9aa4d14..0000000000000 --- 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 d6ec3f659c730..0000000000000 --- 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 794811f2b9f13..0000000000000 --- 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 482a9d0f103f0..0000000000000 --- 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 e2651cecc705a..0000000000000 --- 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 e5e3f3eb46e08..0000000000000 --- 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 bbad368cb3d73..0000000000000 --- 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 9af98cb135e9d..0000000000000 --- 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 9a81277e903f0..0000000000000 --- 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 b263c6cf36380..0000000000000 --- 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 3a68f8d664f49..0000000000000 --- 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 15ff10564b5f3..0000000000000 --- 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 4b3d64aa54191..0000000000000 --- 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/OpensearchDemo.nblink b/docs/guides/notebooks/vector_indices/OpensearchDemo.nblink deleted file mode 100644 index 088df7a9c4e9d..0000000000000 --- 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.nblink b/docs/guides/notebooks/vector_indices/PineconeIndexDemo.nblink deleted file mode 100644 index 3a97fa698c1ef..0000000000000 --- 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 672467f404d83..0000000000000 --- 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 a8dfbb275380c..0000000000000 --- 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 a854f9e016c56..0000000000000 --- 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 765f138608766..0000000000000 --- 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 8940a12d2da88..0000000000000 --- 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.nblink b/docs/guides/notebooks/vector_indices/WeaviateIndexDemo.nblink deleted file mode 100644 index dc2ac1abb3837..0000000000000 --- 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/requirements.txt b/docs/requirements.txt index b98b8d7ef85d8..36e59f2fc6964 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,8 +2,4 @@ sphinx>=4.3.0 sphinx_rtd_theme>=0.5.1 docutils<0.17 -myst-parser -nbsphinx -nbsphinx-link -pandoc -ipython +myst-parser \ No newline at end of file diff --git a/examples/async/AsyncComposableIndicesSEC.ipynb b/examples/async/AsyncComposableIndicesSEC.ipynb index 3a34b977a1eb1..94bd2be0eb8b6 100644 --- a/examples/async/AsyncComposableIndicesSEC.ipynb +++ b/examples/async/AsyncComposableIndicesSEC.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "259b03ca", - "metadata": {}, - "source": [ - "# Async Composable Indices SEC Demo" - ] - }, { "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/async/AsyncGPTTreeIndexDemo.ipynb b/examples/async/AsyncGPTTreeIndexDemo.ipynb index 1fd2db130bedc..2c15133bfc1ec 100644 --- a/examples/async/AsyncGPTTreeIndexDemo.ipynb +++ b/examples/async/AsyncGPTTreeIndexDemo.ipynb @@ -1,136 +1,136 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "96b2b1e4", - "metadata": {}, - "source": [ - "# Async GPTTreeIndex Demo" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9331cfeb", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: This is ONLY necessary in jupyter notebook.\n", - "# Details: Jupyter runs an event-loop behind the scenes. \n", - "# This results in nested event-loops when we start an event-loop to make async queries.\n", - "# This is normally not allowed, we use nest_asyncio to allow it for convenience. \n", - "import nest_asyncio\n", - "nest_asyncio.apply()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a1d2821", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "from llama_index import GPTTreeIndex, SimpleDirectoryReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6948df36", - "metadata": {}, - "outputs": [], - "source": [ - "# load documents\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "markdown", - "id": "2d9115d1", - "metadata": {}, - "source": [ - "#### By default, GPTTreeIndex makes blocking LLM calls" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d9ef0fef", - "metadata": {}, - "outputs": [], - "source": [ - "start_time = time.perf_counter()\n", - "index = GPTTreeIndex.from_documents(documents)\n", - "elapsed_time = time.perf_counter() - start_time" - ] - }, - { - "cell_type": "markdown", - "id": "9392d573", - "metadata": {}, - "source": [ - "It takes ~47s to finish building GPTTreeIndex from 5 text chunks." - ] - }, - { - "cell_type": "markdown", - "id": "474f82d1", - "metadata": {}, - "source": [ - "#### Pass in `use_async=True` to enable asynchronous LLM calls" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "78a02987", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "start_time = time.perf_counter()\n", - "index = GPTTreeIndex.from_documents(documents, use_async=True)\n", - "elapsed_time = time.perf_counter() - start_time" - ] - }, - { - "cell_type": "markdown", - "id": "23469128", - "metadata": {}, - "source": [ - "It takes ~12s to finish building the GPTTreeIndex from 5 text chunks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "59c1c27e", - "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 -} + "cells": [ + { + "cell_type": "markdown", + "id": "96b2b1e4", + "metadata": {}, + "source": [ + "# Async GPTTreeIndex Demo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9331cfeb", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: This is ONLY necessary in jupyter notebook.\n", + "# Details: Jupyter runs an event-loop behind the scenes. \n", + "# This results in nested event-loops when we start an event-loop to make async queries.\n", + "# This is normally not allowed, we use nest_asyncio to allow it for convenience. \n", + "import nest_asyncio\n", + "nest_asyncio.apply()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a1d2821", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "from llama_index import GPTTreeIndex, SimpleDirectoryReader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6948df36", + "metadata": {}, + "outputs": [], + "source": [ + "# load documents\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "2d9115d1", + "metadata": {}, + "source": [ + "#### By default, GPTTreeIndex makes blocking LLM calls" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9ef0fef", + "metadata": {}, + "outputs": [], + "source": [ + "start_time = time.perf_counter()\n", + "index = GPTTreeIndex.from_documents(documents)\n", + "elapsed_time = time.perf_counter() - start_time" + ] + }, + { + "cell_type": "markdown", + "id": "9392d573", + "metadata": {}, + "source": [ + "It takes ~47s to finish building GPTTreeIndex from 5 text chunks." + ] + }, + { + "cell_type": "markdown", + "id": "474f82d1", + "metadata": {}, + "source": [ + "#### Pass in `use_async=True` to enable asynchronous LLM calls" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78a02987", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "start_time = time.perf_counter()\n", + "index = GPTTreeIndex.from_documents(documents, use_async=True)\n", + "elapsed_time = time.perf_counter() - start_time" + ] + }, + { + "cell_type": "markdown", + "id": "23469128", + "metadata": {}, + "source": [ + "It takes ~12s to finish building the GPTTreeIndex from 5 text chunks." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59c1c27e", + "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 +} \ No newline at end of file diff --git a/examples/chatbot/Chatbot_SEC.ipynb b/examples/chatbot/Chatbot_SEC.ipynb index fdc5854c2c106..140d0bdf4e726 100644 --- a/examples/chatbot/Chatbot_SEC.ipynb +++ b/examples/chatbot/Chatbot_SEC.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "c2c4b179", - "metadata": {}, - "source": [ - "# Chatbot SEC Tutorial" - ] - }, { "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/ChatGPTRetrievalPluginIndexDemo.ipynb b/examples/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.ipynb index 49448c76d43f0..8931588b2e321 100644 --- a/examples/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.ipynb +++ b/examples/chatgpt_plugin/ChatGPTRetrievalPluginIndexDemo.ipynb @@ -228,7 +228,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb b/examples/chatgpt_plugin/ChatGPT_Retrieval_Plugin_Upload.ipynb index 35546b102f829..b2da4bb54dc86 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": "470309bd", - "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 3c2a5e7347c05..d9a093a3f396f 100644 --- a/examples/composable_indices/QASummaryGraph.ipynb +++ b/examples/composable_indices/QASummaryGraph.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "ef5c50f0", - "metadata": {}, - "source": [ - "# QA Summary Graph Example" - ] - }, { "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/cost_analysis/TokenPredictor.ipynb b/examples/cost_analysis/TokenPredictor.ipynb index db64f1c3c968a..e0a6352c80ed6 100644 --- a/examples/cost_analysis/TokenPredictor.ipynb +++ b/examples/cost_analysis/TokenPredictor.ipynb @@ -1,355 +1,355 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "df19606e-d67e-44d2-bed0-4b804e6fc6c3", - "metadata": {}, - "source": [ - "# Using Token Predictors\n", - "\n", - "Using our token predictors, we can predict the token usage of an operation before actually performing it.\n", - "\n", - "We first show how to predict LLM token usage with the MockLLMPredictor class, see below.\n", - "We then show how to also predict embedding token usage." - ] - }, - { - "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": "8a707fa6-d79e-4343-92fd-d0fadb25c466", - "metadata": {}, - "source": [ - "## Using MockLLMPredictor" - ] - }, - { - "cell_type": "markdown", - "id": "be3f7baa-1c0a-430b-981b-83ddca9e71f2", - "metadata": { - "tags": [] - }, - "source": [ - "#### Predicting Usage of GPT Tree Index\n", - "\n", - "Here we predict usage of GPTTreeIndex during index construction and querying, without making any LLM calls.\n", - "\n", - "NOTE: Predicting query usage before tree is built is only possible with GPTTreeIndex due to the nature of tree traversal. Results will be more accurate if GPTTreeIndex is actually built beforehand." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "c0ef16d1-45ef-43ec-9aad-4e44e9bb8578", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTTreeIndex, MockLLMPredictor, SimpleDirectoryReader, ServiceContext" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "b2ecdadc-1403-4bd4-a876-f80e4da911ef", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "11056808-fd7f-4bc6-9348-0605fb4ee668", - "metadata": {}, - "outputs": [], - "source": [ - "llm_predictor = MockLLMPredictor(max_tokens=256)\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9ea4ba66-9a09-4478-b0a8-dee8645fa4e3", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTTreeIndex.from_documents(documents, service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "345433c2-5553-4645-a513-0186b771a21f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "19495\n" - ] - } - ], - "source": [ - "print(llm_predictor.last_token_usage)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f43733ae-af35-46e6-99d9-8ba507acbb0d", - "metadata": {}, - "outputs": [], - "source": [ - "# default query\n", - "response = index.query(\"What did the author do growing up?\", service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "4ba19751-da2d-46af-9f8f-4f42871e65a0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5493\n" - ] - } - ], - "source": [ - "print(llm_predictor.last_token_usage)" - ] - }, - { - "cell_type": "markdown", - "id": "4324d85b-ae80-48ab-baf0-7dc160dfae46", - "metadata": {}, - "source": [ - "#### Predicting Usage of GPT Keyword Table Index Query\n", - "\n", - "Here we build a real keyword table index over the data, but then predict query usage." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "10447805-38db-41b9-a2c6-b0c95437b276", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTKeywordTableIndex, MockLLMPredictor, SimpleDirectoryReader" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "8ca76e72-5f43-47c1-a9a4-c5c5db4f0f21", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", - "index = GPTKeywordTableIndex.load_from_disk('../paul_graham_essay/index_table.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "61f48870-65d2-4b23-b57e-79082ecb4ab2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "start token ct: 0\n", - "> Starting query: What did the author do after his time at Y Combinator?\n", - "query keywords: ['author', 'did', 'y', 'combinator', 'after', 'his', 'the', 'what', 'time', 'at', 'do']\n", - "Extracted keywords: ['combinator']\n", - "> Querying with idx: 3483810247393006047: of 2016 we moved to England. We wanted our kids...\n", - "> Querying with idx: 7597483754542696814: people edit code on our server through the brow...\n", - "> Querying with idx: 7572417251450701751: invited about 20 of the 225 groups to interview...\n", - "end token ct: 11313\n", - "> [query] Total token usage: 11313 tokens\n", - "11313\n" - ] - } - ], - "source": [ - "llm_predictor = MockLLMPredictor(max_tokens=256)\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\", service_context=service_context)\n", - "print(llm_predictor.last_token_usage)" - ] - }, - { - "cell_type": "markdown", - "id": "0fee4405-05e0-46c2-87bb-64ec63a4c6c1", - "metadata": {}, - "source": [ - "#### Predicting Usage of GPT List Index Query\n", - "\n", - "Here we build a real list index over the data, but then predict query usage." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "267f2213-67d1-4241-b73f-f1790661d06b", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTListIndex, MockLLMPredictor, SimpleDirectoryReader" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "d553a8b1-7045-4756-9729-df84bd305279", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", - "index = GPTListIndex.load_from_disk('../paul_graham_essay/index_list.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "69c99c68-6a23-48ed-aa41-e7af50fef2f3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "start token ct: 0\n", - "> Starting query: What did the author do after his time at Y Combinator?\n", - "end token ct: 23941\n", - "> [query] Total token usage: 23941 tokens\n" - ] - } - ], - "source": [ - "llm_predictor = MockLLMPredictor(max_tokens=256)\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", - "response = index.query(\"What did the author do after his time at Y Combinator?\", service_context=service_context)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "e8422c5c-af68-4138-a8dd-f6e8d7208c4c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "23941\n" - ] - } - ], - "source": [ - "print(llm_predictor.last_token_usage)" - ] - }, - { - "cell_type": "markdown", - "id": "1e19cf61-6d6a-4dfa-af78-1ce184f41c6c", - "metadata": {}, - "source": [ - "## Using MockEmbedding" - ] - }, - { - "cell_type": "markdown", - "id": "106d86bf-7725-40bc-84ba-4f273493d3f6", - "metadata": {}, - "source": [ - "#### Predicting Usage of GPT Simple Vector Index" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9baf0fe7-2c11-4233-a930-4e593433ba84", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTSimpleVectorIndex, MockLLMPredictor, MockEmbedding, SimpleDirectoryReader" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "97023361-fa47-4008-b8d7-e66d60c5b263", - "metadata": {}, - "outputs": [], - "source": [ - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", - "index = GPTSimpleVectorIndex.load_from_disk('../paul_graham_essay/index_simple_vec.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "63ebe021-2b9c-4024-95f8-56cd9e7e7c47", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> [query] Total LLM token usage: 4374 tokens\n", - "> [query] Total embedding token usage: 14 tokens\n" - ] - } - ], - "source": [ - "llm_predictor = MockLLMPredictor(max_tokens=256)\n", - "embed_model = MockEmbedding(embed_dim=1536)\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, embed_model=embed_model)\n", - "response = index.query(\n", - " \"What did the author do after his time at Y Combinator?\",\n", - " service_context=service_context,\n", - ")" - ] - } - ], - "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" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "cell_type": "markdown", + "id": "df19606e-d67e-44d2-bed0-4b804e6fc6c3", + "metadata": {}, + "source": [ + "# Using Token Predictors\n", + "\n", + "Using our token predictors, we can predict the token usage of an operation before actually performing it.\n", + "\n", + "We first show how to predict LLM token usage with the MockLLMPredictor class, see below.\n", + "We then show how to also predict embedding token usage." + ] + }, + { + "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": "8a707fa6-d79e-4343-92fd-d0fadb25c466", + "metadata": {}, + "source": [ + "## Using MockLLMPredictor" + ] + }, + { + "cell_type": "markdown", + "id": "be3f7baa-1c0a-430b-981b-83ddca9e71f2", + "metadata": { + "tags": [] + }, + "source": [ + "#### Predicting Usage of GPT Tree Index\n", + "\n", + "Here we predict usage of GPTTreeIndex during index construction and querying, without making any LLM calls.\n", + "\n", + "NOTE: Predicting query usage before tree is built is only possible with GPTTreeIndex due to the nature of tree traversal. Results will be more accurate if GPTTreeIndex is actually built beforehand." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c0ef16d1-45ef-43ec-9aad-4e44e9bb8578", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTTreeIndex, MockLLMPredictor, SimpleDirectoryReader, ServiceContext" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b2ecdadc-1403-4bd4-a876-f80e4da911ef", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "11056808-fd7f-4bc6-9348-0605fb4ee668", + "metadata": {}, + "outputs": [], + "source": [ + "llm_predictor = MockLLMPredictor(max_tokens=256)\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9ea4ba66-9a09-4478-b0a8-dee8645fa4e3", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTTreeIndex.from_documents(documents, service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "345433c2-5553-4645-a513-0186b771a21f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "19495\n" + ] + } + ], + "source": [ + "print(llm_predictor.last_token_usage)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f43733ae-af35-46e6-99d9-8ba507acbb0d", + "metadata": {}, + "outputs": [], + "source": [ + "# default query\n", + "response = index.query(\"What did the author do growing up?\", service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4ba19751-da2d-46af-9f8f-4f42871e65a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5493\n" + ] + } + ], + "source": [ + "print(llm_predictor.last_token_usage)" + ] + }, + { + "cell_type": "markdown", + "id": "4324d85b-ae80-48ab-baf0-7dc160dfae46", + "metadata": {}, + "source": [ + "#### Predicting Usage of GPT Keyword Table Index Query\n", + "\n", + "Here we build a real keyword table index over the data, but then predict query usage." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "10447805-38db-41b9-a2c6-b0c95437b276", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTKeywordTableIndex, MockLLMPredictor, SimpleDirectoryReader" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "8ca76e72-5f43-47c1-a9a4-c5c5db4f0f21", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", + "index = GPTKeywordTableIndex.load_from_disk('../paul_graham_essay/index_table.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "61f48870-65d2-4b23-b57e-79082ecb4ab2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "start token ct: 0\n", + "> Starting query: What did the author do after his time at Y Combinator?\n", + "query keywords: ['author', 'did', 'y', 'combinator', 'after', 'his', 'the', 'what', 'time', 'at', 'do']\n", + "Extracted keywords: ['combinator']\n", + "> Querying with idx: 3483810247393006047: of 2016 we moved to England. We wanted our kids...\n", + "> Querying with idx: 7597483754542696814: people edit code on our server through the brow...\n", + "> Querying with idx: 7572417251450701751: invited about 20 of the 225 groups to interview...\n", + "end token ct: 11313\n", + "> [query] Total token usage: 11313 tokens\n", + "11313\n" + ] + } + ], + "source": [ + "llm_predictor = MockLLMPredictor(max_tokens=256)\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\", service_context=service_context)\n", + "print(llm_predictor.last_token_usage)" + ] + }, + { + "cell_type": "markdown", + "id": "0fee4405-05e0-46c2-87bb-64ec63a4c6c1", + "metadata": {}, + "source": [ + "#### Predicting Usage of GPT List Index Query\n", + "\n", + "Here we build a real list index over the data, but then predict query usage." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "267f2213-67d1-4241-b73f-f1790661d06b", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTListIndex, MockLLMPredictor, SimpleDirectoryReader" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d553a8b1-7045-4756-9729-df84bd305279", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", + "index = GPTListIndex.load_from_disk('../paul_graham_essay/index_list.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "69c99c68-6a23-48ed-aa41-e7af50fef2f3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "start token ct: 0\n", + "> Starting query: What did the author do after his time at Y Combinator?\n", + "end token ct: 23941\n", + "> [query] Total token usage: 23941 tokens\n" + ] + } + ], + "source": [ + "llm_predictor = MockLLMPredictor(max_tokens=256)\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)\n", + "response = index.query(\"What did the author do after his time at Y Combinator?\", service_context=service_context)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "e8422c5c-af68-4138-a8dd-f6e8d7208c4c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23941\n" + ] + } + ], + "source": [ + "print(llm_predictor.last_token_usage)" + ] + }, + { + "cell_type": "markdown", + "id": "1e19cf61-6d6a-4dfa-af78-1ce184f41c6c", + "metadata": {}, + "source": [ + "## Using MockEmbedding" + ] + }, + { + "cell_type": "markdown", + "id": "106d86bf-7725-40bc-84ba-4f273493d3f6", + "metadata": {}, + "source": [ + "#### Predicting Usage of GPT Simple Vector Index" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9baf0fe7-2c11-4233-a930-4e593433ba84", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTSimpleVectorIndex, MockLLMPredictor, MockEmbedding, SimpleDirectoryReader" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "97023361-fa47-4008-b8d7-e66d60c5b263", + "metadata": {}, + "outputs": [], + "source": [ + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()\n", + "index = GPTSimpleVectorIndex.load_from_disk('../paul_graham_essay/index_simple_vec.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "63ebe021-2b9c-4024-95f8-56cd9e7e7c47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> [query] Total LLM token usage: 4374 tokens\n", + "> [query] Total embedding token usage: 14 tokens\n" + ] + } + ], + "source": [ + "llm_predictor = MockLLMPredictor(max_tokens=256)\n", + "embed_model = MockEmbedding(embed_dim=1536)\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, embed_model=embed_model)\n", + "response = index.query(\n", + " \"What did the author do after his time at Y Combinator?\",\n", + " service_context=service_context,\n", + ")" + ] + } + ], + "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 } diff --git a/examples/data_connectors/DatabaseReaderDemo.ipynb b/examples/data_connectors/DatabaseReaderDemo.ipynb index c1816801e6ec8..5cb887f0f5678 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 \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 \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 \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 \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 0424499940d77..389becf839b0b 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\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 = \"gpt_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\"{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": "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\"{response}\"))" + ] + } + ], + "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 33ebc68f54d4b..5285057c081ce 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/ObsidianReaderDemo.ipynb b/examples/data_connectors/ObsidianReaderDemo.ipynb index 449427eb41e1d..951a918f75089 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/TwitterDemo.ipynb b/examples/data_connectors/TwitterDemo.ipynb index 2828e6ee3f8a9..06a9d413849ff 100644 --- a/examples/data_connectors/TwitterDemo.ipynb +++ b/examples/data_connectors/TwitterDemo.ipynb @@ -1,113 +1,105 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f5f652cc", - "metadata": {}, - "source": [ - "# Twitter Reader 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 = \"\"" - ] - }, - { - "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(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2f0f92a7-cdd9-478f-9765-0a122d6e8508", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"{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" - } - }, - "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 = \"\"" + ] + }, + { + "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(\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f0f92a7-cdd9-478f-9765-0a122d6e8508", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"{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.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 1c163471d69fc..b36751549beb8 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": [ - "# Weaviate 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 = \"\", \n", - " password = \"\", \n", - ")\n", - "\n", - "# initialize reader\n", - "reader = WeaviateReader(\"https://.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=\"\", \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", - " {\n", - " \n", - " \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(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "771b42be-4108-43a0-a1b4-b259a7819936", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"{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" - } - }, - "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 = \"\", \n", + " password = \"\", \n", + ")\n", + "\n", + "# initialize reader\n", + "reader = WeaviateReader(\"https://.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=\"\", \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", + " {\n", + " \n", + " \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(\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "771b42be-4108-43a0-a1b4-b259a7819936", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"{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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/evaluation/GuardrailsDemo.ipynb b/examples/evaluation/GuardrailsDemo.ipynb index b99a045174566..78b177a61df3c 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 Demo Using Gaurdrails" - ] - }, - { - "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", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "Query string here.\n", - "\n", - "@xml_prefix_prompt\n", - "\n", - "{output_schema}\n", - "\n", - "@json_suffix_prompt_v2_wo_none\n", - "\n", - "\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", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\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": "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": "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", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "Query string here.\n", + "\n", + "@xml_prefix_prompt\n", + "\n", + "{output_schema}\n", + "\n", + "@json_suffix_prompt_v2_wo_none\n", + "\n", + "\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", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\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 541de8a864d91..91f6f5a2ffbd9 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 Demo with Langchain Output Parsers" - ] - }, - { - "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.ipynb b/examples/evaluation/TestNYC-Evaluation.ipynb index f7c3ffa074ed7..1a15885d7f5b8 100644 --- a/examples/evaluation/TestNYC-Evaluation.ipynb +++ b/examples/evaluation/TestNYC-Evaluation.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "040fd65f", - "metadata": {}, - "source": [ - "# NYC Wiki Evaluation" - ] - }, { "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 1c2b45f8cd3da..b7c5f3be54485 100644 --- a/examples/gatsby/TestGatsby.ipynb +++ b/examples/gatsby/TestGatsby.ipynb @@ -1,192 +1,184 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "abf838d6", - "metadata": {}, - "source": [ - "# Gatsby Test" - ] - }, - { - "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": [ - "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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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\"{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" - } - }, - "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": [ + "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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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\"{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.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 1a7a2c20338f4..70ade12dd8953 100644 --- a/examples/knowledge_graph/KnowledgeGraphDemo.ipynb +++ b/examples/knowledge_graph/KnowledgeGraphDemo.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "45043ecd", - "metadata": {}, - "source": [ - "# Knowledge Graph 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/langchain_demo/LangchainDemo.ipynb b/examples/langchain_demo/LangchainDemo.ipynb index 781d9224487e7..2e74d407009b3 100644 --- a/examples/langchain_demo/LangchainDemo.ipynb +++ b/examples/langchain_demo/LangchainDemo.ipynb @@ -5,7 +5,7 @@ "id": "3bf01a75-a01b-472e-bc0c-9fe97658eb46", "metadata": {}, "source": [ - "# GPT Index <> Langchain Integrations\n", + "## GPT Index <> Langchain Integrations\n", "\n", "This demo notebook shows how you can provide integrations between GPT Index and Langchain. It provides the following examples:\n", "- Using GPT Index as a callable tool with a Langchain agent\n", diff --git a/examples/multimodal/Multimodal.ipynb b/examples/multimodal/Multimodal.ipynb index 8d65da0bc3f61..8a42426e2cf09 100644 --- a/examples/multimodal/Multimodal.ipynb +++ b/examples/multimodal/Multimodal.ipynb @@ -1,611 +1,594 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "493dd86c", - "metadata": {}, - "source": [ - "# Multimodal Demo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "d4073749", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import SimpleDirectoryReader, GPTSimpleVectorIndex\n", - "from llama_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": 2, - "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": 3, - "id": "dbc28f2d", - "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": [ - "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": 4, - "id": "629cab63", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] Total LLM token usage: 0 tokens\n", - "INFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] 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": 5, - "id": "7c078dc0", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:llama_index.token_counter.token_counter:> [query] Total LLM token usage: 1004 tokens\n", - "INFO:llama_index.token_counter.token_counter:> [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": 6, - "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: " - ], - "text/plain": [ - "" - ] - }, - "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: " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/1`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 3949d7d1-96bc-4d46-beb6-79d2acbb1fd6
**Similarity:** 0.7981321083637717
**Text:** file_name: data/receipts/1100-receipt.jpg\n", + "\n", + " Story 16725 Stony Platin ...
**Image:**" + ], + "text/plain": [ + "" + ] + }, + "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/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": [ + "" + ] + }, + "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", + "\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/2`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 589f9b15-f3b4-4bfc-b50e-28fb1a2d0173
**Similarity:** 0.8151716742235475
**Text:** file_name: data/llama/tree_index.png\n", + "\n", + " Root Node Parent<...
**Image:**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAGvCAIAAACiuPoLAABihklEQVR4nO3deZxcVZk//s/znHtvVfWWfQ/ZSAghhF12RBARBEUURcANwWXQr/voMKMz47iNiuO+Ky6Myk9BHXdBWWRfQghJgAQICdm3TnqtqnvPeZ7fH7e6IQEJCQnp7vu8X/1qQi/VVbeqzufcc859DqkqjDHGFA/v6ztgjDFm37AAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgrIAMMaYgor29R0w5pkoFACBFL5X6p2SZvv6Lu0ySspUaSNOCOSVVBETQPv6bhnTzwLADESqIAKA7va0Y02darFQaV/fqV2gqgCUs7gSRk2qJMMABEVE1v6bgcQCwAxERAJw2iPt6zPOKiBHg2u0UkFEoCSry5Z1YWzFuZJa228GmsH1rjJFoeQB6dnqUU9YI6ZB1ngSEQBSOHH1Xq12eYAJlgFmYLEAMAOTQBHq6oIjqFDY1/dn9yiRMqBegcEWYqYALADMwEQAGEyAUgD5fX1/do8QPEFVALUJYDPgWACYgUgRgVg4BFJFpJrs63u0e1g1FjARATYCZAYcCwAzKFjTacyeZwFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgjDEFZQFgBgNSQAFSUmXRRoF9VYYQFGh8elL+89vfBhQISoLG1uyipAAxKamSEAFQAoNYCPlP0VNvkBSEQFBVUoBZAYUSIIAABGjfv7XxN40ZwCwAzOChUGiGairVzPf6UOUYHJNC+lr7Z2twGcpMFLOSUH86KLzUiDMmsCoIQX0mVVIh2eE2iZQIoggAFCH1vaqSRxHIoxFC1uibQSPa13fAmOdAkTesUUxXX33VbXfcVXElET9hv6kXXfiWyeP305RASkRQUlWAG31wIiKoAirkePPWjU+sWTV3zjymEoGhxA7/86XPjRwz7JK3vFu9i2P+wx/+vGbN8n+65D0SACgxAaTSuAMKJlZ2WL1u9be++eX3v+fysWPGBRUihZKGxo+B0Hce4PbRITNm5+wMwAwWBICdrl7zeEtL/M53vv3ii9/a0bHpq1/7YpbVOQIn2lXtqIcqJyQUhIVLmkqtq3cbogAHYix5eNHXv/Wljp52gUCJFCBdvWHl//7ih3+/+29xmZWxeevGVWtWgIkiuLJ21zpqvuZKJCQB6hJOQ7WW9QT0LF+5LJW6MDjRqu/trnXFSf+4UH6XdxyGMmZAsTMAM7gQkRs9etwRhx2liqSp8p+f+M9tHVuakqbv/Pgbjz++0nFy9tmvOvWUlxLpbXfeeu21v07T+uTJky+95B2S4hfXXL1567rPfeHT73vXR6ZOnBICFIiSaNbsA378v1fN2f/QCZMmgZUjkJPOjq1X/uQ7jzyynDk584yzTn/ZS52Lb7jpul//9to4aZp7yP5JJQIpO/z297+//q9/Ii0fNm/ORW94cxy1qLX8ZjCwMwAzWCgAKANRmqKjo7q1veveexc0N7W1tLR878pvb9i0+kMfft/Zr3r5937wjYeWLl6x+tGvf/NLJ7/k+I9+9EOp7/nq168YNWrk6We8rG1E6yWXvm3MmLEijT3a0zS87GWvmDnroG9955tKAoYSOKIf/Og7K1Y98sEPvfe888750Y+/u/jBRWvWPvHd73/zJS958Xvf+9516zb09vbGpeiue+665le/vOTSS/7l8o8+tGzBr3/7i6SU37DtAm8GOgsAMxgQlFQYgbKkRPMX3PHuD7/j0ve95k/XX3vJ295fy3Dv4hvf9LqLZk+ed/ZLz5k7e8KCu29esPDusePHnPeK8w+YNPuiCy56+LHF7ZvbJ46ZVHFNUyZNL8dlCAlBOBAh8uV3v+Xdjy1f+qfrf5eUYuLylm3t991/7/nnvXnutENeftLLD5s39657bl748L1jRo983VkXzN5v5mteeUEctYDk9ruvGz2uddPm9sUPLm0bOfrOe+9OxYNhE8Jm4LMhIDN4KEgpTbM5Bx70jkvf/efrrrn/gXtfdPQh7e0dIlFSaUs9HKGpZUxPL2slVJraBJxmSMot4Kher6sKAJHQmJolBQkgImHCmJFvv/Sy7/3oG9NmTYmiKGTqPTW3jKh7OIdyU0tvzfdWfVxu1SiuZSg3tbCLiLRe7/VZunbt6izlqVNmHHv0ZFGh/O4aM7DZGYAZDBSk+XpLp4GHtY6aM+vAC1//zmpP/Te//dm4caPHjJp6y503oyQbtm5ctGTZrDkHzZo1c/mKR55Yv4Iqeve9tzeVy+PGjvY+1NPM+4wogAIgAFShGuopTjz2lKOPOvqmG//MnI0YNnz8uAm33nGTJLqxa+MDD98/Y+b+U6dPWf7EsqUrl3AT7rz3lmq1S1VnTJsJpQsveMM/vevSOXPmDh82Euq0/34bM4DZGYAZBAhgVVViJUYswfk6Rg8fc945b/rlNVe/7OSz3v7Wd33p659e/tij7e3ts2btf+wxR7gExx999Cc+efm4ceNXrVl58Vsubm5qnjplf0flj3/sPy7/0OVTJk0VATRSiaAOCg30xgsveWDxfSF1pSh+21ve8sWv/feKFU+0d6ydPHncS058cSkpvehFh//np/5tv8kzkyi0NjdJSmeefs4D9z34wfd9aOTIUY+vXH3JxW937ELY14fMmOcgXzRtzMAiCKxu84padUvM5ADl/FJcJ+s3rVSNJoyfpAIf0sdXLpswftLwtlHr1q997LHFzS0tBx14aBTFCgX0wYcebG9vnzlj/8kTpwTPGtH6zWtXr141Z8YBbc1tQV1wunrdY61NTWNax4tAY2xs35Cl2aSxE5MIazeuf+jRR5pak4NnH1zhFiaqas/ihx/ManTQ7OlbN28eO25KpVKu1asPPriou7dr+v4HTJ441afKYIIQBBpl5EdO1NbxMWCTAmZgsQAwA9HTAgCct+gkHAHgEAIUTM7FCD5I4IgpiiCK4JG/qpnAERFDPEKmcCRQisg5SKpQVWUhuBikohkpVKAucgA0iMuvE4sggHqwh6pKRByDBBrAjCwoAGZEESk0qIagrJzXhyAo1FkAmAHLhoDMIKBAX/UGEo9GyR5AVX0KgIkQVEPW9wsEAAEIvq9/4/LfArwG3/dDpAxoBm2UByIGaWj8oQCCKNLGDYR8vkxV+r4iodGeqyBLG7/FfV+zxt4MfDYJbIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWUBYIwxBWX7AZiBiOChxOKcEsiDAjTZ13dqNwhR4Mb+NAqyHQLMwGJnAGZgUgACUYDg8v1cBiFSOAUREUjzPeiNGTgsAMzAxCBwQoFFlVgG5amqglVZAIoB2OarZsCxADADEakDuHl4hKQu5BWDrPHs32o7wJeaqKk1BkRBg+xhmKFuUHaszJCn6gCUWnj4+KhzTVXTWKm0r+/UrglByXmXZCPGNXHiFUER2SSAGVBI7cTUDEB5n59AgO8KtW1Sz/Zw4ykEUhAUnIUQsTriPfZeUICJ4hI1DSdXInCmpIqEbKt4M5BYAJiCSpFxcBExuJ6JizSiQTrTbMzusjkAU1AOiird+YtNC/5UdcERpxhsMw3GPE8WAKagHNC5Mb31ar39mqA1VWQWAKZobBLYFBZrkLIfWcqgEFBiV2qZorEzAFNYDqQMYQg4C4hsgtYUjQWAKSgFhDMRJvJQZ62/KSALAFNYBDCBoBQyZxMApoAsAExBESC9TkPwdWS9YAsAUzwWAKa4OjeAA7Ie7d3qGWpjQKZoLABMca1f0UsBoeo2rQo2B2AKyALAFIQCAgWgKgCCpNkTDwdGFEu8ckmP5icAms8F2HCQKQQLAFMQAg1QKFRUAdnyWHXzoxUp+Yh17aK0e2MGPKXlV0sBM/RZAJiCYCUOrAJl14nglvxR03aecbwfc0itY82wJ27zQFAOSmrDQaYgLABMQZCCBCIAARuXZsv+XmpqCYedEx14BqmUH/hjd22LQDWIVwBQUNjX99mYvcsCwBQFgQjk4KS79bafdXZvk+knpOMOTqYfX550cHXt47jjlx2URmyjP6YwLABMUZCQAxg6//fdT9xeaR2bHXN+c+okbvUnvSGmpsrCP1Qeu72H2QEA0VPeHRYJZmiyYnDm+RMA0L7mkhqbub+QCMpQwPWv5leCAAyhfHMZZREw4+Gbum/6eahEdPKb41H7lzy8qpt8dHLoeZ3z/zf5yw/8q9viiUeSSqaIwACEUCcwEGv+pxofeSzs4X3eWZgAUB451NgTx5i9wzaEMc9f3loxtK/l2jevKYUylEAC5PvvEqBCEEQEdUoP/r79lu9Qb7Vy9EXZCW9uRQRVDxCR871y/ec2LbqpefiU8PJ389RjmwV1VgdNGg+Hpe88gBrblQF7fpdfEiAD8ukHB8TWSzN7jwWA2bMCIAA1euLU15F96mc80xf7P/+j33r2b+VtcqOecwBEEYCExCmIGPXO9J6f9973G7ha5dBX6fH/FKMsjBgICoEykUs3yF++1r3sNpeM6jn+DZXDX9HKTY17qwRVZfi+O9HXLX/Gh7N7D6Fxa9TITyUQwSpUm73JAsDsKSoSACIiJdoXZwEEqOanIQoliqGEVDrd8ruye3/lNz9QSUfVX3ShnPiaCsUCieEYkHwIS8AplLeF267sXfT7VlU/8fjeI17bPH0uc6muiD0SEnWNsZ9G5OzxB8lAvlexihApoER2BmD2FgsAs6c82Ynta1Vf+M5rY7AGnnyPbl3jVyz0y26vbVjmkPKYA9IT3tIy7XgW1FxoIji47X6zrllCnqqlB/8S7rqme/PqOGpJJh1cO+hEmjQ3aRsTR2Ug6u/z9w/T71n8lNv0gADJnv4TxjRYAJjnqNG5BkhRJymRAM4LEcMBSDvCtrWyeY3v2NJd26aQF3qBWT4ar6pSd92d3L3ada9LOrpY4zB6es+8U6N5ZzdX2lgyIYq8A1NoJED/O8CLEKtLHYWOVe7h39UevjFs3lxSiittYdj4MHxS1jwMykJEIAFhj58DKIuSAiEpuREjm0dOjIdNjZpHunxFUoAoiJUYCsoAp3A2RmR2mwWA2TkFAK8QzbfN0jqHMokiqWV1t2qhPHJ7be2i0LuuOe0VQV0kIXKqL/yLS/PxJxc5F1HzqHTMgdnMo8szjiyVR0e70lnPo67euTpbdiceu1u2rXS1rcGnsQgD/Y9rzz88fvKkQh0zEm0aX588iw843k09shyN0BQaSeQUxDWQEyS2lNvsNgsAs1Oi+QrLvJ4aAmUOMWXiV9wdFv3Cb3iAq/UoafHN4+ptU13rRG1qCrwPJi8bwzJxEg9ra2kb79smuKaREeIQoKKIKd6lmwuoC0KEEjJ0bZFtG9Ku1VFvdz1NM9qLj04BJXVpd7KtHdvWhOrjSbXHSVIfNat61JmVOS9pdm0aVECR03zVkEWA2U0WAGanvEKBGAFgJcoA7dksN/2wtuzGEnVHwybXpp1ABx5TGjXdJcN5341JSN9n7VuMlEiIoFBWUOoo2aUhewECQPAE6ntUsv24P+2FOQDtmz4hCIVe3fp4tvw+XXp7uulRikNpytHZCRe70XPiFCESxwDYAsDsJgsAsxMCUQjDIYACIcLqh7PrvtXVvbC1uc0feK4/5JVJ89gEEEVGYEasaJRWVgI97TPwDF/s/wzs1rfoqcsplaCkBCioCgRoGRqDd7GxzgOFAPLQAEApAZ6sFaf/4IHs9kPo/5t96aPamAV22VY89Lfa/N9WN6+KmibVXnZx2wGnllU9NCabBTC7ywLA7IQ0rrCqQ5gkWflAx3VfrHesbZp4EJ16aTz+cFUlDaqOhByDnDTWMb6wd7O/ckP/+pyg230RhF3d+d0DAo0BgPJTimj7W9jzC0EVTvv/NAjCKlBXA0UOpfbV1buu3PrIzSNcs558cTrv1W0BbO2/2W0WAGYHCtQDWBET4BQIJKRV11lBZdtiXPvfmzvXNs86KZz27ramsalqTBID+fLF/sb3hR+UeIZWUHf6EzuRD/i4Z13tucffPtv/pb61pkKqAIOybtx+9ZYHfplEce1lHyzPOrU1Q501ZlKFKhwrEQAVUACJgNgWkpp/wK4xMdtTQigxQzmvpqPQCFxP0FJfx3/5Znv3qtbpJ2dnvGdEMkYUjvKCOY1Wa2+Mie++531XnqxutBf/yLPrO6Lc94e4pfqSt44o9fi7ftX01+9tGTHOjZ5bUU9EIJcpVUFQJAQHiUBENkFg/jF7dZjtEcBCVGfUASji4EhYYvH3/GLrqofcqDk447LWZHTmRRUlEEDZvr7TBcLihP2xl8SzXt7btX7Y33/Ym3UF4rpSVeFIK4JSgFMQmMAZoWqlTM0/YgFgtqNARpRpFDQSIJD3nBLKax7QBTe4ZDhOfUepaXwm1MskpPk8pXnhBKIMsbSEF7+tPGpGffkDlftvqIFJ3DahXgWxKKMummpj0pkH1GmZGVAsAMx2CApNo8CoOqoy19OoXqMuuft3PWkXDjsumThXQy3m0EqqBAGxPrWigtnLHClzlbSrZaQcd7ZzoIW/r9fWMNI2SmOtB60qVyNWAEE1gpT29V02A5dNApsdKLzc8osNy27ikg5XVnCGLO5Yx3EaN42pV1uykbM7XvW2ScnwOsgByd4oiGP+oUyB8Perq4/dQkmG7g0lBKlMqvuyU00i1EPoHTPLv+KdE1xbpgjUqCltT5F5BjYJbHZAcM73UNfDI5RLWSSZKwGagJlQa9famqa0rcr5hUpwrCCoFS1+4ZCAUe30XctKFW7KyuKYO1eVBCASaHPIym0jN1IEQYL8WTLmH7AhILOd/CLao88a1Tqt17PGUb1ESIgiIUAlVKLW6kmvGR4N44B88EdB1sS8cNSpUnT8Oc2tk+rCcMJQFzmUHBLiGMQjth533khuEoHPt0Kz7r/5RywAzA40iG+emBz5Gq7GqYbYqWdRFmWSXslmnYjJR8WB6oqYFH2lC8wLRMgJQutkOuLcUo3rLAIFQZwqKdKQHvgSnnRY2SMT+Ce3mjHmmVgAmO0QJOYAxbzTm8bMq9YDK6DEypQByfhtR722TElGIIe84BvbQOILi4gEiA4+ozTyoN6gwnkNUaWMfTJx8zGvGo5IoY53ufaFKRwLALMDJo2E1DXFJ5xXlkotSCycBZdWgxz+8vKIWQQwS0IC0r7qNuaFQsg4OA1ELXrCG2K4QAJSBEUP9R56VmnYNAeB09ghAsSGf8yzsAAwOyAQESBIpx8Zzzwxq0ndCdeUhh3QfcQryqKiGjWuUKWBdvHv0MdgEBOrKE8/smnCi6te6wlqEjB6f3/Yy9tAHgBRfiUY2bNjnoUFgNmBggLlg8exHHNuJR7dE3yUsT/2VeXyaIGCiPrafWtdXnDqwEC+233Mx7+uiYbV6llTKHUff25SGelUGy0/AHuCzLOzADA7UEAUEMSZyKgDksNeEW+RLfsdnh14fEU8K0Rt1nffU2JRlXEzkrmnJxtC18Sjew44vkkU9qY2z51N35kdEMAEMFiYFdnhZ1W6qp1HnNzKbb2qCaFkvcp9qa8oHCBEAqdHnhtVdeuRLx3BFRYIQWDXZpvnxq4ENk/T2Ggwv74rQPOq+gJkIFZN7KqvgSFfhCuqnjWBkERCUFK26/LMc2RnAIPbU8ow5EG+RxZ+U14KnzQGIoWK1ogcaZmoShT2xCBD//3sv7ekQ3JWobFbmfaNyj//Z2e7PSkVTgCSAESEXtIIWt6bu/EMteen4OwMYHAL+ZBNYztE7dsb8Xmip8RJbg+mS/+fyG9Y8u0QlaBgBXFevUBpKHRjNd9NTQXKecmMxlf3lB0OUd9mwnvqT+SNAxHynUFJCcw72SHHDCZ2BjDoEYAMtY6stzuEAGlUAW40A/SUHqM+7Yv/+FuNfXb7bqqxm6+C8i/S9pnw9M87+xYDUKhjKpVdywjmSmPbxsaPDI32pf+p8NTTkdW7M59yXjhptw7aTr/15LO209/a6UsCABExu1KZmkeCS5EgvHCHzrwg7AxgcBMVCG1d2VtrJ6clUQ6DYw1If/ujCi03Y8RkiptZGYBQ4wcGfQgIREGaYsvqtL5NnDhFpIPpcSkRKSRpSUfvV+Ym5OVF7eKCIcMCYNDbur63a60koSUfaRbX103b093LXe5D/qNvPblUMd87XkRDqU3GTm/SCEAgDJH6ZflIVsfaeud6jaREIMkv292zx/NZvrWHnneFlEb4MdMrSh5wGArDcwawIaDBTjPUO4m0EgB1KizcX5iBnvb5Gb/4wn+LdqgewQzKen2oq3M0lOpKMKBB610+0jKBhDTfsP0FPdTP/2ZBTl3WE3xdojL0ydgxg54FwOCmoiEDKROrkgBEOjjGgAAAlM8sqAIhhCCO3JDp/uc0qE8ZQsqiRKSDdWgrBPKZRmXdE6sMzEBhATDI5XUg8wX7+RrwQfj+JCKh/mGhoTTCnE9yOFBewrN/vGbQUYCI+u6/nQMMFYOot2iMMWZPsgAwxpiCsgAwxpiCsgAwxpiCsgAwxpiCsgAwxpiCsgAwxpiCsgAwxpiCsgvBCieOqL+Siw8Q2bPViQfjVU4DSxwRceNyq2BPkNmbLAAKhUSy+Uvu7erq0KBxXJk9e+6o4WOQiYJE+0pwqgJQJWaoaqN6JQk1NjdxpNqoOwyFMkiJVJXZiapocMrW0OweyjRbuHhBV9dGVVcqNR94wOyRreN8BiLVxu4PTjUQAeoUSqQKokbJNvRXWSJiESVSIC8SyCAhJxBW4bwEJFlJt8KzACgQJtRD/Wvf+TyTGzdq0pb2bbWsdvkHPj53/7lZkLjkwBBRX1dAkyQKEiLHIagoXETOkQT2XhHAEQEgCs6xD+SDxgl+9OMrZ86adsrJp/X2DKqaxwMGM+rV3q998wtRLGNH77d5yzbxtY9+4OOzZswV1SgCk/MZgqhC49ipKjvynkQ0jokdQqDgA4Gcg3MAiJ36gOARxXzlD78x96DDTjz+xdVeYabGBkKmwCwAikUVInjjhZeefsoZPdXqp77w0Wt+9dN5l3+2Xq8umH/f1o72mbNmzZo2x4cwf8GdY8eNWbr04QNmHzR58tTFSx5Y8fjyqdOmHzRnnrJbvGxRqUQ9Pd3r1q09eN7hEydMX7z0oZvvumHlhoktI4cffMCRanuH7BZGxoHf+ubLXnLSKT3V6qc++y+/+r+fXv6Rz/R299x3112dHbUDZh24//4zsiy9d8Hd48aPXvrwowcccOiUKZMfWLRw5crHp06bevCcQ1V0yUMLm5pL3d1da9aunXfIYRMnTF3y4MJb77hpw6Y1w9qGz551cAhKZFOARWcBUDxETBGAtrbKzFkz77/nga7e7s9f8bn2jk2Tp068+pr/fccl7zvmmBd958pvOMfNzcPGTBx392/v+P0f/njQQQf93x9/85KTT3njRRf/7k/XLHt0yYxpB23atOanv/zJZz799VXrn+isdqxc65ctf3Te7CNtAGj3EJQUDgkDI9oqM/efsfihxd3Vrs9+4TNd3VsmTZz2s1/86N2XfeCww4749pVfKSVRS9P4cZP3u/ram6+77i9z5hz4mz9ce9qpZ1z4hgt//ftrVqx8dNrUGRs3bvr5L3/235/98qq1q7qr3SvXrlj22LLZsw7e1w/UDAgWAIXDTBs3r1qx6vH1G9b99fqbXnryy6M4OeMVZ845eFZLW/kzn/3szX+/4ZjjDvOSnnjSS9/8pkufWLXiV/939Yc++JGjjjx64QPzP/OZz7z01LOZZMyoUR/90MdSX33v+982/97bXnfe+Tf87XeHHX7Y+a99Q71zKFX1f+GoQigWp2u2PLZ8zaQ1a1dff+MNLz/9bHbxWa88+6C501taWj/xyX+7+ZYbjjjq6MzXXnraKy58/TsfW7nst7+/9qMf/efDjzjs3nvvveJzXz3ttFNAfszYsR/96Meq1ep7P3jJ/AX3vuqVr7zhpj8dfczRrzn3vHq3naAZwAKgUPJNd+PI/ea3/9+NN1wPjY896sXnnXuRgrp7u7/8lW/U097HVzwy76DDlQIxTZ22v2Net25DV/e2X//mN9f+6jeqGTvXta2DIVMmTS1xkpSSkcNHZvUe8UJCFDikeUlnOwfYZURQRBxHv/q//73+r38hxMefcPI557weiDo7u7705S+lafb4ysWHH3KqKkVxNHXqDOdo3bq11VrvNdde+4tf/gJQcrytcysY++03JYkrRKVhw9vqaS0IvI8kRCEAADPZZoDGAqBACICintUvuuiSU044k7KotamsDrfec/P3fnjFZe/42NyDDv3Z//e9bVs78s1gRYIokqSpXGp73WvfMGrkWO81S2XSxCmp97EiAKIiVFOCBFaoS1IXwe/rRzqYZVmaveWN7z7p2NPUR82tJXW45dYbr/zhd/7fe9534IGH/OSnX6r2eACqIuJVUY7bEtf6hte9ua1thAT2Pp00eUwIKiJBoUoaEs43cRSOnEYRfL5zvCk8mwUqnKyupaiptbmlnJR9pirwoeoiP3JUefXaRxYtvlMVJJFPRQMkYMb0aRPHj7nxxj/XalvvufemK3/4dQlBAvus0YT4zEkWOUa51LTgvvsfeeQxdvv2IQ5uPvPluKmtqbmclHxdIPA+iyMePqLtiZXLFz3wIAQEZHXV4ILHjBlTxoxpu/HGP6XptrvuvuGHV/5AAolH8CAFAd5Xg1QdS6XCC+6/69FHl9r0r8nZ66BAFGCODj/o6FHDxkkGzS818vqiw098yQmv+N53vvenP/z+hONePGvGbGg0b+7hI4ePFq/NldYPve/jPZ3ZV7/yjXvvvudVrzyrqSmeMe3AafvNVAWE5sw6csLY6eJx/nkX+br76/XXsc0A7BZVOEoOPfiIEW0jgwflDX0qxxx1/InHv/g73/rW9df98aTjT5kx7QCIHnrw0cPbxgaPtuaRH/7g5du2dn7tq19dMH/+Oa96ZVO5MnPGnKn7zdSgEJo7+4hxo/fTwBe8/k3Vbr3hr393nK/i3dcP2Oxr+VpgM1hJJuuW1VBtYgqBVOF4J8+nxhGJQEL//oSkhCRBT29vUkoiF0nQID6KohBEBFB2jojR29tbLicuclmmkWNVhKAEuIhUEAJcpIogIqTRLi4wJ+H6uFlR0uKG1naDIqmuXRpQj4lFwaQ7uUROSaM4aBD1JVYoBwETq4u0Vu9N4si5UgiQIFHkQhARgnIUIX+CSqUKEYXgo8ipUghKSi6GBoggiqBAEMEuTtKzqo/82JlRqSUABI2G0HNUaDYHUCykJGl/708BKCkBaZ2SuARBmoEYQOQzAEwQJVUhCSiXmjRoFpQIIQMAYoFyyAASYgnecf6Kshng3UXKIfMEkIIUjYuvhX2qMbdo0CwjsELJpwRiogBQCAJBElc0kEKJKHhAkW+vHLwCAIkP1He1tzGABUAB9Xf++ooGqCrAUKhq3vr3NxAKEBNUBfm04Y7VA576f0SNugR7+QEMdaQMEAhCePIIK2nfxuw7nrSTNM4qqP/siZ/8RQLySQNVQEEEtYFf02ABUCxKfTVjnvol5A2I6//XUzx9sWBeGugphWcahYEo73Oa50cVDoA2zqL6B+r6vt34b99CW91hwl2f/MeTzwU/9cvG9LO+gDHGFJQFgDHGFJQFQEHRjoM1z33s5tl/0uYY94inPzvP8aju5NkhsifIPMkCoJBIKQK7Jyd7mbV/8rax+CT/BhpZkV9SRETM+EcDyS6iKAbvbCGq2Sl26qKnDOGz9h/VZ2y/G4t7iNyTMwI7PgvsyEXIfN1FeOqNmyKzACiciKizZ+On/+fy+Q/dwSVSEDn/o59+7e+3XR/FpEokFBExVOGVRQESckoJY+ED93z3h18XeCAAAgAkDFFRTXTl5oc+/41/+/6Pv8rbLSUyu4CUAmrf+MHn/+/6q12FROFi+uP1v/zFr35CjhRESk6JlQAVCkJCgkipxLRu7corvvLZ7t4OIgUCseTT9ITAia7c8Phnrvj3y//tXZ/+/OXLVy11EZHk5SGCTQ0XlgVA4SiQZuldd9/6la9/fnP7Bo5AzA88cP+atauZwU5ds3quuZJEETthgnIFwXku04b21fMX36lQ5zhOHHFG5F1MccIL71/4qU996oFF9y968AFr/HcbE1R18YMLv/P9rz+07IG4TMxYvvzRpUsfIoKL4CqacRWxdxFIiEFURohCcNJV33bngr+noc5MceIAT5xFCbko6unt/u/PfYqZL73ksqRS+vLXvlCtdVnFDmPLQAuHCETUNqw1SO2qn373g+/9Vy8hKiVwjBgbN6752S9/vGb1qsnjJ7/+3AunTJyRov7rP//fbTffMW7c2JHjWlyTkuNMwv/95ur5990dx9FZZ559wvEna6D3vftDDyy+88477rX+5G7LD12SxKPHDP/+lV/7r49/oa11OMeOIscxuro7f/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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/2`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723
**Similarity:** 0.8133374944584655
**Text:** How Each Index Works\n", + "\n", + "This guide describes how each index works with diagrams. We also visually h...
" + ], + "text/plain": [ + "" + ] + }, + "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", + "\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/2`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 80d8d2e9-412f-4b22-bc60-55dd131b73a9
**Similarity:** 0.8164705784668993
**Text:** file_name: data/llama/vector_store_index.png\n", + "\n", + " Nodel Node2**Image:**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/2`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** d60e5289-64c9-4446-91be-afca6c2be723
**Similarity:** 0.7878578850577496
**Text:** How Each Index Works\n", + "\n", + "This guide describes how each index works with diagrams. We also visually h...
" + ], + "text/plain": [ + "" + ] + }, + "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": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/1`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/loganm/miniconda3/envs/llama_index/lib/python3.11/site-packages/llama_index/data_structs/node_v2.py:144: UserWarning: .source_text is deprecated, use .node.get_text() instead\n", - " warnings.warn(\".source_text is deprecated, use .node.get_text() instead\")\n", - "/home/loganm/miniconda3/envs/llama_index/lib/python3.11/site-packages/llama_index/data_structs/node_v2.py:139: UserWarning: .doc_id is deprecated, use .node.ref_doc_id instead\n", - " warnings.warn(\".doc_id is deprecated, use .node.ref_doc_id instead\")\n", - "/home/loganm/miniconda3/envs/llama_index/lib/python3.11/site-packages/llama_index/data_structs/node_v2.py:159: UserWarning: .similarity is deprecated, use .score instead instead\n", - " warnings.warn(\".similarity is deprecated, use .score instead instead\")\n", - "/home/loganm/miniconda3/envs/llama_index/lib/python3.11/site-packages/llama_index/data_structs/node_v2.py:164: UserWarning: .image is deprecated, check if Node is an ImageNode and use .node.image instead\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2421376f-875d-4d51-a828-ce66354b5145
**Similarity:** 0.7982013908158432
**Text:** file_name: data/receipts/1100-receipt.jpg\n", - "\n", - " Story 16725 Stony Platin ...
**Image:**" - ], - "text/plain": [ - "" - ] - }, - "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/9rGP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", - "text/plain": [ - "" - ] - }, - "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": 7, - "id": "d5f04295", - "metadata": {}, - "outputs": [], - "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": 8, - "id": "46db4191", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] Total LLM token usage: 0 tokens\n", - "INFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] Total embedding token usage: 965 tokens\n" - ] - } - ], - "source": [ - "llama_index = GPTSimpleVectorIndex.from_documents(llama_documents)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "4a4cc090", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:llama_index.token_counter.token_counter:> [query] Total LLM token usage: 1475 tokens\n", - "INFO:llama_index.token_counter.token_counter:> [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": 10, - "id": "5c5721d6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** This image illustrates how a tree index works. A tree index is a type of data structure that stores data in a hierarchical structure. It is composed of nodes, which can have multiple children and a single parent. Each node contains data, such as a key, value, or other information. The tree index is used to quickly search for data by traversing the tree from the root node to the desired node. During query time, we traverse from root nodes down to leaf nodes. By default, (`child_branch_factor=1`), a query chooses one child node given a parent node. If `child_branch_factor=2`, a query chooses two child nodes per parent. LlamaIndex also offers different methods of synthesizing a response, such as Create and Refine and Tree Summarize. Create and Refine is an iterative way of generating a response, while Tree Summarize builds a tree index over the set of candidate nodes with a summary prompt seeded with the query." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/2`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 8d50b8e8-4505-4b75-979c-2f068f3afaba
**Similarity:** 0.8147614150754062
**Text:** file_name: data/llama/tree_index.png\n", - "\n", - " Root Node Parent<...
**Image:**" - ], - "text/plain": [ - "" - ] - }, - "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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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/2`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 673418ff-7052-4921-9c9f-9d3fe8f6af49
**Similarity:** 0.8138599661902355
**Text:** How Each Index Works\n", - "\n", - "This guide describes how each index works with diagrams. We also visually h...
" - ], - "text/plain": [ - "" - ] - }, - "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": 11, - "id": "92569825", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:llama_index.token_counter.token_counter:> [query] Total LLM token usage: 1404 tokens\n", - "INFO:llama_index.token_counter.token_counter:> [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": 12, - "id": "7cfdd68d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "**`Final Response:`** \n", - "Vector store index is a way of storing data in a vector format. It is used to store data in a way that is easy to access and manipulate. The data is stored in a vector format, which is a collection of numbers that represent the data. This makes it easier to access and manipulate the data, as well as to store it in a more efficient way. Vector store index stores each Node and a corresponding embedding in a Vector Store. During query time, we extract relevant keywords from the query, and match those with pre-extracted Node keywords to fetch the corresponding Nodes. The extracted Nodes are passed to our Response Synthesis module, which can be configured to use different methods of synthesizing a response, such as Create and Refine or Tree Summarize." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/2`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2c05e859-9d49-4a87-8cb7-4c755aa72dd4
**Similarity:** 0.816241967681269
**Text:** file_name: data/llama/vector_store_index.png\n", - "\n", - " Nodel Node2**Image:**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/2`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 673418ff-7052-4921-9c9f-9d3fe8f6af49
**Similarity:** 0.7878806797032482
**Text:** How Each Index Works\n", - "\n", - "This guide describes how each index works with diagrams. We also visually h...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display_response(llama_response)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f459baab", - "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/optimizer/OptimizerDemo.ipynb b/examples/optimizer/OptimizerDemo.ipynb index 84e6be9edf32a..7ff686f826ec3 100644 --- a/examples/optimizer/OptimizerDemo.ipynb +++ b/examples/optimizer/OptimizerDemo.ipynb @@ -1,204 +1,198 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "df32a9f0", - "metadata": {}, - "source": [ - "# 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": [ - "\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": [ + "\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 gpt_index import GPTSimpleVectorIndex\n", + "from gpt_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 gpt_index import GPTSimpleVectorIndex\n", - "from gpt_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 +} \ No newline at end of file diff --git a/examples/paul_graham_essay/DavinciComparison.ipynb b/examples/paul_graham_essay/DavinciComparison.ipynb index 40670a9fb45d1..978ad7d6a6615 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 ce45dbb13be69..e555cc38b552d 100644 --- a/examples/paul_graham_essay/GPT4Comparison.ipynb +++ b/examples/paul_graham_essay/GPT4Comparison.ipynb @@ -1,654 +1,646 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "65850ded", - "metadata": {}, - "source": [ - "# GPT-4 Comparison" - ] - }, - { - "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": [ - "" - ] - }, - "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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before college the two main things I worked on, outside of schoo...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** whereby the students wouldn't require the faculty to teach anything, and in return the faculty wo...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 3/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husba...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 4/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hacke...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 5/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\n", + "\n", + "As w...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 6/6`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** and some people dislike being told such things.\n", + "\n", + "[11] People put plenty of stuff on the internet ...
" + ], + "text/plain": [ + "" + ] + }, + "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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 1/3`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** 0.740238551627948
**Text:** What I Worked On\n", + "\n", + "February 2021\n", + "\n", + "Before college the two main things I worked on, outside of schoo...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 2/3`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** really good. He recommended Trevor Blackwell, which surprised me at first, because at that point ...
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**`Source Node 3/3`**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd t...
" + ], + "text/plain": [ + "" + ] + }, + "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": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before college the two main things I worked on, outside of schoo...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** whereby the students wouldn't require the faculty to teach anything, and in return the faculty wo...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 3/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husba...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 4/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hacke...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 5/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\n", - "\n", - "As w...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 6/6`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** and some people dislike being told such things.\n", - "\n", - "[11] People put plenty of stuff on the internet ...
" - ], - "text/plain": [ - "" - ] - }, - "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": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 1/3`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** 0.740238551627948
**Text:** What I Worked On\n", - "\n", - "February 2021\n", - "\n", - "Before college the two main things I worked on, outside of schoo...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 2/3`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** really good. He recommended Trevor Blackwell, which surprised me at first, because at that point ...
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "--" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**`Source Node 3/3`**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "**Document ID:** 2ea119c7-fc3d-4090-a47a-8dd2a0d37416
**Similarity:** None
**Text:** make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd t...
" - ], - "text/plain": [ - "" - ] - }, - "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 afdd4334f4ac5..3e6e23cd6c8a4 100644 --- a/examples/paul_graham_essay/InsertDemo.ipynb +++ b/examples/paul_graham_essay/InsertDemo.ipynb @@ -1,13 +1,5 @@ { "cells": [ - { - "cell_type": "markdown", - "id": "48d79af8", - "metadata": {}, - "source": [ - "# 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 d2923c566c988..23c964f6009b3 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": [ - "\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\"." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "Empty response" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ + "\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\"." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "Empty response" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "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\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "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\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "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\"{response}\"))" + ] + } + ], + "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "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\"{response}\"))" - ] - }, - { - "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "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\"{response}\"))" - ] - }, - { - "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "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\"{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.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/TestEssay.ipynb b/examples/paul_graham_essay/TestEssay.ipynb index 064cddeb66e07..3e1661492cc08 100644 --- a/examples/paul_graham_essay/TestEssay.ipynb +++ b/examples/paul_graham_essay/TestEssay.ipynb @@ -1,668 +1,660 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9f9e2065", - "metadata": {}, - "source": [ - "# Paul Graham Essay Test" - ] - }, - { - "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": [ - "The author wrote short stories and tried to program on an IBM 1401." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "The author went on to start his own company." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ + "The author wrote short stories and tried to program on an IBM 1401." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "The author went on to start his own company." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ + "\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." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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": [ - "\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." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "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 52c25f1b642d6..b73d81c932b64 100644 --- a/examples/playground/PlaygroundDemo.ipynb +++ b/examples/playground/PlaygroundDemo.ipynb @@ -1,421 +1,413 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "c283d4df", - "metadata": {}, - "source": [ - "# Playground 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": "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IndexModeOutputDurationLLM TokensEmbedding Tokens
0GPTSimpleVectorIndexdefault\\nThe population of Berlin in 1949 was approxi...52.31913335457
1GPTSimpleVectorIndexembedding\\nThe population of Berlin in 1949 was approxi...8.19202535457
2GPTTreeIndexdefaultThe population of Berlin is approximately 3.7 ...12.54233551680
3GPTTreeIndexsummarize\\nThe population of Berlin is approximately 3....18.665586216170
4GPTTreeIndexembeddingApproximately 3.7 million people.3.5734583684598
5GPTTreeIndexretrieve\\nThe population of Berlin is 3.75 million reg...2.26959814390
\n", + "
" + ], + "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IndexModeOutputDurationLLM TokensEmbedding Tokens
0GPTSimpleVectorIndexdefault\\nThe population of Berlin in 1949 was approxi...52.31913335457
1GPTSimpleVectorIndexembedding\\nThe population of Berlin in 1949 was approxi...8.19202535457
2GPTTreeIndexdefaultThe population of Berlin is approximately 3.7 ...12.54233551680
3GPTTreeIndexsummarize\\nThe population of Berlin is approximately 3....18.665586216170
4GPTTreeIndexembeddingApproximately 3.7 million people.3.5734583684598
5GPTTreeIndexretrieve\\nThe population of Berlin is 3.75 million reg...2.26959814390
\n", - "
" - ], - "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/query_transformations/HyDEQueryTransformDemo.ipynb b/examples/query_transformations/HyDEQueryTransformDemo.ipynb index a069e823db3c9..945d504591491 100644 --- a/examples/query_transformations/HyDEQueryTransformDemo.ipynb +++ b/examples/query_transformations/HyDEQueryTransformDemo.ipynb @@ -389,7 +389,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/struct_indices/PandasIndexDemo.ipynb b/examples/struct_indices/PandasIndexDemo.ipynb index 32465aec1098b..9395b2403b01f 100644 --- a/examples/struct_indices/PandasIndexDemo.ipynb +++ b/examples/struct_indices/PandasIndexDemo.ipynb @@ -335,7 +335,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4, diff --git a/examples/struct_indices/SQLIndexDemo-Context.ipynb b/examples/struct_indices/SQLIndexDemo-Context.ipynb index 8eb00a25d5fd2..66498629f02d4 100644 --- a/examples/struct_indices/SQLIndexDemo-Context.ipynb +++ b/examples/struct_indices/SQLIndexDemo-Context.ipynb @@ -1,319 +1,319 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "e45f9b60-cd6b-4c15-958f-1feca5438128", - "metadata": {}, - "source": [ - "# SQL Index Demo - Table Context\n", - "\n", - "Demo where table contains context." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "fbd7317b", - "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": "107396a9-4aa7-49b3-9f0f-a755726c19ba", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTSQLStructStoreIndex, SQLDatabase, SimpleDirectoryReader, WikipediaReader, Document\n", - "from llama_index.indices.struct_store import SQLContextContainerBuilder\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "markdown", - "id": "77ac8d94-cd61-4869-a32b-0b2e7d18b83f", - "metadata": {}, - "source": [ - "### Load Wikipedia Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "93301fcf-a52b-430c-98a3-5360e6c8fc4a", - "metadata": {}, - "outputs": [], - "source": [ - "# install wikipedia python package\n", - "!pip install wikipedia" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba3f7e5e-cdc4-4529-bba9-db45d8457dba", - "metadata": {}, - "outputs": [], - "source": [ - "wiki_docs = WikipediaReader().load_data(pages=['Toronto', 'Berlin', 'Tokyo'])" - ] - }, - { - "cell_type": "markdown", - "id": "461438c8-302d-45c5-8e69-16ad604686d1", - "metadata": {}, - "source": [ - "### Create Database Schema" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a370b266-66f5-4624-bbf9-2ad57f0511f8", - "metadata": {}, - "outputs": [], - "source": [ - "from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea24f794-f10b-42e6-922d-9258b7167405", - "metadata": {}, - "outputs": [], - "source": [ - "engine = create_engine(\"sqlite:///:memory:\")\n", - "metadata_obj = MetaData(bind=engine)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b4154b29-7e23-4c26-a507-370a66186ae7", - "metadata": {}, - "outputs": [], - "source": [ - "# create city SQL table\n", - "table_name = \"city_stats\"\n", - "city_stats_table = Table(\n", - " table_name,\n", - " metadata_obj,\n", - " Column(\"city_name\", String(16), primary_key=True),\n", - " Column(\"population\", Integer),\n", - " Column(\"country\", String(16), nullable=False),\n", - ")\n", - "metadata_obj.create_all()" - ] - }, - { - "cell_type": "markdown", - "id": "1c09089a-6bcd-48db-8120-a84c8da3f82e", - "metadata": { - "tags": [] - }, - "source": [ - "### Build Index with Context" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "611319e5-d3c2-4286-a84f-ed2459896c58", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTSQLStructStoreIndex, SQLDatabase\n", - "from llama_index.indices.struct_store import SQLContextContainerBuilder" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3fc2dfab-90ea-4f01-9e28-d21fdc5f0758", - "metadata": {}, - "outputs": [], - "source": [ - "sql_database = SQLDatabase(engine, include_tables=[\"city_stats\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "89f6f1d1-a022-43d7-b135-a79ec9407956", - "metadata": {}, - "outputs": [], - "source": [ - "sql_database.table_info" - ] - }, - { - "cell_type": "markdown", - "id": "331ff0ce-9131-4680-a5f2-3f41c73e018e", - "metadata": {}, - "source": [ - "We either set the context manually, or have GPT extract the context for us" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a743f365-21c6-4eae-a2f4-fc72d4199daa", - "metadata": {}, - "outputs": [], - "source": [ - "# manually set context text\n", - "city_stats_text = (\n", - " \"This table gives information regarding the population and country of a given city.\\n\"\n", - " \"The user will query with codewords, where 'foo' corresponds to population and 'bar'\"\n", - " \"corresponds to city.\"\n", - ")\n", - "table_context_dict={\"city_stats\": city_stats_text}\n", - "context_builder = SQLContextContainerBuilder(sql_database, context_dict=table_context_dict)\n", - "context_container = context_builder.build_context_container()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b15ffc74-4a44-40b4-87b1-44f952ebfd58", - "metadata": {}, - "outputs": [], - "source": [ - "index = GPTSQLStructStoreIndex.from_documents(\n", - " wiki_docs, \n", - " sql_database=sql_database, \n", - " table_name=\"city_stats\",\n", - " sql_context_container=context_container\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5cdcc666-4b51-4ed5-92ca-e98e8a01fdd0", - "metadata": {}, - "outputs": [], - "source": [ - "# extract context from a raw Document using GPT\n", - "city_stats_text = (\n", - " \"This table gives information regarding the population and country of a given city.\\n\"\n", - ")\n", - "context_documents_dict = {\"city_stats\": [Document(city_stats_text)]}\n", - "context_builder = SQLContextContainerBuilder.from_documents(\n", - " context_documents_dict, \n", - " sql_database\n", - ")\n", - "context_container = context_builder.build_context_container()\n", - "\n", - "index = GPTSQLStructStoreIndex.from_documents(\n", - " wiki_docs, \n", - " sql_database=sql_database, \n", - " table_name=\"city_stats\",\n", - " sql_context_container=context_container,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b315b8ff-7dd7-4e7d-ac47-8c5a0c3e7ae9", - "metadata": {}, - "outputs": [], - "source": [ - "# view current table\n", - "stmt = select(\n", - " [column(\"city_name\"), column(\"population\"), column(\"country\")]\n", - ").select_from(city_stats_table)\n", - "\n", - "with engine.connect() as connection:\n", - " results = connection.execute(stmt).fetchall()\n", - " print(results)\n" - ] - }, - { - "cell_type": "markdown", - "id": "051a171f-8c97-40ed-ae17-4e3fa3785487", - "metadata": {}, - "source": [ - "### Query Index" - ] - }, - { - "cell_type": "markdown", - "id": "91139712-f232-47e1-9683-cbbd49cd331b", - "metadata": {}, - "source": [ - "Here we show a natural language query, which is translated to a SQL query under the hood." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a76d1816-4f70-4914-80af-7b968c614592", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"Which city has the highest population?\", mode=\"default\")" - ] - }, - { - "cell_type": "markdown", - "id": "5dc2f7bf-6f6c-42ba-8f42-47afea6606ad", - "metadata": {}, - "source": [ - "We can also use codewords during the NL query! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d71045c0-7a96-4e86-b38c-c378b7759aa4", - "metadata": {}, - "outputs": [], - "source": [ - "# set Logging to DEBUG for more detailed outputs\n", - "response = index.query(\"Which bar has the highest foo?\", mode=\"default\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e713d73e-73ed-4748-8673-f476899fac8e", - "metadata": {}, - "outputs": [], - "source": [ - "display(Markdown(f\"{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" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "e45f9b60-cd6b-4c15-958f-1feca5438128", + "metadata": {}, + "source": [ + "# SQL Index Demo\n", + "\n", + "Demo where table contains context." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fbd7317b", + "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": "107396a9-4aa7-49b3-9f0f-a755726c19ba", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTSQLStructStoreIndex, SQLDatabase, SimpleDirectoryReader, WikipediaReader, Document\n", + "from llama_index.indices.struct_store import SQLContextContainerBuilder\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "markdown", + "id": "77ac8d94-cd61-4869-a32b-0b2e7d18b83f", + "metadata": {}, + "source": [ + "### Load Wikipedia Data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "93301fcf-a52b-430c-98a3-5360e6c8fc4a", + "metadata": {}, + "outputs": [], + "source": [ + "# install wikipedia python package\n", + "!pip install wikipedia" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba3f7e5e-cdc4-4529-bba9-db45d8457dba", + "metadata": {}, + "outputs": [], + "source": [ + "wiki_docs = WikipediaReader().load_data(pages=['Toronto', 'Berlin', 'Tokyo'])" + ] + }, + { + "cell_type": "markdown", + "id": "461438c8-302d-45c5-8e69-16ad604686d1", + "metadata": {}, + "source": [ + "### Create Database Schema" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a370b266-66f5-4624-bbf9-2ad57f0511f8", + "metadata": {}, + "outputs": [], + "source": [ + "from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea24f794-f10b-42e6-922d-9258b7167405", + "metadata": {}, + "outputs": [], + "source": [ + "engine = create_engine(\"sqlite:///:memory:\")\n", + "metadata_obj = MetaData(bind=engine)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4154b29-7e23-4c26-a507-370a66186ae7", + "metadata": {}, + "outputs": [], + "source": [ + "# create city SQL table\n", + "table_name = \"city_stats\"\n", + "city_stats_table = Table(\n", + " table_name,\n", + " metadata_obj,\n", + " Column(\"city_name\", String(16), primary_key=True),\n", + " Column(\"population\", Integer),\n", + " Column(\"country\", String(16), nullable=False),\n", + ")\n", + "metadata_obj.create_all()" + ] + }, + { + "cell_type": "markdown", + "id": "1c09089a-6bcd-48db-8120-a84c8da3f82e", + "metadata": { + "tags": [] + }, + "source": [ + "### Build Index with Context" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "611319e5-d3c2-4286-a84f-ed2459896c58", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTSQLStructStoreIndex, SQLDatabase\n", + "from llama_index.indices.struct_store import SQLContextContainerBuilder" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3fc2dfab-90ea-4f01-9e28-d21fdc5f0758", + "metadata": {}, + "outputs": [], + "source": [ + "sql_database = SQLDatabase(engine, include_tables=[\"city_stats\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89f6f1d1-a022-43d7-b135-a79ec9407956", + "metadata": {}, + "outputs": [], + "source": [ + "sql_database.table_info" + ] + }, + { + "cell_type": "markdown", + "id": "331ff0ce-9131-4680-a5f2-3f41c73e018e", + "metadata": {}, + "source": [ + "We either set the context manually, or have GPT extract the context for us" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a743f365-21c6-4eae-a2f4-fc72d4199daa", + "metadata": {}, + "outputs": [], + "source": [ + "# manually set context text\n", + "city_stats_text = (\n", + " \"This table gives information regarding the population and country of a given city.\\n\"\n", + " \"The user will query with codewords, where 'foo' corresponds to population and 'bar'\"\n", + " \"corresponds to city.\"\n", + ")\n", + "table_context_dict={\"city_stats\": city_stats_text}\n", + "context_builder = SQLContextContainerBuilder(sql_database, context_dict=table_context_dict)\n", + "context_container = context_builder.build_context_container()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b15ffc74-4a44-40b4-87b1-44f952ebfd58", + "metadata": {}, + "outputs": [], + "source": [ + "index = GPTSQLStructStoreIndex.from_documents(\n", + " wiki_docs, \n", + " sql_database=sql_database, \n", + " table_name=\"city_stats\",\n", + " sql_context_container=context_container\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5cdcc666-4b51-4ed5-92ca-e98e8a01fdd0", + "metadata": {}, + "outputs": [], + "source": [ + "# extract context from a raw Document using GPT\n", + "city_stats_text = (\n", + " \"This table gives information regarding the population and country of a given city.\\n\"\n", + ")\n", + "context_documents_dict = {\"city_stats\": [Document(city_stats_text)]}\n", + "context_builder = SQLContextContainerBuilder.from_documents(\n", + " context_documents_dict, \n", + " sql_database\n", + ")\n", + "context_container = context_builder.build_context_container()\n", + "\n", + "index = GPTSQLStructStoreIndex.from_documents(\n", + " wiki_docs, \n", + " sql_database=sql_database, \n", + " table_name=\"city_stats\",\n", + " sql_context_container=context_container,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b315b8ff-7dd7-4e7d-ac47-8c5a0c3e7ae9", + "metadata": {}, + "outputs": [], + "source": [ + "# view current table\n", + "stmt = select(\n", + " [column(\"city_name\"), column(\"population\"), column(\"country\")]\n", + ").select_from(city_stats_table)\n", + "\n", + "with engine.connect() as connection:\n", + " results = connection.execute(stmt).fetchall()\n", + " print(results)\n" + ] + }, + { + "cell_type": "markdown", + "id": "051a171f-8c97-40ed-ae17-4e3fa3785487", + "metadata": {}, + "source": [ + "### Query Index" + ] + }, + { + "cell_type": "markdown", + "id": "91139712-f232-47e1-9683-cbbd49cd331b", + "metadata": {}, + "source": [ + "Here we show a natural language query, which is translated to a SQL query under the hood." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a76d1816-4f70-4914-80af-7b968c614592", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"Which city has the highest population?\", mode=\"default\")" + ] + }, + { + "cell_type": "markdown", + "id": "5dc2f7bf-6f6c-42ba-8f42-47afea6606ad", + "metadata": {}, + "source": [ + "We can also use codewords during the NL query! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d71045c0-7a96-4e86-b38c-c378b7759aa4", + "metadata": {}, + "outputs": [], + "source": [ + "# set Logging to DEBUG for more detailed outputs\n", + "response = index.query(\"Which bar has the highest foo?\", mode=\"default\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e713d73e-73ed-4748-8673-f476899fac8e", + "metadata": {}, + "outputs": [], + "source": [ + "display(Markdown(f\"{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.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/struct_indices/SQLIndexDemo-ManyTables.ipynb b/examples/struct_indices/SQLIndexDemo-ManyTables.ipynb index c2a0c5067ae76..ba2dd0ce17b43 100644 --- a/examples/struct_indices/SQLIndexDemo-ManyTables.ipynb +++ b/examples/struct_indices/SQLIndexDemo-ManyTables.ipynb @@ -1,400 +1,400 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "e45f9b60-cd6b-4c15-958f-1feca5438128", - "metadata": {}, - "source": [ - "# SQL Index Demo - Many Tables\n", - "\n", - "Demo where table contains context." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "fbd7317b", - "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, - "id": "107396a9-4aa7-49b3-9f0f-a755726c19ba", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, SimpleDirectoryReader, WikipediaReader, Document\n", - "from gpt_index.indices.struct_store import SQLContextContainerBuilder\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "markdown", - "id": "461438c8-302d-45c5-8e69-16ad604686d1", - "metadata": {}, - "source": [ - "### Create Database Schema + Test Data\n", - "\n", - "Here we introduce a toy scenario where there are 100 tables (too big to fit into the prompt)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "a370b266-66f5-4624-bbf9-2ad57f0511f8", - "metadata": {}, - "outputs": [], - "source": [ - "from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, column" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "ea24f794-f10b-42e6-922d-9258b7167405", - "metadata": {}, - "outputs": [], - "source": [ - "engine = create_engine(\"sqlite:///:memory:\")\n", - "metadata_obj = MetaData(bind=engine)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "b4154b29-7e23-4c26-a507-370a66186ae7", - "metadata": {}, - "outputs": [], - "source": [ - "# create city SQL table\n", - "table_name = \"city_stats\"\n", - "city_stats_table = Table(\n", - " table_name,\n", - " metadata_obj,\n", - " Column(\"city_name\", String(16), primary_key=True),\n", - " Column(\"population\", Integer),\n", - " Column(\"country\", String(16), nullable=False),\n", - ")\n", - "all_table_names = [\"city_stats\"]\n", - "# create a ton of dummy tables\n", - "n = 100\n", - "for i in range(n):\n", - " tmp_table_name = f\"tmp_table_{i}\"\n", - " tmp_table = Table(\n", - " tmp_table_name,\n", - " metadata_obj,\n", - " Column(f\"tmp_field_{i}_1\", String(16), primary_key=True),\n", - " Column(f\"tmp_field_{i}_2\", Integer),\n", - " Column(f\"tmp_field_{i}_3\", String(16), nullable=False),\n", - " )\n", - " all_table_names.append(f\"tmp_table_{i}\")\n", - "\n", - "metadata_obj.create_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4768bcb4-c40e-4d5d-8d70-7cb3228b50ab", - "metadata": {}, - "outputs": [], - "source": [ - "# print tables\n", - "metadata_obj.tables.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "4c0eb518-5da3-4215-8280-0776d07806a0", - "metadata": {}, - "source": [ - "We introduce some test data into the `city_stats` table" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "d15192b6-99f9-4f72-b637-82e885ea057f", - "metadata": {}, - "outputs": [], - "source": [ - "from sqlalchemy import insert\n", - "rows = [\n", - " {\"city_name\": \"Toronto\", \"population\": 2930000, \"country\": \"Canada\"},\n", - " {\"city_name\": \"Tokyo\", \"population\": 13960000, \"country\": \"Japan\"},\n", - " {\"city_name\": \"Chicago\", \"population\": 2679000, \"country\": \"United States\"},\n", - " {\"city_name\": \"Seoul\", \"population\": 9776000, \"country\": \"South Korea\"},\n", - "]\n", - "for row in rows:\n", - " stmt = insert(city_stats_table).values(**row)\n", - " with engine.connect() as connection:\n", - " cursor = connection.execute(stmt)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "bfc2e4a4-e11d-4d8f-bf1f-7f777a1dc6e2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('Toronto', 2930000, 'Canada'), ('Tokyo', 13960000, 'Japan'), ('Chicago', 2679000, 'United States'), ('Seoul', 9776000, 'South Korea')]\n" - ] - } - ], - "source": [ - "with engine.connect() as connection:\n", - " cursor = connection.exec_driver_sql(\"SELECT * FROM city_stats\")\n", - " print(cursor.fetchall())" - ] - }, - { - "cell_type": "markdown", - "id": "1c09089a-6bcd-48db-8120-a84c8da3f82e", - "metadata": { - "tags": [] - }, - "source": [ - "### Using GPT Index to Store Table Schema Context" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "611319e5-d3c2-4286-a84f-ed2459896c58", - "metadata": {}, - "outputs": [], - "source": [ - "from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, GPTSimpleVectorIndex\n", - "from gpt_index.indices.struct_store import SQLContextContainerBuilder" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "3fc2dfab-90ea-4f01-9e28-d21fdc5f0758", - "metadata": {}, - "outputs": [], - "source": [ - "sql_database = SQLDatabase(engine)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "89f6f1d1-a022-43d7-b135-a79ec9407956", - "metadata": {}, - "outputs": [], - "source": [ - "sql_database.table_info" - ] - }, - { - "cell_type": "markdown", - "id": "331ff0ce-9131-4680-a5f2-3f41c73e018e", - "metadata": {}, - "source": [ - "We dump the table schema information into a vector index. The vector index is stored within the context builder for future use." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1e86d548-a3f4-436a-a754-5247871ebe55", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "# build a vector index from the table schema information\n", - "context_builder = SQLContextContainerBuilder(sql_database)\n", - "table_schema_index = context_builder.derive_index_from_context(\n", - " GPTSimpleVectorIndex,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a743f365-21c6-4eae-a2f4-fc72d4199daa", - "metadata": {}, - "outputs": [], - "source": [ - "# NOTE: not ingesting any unstructured documents atm\n", - "index = GPTSQLStructStoreIndex.from_documents(\n", - " [],\n", - " sql_database=sql_database, \n", - " table_name=\"city_stats\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "051a171f-8c97-40ed-ae17-4e3fa3785487", - "metadata": {}, - "source": [ - "### Query Index" - ] - }, - { - "cell_type": "markdown", - "id": "91139712-f232-47e1-9683-cbbd49cd331b", - "metadata": {}, - "source": [ - "Here we show a natural language query. \n", - "1. We first query for the right table schema. Note that we build a context container during query-time.\n", - "2. Given this context container, we execute the NL query against the db." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "eabededd-3c17-45b7-aabc-06a2457bc3cb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 135 tokens\n", - "> [query] Total LLM token usage: 135 tokens\n", - "INFO:root:> [query] Total embedding token usage: 23 tokens\n", - "> [query] Total embedding token usage: 23 tokens\n", - "\n", - "Table 'city_stats':\n", - "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n" - ] - } - ], - "source": [ - "query_str = \"Which city has the highest population?\"\n", - "context_builder.query_index_for_context(table_schema_index, query_str, store_context_str=True)\n", - "context_container = context_builder.build_context_container()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "a80ee856-6ac3-4b37-b390-be583024bed4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "\n", - "Table 'city_stats':\n", - "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{context_container.context_str}\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "64671ddc-9768-40c2-8898-ab7c0cf10917", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:root:> Table desc str: \n", - "Table 'city_stats':\n", - "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n", - "> Table desc str: \n", - "Table 'city_stats':\n", - "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n", - "INFO:root:> [query] Total LLM token usage: 134 tokens\n", - "> [query] Total LLM token usage: 134 tokens\n", - "INFO:root:> [query] Total embedding token usage: 0 tokens\n", - "> [query] Total embedding token usage: 0 tokens\n" - ] - } - ], - "source": [ - "response = index.query(query_str, sql_context_container=context_container)" - ] - }, - { - "cell_type": "markdown", - "id": "5dc2f7bf-6f6c-42ba-8f42-47afea6606ad", - "metadata": {}, - "source": [ - "We can also use codewords during the NL query! " - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "25c11645-56bd-433a-85f4-420413f8970d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"[('Tokyo',)]\"" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "str(response)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3f72abc6-54d7-4f85-abf8-32978d94f558", - "metadata": {}, - "outputs": [], - "source": [ - "response.extra_info" - ] - } - ], - "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" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "e45f9b60-cd6b-4c15-958f-1feca5438128", + "metadata": {}, + "source": [ + "# SQL Index Demo\n", + "\n", + "Demo where table contains context." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fbd7317b", + "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, + "id": "107396a9-4aa7-49b3-9f0f-a755726c19ba", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, SimpleDirectoryReader, WikipediaReader, Document\n", + "from gpt_index.indices.struct_store import SQLContextContainerBuilder\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "markdown", + "id": "461438c8-302d-45c5-8e69-16ad604686d1", + "metadata": {}, + "source": [ + "### Create Database Schema + Test Data\n", + "\n", + "Here we introduce a toy scenario where there are 100 tables (too big to fit into the prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a370b266-66f5-4624-bbf9-2ad57f0511f8", + "metadata": {}, + "outputs": [], + "source": [ + "from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, column" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "ea24f794-f10b-42e6-922d-9258b7167405", + "metadata": {}, + "outputs": [], + "source": [ + "engine = create_engine(\"sqlite:///:memory:\")\n", + "metadata_obj = MetaData(bind=engine)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "b4154b29-7e23-4c26-a507-370a66186ae7", + "metadata": {}, + "outputs": [], + "source": [ + "# create city SQL table\n", + "table_name = \"city_stats\"\n", + "city_stats_table = Table(\n", + " table_name,\n", + " metadata_obj,\n", + " Column(\"city_name\", String(16), primary_key=True),\n", + " Column(\"population\", Integer),\n", + " Column(\"country\", String(16), nullable=False),\n", + ")\n", + "all_table_names = [\"city_stats\"]\n", + "# create a ton of dummy tables\n", + "n = 100\n", + "for i in range(n):\n", + " tmp_table_name = f\"tmp_table_{i}\"\n", + " tmp_table = Table(\n", + " tmp_table_name,\n", + " metadata_obj,\n", + " Column(f\"tmp_field_{i}_1\", String(16), primary_key=True),\n", + " Column(f\"tmp_field_{i}_2\", Integer),\n", + " Column(f\"tmp_field_{i}_3\", String(16), nullable=False),\n", + " )\n", + " all_table_names.append(f\"tmp_table_{i}\")\n", + "\n", + "metadata_obj.create_all()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4768bcb4-c40e-4d5d-8d70-7cb3228b50ab", + "metadata": {}, + "outputs": [], + "source": [ + "# print tables\n", + "metadata_obj.tables.keys()" + ] + }, + { + "cell_type": "markdown", + "id": "4c0eb518-5da3-4215-8280-0776d07806a0", + "metadata": {}, + "source": [ + "We introduce some test data into the `city_stats` table" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d15192b6-99f9-4f72-b637-82e885ea057f", + "metadata": {}, + "outputs": [], + "source": [ + "from sqlalchemy import insert\n", + "rows = [\n", + " {\"city_name\": \"Toronto\", \"population\": 2930000, \"country\": \"Canada\"},\n", + " {\"city_name\": \"Tokyo\", \"population\": 13960000, \"country\": \"Japan\"},\n", + " {\"city_name\": \"Chicago\", \"population\": 2679000, \"country\": \"United States\"},\n", + " {\"city_name\": \"Seoul\", \"population\": 9776000, \"country\": \"South Korea\"},\n", + "]\n", + "for row in rows:\n", + " stmt = insert(city_stats_table).values(**row)\n", + " with engine.connect() as connection:\n", + " cursor = connection.execute(stmt)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "bfc2e4a4-e11d-4d8f-bf1f-7f777a1dc6e2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[('Toronto', 2930000, 'Canada'), ('Tokyo', 13960000, 'Japan'), ('Chicago', 2679000, 'United States'), ('Seoul', 9776000, 'South Korea')]\n" + ] + } + ], + "source": [ + "with engine.connect() as connection:\n", + " cursor = connection.exec_driver_sql(\"SELECT * FROM city_stats\")\n", + " print(cursor.fetchall())" + ] + }, + { + "cell_type": "markdown", + "id": "1c09089a-6bcd-48db-8120-a84c8da3f82e", + "metadata": { + "tags": [] + }, + "source": [ + "### Using GPT Index to Store Table Schema Context" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "611319e5-d3c2-4286-a84f-ed2459896c58", + "metadata": {}, + "outputs": [], + "source": [ + "from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, GPTSimpleVectorIndex\n", + "from gpt_index.indices.struct_store import SQLContextContainerBuilder" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "3fc2dfab-90ea-4f01-9e28-d21fdc5f0758", + "metadata": {}, + "outputs": [], + "source": [ + "sql_database = SQLDatabase(engine)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89f6f1d1-a022-43d7-b135-a79ec9407956", + "metadata": {}, + "outputs": [], + "source": [ + "sql_database.table_info" + ] + }, + { + "cell_type": "markdown", + "id": "331ff0ce-9131-4680-a5f2-3f41c73e018e", + "metadata": {}, + "source": [ + "We dump the table schema information into a vector index. The vector index is stored within the context builder for future use." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e86d548-a3f4-436a-a754-5247871ebe55", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# build a vector index from the table schema information\n", + "context_builder = SQLContextContainerBuilder(sql_database)\n", + "table_schema_index = context_builder.derive_index_from_context(\n", + " GPTSimpleVectorIndex,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a743f365-21c6-4eae-a2f4-fc72d4199daa", + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE: not ingesting any unstructured documents atm\n", + "index = GPTSQLStructStoreIndex.from_documents(\n", + " [],\n", + " sql_database=sql_database, \n", + " table_name=\"city_stats\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "051a171f-8c97-40ed-ae17-4e3fa3785487", + "metadata": {}, + "source": [ + "### Query Index" + ] + }, + { + "cell_type": "markdown", + "id": "91139712-f232-47e1-9683-cbbd49cd331b", + "metadata": {}, + "source": [ + "Here we show a natural language query. \n", + "1. We first query for the right table schema. Note that we build a context container during query-time.\n", + "2. Given this context container, we execute the NL query against the db." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "eabededd-3c17-45b7-aabc-06a2457bc3cb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 135 tokens\n", + "> [query] Total LLM token usage: 135 tokens\n", + "INFO:root:> [query] Total embedding token usage: 23 tokens\n", + "> [query] Total embedding token usage: 23 tokens\n", + "\n", + "Table 'city_stats':\n", + "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n" + ] + } + ], + "source": [ + "query_str = \"Which city has the highest population?\"\n", + "context_builder.query_index_for_context(table_schema_index, query_str, store_context_str=True)\n", + "context_container = context_builder.build_context_container()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "a80ee856-6ac3-4b37-b390-be583024bed4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "\n", + "Table 'city_stats':\n", + "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{context_container.context_str}\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "64671ddc-9768-40c2-8898-ab7c0cf10917", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:root:> Table desc str: \n", + "Table 'city_stats':\n", + "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n", + "> Table desc str: \n", + "Table 'city_stats':\n", + "city_name (VARCHAR(16)), population (INTEGER), country (VARCHAR(16))\n", + "INFO:root:> [query] Total LLM token usage: 134 tokens\n", + "> [query] Total LLM token usage: 134 tokens\n", + "INFO:root:> [query] Total embedding token usage: 0 tokens\n", + "> [query] Total embedding token usage: 0 tokens\n" + ] + } + ], + "source": [ + "response = index.query(query_str, sql_context_container=context_container)" + ] + }, + { + "cell_type": "markdown", + "id": "5dc2f7bf-6f6c-42ba-8f42-47afea6606ad", + "metadata": {}, + "source": [ + "We can also use codewords during the NL query! " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "25c11645-56bd-433a-85f4-420413f8970d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"[('Tokyo',)]\"" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f72abc6-54d7-4f85-abf8-32978d94f558", + "metadata": {}, + "outputs": [], + "source": [ + "response.extra_info" + ] + } + ], + "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 diff --git a/examples/struct_indices/SQLIndexDemo.ipynb b/examples/struct_indices/SQLIndexDemo.ipynb index 4deb993677481..29b0e5eaf0f2e 100644 --- a/examples/struct_indices/SQLIndexDemo.ipynb +++ b/examples/struct_indices/SQLIndexDemo.ipynb @@ -5,7 +5,7 @@ "id": "e45f9b60-cd6b-4c15-958f-1feca5438128", "metadata": {}, "source": [ - "# SQL Index Demo - Basic" + "# SQL Index Demo" ] }, { @@ -452,7 +452,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-Benchmark-GPT4.ipynb b/examples/test_wiki/TestNYC-Benchmark-GPT4.ipynb index bd9b68b8a6db0..70eb75082d9fe 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": "36f92b98", - "metadata": {}, - "source": [ - "# GPT4 NYC Wiki Benchmark" - ] - }, - { - "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: \\nAnswer is correct: ' \"\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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...FalseFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?FalseFalse
4When was the first documented visit into New Y...FalseFalse
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueFalse
1Who was elected as the mayor after the Great D...FalseFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...FalseTrue
1Who was elected as the mayor after the Great D...FalseTrue
2How many tourists visited New York City in 2019?TrueTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor during the Great ...TrueTrue
2How many tourists visited New York City in 2019?FalseTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...FalseTrue
1Who was elected as the mayor after the Great D...FalseTrue
2How many tourists visited New York City in 2019?FalseTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor during the Great ...TrueTrue
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...TrueFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...TrueFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrueContext is relevant: True\\nAnswer is correct: ...
1Who was elected as the mayor after the Great D...TrueFalseContext is relevant: False\\nAnswer is correct:...
2How many tourists visited New York City in 2019?TrueFalseContext is relevant: False\\nAnswer is correct:...
3What are the airports in New York City?TrueFalseContext is relevant: False\\nAnswer is correct:...
4When was the first documented visit into New Y...TrueFalseContext is relevant: False\\nAnswer is correct:...
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
1Who was elected as the mayor after the Great D...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
2How many tourists visited New York City in 2019?FalseFalse\\n\\nContext is relevant: False\\nAnswer is corr...
3What are the airports in New York City?TrueFalse\\n\\nContext is relevant: False\\nAnswer is corr...
4When was the first documented visit into New Y...FalseTrue\\n\\nContext is relevant: True\\nAnswer is corre...
\n", - "
" - ], - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
1Who was elected as the mayor after the Great D...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
2How many tourists visited New York City in 2019?FalseFalse\\n\\nContext is relevant: False\\nAnswer is corr...
3What are the airports in New York City?TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
4When was the first documented visit into New Y...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
\n", - "
" - ], - "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: \\nAnswer is correct: ' \"\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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...FalseFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?FalseFalse
4When was the first documented visit into New Y...FalseFalse
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueFalse
1Who was elected as the mayor after the Great D...FalseFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...FalseTrue
1Who was elected as the mayor after the Great D...FalseTrue
2How many tourists visited New York City in 2019?TrueTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor during the Great ...TrueTrue
2How many tourists visited New York City in 2019?FalseTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...FalseTrue
1Who was elected as the mayor after the Great D...FalseTrue
2How many tourists visited New York City in 2019?FalseTrue
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor during the Great ...TrueTrue
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueTrue
4When was the first documented visit into New Y...TrueTrue
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...TrueFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect ResponseCorrect Source
0What battles took place in New York City in th...TrueTrue
1Who was elected as the mayor after the Great D...TrueFalse
2How many tourists visited New York City in 2019?FalseFalse
3What are the airports in New York City?TrueFalse
4When was the first documented visit into New Y...TrueFalse
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrueContext is relevant: True\\nAnswer is correct: ...
1Who was elected as the mayor after the Great D...TrueFalseContext is relevant: False\\nAnswer is correct:...
2How many tourists visited New York City in 2019?TrueFalseContext is relevant: False\\nAnswer is correct:...
3What are the airports in New York City?TrueFalseContext is relevant: False\\nAnswer is correct:...
4When was the first documented visit into New Y...TrueFalseContext is relevant: False\\nAnswer is correct:...
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
1Who was elected as the mayor after the Great D...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
2How many tourists visited New York City in 2019?FalseFalse\\n\\nContext is relevant: False\\nAnswer is corr...
3What are the airports in New York City?TrueFalse\\n\\nContext is relevant: False\\nAnswer is corr...
4When was the first documented visit into New Y...FalseTrue\\n\\nContext is relevant: True\\nAnswer is corre...
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Test QueryCorrect Response (LLM)Correct Source (LLM)Eval (LLM)
0What battles took place in New York City in th...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
1Who was elected as the mayor after the Great D...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
2How many tourists visited New York City in 2019?FalseFalse\\n\\nContext is relevant: False\\nAnswer is corr...
3What are the airports in New York City?TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
4When was the first documented visit into New Y...TrueTrue\\n\\nContext is relevant: True\\nAnswer is corre...
\n", + "
" + ], + "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 ceef063e4c0dc..0e4865b09c2a2 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": "cf0f06c0", - "metadata": {}, - "source": [ - "# GPT4 NYC Wiki Tree Index" - ] - }, { "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 4a91651ae41a7..dd0526b19e9c8 100644 --- a/examples/test_wiki/TestNYC.ipynb +++ b/examples/test_wiki/TestNYC.ipynb @@ -1,188 +1,180 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "b8a16e85", - "metadata": {}, - "source": [ - "# NYC Wiki 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 5f61e4e587d83..f2b79c1d0750c 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 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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" + ] + }, + { + "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\"{response}\"))" - ] - }, - { - "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\"{response}\"))" - ] - }, - { - "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\"{response}\"))" - ] - }, - { - "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\"{response}\"))" - ] - }, - { - "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\"{response}\"))" - ] - }, - { - "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\"{response}\"))" - ] - }, - { - "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.11.0" - } - }, - "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 d8a30a42d6ca7..a919e7c340553 100644 --- a/examples/test_wiki/TestWikiReader.ipynb +++ b/examples/test_wiki/TestWikiReader.ipynb @@ -1,297 +1,289 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "3e3d4fcb", - "metadata": {}, - "source": [ - "# Test Wiki Reader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52295407", - "metadata": {}, - "outputs": [], - "source": [ - "imporat 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/AsyncIndexCreationDemo.ipynb b/examples/vector_indices/AsyncIndexCreationDemo.ipynb index 9f1b82f1f1212..fcd75314e63de 100644 --- a/examples/vector_indices/AsyncIndexCreationDemo.ipynb +++ b/examples/vector_indices/AsyncIndexCreationDemo.ipynb @@ -1,215 +1,215 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "f57c7b08", - "metadata": {}, - "source": [ - "# Async Index Creation Demo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "5db0283d", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "\n", - "# Helps asyncio run within Jupyter\n", - "import nest_asyncio\n", - "nest_asyncio.apply()\n", - "\n", - "# My OpenAI Key\n", - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"[YOUR_API_KEY]\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "50e3bb2e", - "metadata": {}, - "outputs": [], - "source": [ - "from llama_index import GPTSimpleVectorIndex, download_loader\n", - "\n", - "WikipediaReader = download_loader(\"WikipediaReader\")\n", - "\n", - "loader = WikipediaReader()\n", - "documents = loader.load_data(pages=['Berlin', 'Santiago', 'Moscow', 'Tokyo', 'Jakarta', 'Cairo', 'Bogota', 'Shanghai', 'Damascus'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "d14b17bf", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(documents)" - ] - }, - { - "cell_type": "markdown", - "id": "2684824b", - "metadata": {}, - "source": [ - "9 Wikipedia articles downloaded as documents" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "4537def9", - "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: 142295 tokens\n" - ] + "cells": [ + { + "cell_type": "markdown", + "id": "f57c7b08", + "metadata": {}, + "source": [ + "# Async Index Creation Demo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "5db0283d", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Helps asyncio run within Jupyter\n", + "import nest_asyncio\n", + "nest_asyncio.apply()\n", + "\n", + "# My OpenAI Key\n", + "import os\n", + "os.environ['OPENAI_API_KEY'] = \"[YOUR_API_KEY]\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "50e3bb2e", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import GPTSimpleVectorIndex, download_loader\n", + "\n", + "WikipediaReader = download_loader(\"WikipediaReader\")\n", + "\n", + "loader = WikipediaReader()\n", + "documents = loader.load_data(pages=['Berlin', 'Santiago', 'Moscow', 'Tokyo', 'Jakarta', 'Cairo', 'Bogota', 'Shanghai', 'Damascus'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d14b17bf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(documents)" + ] + }, + { + "cell_type": "markdown", + "id": "2684824b", + "metadata": {}, + "source": [ + "9 Wikipedia articles downloaded as documents" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4537def9", + "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: 142295 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7.691995083000052\n" + ] + } + ], + "source": [ + "start_time = time.perf_counter()\n", + "index = GPTSimpleVectorIndex.from_documents(documents)\n", + "duration = time.perf_counter() - start_time\n", + "print(duration)" + ] + }, + { + "cell_type": "markdown", + "id": "6374ac99", + "metadata": {}, + "source": [ + "Standard index creation took 7.69 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "60a7c522", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=245 request_id=314b145a07f65fd34e707f633cc1a444 response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=432 request_id=bb9e796d0b8f9c2365b68de8a56009ff response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=433 request_id=7a94707fe2f8916e9cdd8276a5748207 response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=499 request_id=cda679215293c3a13ed57c2eae3dc582 response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=527 request_id=5e1c3e74aa3f9f950e4035f81a0f0a15 response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=585 request_id=81983fe76eab95f73f82df881ff7b2d9 response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=574 request_id=702a182b54a29a33719205f722378c8e response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=575 request_id=d1df11775c59a3ba403dda253081f8eb response_code=200\n", + "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=575 request_id=47929f13469569527505b51958cd8e71 response_code=200\n", + "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", + "INFO:root:> [build_index_from_documents] Total embedding token usage: 142295 tokens\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.3730635830000892\n" + ] + } + ], + "source": [ + "start_time = time.perf_counter()\n", + "index = GPTSimpleVectorIndex(documents, use_async=True)\n", + "duration = time.perf_counter() - start_time\n", + "print(duration)" + ] + }, + { + "cell_type": "markdown", + "id": "8bd9de0b", + "metadata": {}, + "source": [ + "Async index creation took 2.37 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "d0db93cb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:> [query] Total LLM token usage: 4075 tokens\n", + "INFO:root:> [query] Total embedding token usage: 8 tokens\n" + ] + }, + { + "data": { + "text/plain": [ + "Response(response=\"\\n\\nThe name 'Jakarta' is derived from the word Jayakarta (Devanagari: जयकर्त) which is ultimately derived from the Sanskrit जय jaya (victorious), and कृत krta (accomplished, acquired), thus Jayakarta translates as 'victorious deed', 'complete act' or 'complete victory'. It was named for the Muslim troops of Fatahillah which successfully defeated and drove the Portuguese away from the city in 1527. Before it was called Jayakarta, the city was known as 'Sunda Kelapa'. Tomé Pires, a Portuguese apothecary wrote the name of the city on his magnum opus as Jacatra or Jacarta during his journey to East Indies. The city is located in a low-lying area ranging from −2 to 91 m (−7 to 299 ft) with an average elevation of 8 m (26 ft) above sea level with historically extensive swampy areas. Some parts of the city have been constructed on reclaimed tidal flats that occur around the area. Thirteen rivers flow through Jakarta, including the Ciliwung River, Kalibaru, Pesanggra\", source_nodes=[SourceNode(source_text=\"Jakarta (; Indonesian pronunciation: [dʒaˈkarta] (listen)), officially the Special Capital Region of Jakarta (Indonesian: Daerah Khusus Ibukota Jakarta), is the capital and largest city of Indonesia. Lying on the northwest coast of Java, the world's most populous island, Jakarta is the largest city in Southeast Asia and serves as the diplomatic capital of ASEAN.\\nThe city is the economic, cultural, and political centre of Indonesia. It possesses a province-level status and has a population of 10,562,088 as of mid-2021. Although Jakarta extends over only 664.01 km2 (256.38 sq mi) and thus has the smallest area of any Indonesian province, its metropolitan area covers 9,957.08 km2 (3,844.45 sq mi), which includes the satellite cities Bogor, Depok, Tangerang, South Tangerang, and Bekasi, and has an estimated population of 35 million as of 2021, making it the largest urban area in Indonesia and the second-largest in the world (after Tokyo). Jakarta ranks first among the Indonesian provinces in the human development index. Jakarta's business and employment opportunities, along with its ability to offer a potentially higher standard of living compared to other parts of the country, have attracted migrants from across the Indonesian archipelago, making it a melting pot of numerous cultures.\\nJakarta is one of the oldest continuously inhabited cities in Southeast Asia. Established in the fourth century as Sunda Kelapa, the city became an important trading port for the Sunda Kingdom. At one time, it was the de facto capital of the Dutch East Indies, when it was known as Batavia. Jakarta was officially a city within West Java until 1960 when its official status was changed to a province with special capital region distinction. As a province, its government consists of five administrative cities and one administrative regency. Jakarta is an alpha world city and is the seat of the ASEAN secretariat. Financial institutions such as the Bank of Indonesia, Indonesia Stock Exchange, and corporate headquarters of numerous Indonesian companies and multinational corporations are located in the city. In 2021, the city's GRP PPP was estimated at US$602.946 billion.\\nJakarta's main challenges include rapid urban growth, ecological breakdown, gridlocked traffic, congestion, and flooding. Jakarta is sinking up to 17 cm (6.7 inches) annually, which coupled with the rising of sea levels, has made the city more prone to flooding. Hence, it is one of the fastest-sinking capitals in the world. In response to these challenges, in August 2019, President Joko Widodo announced that the capital of Indonesia would be moved from Jakarta to the planned city of Nusantara, in the province of East Kalimantan on the island of Borneo.\\n\\n\\n== Name ==\\n\\nJakarta has been home to multiple settlements. Below is the list of names used during its existence:\\n\\nSunda Kelapa (397–1527)\\nJayakarta (1527–1619)\\nBatavia (1619–1942)\\nDjakarta (1942–1972)\\nJakarta (1972–present)The name 'Jakarta' is derived from the word Jayakarta (Devanagari: जयकर्त) which is ultimately derived from the Sanskrit जय jaya (victorious), and कृत krta (accomplished, acquired), thus Jayakarta translates as 'victorious deed', 'complete act' or 'complete victory'. It was named for the Muslim troops of Fatahillah which successfully defeated and drove the Portuguese away from the city in 1527. Before it was called Jayakarta, the city was known as 'Sunda Kelapa'. Tomé Pires, a Portuguese apothecary wrote the name of the city on his magnum opus as Jacatra or Jacarta during his journey to East Indies. \\nIn the 17th century, the city was known as Koningin van het Oosten (Queen of the Orient), a name that was given for the urban beauty of downtown Batavia's canals, mansions and ordered city layout. After expanding to the south in the 19th century, this nickname came to be more associated with the suburbs (e.g. Menteng and the area around Merdeka Square), with their wide lanes, green spaces and villas. During the Japanese occupation, the city was renamed as Jakaruta Tokubetsu-shi (ジャカルタ特別市, Jakarta Special City).\\n\\n\\n== History ==\\n\\n\\n=== Precolonial era ===\\n\\nThe north coast area of western Java including Jakarta was the location of prehistoric Buni culture that flourished from 400 BC to 100 AD. The area in and around modern Jakarta was part of the 4th-century Sundanese kingdom of Tarumanagara, one of the oldest Hindu kingdoms in Indonesia. The area of North Jakarta around Tugu became a populated settlement in the early 5th century. The Tugu inscription (probably written around 417 AD) discovered in Batutumbuh hamlet, Tugu village, Koja, North Jakarta, mentions that King Purnawarman of Tarumanagara undertook hydraulic projects; the irrigation and water drainage project of the Chandrabhaga river and the Gomati river near his capital. Following the decline of Tarumanagara, its territories, including the Jakarta area, became part of the Hindu Kingdom of Sunda. From the 7th to the early 13th century, the port of Sunda was under the Srivijaya maritime empire. According to the Chinese source, Chu-fan-chi, written circa 1225, Chou Ju-kua reported in the early 13th century that Srivijaya still ruled Sumatra, the Malay peninsula and western Java (Sunda). The source says the port of Sunda is strategic and thriving, mentioning pepper from Sunda as among the best in quality. The people worked in agriculture, and their houses were built on wooden piles. The harbour area became known as Sunda Kelapa, (Sundanese: ᮞᮥᮔ᮪ᮓ ᮊᮨᮜᮕ) and by the 14th century, it was an important trading port for the Sunda Kingdom.\\nThe first European fleet, four Portuguese ships from Malacca, arrived in 1513 while looking for a route for spices. The Sunda Kingdom made an alliance treaty with the Portuguese by allowing them to build a port in 1522 to defend against the rising power of Demak Sultanate from central Java. In 1527, Fatahillah, a Javanese general from Demak attacked and conquered Sunda Kelapa, driving out the Portuguese. Sunda Kelapa was renamed Jayakarta, and became a fiefdom of the Banten Sultanate, which became a major Southeast Asian trading centre.\\nThrough the relationship with Prince Jayawikarta of the Banten Sultanate, Dutch ships arrived in 1596. In 1602, the British East India Company's first voyage, commanded by Sir James Lancaster, arrived in Aceh and sailed on to Banten where they were allowed to build a trading post. This site became the centre of British trade in the Indonesian archipelago until 1682. Jayawikarta is thought to have made trading connections with the British merchants, rivals of the Dutch, by allowing them to build houses directly across from the Dutch buildings in 1615.\\n\\n\\n=== Colonial era ===\\n\\nWhen relations between Prince Jayawikarta and the Dutch deteriorated, his soldiers attacked the Dutch fortress. His army and the British, however, were defeated by the Dutch, in part owing to the timely arrival of Jan Pieterszoon Coen. The Dutch burned the British fort and forced them to retreat on their ships. The victory consolidated Dutch power, and they renamed the city Batavia in 1619.\\n\\nCommercial opportunities in the city attracted native and especially Chinese and Arab immigrants. This sudden population increase created burdens on the city. Tensions grew as the colonial government tried to restrict Chinese migration through deportations. Following a revolt, 5,000 Chinese were massacred by the Dutch and natives on 9 October 1740, and the following year, Chinese inhabitants were moved to Glodok outside the city walls. At the beginning of the 19th century, around 400 Arabs and Moors lived in Batavia, a number that changed little during the following decades. Among the commodities traded were fabrics, mainly imported cotton, batik and clothing worn by Arab communities.The city began to expand further south as epidemics in 1835 and 1870 forced residents to move away from the port. The Koningsplein, now Merdeka Square was completed in 1818, the housing park of Menteng was started in 1913, and Kebayoran Baru was the last Dutch-built residential area. By 1930, Batavia had more than 500,000 inhabitants, including 37,067 Europeans.On 5 March 1942, the Japanese captured Batavia from Dutch control, and the city was named Jakarta (Jakarta Special City (ジャカルタ特別市, Jakaruta tokubetsu-shi), under the special status that was assigned to the city). After the war, the Dutch name Batavia was internationally recognised until full Indonesian independence on 27 December 1949. The city, now renamed Jakarta, was officially proclaimed the national capital of Indonesia.\\n\\n\\n=== Independence era ===\\n\\nAfter World War II ended, Indonesian nationalists declared independence on 17 August 1945, and the government of Jakarta City was changed into the Jakarta National Administration in the following month. During the Indonesian National Revolution, Indonesian Republicans withdrew from Allied-occupied Jakarta and established their capital in Yogyakarta.\\nAfter securing full independence, Jakarta again became the national capital in 1950. With Jakarta selected to host the 1962 Asian Games, Soekarno, envisaging Jakarta as a great international city, instigated large government-funded projects with openly nationalistic and modernist architecture. Projects included a cloverleaf interchange, a major boulevard (Jalan MH Thamrin-Sudirman), monuments such as The National Monument, Hotel Indonesia, a shopping centre, and a new building intended to be the headquarters of CONEFO. In October 1965, Jakarta was the site of an abortive coup attempt in which six top generals were killed, precipitating a violent anti-communist purge which killed at least 500,000 people, including some ethnic Chinese. The event marked the beginning of Suharto's New Order. The first government was led by a mayor until the end of 1960 when the office was changed to that of a governor. The last mayor of Jakarta was Soediro until he was replaced by Soemarno Sosroatmodjo as governor. Based on law No. 5 of 1974 relating to regional governments, Jakarta was confirmed as the capital of Indonesia and one of the country's then 26 provinces.In 1966, Jakarta was declared a 'special capital region' (Daerah Khusus Ibukota), with a status equivalent to that of a province. Lieutenant General Ali Sadikin served as governor from 1966 to 1977; he rehabilitated roads and bridges, encouraged the arts, built hospitals and a large number of schools. He cleared out slum dwellers for new development projects — some for the benefit of the Suharto family,— and attempted to eliminate rickshaws and ban street vendors. He began control of migration to the city to stem overcrowding and poverty. Foreign investment contributed to a real estate boom that transformed the face of Jakarta. The boom ended with the 1997 Asian financial crisis, putting Jakarta at the centre of violence, protest, and political manoeuvring.\\nAfter three decades in power, support for President Suharto began to wane. Tensions peaked when four students were shot dead at Trisakti University by security forces. Four days of riots and violence in 1998 ensued that killed an estimated 1,200, and destroyed or damaged 6,000 buildings, forcing Suharto to resign. Much of the rioting targeted Chinese Indonesians. In the post-Suharto era, Jakarta has remained the focal point of democratic change in Indonesia. Jemaah Islamiah-connected bombings occurred almost annually in the city between 2000 and 2005, with another in 2009. In August 2007, Jakarta held its first-ever election to choose a governor as part of a nationwide decentralisation program that allows direct local elections in several areas. Previously, governors were elected by the city's legislative body.During the Jokowi presidency, the Government adopted a plan to move Indonesia's capital to East Kalimantan.Between 2016 and 2017, a series of terrorist attacks rocked Jakarta with scenes of multiple suicide bombings and gunfire. In suspicion to its links, the Islamic State, the perpetrator led by Abu Bakr al-Baghdadi claimed responsibility for the attacks.\\n\\n\\n== Geography ==\\n\\nJakarta covers 699.5 km2 (270.1 sq mi), the smallest among any Indonesian provinces. However, its metropolitan area covers 6,392 km2 (2,468 sq mi), which extends into two of the bordering provinces of West Java and Banten. The Greater Jakarta area includes three bordering regencies (Bekasi Regency, Tangerang Regency and Bogor Regency) and five adjacent cities (Bogor, Depok, Bekasi, Tangerang and South Tangerang).\\n\\nJakarta is situated on the northwest coast of Java, at the mouth of the Ciliwung River on Jakarta Bay, an inlet of the Java Sea. It is strategically located near the Sunda Strait. The northern part of Jakarta is plain land, some areas of which are below sea level, and subject to frequent flooding. The southern parts of the city are hilly. It is one of only two Asian capital cities located in the southern hemisphere (along with East Timor's Dili). Officially, the area of the Jakarta Special District is 662 km2 (256 sq mi) of land area and 6,977 km2 (2,694 sq mi) of sea area. The Thousand Islands, which are administratively a part of Jakarta, are located in Jakarta Bay, north of the city.\\nJakarta lies in a low and flat alluvial plain, ranging from −2 to 91 m (−7 to 299 ft) with an average elevation of 8 m (26 ft) above sea level with historically extensive swampy areas. Some parts of the city have been constructed on reclaimed tidal flats that occur around the area. Thirteen rivers flow through Jakarta. They are Ciliwung River, Kalibaru, Pesanggrahan, Cipinang, Angke River, Maja, Mookervart, Krukut, Buaran, West Tarum, Cakung, Petukangan, Sunter River and Grogol River. They flow from the Puncak highlands to the south of the city, then across the city northwards towards the Java Sea. The Ciliwung River divides the city into the western and eastern districts.\\nThese rivers, combined with the wet season rains and insufficient\", doc_id='eeb6ef32-c857-44e2-b0c5-dff6e29a9cd7', extra_info=None, node_info={'start': 0, 'end': 13970}, similarity=0.8701780916463354)], extra_info=None)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index.query(\"What is the etymology of Jakarta?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d2e2a79", + "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.6" + } }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7.691995083000052\n" - ] - } - ], - "source": [ - "start_time = time.perf_counter()\n", - "index = GPTSimpleVectorIndex.from_documents(documents)\n", - "duration = time.perf_counter() - start_time\n", - "print(duration)" - ] - }, - { - "cell_type": "markdown", - "id": "6374ac99", - "metadata": {}, - "source": [ - "Standard index creation took 7.69 seconds" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "60a7c522", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=245 request_id=314b145a07f65fd34e707f633cc1a444 response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=432 request_id=bb9e796d0b8f9c2365b68de8a56009ff response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=433 request_id=7a94707fe2f8916e9cdd8276a5748207 response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=499 request_id=cda679215293c3a13ed57c2eae3dc582 response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=527 request_id=5e1c3e74aa3f9f950e4035f81a0f0a15 response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=585 request_id=81983fe76eab95f73f82df881ff7b2d9 response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=574 request_id=702a182b54a29a33719205f722378c8e response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=575 request_id=d1df11775c59a3ba403dda253081f8eb response_code=200\n", - "INFO:openai:message='OpenAI API response' path=https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings processing_ms=575 request_id=47929f13469569527505b51958cd8e71 response_code=200\n", - "INFO:root:> [build_index_from_documents] Total LLM token usage: 0 tokens\n", - "INFO:root:> [build_index_from_documents] Total embedding token usage: 142295 tokens\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.3730635830000892\n" - ] - } - ], - "source": [ - "start_time = time.perf_counter()\n", - "index = GPTSimpleVectorIndex(documents, use_async=True)\n", - "duration = time.perf_counter() - start_time\n", - "print(duration)" - ] - }, - { - "cell_type": "markdown", - "id": "8bd9de0b", - "metadata": {}, - "source": [ - "Async index creation took 2.37 seconds" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "d0db93cb", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:> [query] Total LLM token usage: 4075 tokens\n", - "INFO:root:> [query] Total embedding token usage: 8 tokens\n" - ] - }, - { - "data": { - "text/plain": [ - "Response(response=\"\\n\\nThe name 'Jakarta' is derived from the word Jayakarta (Devanagari: जयकर्त) which is ultimately derived from the Sanskrit जय jaya (victorious), and कृत krta (accomplished, acquired), thus Jayakarta translates as 'victorious deed', 'complete act' or 'complete victory'. It was named for the Muslim troops of Fatahillah which successfully defeated and drove the Portuguese away from the city in 1527. Before it was called Jayakarta, the city was known as 'Sunda Kelapa'. Tomé Pires, a Portuguese apothecary wrote the name of the city on his magnum opus as Jacatra or Jacarta during his journey to East Indies. The city is located in a low-lying area ranging from −2 to 91 m (−7 to 299 ft) with an average elevation of 8 m (26 ft) above sea level with historically extensive swampy areas. Some parts of the city have been constructed on reclaimed tidal flats that occur around the area. Thirteen rivers flow through Jakarta, including the Ciliwung River, Kalibaru, Pesanggra\", source_nodes=[SourceNode(source_text=\"Jakarta (; Indonesian pronunciation: [dʒaˈkarta] (listen)), officially the Special Capital Region of Jakarta (Indonesian: Daerah Khusus Ibukota Jakarta), is the capital and largest city of Indonesia. Lying on the northwest coast of Java, the world's most populous island, Jakarta is the largest city in Southeast Asia and serves as the diplomatic capital of ASEAN.\\nThe city is the economic, cultural, and political centre of Indonesia. It possesses a province-level status and has a population of 10,562,088 as of mid-2021. Although Jakarta extends over only 664.01 km2 (256.38 sq mi) and thus has the smallest area of any Indonesian province, its metropolitan area covers 9,957.08 km2 (3,844.45 sq mi), which includes the satellite cities Bogor, Depok, Tangerang, South Tangerang, and Bekasi, and has an estimated population of 35 million as of 2021, making it the largest urban area in Indonesia and the second-largest in the world (after Tokyo). Jakarta ranks first among the Indonesian provinces in the human development index. Jakarta's business and employment opportunities, along with its ability to offer a potentially higher standard of living compared to other parts of the country, have attracted migrants from across the Indonesian archipelago, making it a melting pot of numerous cultures.\\nJakarta is one of the oldest continuously inhabited cities in Southeast Asia. Established in the fourth century as Sunda Kelapa, the city became an important trading port for the Sunda Kingdom. At one time, it was the de facto capital of the Dutch East Indies, when it was known as Batavia. Jakarta was officially a city within West Java until 1960 when its official status was changed to a province with special capital region distinction. As a province, its government consists of five administrative cities and one administrative regency. Jakarta is an alpha world city and is the seat of the ASEAN secretariat. Financial institutions such as the Bank of Indonesia, Indonesia Stock Exchange, and corporate headquarters of numerous Indonesian companies and multinational corporations are located in the city. In 2021, the city's GRP PPP was estimated at US$602.946 billion.\\nJakarta's main challenges include rapid urban growth, ecological breakdown, gridlocked traffic, congestion, and flooding. Jakarta is sinking up to 17 cm (6.7 inches) annually, which coupled with the rising of sea levels, has made the city more prone to flooding. Hence, it is one of the fastest-sinking capitals in the world. In response to these challenges, in August 2019, President Joko Widodo announced that the capital of Indonesia would be moved from Jakarta to the planned city of Nusantara, in the province of East Kalimantan on the island of Borneo.\\n\\n\\n== Name ==\\n\\nJakarta has been home to multiple settlements. Below is the list of names used during its existence:\\n\\nSunda Kelapa (397–1527)\\nJayakarta (1527–1619)\\nBatavia (1619–1942)\\nDjakarta (1942–1972)\\nJakarta (1972–present)The name 'Jakarta' is derived from the word Jayakarta (Devanagari: जयकर्त) which is ultimately derived from the Sanskrit जय jaya (victorious), and कृत krta (accomplished, acquired), thus Jayakarta translates as 'victorious deed', 'complete act' or 'complete victory'. It was named for the Muslim troops of Fatahillah which successfully defeated and drove the Portuguese away from the city in 1527. Before it was called Jayakarta, the city was known as 'Sunda Kelapa'. Tomé Pires, a Portuguese apothecary wrote the name of the city on his magnum opus as Jacatra or Jacarta during his journey to East Indies. \\nIn the 17th century, the city was known as Koningin van het Oosten (Queen of the Orient), a name that was given for the urban beauty of downtown Batavia's canals, mansions and ordered city layout. After expanding to the south in the 19th century, this nickname came to be more associated with the suburbs (e.g. Menteng and the area around Merdeka Square), with their wide lanes, green spaces and villas. During the Japanese occupation, the city was renamed as Jakaruta Tokubetsu-shi (ジャカルタ特別市, Jakarta Special City).\\n\\n\\n== History ==\\n\\n\\n=== Precolonial era ===\\n\\nThe north coast area of western Java including Jakarta was the location of prehistoric Buni culture that flourished from 400 BC to 100 AD. The area in and around modern Jakarta was part of the 4th-century Sundanese kingdom of Tarumanagara, one of the oldest Hindu kingdoms in Indonesia. The area of North Jakarta around Tugu became a populated settlement in the early 5th century. The Tugu inscription (probably written around 417 AD) discovered in Batutumbuh hamlet, Tugu village, Koja, North Jakarta, mentions that King Purnawarman of Tarumanagara undertook hydraulic projects; the irrigation and water drainage project of the Chandrabhaga river and the Gomati river near his capital. Following the decline of Tarumanagara, its territories, including the Jakarta area, became part of the Hindu Kingdom of Sunda. From the 7th to the early 13th century, the port of Sunda was under the Srivijaya maritime empire. According to the Chinese source, Chu-fan-chi, written circa 1225, Chou Ju-kua reported in the early 13th century that Srivijaya still ruled Sumatra, the Malay peninsula and western Java (Sunda). The source says the port of Sunda is strategic and thriving, mentioning pepper from Sunda as among the best in quality. The people worked in agriculture, and their houses were built on wooden piles. The harbour area became known as Sunda Kelapa, (Sundanese: ᮞᮥᮔ᮪ᮓ ᮊᮨᮜᮕ) and by the 14th century, it was an important trading port for the Sunda Kingdom.\\nThe first European fleet, four Portuguese ships from Malacca, arrived in 1513 while looking for a route for spices. The Sunda Kingdom made an alliance treaty with the Portuguese by allowing them to build a port in 1522 to defend against the rising power of Demak Sultanate from central Java. In 1527, Fatahillah, a Javanese general from Demak attacked and conquered Sunda Kelapa, driving out the Portuguese. Sunda Kelapa was renamed Jayakarta, and became a fiefdom of the Banten Sultanate, which became a major Southeast Asian trading centre.\\nThrough the relationship with Prince Jayawikarta of the Banten Sultanate, Dutch ships arrived in 1596. In 1602, the British East India Company's first voyage, commanded by Sir James Lancaster, arrived in Aceh and sailed on to Banten where they were allowed to build a trading post. This site became the centre of British trade in the Indonesian archipelago until 1682. Jayawikarta is thought to have made trading connections with the British merchants, rivals of the Dutch, by allowing them to build houses directly across from the Dutch buildings in 1615.\\n\\n\\n=== Colonial era ===\\n\\nWhen relations between Prince Jayawikarta and the Dutch deteriorated, his soldiers attacked the Dutch fortress. His army and the British, however, were defeated by the Dutch, in part owing to the timely arrival of Jan Pieterszoon Coen. The Dutch burned the British fort and forced them to retreat on their ships. The victory consolidated Dutch power, and they renamed the city Batavia in 1619.\\n\\nCommercial opportunities in the city attracted native and especially Chinese and Arab immigrants. This sudden population increase created burdens on the city. Tensions grew as the colonial government tried to restrict Chinese migration through deportations. Following a revolt, 5,000 Chinese were massacred by the Dutch and natives on 9 October 1740, and the following year, Chinese inhabitants were moved to Glodok outside the city walls. At the beginning of the 19th century, around 400 Arabs and Moors lived in Batavia, a number that changed little during the following decades. Among the commodities traded were fabrics, mainly imported cotton, batik and clothing worn by Arab communities.The city began to expand further south as epidemics in 1835 and 1870 forced residents to move away from the port. The Koningsplein, now Merdeka Square was completed in 1818, the housing park of Menteng was started in 1913, and Kebayoran Baru was the last Dutch-built residential area. By 1930, Batavia had more than 500,000 inhabitants, including 37,067 Europeans.On 5 March 1942, the Japanese captured Batavia from Dutch control, and the city was named Jakarta (Jakarta Special City (ジャカルタ特別市, Jakaruta tokubetsu-shi), under the special status that was assigned to the city). After the war, the Dutch name Batavia was internationally recognised until full Indonesian independence on 27 December 1949. The city, now renamed Jakarta, was officially proclaimed the national capital of Indonesia.\\n\\n\\n=== Independence era ===\\n\\nAfter World War II ended, Indonesian nationalists declared independence on 17 August 1945, and the government of Jakarta City was changed into the Jakarta National Administration in the following month. During the Indonesian National Revolution, Indonesian Republicans withdrew from Allied-occupied Jakarta and established their capital in Yogyakarta.\\nAfter securing full independence, Jakarta again became the national capital in 1950. With Jakarta selected to host the 1962 Asian Games, Soekarno, envisaging Jakarta as a great international city, instigated large government-funded projects with openly nationalistic and modernist architecture. Projects included a cloverleaf interchange, a major boulevard (Jalan MH Thamrin-Sudirman), monuments such as The National Monument, Hotel Indonesia, a shopping centre, and a new building intended to be the headquarters of CONEFO. In October 1965, Jakarta was the site of an abortive coup attempt in which six top generals were killed, precipitating a violent anti-communist purge which killed at least 500,000 people, including some ethnic Chinese. The event marked the beginning of Suharto's New Order. The first government was led by a mayor until the end of 1960 when the office was changed to that of a governor. The last mayor of Jakarta was Soediro until he was replaced by Soemarno Sosroatmodjo as governor. Based on law No. 5 of 1974 relating to regional governments, Jakarta was confirmed as the capital of Indonesia and one of the country's then 26 provinces.In 1966, Jakarta was declared a 'special capital region' (Daerah Khusus Ibukota), with a status equivalent to that of a province. Lieutenant General Ali Sadikin served as governor from 1966 to 1977; he rehabilitated roads and bridges, encouraged the arts, built hospitals and a large number of schools. He cleared out slum dwellers for new development projects — some for the benefit of the Suharto family,— and attempted to eliminate rickshaws and ban street vendors. He began control of migration to the city to stem overcrowding and poverty. Foreign investment contributed to a real estate boom that transformed the face of Jakarta. The boom ended with the 1997 Asian financial crisis, putting Jakarta at the centre of violence, protest, and political manoeuvring.\\nAfter three decades in power, support for President Suharto began to wane. Tensions peaked when four students were shot dead at Trisakti University by security forces. Four days of riots and violence in 1998 ensued that killed an estimated 1,200, and destroyed or damaged 6,000 buildings, forcing Suharto to resign. Much of the rioting targeted Chinese Indonesians. In the post-Suharto era, Jakarta has remained the focal point of democratic change in Indonesia. Jemaah Islamiah-connected bombings occurred almost annually in the city between 2000 and 2005, with another in 2009. In August 2007, Jakarta held its first-ever election to choose a governor as part of a nationwide decentralisation program that allows direct local elections in several areas. Previously, governors were elected by the city's legislative body.During the Jokowi presidency, the Government adopted a plan to move Indonesia's capital to East Kalimantan.Between 2016 and 2017, a series of terrorist attacks rocked Jakarta with scenes of multiple suicide bombings and gunfire. In suspicion to its links, the Islamic State, the perpetrator led by Abu Bakr al-Baghdadi claimed responsibility for the attacks.\\n\\n\\n== Geography ==\\n\\nJakarta covers 699.5 km2 (270.1 sq mi), the smallest among any Indonesian provinces. However, its metropolitan area covers 6,392 km2 (2,468 sq mi), which extends into two of the bordering provinces of West Java and Banten. The Greater Jakarta area includes three bordering regencies (Bekasi Regency, Tangerang Regency and Bogor Regency) and five adjacent cities (Bogor, Depok, Bekasi, Tangerang and South Tangerang).\\n\\nJakarta is situated on the northwest coast of Java, at the mouth of the Ciliwung River on Jakarta Bay, an inlet of the Java Sea. It is strategically located near the Sunda Strait. The northern part of Jakarta is plain land, some areas of which are below sea level, and subject to frequent flooding. The southern parts of the city are hilly. It is one of only two Asian capital cities located in the southern hemisphere (along with East Timor's Dili). Officially, the area of the Jakarta Special District is 662 km2 (256 sq mi) of land area and 6,977 km2 (2,694 sq mi) of sea area. The Thousand Islands, which are administratively a part of Jakarta, are located in Jakarta Bay, north of the city.\\nJakarta lies in a low and flat alluvial plain, ranging from −2 to 91 m (−7 to 299 ft) with an average elevation of 8 m (26 ft) above sea level with historically extensive swampy areas. Some parts of the city have been constructed on reclaimed tidal flats that occur around the area. Thirteen rivers flow through Jakarta. They are Ciliwung River, Kalibaru, Pesanggrahan, Cipinang, Angke River, Maja, Mookervart, Krukut, Buaran, West Tarum, Cakung, Petukangan, Sunter River and Grogol River. They flow from the Puncak highlands to the south of the city, then across the city northwards towards the Java Sea. The Ciliwung River divides the city into the western and eastern districts.\\nThese rivers, combined with the wet season rains and insufficient\", doc_id='eeb6ef32-c857-44e2-b0c5-dff6e29a9cd7', extra_info=None, node_info={'start': 0, 'end': 13970}, similarity=0.8701780916463354)], extra_info=None)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "index.query(\"What is the etymology of Jakarta?\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d2e2a79", - "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.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/vector_indices/SimpleIndexDemo-ChatGPT.ipynb b/examples/vector_indices/SimpleIndexDemo-ChatGPT.ipynb index a74dcb229265a..12a648260b818 100644 --- a/examples/vector_indices/SimpleIndexDemo-ChatGPT.ipynb +++ b/examples/vector_indices/SimpleIndexDemo-ChatGPT.ipynb @@ -1,433 +1,426 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", - "metadata": {}, - "source": [ - "# Simple Index Demo + ChatGPT" - ] - }, - { - "cell_type": "markdown", - "id": "e34da56e-bc3b-433e-b65c-96edea4db5dd", - "metadata": {}, - "source": [ - "Use a very simple wrapper around the ChatGPT API" - ] - }, - { - "cell_type": "markdown", - "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", - "metadata": {}, - "source": [ - "#### Load documents, build the GPTSimpleVectorIndex" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/jerryliu/Programming/gpt_index/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], - "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, LLMPredictor, ServiceContext\n", - "from langchain.chat_models import ChatOpenAI\n", - "from IPython.display import Markdown, display" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# load documents\n", - "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6cc980e8-f4e1-4fad-93f8-ab1bbaa874f3", - "metadata": { - "tags": [] - }, - "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": [ - "# LLM Predictor (gpt-3.5-turbo) + service context\n", - "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-3.5-turbo\"))\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, chunk_size_limit=512)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)" - ] - }, - { - "cell_type": "markdown", - "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", - "metadata": {}, - "source": [ - "#### Query Index" - ] - }, - { - "cell_type": "markdown", - "id": "83e2905e-3789-4793-82b9-0ac488246824", - "metadata": {}, - "source": [ - "By default, with the help of langchain's PromptSelector abstraction, we use \n", - "a modified refine prompt tailored for ChatGPT-use if the ChatGPT model is used." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "85466fdf-93f3-4cb1-a5f9-0056a8245a6f", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "KeyboardInterrupt\n", - "\n" - ] - } - ], - "source": [ - "response = index.query(\n", - " \"What did the author do growing up?\", \n", - " service_context=service_context,\n", - " similarity_top_k=3\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "bdda1b2c-ae46-47cf-91d7-3153e8d0473b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "Before college, the author worked on writing essays and programming. They wrote short stories and essays on various topics. They also tried programming on an IBM 1401 in 9th grade using an early version of Fortran. In college, the author studied painting and art history and spent a year in Florence, Italy, where they painted portraits of people and still life. After college, the author worked on software development and co-founded a startup called Viaweb. Later, the author spent three months writing essays in 2015 before returning to work on Bel, a programming language they had been developing for years. The author worked intensively on Bel, often having chunks of the code in their head and working on it while watching their children play. Most of Bel was written while the author was living in England, where they moved with their family in 2016. In the fall of 2019, Bel was finally finished, and the author resumed writing essays and thinking about other projects." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec88df57", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "response = index.query(\n", - " \"What did the author do during his time at RISD?\", \n", - " service_context=service_context,\n", - " similarity_top_k=5\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "67e8e675-1b03-423a-b53e-23ab278ba03b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "The author attended RISD to learn how to paint and took a color class there. However, he mostly taught himself to paint and dropped out in 1993. He then moved to New York City to pursue his career as an artist." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "cell_type": "markdown", - "id": "88ca1808-d112-4c28-b110-b65dcc9b7207", - "metadata": {}, - "source": [ - "**Refine Prompt**: Here is the chat refine prompt " - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "2f0c270d-9de5-40bf-88fc-83a360523db0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.prompts.chat_prompts import CHAT_REFINE_PROMPT" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "4db38651-9790-4a61-ac3d-689ce6dfa369", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'input_variables': ['context_msg', 'query_str', 'existing_answer'],\n", - " 'output_parser': None,\n", - " 'partial_variables': {},\n", - " 'messages': [HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['query_str'], output_parser=None, partial_variables={}, template='{query_str}', template_format='f-string', validate_template=True), additional_kwargs={}),\n", - " AIMessagePromptTemplate(prompt=PromptTemplate(input_variables=['existing_answer'], output_parser=None, partial_variables={}, template='{existing_answer}', template_format='f-string', validate_template=True), additional_kwargs={}),\n", - " HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['context_msg'], output_parser=None, partial_variables={}, template=\"We have the opportunity to refine the above answer (only if needed) with some more context below.\\n------------\\n{context_msg}\\n------------\\nGiven the new context, refine the original answer to better answer the question. If the context isn't useful, output the original answer again.\", template_format='f-string', validate_template=True), additional_kwargs={})]}" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } + "cells": [ + { + "cell_type": "markdown", + "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", + "metadata": {}, + "source": [ + "# Simple Index Demo + ChatGPT" + ] + }, + { + "cell_type": "markdown", + "id": "e34da56e-bc3b-433e-b65c-96edea4db5dd", + "metadata": {}, + "source": [ + "Use a very simple wrapper around the ChatGPT API" + ] + }, + { + "cell_type": "markdown", + "id": "50d3b817-b70e-4667-be4f-d3a0fe4bd119", + "metadata": {}, + "source": [ + "#### Load documents, build the GPTSimpleVectorIndex" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "690a6918-7c75-4f95-9ccc-d2c4a1fe00d7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jerryliu/Programming/gpt_index/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "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, LLMPredictor, ServiceContext\n", + "from langchain.chat_models import ChatOpenAI\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "03d1691e-544b-454f-825b-5ee12f7faa8a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# load documents\n", + "documents = SimpleDirectoryReader('../paul_graham_essay/data').load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6cc980e8-f4e1-4fad-93f8-ab1bbaa874f3", + "metadata": { + "tags": [] + }, + "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": [ + "# LLM Predictor (gpt-3.5-turbo) + service context\n", + "llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name=\"gpt-3.5-turbo\"))\n", + "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, chunk_size_limit=512)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad144ee7-96da-4dd6-be00-fd6cf0c78e58", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)" + ] + }, + { + "cell_type": "markdown", + "id": "b6caf93b-6345-4c65-a346-a95b0f1746c4", + "metadata": {}, + "source": [ + "#### Query Index" + ] + }, + { + "cell_type": "markdown", + "id": "83e2905e-3789-4793-82b9-0ac488246824", + "metadata": {}, + "source": [ + "By default, with the help of langchain's PromptSelector abstraction, we use \n", + "a modified refine prompt tailored for ChatGPT-use if the ChatGPT model is used." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "85466fdf-93f3-4cb1-a5f9-0056a8245a6f", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "KeyboardInterrupt\n", + "\n" + ] + } + ], + "source": [ + "response = index.query(\n", + " \"What did the author do growing up?\", \n", + " service_context=service_context,\n", + " similarity_top_k=3\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "bdda1b2c-ae46-47cf-91d7-3153e8d0473b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "Before college, the author worked on writing essays and programming. They wrote short stories and essays on various topics. They also tried programming on an IBM 1401 in 9th grade using an early version of Fortran. In college, the author studied painting and art history and spent a year in Florence, Italy, where they painted portraits of people and still life. After college, the author worked on software development and co-founded a startup called Viaweb. Later, the author spent three months writing essays in 2015 before returning to work on Bel, a programming language they had been developing for years. The author worked intensively on Bel, often having chunks of the code in their head and working on it while watching their children play. Most of Bel was written while the author was living in England, where they moved with their family in 2016. In the fall of 2019, Bel was finally finished, and the author resumed writing essays and thinking about other projects." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec88df57", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "response = index.query(\n", + " \"What did the author do during his time at RISD?\", \n", + " service_context=service_context,\n", + " similarity_top_k=5\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "67e8e675-1b03-423a-b53e-23ab278ba03b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "The author attended RISD to learn how to paint and took a color class there. However, he mostly taught himself to paint and dropped out in 1993. He then moved to New York City to pursue his career as an artist." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "cell_type": "markdown", + "id": "88ca1808-d112-4c28-b110-b65dcc9b7207", + "metadata": {}, + "source": [ + "**Refine Prompt**: Here is the chat refine prompt " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2f0c270d-9de5-40bf-88fc-83a360523db0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.prompts.chat_prompts import CHAT_REFINE_PROMPT" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "4db38651-9790-4a61-ac3d-689ce6dfa369", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'input_variables': ['context_msg', 'query_str', 'existing_answer'],\n", + " 'output_parser': None,\n", + " 'partial_variables': {},\n", + " 'messages': [HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['query_str'], output_parser=None, partial_variables={}, template='{query_str}', template_format='f-string', validate_template=True), additional_kwargs={}),\n", + " AIMessagePromptTemplate(prompt=PromptTemplate(input_variables=['existing_answer'], output_parser=None, partial_variables={}, template='{existing_answer}', template_format='f-string', validate_template=True), additional_kwargs={}),\n", + " HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['context_msg'], output_parser=None, partial_variables={}, template=\"We have the opportunity to refine the above answer (only if needed) with some more context below.\\n------------\\n{context_msg}\\n------------\\nGiven the new context, refine the original answer to better answer the question. If the context isn't useful, output the original answer again.\", template_format='f-string', validate_template=True), additional_kwargs={})]}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict(CHAT_REFINE_PROMPT.prompt)" + ] + }, + { + "cell_type": "markdown", + "id": "6cb664e8-f53f-4d6c-a086-1f2784cc1dc8", + "metadata": {}, + "source": [ + "#### Query Index (Using the standard Refine Prompt)\n", + "\n", + "If we use the \"standard\" refine prompt (where the prompt is one text template instead of multiple messages), we find that the results over ChatGPT are worse. " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "29c416f8-d5ab-47d6-8b16-f615bfa58219", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from gpt_index.prompts.default_prompts import DEFAULT_REFINE_PROMPT" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3df1acc4-735a-48ac-9fb4-73d9d7eabc02", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "response = index.query(\n", + " \"What did the author do during his time at RISD?\", \n", + " service_context=service_context,\n", + " refine_template=DEFAULT_REFINE_PROMPT,\n", + " similarity_top_k=5\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "b8938077-6527-4008-8d0c-af7a8178ff10", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "\n", + "\n", + "The existing answer is not relevant to the new context provided and therefore the original answer remains sufficient. The author dropped out of RISD in 1993 and moved to New York to pursue painting." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(f\"{response}\"))" + ] + }, + { + "cell_type": "markdown", + "id": "2e024521-97b5-417f-8c27-950983f52cda", + "metadata": {}, + "source": [ + "### [Beta] Use ChatGPTLLMPredictor\n", + "\n", + "Very simple GPT-Index-native ChatGPT wrapper. Note: this is a beta feature. If this doesn't work please\n", + "use the suggested flow above." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a49d9a1b-21fb-4153-ad24-191a13513d64", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# use ChatGPT [beta]\n", + "from gpt_index.llm_predictor.chatgpt import ChatGPTLLMPredictor\n", + "from langchain.prompts.chat import SystemMessagePromptTemplate\n", + "\n", + "llm_predictor = ChatGPTLLMPredictor()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "596af2aa-7ddf-41f2-801b-4a24a4980dd8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "response = index.query(\n", + " \"What did the author do during his time at RISD?\", \n", + " service_context=service_context\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "771e20ba-ccba-447e-89d6-8d731accc6f3", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Arrr, the scallywag went to RISD and had to do the foundation classes in fundamental subjects like drawing, color, and design.'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "829bb58d-910e-4a19-bbea-8a9546d24b92", + "metadata": {}, + "outputs": [], + "source": [] + } ], - "source": [ - "dict(CHAT_REFINE_PROMPT.prompt)" - ] - }, - { - "cell_type": "markdown", - "id": "6cb664e8-f53f-4d6c-a086-1f2784cc1dc8", - "metadata": {}, - "source": [ - "#### Query Index (Using the standard Refine Prompt)\n", - "\n", - "If we use the \"standard\" refine prompt (where the prompt is one text template instead of multiple messages), we find that the results over ChatGPT are worse. " - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "29c416f8-d5ab-47d6-8b16-f615bfa58219", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from gpt_index.prompts.default_prompts import DEFAULT_REFINE_PROMPT" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3df1acc4-735a-48ac-9fb4-73d9d7eabc02", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "response = index.query(\n", - " \"What did the author do during his time at RISD?\", \n", - " service_context=service_context,\n", - " refine_template=DEFAULT_REFINE_PROMPT,\n", - " similarity_top_k=5\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "b8938077-6527-4008-8d0c-af7a8178ff10", "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "\n", - "\n", - "The existing answer is not relevant to the new context provided and therefore the original answer remains sufficient. The author dropped out of RISD in 1993 and moved to New York to pursue painting." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "display(Markdown(f\"{response}\"))" - ] - }, - { - "cell_type": "markdown", - "id": "2e024521-97b5-417f-8c27-950983f52cda", - "metadata": {}, - "source": [ - "### [Beta] Use ChatGPTLLMPredictor\n", - "\n", - "Very simple GPT-Index-native ChatGPT wrapper. Note: this is a beta feature. If this doesn't work please\n", - "use the suggested flow above." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a49d9a1b-21fb-4153-ad24-191a13513d64", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# use ChatGPT [beta]\n", - "from llama_index.llm_predictor.chatgpt import ChatGPTLLMPredictor\n", - "from langchain.prompts.chat import SystemMessagePromptTemplate\n", - "\n", - "prepend_messages = [\n", - " SystemMessagePromptTemplate.from_template(\n", - " \"Talk like a pirate in every response.\"\n", - " )\n", - "]\n", - "\n", - "llm_predictor = ChatGPTLLMPredictor(prepend_messages=prepend_messages)\n", - "service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, chunk_size_limit=512)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "596af2aa-7ddf-41f2-801b-4a24a4980dd8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "response = index.query(\n", - " \"What did the author do during his time at RISD?\", \n", - " service_context=service_context\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "771e20ba-ccba-447e-89d6-8d731accc6f3", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Arrr, the scallywag went to RISD and had to do the foundation classes in fundamental subjects like drawing, color, and design.'" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "str(response)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "829bb58d-910e-4a19-bbea-8a9546d24b92", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "llama_index", - "language": "python", - "name": "llama_index" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 + "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" + } }, - "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/SimpleIndexDemo-multistep.ipynb b/examples/vector_indices/SimpleIndexDemo-multistep.ipynb index c5cb8a3f7120b..120c2cd156c1f 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" + "# 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 672d0a652a1a4..af20ea2071d29 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": "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": "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 diff --git a/examples/vector_indices/SimpleIndexDemo.ipynb b/examples/vector_indices/SimpleIndexDemo.ipynb index fcc61febb2805..7450584124bc8 100644 --- a/examples/vector_indices/SimpleIndexDemo.ipynb +++ b/examples/vector_indices/SimpleIndexDemo.ipynb @@ -5,7 +5,7 @@ "id": "9c48213d-6e6a-4c10-838a-2a7c710c3a05", "metadata": {}, "source": [ - "# Simple Index Demo - Basic" + "# Simple Index Demo" ] }, { @@ -266,7 +266,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.10.10" } }, "nbformat": 4,