├── .devcontainer └── devcontainer.json ├── .env.example ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ └── feature-request.yml ├── actions │ └── install-deps-and-canopy │ │ └── action.yml └── workflows │ ├── PR.yml │ ├── build-push-image.yml │ ├── pre-release-CI.yml │ └── release.yml ├── .gitignore ├── .readme-content ├── class_architecture.png ├── new.gif ├── rag_flow.png ├── resin-chat-no-rag.gif └── sketch.png ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── docs ├── deployment-gcp.md └── library.md ├── examples └── canopy-lib-quickstart.ipynb ├── pyproject.toml ├── scripts └── cleanup_indexes.py ├── src ├── canopy │ ├── __init__.py │ ├── chat_engine │ │ ├── __init__.py │ │ ├── chat_engine.py │ │ ├── exceptions.py │ │ ├── history_pruner │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── raising.py │ │ │ └── recent.py │ │ └── query_generator │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── cohere.py │ │ │ ├── function_calling.py │ │ │ ├── instruction.py │ │ │ └── last_message.py │ ├── config_templates │ │ ├── anyscale.yaml │ │ ├── azure.yaml │ │ ├── cohere.yaml │ │ ├── default.yaml │ │ └── octoai.yaml │ ├── context_engine │ │ ├── __init__.py │ │ ├── context_builder │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ └── stuffing.py │ │ └── context_engine.py │ ├── knowledge_base │ │ ├── __init__.py │ │ ├── base.py │ │ ├── chunker │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── langchain_text_splitter.py │ │ │ ├── markdown.py │ │ │ ├── recursive_character.py │ │ │ └── token_chunker.py │ │ ├── knowledge_base.py │ │ ├── models.py │ │ ├── qdrant │ │ │ ├── constants.py │ │ │ ├── converter.py │ │ │ ├── qdrant_knowledge_base.py │ │ │ └── utils.py │ │ ├── record_encoder │ │ │ ├── __init__.py │ │ │ ├── anyscale.py │ │ │ ├── azure_openai.py │ │ │ ├── base.py │ │ │ ├── cohere.py │ │ │ ├── dense.py │ │ │ ├── hybrid.py │ │ │ ├── jina.py │ │ │ ├── octoai.py │ │ │ ├── openai.py │ │ │ └── sentence_transformers.py │ │ └── reranker │ │ │ ├── __init__.py │ │ │ ├── cohere.py │ │ │ ├── reranker.py │ │ │ └── transparent.py │ ├── llm │ │ ├── __init__.py │ │ ├── anyscale.py │ │ ├── azure_openai_llm.py │ │ ├── base.py │ │ ├── cohere.py │ │ ├── models.py │ │ ├── octoai.py │ │ └── openai.py │ ├── models │ │ ├── __init__.py │ │ ├── api_models.py │ │ └── data_models.py │ ├── tokenizer │ │ ├── __init__.py │ │ ├── base.py │ │ ├── cohere.py │ │ ├── llama.py │ │ ├── openai.py │ │ └── tokenizer.py │ └── utils │ │ ├── __init__.py │ │ ├── config.py │ │ ├── debugging.py │ │ └── directory.py ├── canopy_cli │ ├── __init__.py │ ├── cli.py │ ├── cli_spinner.py │ ├── data_loader │ │ ├── __init__.py │ │ ├── data_loader.py │ │ └── errors.py │ └── errors.py └── canopy_server │ ├── __init__.py │ ├── _redocs_template.py │ ├── app.py │ └── models │ └── v1 │ └── api_models.py └── tests ├── __init__.py ├── conftest.py ├── e2e ├── __init__.py └── test_app.py ├── system ├── __init__.py ├── knowledge_base │ ├── __init__.py │ ├── qdrant │ │ ├── __init__.py │ │ ├── common.py │ │ ├── conftest.py │ │ ├── test_async_qdrant_knowledge_base.py │ │ ├── test_config.yml │ │ └── test_qdrant_knowledge_base.py │ └── test_knowledge_base.py ├── llm │ ├── __init__.py │ ├── conftest.py │ ├── test_azure_openai.py │ ├── test_cohere.py │ └── test_openai.py ├── query_generator │ ├── test_cohere_query_generator.py │ └── test_query_generator_integration.py ├── record_encoder │ ├── test_anyscale_record_encoder.py │ ├── test_cohere_record_encoder.py │ ├── test_jina_record_encoder.py │ ├── test_octoai_record_encoder.py │ ├── test_openai_record_encoder.py │ └── test_sentence_transformers_encoder.py ├── reranker │ ├── __init__.py │ ├── test_cohere_reranker.py │ └── test_transparent_reranker.py ├── tokenizer │ ├── __init__.py │ └── test_cohere_api_tokenizer.py └── utils │ ├── __init__.py │ └── test_config.py ├── unit ├── __init__.py ├── chat_engine │ ├── __init__.py │ └── test_chat_engine.py ├── chunker │ ├── __init__.py │ ├── base_test_chunker.py │ ├── test_markdown_chunker.py │ ├── test_recursive_character_chunker.py │ ├── test_stub_chunker.py │ └── test_token_chunker.py ├── cli │ ├── test_data_loader.py │ └── test_non_schematic_data_loader.py ├── context_builder │ ├── __init__.py │ └── test_stuffing_context_builder.py ├── context_engine │ └── test_context_engine.py ├── history_pruner │ ├── test_raising_history_pruner.py │ └── test_recent_history_pruner.py ├── query_generators │ ├── __init__.py │ ├── test_function_calling_query_generator.py │ ├── test_instruction_query_generator.py │ └── test_last_message_query_generator.py ├── record_encoder │ ├── __init__.py │ ├── base_test_record_encoder.py │ ├── test_dense_record_encoder.py │ ├── test_hybrid_record_encoder.py │ ├── test_jina_record_encoder.py │ ├── test_sentence_transformers_encoder.py │ └── test_stub_record_encoder.py ├── stubs │ ├── __init__.py │ ├── stub_chunker.py │ ├── stub_dense_encoder.py │ ├── stub_record_encoder.py │ └── stub_tokenizer.py ├── tokenizer │ ├── __init__.py │ ├── base_test_tokenizer.py │ ├── test_cohere_hf_tokenizer.py │ ├── test_llama_tokenizer.py │ ├── test_openai_tokenizer.py │ ├── test_stub_tokenizer.py │ └── test_tokenizer_singleton.py └── utils │ ├── __init__.py │ ├── _stub_classes.py │ └── test_config.py └── util.py /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.devcontainer/devcontainer.json -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.env.example -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/ISSUE_TEMPLATE/bug-report.yml -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/ISSUE_TEMPLATE/config.yml -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/ISSUE_TEMPLATE/feature-request.yml -------------------------------------------------------------------------------- /.github/actions/install-deps-and-canopy/action.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/actions/install-deps-and-canopy/action.yml -------------------------------------------------------------------------------- /.github/workflows/PR.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/workflows/PR.yml -------------------------------------------------------------------------------- /.github/workflows/build-push-image.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/workflows/build-push-image.yml -------------------------------------------------------------------------------- /.github/workflows/pre-release-CI.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/workflows/pre-release-CI.yml -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.github/workflows/release.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.gitignore -------------------------------------------------------------------------------- /.readme-content/class_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.readme-content/class_architecture.png -------------------------------------------------------------------------------- /.readme-content/new.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.readme-content/new.gif -------------------------------------------------------------------------------- /.readme-content/rag_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.readme-content/rag_flow.png -------------------------------------------------------------------------------- /.readme-content/resin-chat-no-rag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.readme-content/resin-chat-no-rag.gif -------------------------------------------------------------------------------- /.readme-content/sketch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/.readme-content/sketch.png -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/CHANGELOG.md -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/CONTRIBUTING.md -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/Dockerfile -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/LICENSE -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/Makefile -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/README.md -------------------------------------------------------------------------------- /docs/deployment-gcp.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/docs/deployment-gcp.md -------------------------------------------------------------------------------- /docs/library.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/docs/library.md -------------------------------------------------------------------------------- /examples/canopy-lib-quickstart.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/examples/canopy-lib-quickstart.ipynb -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/pyproject.toml -------------------------------------------------------------------------------- /scripts/cleanup_indexes.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/scripts/cleanup_indexes.py -------------------------------------------------------------------------------- /src/canopy/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/__init__.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/__init__.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/chat_engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/chat_engine.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/exceptions.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/exceptions.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/history_pruner/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/history_pruner/__init__.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/history_pruner/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/history_pruner/base.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/history_pruner/raising.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/history_pruner/raising.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/history_pruner/recent.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/history_pruner/recent.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/__init__.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/base.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/cohere.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/function_calling.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/function_calling.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/instruction.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/instruction.py -------------------------------------------------------------------------------- /src/canopy/chat_engine/query_generator/last_message.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/chat_engine/query_generator/last_message.py -------------------------------------------------------------------------------- /src/canopy/config_templates/anyscale.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/config_templates/anyscale.yaml -------------------------------------------------------------------------------- /src/canopy/config_templates/azure.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/config_templates/azure.yaml -------------------------------------------------------------------------------- /src/canopy/config_templates/cohere.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/config_templates/cohere.yaml -------------------------------------------------------------------------------- /src/canopy/config_templates/default.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/config_templates/default.yaml -------------------------------------------------------------------------------- /src/canopy/config_templates/octoai.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/config_templates/octoai.yaml -------------------------------------------------------------------------------- /src/canopy/context_engine/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/context_engine/__init__.py -------------------------------------------------------------------------------- /src/canopy/context_engine/context_builder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/context_engine/context_builder/__init__.py -------------------------------------------------------------------------------- /src/canopy/context_engine/context_builder/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/context_engine/context_builder/base.py -------------------------------------------------------------------------------- /src/canopy/context_engine/context_builder/stuffing.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/context_engine/context_builder/stuffing.py -------------------------------------------------------------------------------- /src/canopy/context_engine/context_engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/context_engine/context_engine.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/__init__.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/base.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/__init__.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/base.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/langchain_text_splitter.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/langchain_text_splitter.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/markdown.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/markdown.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/recursive_character.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/recursive_character.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/chunker/token_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/chunker/token_chunker.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/knowledge_base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/knowledge_base.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/models.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/qdrant/constants.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/qdrant/constants.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/qdrant/converter.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/qdrant/converter.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/qdrant/qdrant_knowledge_base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/qdrant/qdrant_knowledge_base.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/qdrant/utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/qdrant/utils.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/__init__.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/anyscale.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/anyscale.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/azure_openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/azure_openai.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/base.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/cohere.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/dense.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/dense.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/hybrid.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/hybrid.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/jina.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/jina.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/octoai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/octoai.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/openai.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/record_encoder/sentence_transformers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/record_encoder/sentence_transformers.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/reranker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/reranker/__init__.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/reranker/cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/reranker/cohere.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/reranker/reranker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/reranker/reranker.py -------------------------------------------------------------------------------- /src/canopy/knowledge_base/reranker/transparent.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/knowledge_base/reranker/transparent.py -------------------------------------------------------------------------------- /src/canopy/llm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/__init__.py -------------------------------------------------------------------------------- /src/canopy/llm/anyscale.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/anyscale.py -------------------------------------------------------------------------------- /src/canopy/llm/azure_openai_llm.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/azure_openai_llm.py -------------------------------------------------------------------------------- /src/canopy/llm/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/base.py -------------------------------------------------------------------------------- /src/canopy/llm/cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/cohere.py -------------------------------------------------------------------------------- /src/canopy/llm/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/models.py -------------------------------------------------------------------------------- /src/canopy/llm/octoai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/octoai.py -------------------------------------------------------------------------------- /src/canopy/llm/openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/llm/openai.py -------------------------------------------------------------------------------- /src/canopy/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/canopy/models/api_models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/models/api_models.py -------------------------------------------------------------------------------- /src/canopy/models/data_models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/models/data_models.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/__init__.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/base.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/cohere.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/llama.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/llama.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/openai.py -------------------------------------------------------------------------------- /src/canopy/tokenizer/tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/tokenizer/tokenizer.py -------------------------------------------------------------------------------- /src/canopy/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/canopy/utils/config.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/utils/config.py -------------------------------------------------------------------------------- /src/canopy/utils/debugging.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/utils/debugging.py -------------------------------------------------------------------------------- /src/canopy/utils/directory.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy/utils/directory.py -------------------------------------------------------------------------------- /src/canopy_cli/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/canopy_cli/cli.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/cli.py -------------------------------------------------------------------------------- /src/canopy_cli/cli_spinner.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/cli_spinner.py -------------------------------------------------------------------------------- /src/canopy_cli/data_loader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/data_loader/__init__.py -------------------------------------------------------------------------------- /src/canopy_cli/data_loader/data_loader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/data_loader/data_loader.py -------------------------------------------------------------------------------- /src/canopy_cli/data_loader/errors.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/data_loader/errors.py -------------------------------------------------------------------------------- /src/canopy_cli/errors.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_cli/errors.py -------------------------------------------------------------------------------- /src/canopy_server/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/canopy_server/_redocs_template.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_server/_redocs_template.py -------------------------------------------------------------------------------- /src/canopy_server/app.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_server/app.py -------------------------------------------------------------------------------- /src/canopy_server/models/v1/api_models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/src/canopy_server/models/v1/api_models.py -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/__init__.py -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/conftest.py -------------------------------------------------------------------------------- /tests/e2e/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/e2e/test_app.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/e2e/test_app.py -------------------------------------------------------------------------------- /tests/system/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/knowledge_base/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/common.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/qdrant/common.py -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/qdrant/conftest.py -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/test_async_qdrant_knowledge_base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/qdrant/test_async_qdrant_knowledge_base.py -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/test_config.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/qdrant/test_config.yml -------------------------------------------------------------------------------- /tests/system/knowledge_base/qdrant/test_qdrant_knowledge_base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/qdrant/test_qdrant_knowledge_base.py -------------------------------------------------------------------------------- /tests/system/knowledge_base/test_knowledge_base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/knowledge_base/test_knowledge_base.py -------------------------------------------------------------------------------- /tests/system/llm/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/llm/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/llm/conftest.py -------------------------------------------------------------------------------- /tests/system/llm/test_azure_openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/llm/test_azure_openai.py -------------------------------------------------------------------------------- /tests/system/llm/test_cohere.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/llm/test_cohere.py -------------------------------------------------------------------------------- /tests/system/llm/test_openai.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/llm/test_openai.py -------------------------------------------------------------------------------- /tests/system/query_generator/test_cohere_query_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/query_generator/test_cohere_query_generator.py -------------------------------------------------------------------------------- /tests/system/query_generator/test_query_generator_integration.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/query_generator/test_query_generator_integration.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_anyscale_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_anyscale_record_encoder.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_cohere_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_cohere_record_encoder.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_jina_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_jina_record_encoder.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_octoai_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_octoai_record_encoder.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_openai_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_openai_record_encoder.py -------------------------------------------------------------------------------- /tests/system/record_encoder/test_sentence_transformers_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/record_encoder/test_sentence_transformers_encoder.py -------------------------------------------------------------------------------- /tests/system/reranker/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/reranker/test_cohere_reranker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/reranker/test_cohere_reranker.py -------------------------------------------------------------------------------- /tests/system/reranker/test_transparent_reranker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/reranker/test_transparent_reranker.py -------------------------------------------------------------------------------- /tests/system/tokenizer/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/tokenizer/test_cohere_api_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/tokenizer/test_cohere_api_tokenizer.py -------------------------------------------------------------------------------- /tests/system/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/system/utils/test_config.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/system/utils/test_config.py -------------------------------------------------------------------------------- /tests/unit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/__init__.py -------------------------------------------------------------------------------- /tests/unit/chat_engine/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/chat_engine/test_chat_engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chat_engine/test_chat_engine.py -------------------------------------------------------------------------------- /tests/unit/chunker/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/chunker/base_test_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chunker/base_test_chunker.py -------------------------------------------------------------------------------- /tests/unit/chunker/test_markdown_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chunker/test_markdown_chunker.py -------------------------------------------------------------------------------- /tests/unit/chunker/test_recursive_character_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chunker/test_recursive_character_chunker.py -------------------------------------------------------------------------------- /tests/unit/chunker/test_stub_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chunker/test_stub_chunker.py -------------------------------------------------------------------------------- /tests/unit/chunker/test_token_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/chunker/test_token_chunker.py -------------------------------------------------------------------------------- /tests/unit/cli/test_data_loader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/cli/test_data_loader.py -------------------------------------------------------------------------------- /tests/unit/cli/test_non_schematic_data_loader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/cli/test_non_schematic_data_loader.py -------------------------------------------------------------------------------- /tests/unit/context_builder/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/context_builder/test_stuffing_context_builder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/context_builder/test_stuffing_context_builder.py -------------------------------------------------------------------------------- /tests/unit/context_engine/test_context_engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/context_engine/test_context_engine.py -------------------------------------------------------------------------------- /tests/unit/history_pruner/test_raising_history_pruner.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/history_pruner/test_raising_history_pruner.py -------------------------------------------------------------------------------- /tests/unit/history_pruner/test_recent_history_pruner.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/history_pruner/test_recent_history_pruner.py -------------------------------------------------------------------------------- /tests/unit/query_generators/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/query_generators/test_function_calling_query_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/query_generators/test_function_calling_query_generator.py -------------------------------------------------------------------------------- /tests/unit/query_generators/test_instruction_query_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/query_generators/test_instruction_query_generator.py -------------------------------------------------------------------------------- /tests/unit/query_generators/test_last_message_query_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/query_generators/test_last_message_query_generator.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/record_encoder/base_test_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/base_test_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/test_dense_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/test_dense_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/test_hybrid_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/test_hybrid_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/test_jina_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/test_jina_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/test_sentence_transformers_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/test_sentence_transformers_encoder.py -------------------------------------------------------------------------------- /tests/unit/record_encoder/test_stub_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/record_encoder/test_stub_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/stubs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/stubs/stub_chunker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/stubs/stub_chunker.py -------------------------------------------------------------------------------- /tests/unit/stubs/stub_dense_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/stubs/stub_dense_encoder.py -------------------------------------------------------------------------------- /tests/unit/stubs/stub_record_encoder.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/stubs/stub_record_encoder.py -------------------------------------------------------------------------------- /tests/unit/stubs/stub_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/stubs/stub_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/tokenizer/base_test_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/base_test_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/test_cohere_hf_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/test_cohere_hf_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/test_llama_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/test_llama_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/test_openai_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/test_openai_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/test_stub_tokenizer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/test_stub_tokenizer.py -------------------------------------------------------------------------------- /tests/unit/tokenizer/test_tokenizer_singleton.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/tokenizer/test_tokenizer_singleton.py -------------------------------------------------------------------------------- /tests/unit/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/utils/_stub_classes.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/utils/_stub_classes.py -------------------------------------------------------------------------------- /tests/unit/utils/test_config.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/unit/utils/test_config.py -------------------------------------------------------------------------------- /tests/util.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinecone-io/canopy/HEAD/tests/util.py --------------------------------------------------------------------------------