cocoindex 0.2.20__tar.gz → 0.2.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cocoindex might be problematic. Click here for more details.
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/_docs_release.yml +2 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/_test.yml +28 -15
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/docs_test.yml +2 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/format.yml +4 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/release.yml +10 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/Cargo.lock +2 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/Cargo.toml +3 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/PKG-INFO +1 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/THIRD_PARTY_NOTICES.html +33 -27
- cocoindex-0.2.21/docs/docs/custom_ops/custom_sources.mdx +275 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/sidebars.ts +1 -0
- cocoindex-0.2.21/examples/custom_source_hn/.env.example +6 -0
- cocoindex-0.2.21/examples/custom_source_hn/README.md +52 -0
- cocoindex-0.2.21/examples/custom_source_hn/main.py +264 -0
- cocoindex-0.2.21/examples/custom_source_hn/pyproject.toml +9 -0
- cocoindex-0.2.21/examples/text_embedding_qdrant/.env +6 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/cli.py +1 -3
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/engine_value.py +15 -13
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/flow.py +4 -4
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/op.py +262 -5
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/typing.py +6 -6
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/value.rs +12 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/analyzed_flow.rs +2 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/analyzer.rs +2 -2
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/flow_builder.rs +10 -7
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/source_indexer.rs +32 -34
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/lib_context.rs +0 -2
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/interface.rs +2 -2
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/py_factory.rs +343 -2
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/amazon_s3.rs +2 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/azure_blob.rs +2 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/google_drive.rs +3 -3
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/local_file.rs +2 -1
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/py/convert.rs +7 -10
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/py/mod.rs +10 -1
- cocoindex-0.2.21/src/utils/bytes_decode.rs +12 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/mod.rs +1 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.cargo/config.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.env.lib_debug +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/SECURITY.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.github/workflows/docs_release.yml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/.pre-commit-config.yaml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/CONTRIBUTING.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/LICENSE +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/about.hbs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/about.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/dev/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/dev/generate_cli_docs.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/dev/neo4j.yaml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/dev/postgres.yaml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/about/community.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/contributing/guide.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/contributing/new_built_in_target.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/contributing/setup_dev_environment.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/cli-commands.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/custom_ops/custom_functions.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/custom_ops/custom_targets.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/academic_papers_index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/codebase_index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/custom_targets.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/docs_to_knowledge_graph.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/document_ai.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/image_search.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/manual_extraction.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/multi_format_index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/patient_form_extraction.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/photo_search.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/postgres_source.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/product_recommendation.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/examples/simple_vector_index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/examples/index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/query.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/amazons3.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/azureblob.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/googledrive.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/localfile.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/sources/postgres.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/index.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/kuzu.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/lancedb.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/neo4j.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/postgres.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/targets/qdrant.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/tutorials/live_updates.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/package.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/components/GitHubButton/index.tsx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/css/custom.css +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/theme/DocCard/index.tsx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/theme/DocCard/styles.module.css +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/theme/DocCardList/index.tsx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/theme/DocCardList/styles.module.css +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/.nojekyll +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/codebase_index/chunk.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/codebase_index/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/codebase_index/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/custom_targets/convert.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/custom_targets/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/document_ai/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/document_ai/document_ai.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/document_ai/processor.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/image_search/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/image_search/embedding.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/image_search/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/image_search/result.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/manual_extraction/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/manual_extraction/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/manual_extraction/summary.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/multi_format_index/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/multi_format_index/embed.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/multi_format_index/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/multi_format_index/pages.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/photo_search/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/photo_search/extraction.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/photo_search/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/collector.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/description.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/embed.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/lineage.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/price.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/postgres_source/source.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/simple_vector_index/embed.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/img/incremental-etl.gif +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/static/robots.txt +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/tsconfig.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/docs/yarn.lock +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/amazon_s3_embedding/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/amazon_s3_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/amazon_s3_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/azure_blob_embedding/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/azure_blob_embedding/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/azure_blob_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/azure_blob_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/azure_blob_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/code_embedding/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/code_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/data/chunk_norris.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/custom_output_files/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/face_recognition → cocoindex-0.2.21/examples/custom_source_hn}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/manuals_llm_extraction → cocoindex-0.2.21/examples/face_recognition}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/images/einplanck3.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/face_recognition/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/fastapi_server_docker/requirements.txt +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/gdrive_text_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/colpali_main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/image_search/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/data/chunk_norris.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/live_updates/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/multi_format_indexing → cocoindex-0.2.21/examples/manuals_llm_extraction}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/manuals_llm_extraction/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/pdf_elements_embedding → cocoindex-0.2.21/examples/multi_format_indexing}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/paper_metadata/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/data/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/patient_intake_extraction/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/pdf_embedding → cocoindex-0.2.21/examples/pdf_elements_embedding}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_elements_embedding/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_elements_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_elements_embedding/fetch_manual_urls.sh +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_elements_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_elements_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/text_embedding → cocoindex-0.2.21/examples/pdf_embedding}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/pdf_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/postgres_source/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/postgres_source/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/postgres_source/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/postgres_source/prepare_source_data.sql +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/postgres_source/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/.env.example +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/product_recommendation/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/text_embedding_lancedb → cocoindex-0.2.21/examples/text_embedding}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.20/examples/text_embedding_qdrant → cocoindex-0.2.21/examples/text_embedding_lancedb}/.env +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_lancedb/.gitignore +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_lancedb/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_lancedb/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_lancedb/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_lancedb/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/examples/text_embedding_qdrant/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/pyproject.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/__init__.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/engine_object.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/functions/__init__.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/functions/_engine_builtin_specs.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/functions/colpali.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/functions/sbert.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/index.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/query_handler.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/sources/__init__.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/sources/_engine_builtin_specs.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/subprocess_exec.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/targets/__init__.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/targets/_engine_builtin_specs.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/targets/lancedb.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_engine_object.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_engine_value.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_optional_database.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_transform_flow.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_typing.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/tests/test_validation.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/user_app_loader.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/python/cocoindex/validation.py +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/ruff.toml +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/duration.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/json_schema.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/schema.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/base/spec.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/exec_ctx.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/builder/plan.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/dumper.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/evaluator.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/indexing_status.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/live_updater.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/memoization.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/execution/stats.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/lib.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/bedrock.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/gemini.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/litellm.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/ollama.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/openai.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/openrouter.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/vllm.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/llm/voyage.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/detect_program_lang.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/embed_text.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/split_by_separators.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/functions/test_utils.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/registration.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/registry.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sdk.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/shared/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/shared/postgres.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/shared/program_langs.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/shared/split.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/postgres.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/shared/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/sources/shared/pattern_matcher.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/kuzu.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/neo4j.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/postgres.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/qdrant.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/shared/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/shared/property_graph.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/ops/targets/shared/table_columns.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/prelude.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/server.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/service/error.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/service/flows.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/service/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/service/query_handler.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/settings.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/components.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/driver.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/flow_features.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/mod.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/setup/states.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/concur_control.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/db.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/deser.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/immutable.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/retryable.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/str_sanitize.rs +0 -0
- {cocoindex-0.2.20 → cocoindex-0.2.21}/src/utils/yaml_ser.rs +0 -0
|
@@ -17,37 +17,48 @@ jobs:
|
|
|
17
17
|
platform:
|
|
18
18
|
- { runner: ubuntu-latest, python_exec: ".venv/bin/python" }
|
|
19
19
|
- { runner: ubuntu-24.04-arm, python_exec: ".venv/bin/python" }
|
|
20
|
-
- { runner: macos-latest, python_exec: ".venv/bin/python" }
|
|
21
|
-
- { runner: macos-13, python_exec: ".venv/bin/python" }
|
|
20
|
+
- { runner: macos-latest, python_exec: ".venv/bin/python", extra_rustflags: "-C split-debuginfo=off"}
|
|
21
|
+
- { runner: macos-13, python_exec: ".venv/bin/python", extra_rustflags: "-C split-debuginfo=off"}
|
|
22
22
|
- { runner: windows-latest, python_exec: ".venv\\Scripts\\python" }
|
|
23
23
|
runs-on: ${{ matrix.platform.runner }}
|
|
24
|
+
env:
|
|
25
|
+
RUSTFLAGS: "-C debuginfo=0 ${{ matrix.platform.extra_rustflags }}"
|
|
26
|
+
CARGO_INCREMENTAL: "0"
|
|
27
|
+
SCCACHE_GHA_ENABLED: "true"
|
|
28
|
+
RUSTC_WRAPPER: "sccache"
|
|
29
|
+
|
|
24
30
|
steps:
|
|
25
31
|
- uses: actions/checkout@v4
|
|
32
|
+
with:
|
|
33
|
+
fetch-depth: 1
|
|
34
|
+
|
|
35
|
+
- name: Run sccache-cache
|
|
36
|
+
uses: mozilla-actions/sccache-action@v0.0.9
|
|
26
37
|
|
|
27
38
|
- uses: actions/setup-python@v5
|
|
28
39
|
id: setup_python
|
|
29
40
|
with:
|
|
30
41
|
python-version: ${{ matrix.python-version }}
|
|
31
|
-
cache
|
|
42
|
+
# Python cache is huge and saves little time, so disabled for now, until we have higher cache size limits
|
|
43
|
+
# cache: 'pip'
|
|
32
44
|
|
|
33
45
|
- run: rustup toolchain install stable --profile minimal
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
|
|
47
|
+
# Disable Rust cache until we have higher cache size limits
|
|
48
|
+
# - name: Rust Cache
|
|
49
|
+
# uses: Swatinem/rust-cache@v2
|
|
50
|
+
# with:
|
|
51
|
+
# key: rust-${{ matrix.platform.runner }}-${{ matrix.python-version }}
|
|
52
|
+
# cache-targets: 'false'
|
|
53
|
+
# cache-all-crates: 'false'
|
|
54
|
+
# cache-workspace-crates: 'false'
|
|
55
|
+
|
|
38
56
|
- name: Rust tests (no default features)
|
|
39
57
|
run: cargo test --no-default-features --verbose
|
|
40
58
|
|
|
41
59
|
- name: Rust tests
|
|
42
60
|
run: cargo test --verbose
|
|
43
61
|
|
|
44
|
-
- uses: actions/cache@v4
|
|
45
|
-
with:
|
|
46
|
-
path: .venv
|
|
47
|
-
key: pyenv-${{ matrix.platform.runner }}-${{ steps.setup_python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
|
|
48
|
-
restore-keys: |
|
|
49
|
-
pyenv-${{ matrix.platform.runner }}-${{ steps.setup_python.outputs.python-version }}-
|
|
50
|
-
|
|
51
62
|
- name: Setup venv
|
|
52
63
|
run: |
|
|
53
64
|
python -m venv .venv
|
|
@@ -56,7 +67,7 @@ jobs:
|
|
|
56
67
|
${{ matrix.platform.python_exec }} -m pip install maturin mypy pytest pytest-asyncio
|
|
57
68
|
- name: Python build
|
|
58
69
|
run: |
|
|
59
|
-
${{ matrix.platform.python_exec }} -m maturin develop -E all
|
|
70
|
+
${{ matrix.platform.python_exec }} -m maturin develop --strip -E all
|
|
60
71
|
- name: Python type check (mypy)
|
|
61
72
|
run: |
|
|
62
73
|
${{ matrix.platform.python_exec }} -m mypy python
|
|
@@ -68,6 +79,8 @@ jobs:
|
|
|
68
79
|
runs-on: ubuntu-latest
|
|
69
80
|
steps:
|
|
70
81
|
- uses: actions/checkout@v4
|
|
82
|
+
with:
|
|
83
|
+
fetch-depth: 1
|
|
71
84
|
- name: Install Rust toolchain
|
|
72
85
|
uses: dtolnay/rust-toolchain@stable
|
|
73
86
|
- uses: taiki-e/install-action@v2
|
|
@@ -29,6 +29,8 @@ jobs:
|
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
30
|
steps:
|
|
31
31
|
- uses: actions/checkout@v4
|
|
32
|
+
with:
|
|
33
|
+
fetch-depth: 1
|
|
32
34
|
- uses: dtolnay/rust-toolchain@stable
|
|
33
35
|
with:
|
|
34
36
|
components: rustfmt
|
|
@@ -41,6 +43,8 @@ jobs:
|
|
|
41
43
|
runs-on: ubuntu-latest
|
|
42
44
|
steps:
|
|
43
45
|
- uses: actions/checkout@v4
|
|
46
|
+
with:
|
|
47
|
+
fetch-depth: 1
|
|
44
48
|
- uses: actions/setup-python@v5
|
|
45
49
|
with:
|
|
46
50
|
python-version: 3.11
|
|
@@ -19,6 +19,8 @@ jobs:
|
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
21
21
|
- uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 1
|
|
22
24
|
- run: ./.github/scripts/update_version.sh
|
|
23
25
|
- uses: actions/upload-artifact@v4
|
|
24
26
|
with:
|
|
@@ -30,6 +32,8 @@ jobs:
|
|
|
30
32
|
needs: [create-versioned-toml]
|
|
31
33
|
steps:
|
|
32
34
|
- uses: actions/checkout@v4
|
|
35
|
+
with:
|
|
36
|
+
fetch-depth: 1
|
|
33
37
|
- uses: actions/download-artifact@v4
|
|
34
38
|
with:
|
|
35
39
|
name: Cargo.toml
|
|
@@ -61,6 +65,8 @@ jobs:
|
|
|
61
65
|
- { os: windows, runner: windows-latest, target: x64 }
|
|
62
66
|
steps:
|
|
63
67
|
- uses: actions/checkout@v4
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 1
|
|
64
70
|
- uses: actions/download-artifact@v4
|
|
65
71
|
with:
|
|
66
72
|
name: Cargo.toml
|
|
@@ -107,6 +113,8 @@ jobs:
|
|
|
107
113
|
needs: [create-versioned-toml, generate-3p-notices]
|
|
108
114
|
steps:
|
|
109
115
|
- uses: actions/checkout@v4
|
|
116
|
+
with:
|
|
117
|
+
fetch-depth: 1
|
|
110
118
|
- uses: actions/download-artifact@v4
|
|
111
119
|
with:
|
|
112
120
|
name: Cargo.toml
|
|
@@ -138,6 +146,8 @@ jobs:
|
|
|
138
146
|
environment: release
|
|
139
147
|
steps:
|
|
140
148
|
- uses: actions/checkout@v4
|
|
149
|
+
with:
|
|
150
|
+
fetch-depth: 1
|
|
141
151
|
- uses: actions/download-artifact@v4
|
|
142
152
|
with:
|
|
143
153
|
name: Cargo.toml
|
|
@@ -1283,7 +1283,7 @@ dependencies = [
|
|
|
1283
1283
|
|
|
1284
1284
|
[[package]]
|
|
1285
1285
|
name = "cocoindex"
|
|
1286
|
-
version = "0.2.
|
|
1286
|
+
version = "0.2.21"
|
|
1287
1287
|
dependencies = [
|
|
1288
1288
|
"anyhow",
|
|
1289
1289
|
"async-openai",
|
|
@@ -1305,6 +1305,7 @@ dependencies = [
|
|
|
1305
1305
|
"config",
|
|
1306
1306
|
"const_format",
|
|
1307
1307
|
"derivative",
|
|
1308
|
+
"encoding_rs",
|
|
1308
1309
|
"env_logger",
|
|
1309
1310
|
"expect-test",
|
|
1310
1311
|
"futures",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name = "cocoindex"
|
|
3
3
|
# Version used for local development is always higher than others to take precedence.
|
|
4
4
|
# Will be overridden for specific release versions.
|
|
5
|
-
version = "0.2.
|
|
5
|
+
version = "0.2.21"
|
|
6
6
|
edition = "2024"
|
|
7
7
|
rust-version = "1.89"
|
|
8
8
|
license = "Apache-2.0"
|
|
@@ -10,6 +10,7 @@ readme = "README.md"
|
|
|
10
10
|
|
|
11
11
|
[profile.release]
|
|
12
12
|
codegen-units = 1
|
|
13
|
+
strip = "symbols"
|
|
13
14
|
lto = true
|
|
14
15
|
|
|
15
16
|
[lib]
|
|
@@ -153,3 +154,4 @@ azure_storage_blobs = { version = "0.21.0", default-features = false, features =
|
|
|
153
154
|
] }
|
|
154
155
|
serde_path_to_error = "0.1.17"
|
|
155
156
|
expect-test = "1.5.0"
|
|
157
|
+
encoding_rs = "0.8.35"
|
|
@@ -2428,7 +2428,7 @@ Software.
|
|
|
2428
2428
|
<h3 id="Apache-2.0">Apache License 2.0</h3>
|
|
2429
2429
|
<h4>Used by:</h4>
|
|
2430
2430
|
<ul class="license-used-by">
|
|
2431
|
-
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.
|
|
2431
|
+
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.21</a></li>
|
|
2432
2432
|
<li><a href=" https://github.com/awesomized/crc-fast-rust ">crc-fast 1.3.0</a></li>
|
|
2433
2433
|
<li><a href=" https://github.com/qdrant/rust-client ">qdrant-client 1.15.0</a></li>
|
|
2434
2434
|
</ul>
|
|
@@ -10677,6 +10677,38 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
10677
10677
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
10678
10678
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
10679
10679
|
THE SOFTWARE.</pre>
|
|
10680
|
+
</li>
|
|
10681
|
+
<li class="license">
|
|
10682
|
+
<h3 id="MIT">MIT License</h3>
|
|
10683
|
+
<h4>Used by:</h4>
|
|
10684
|
+
<ul class="license-used-by">
|
|
10685
|
+
<li><a href=" https://github.com/tree-sitter/tree-sitter-scala ">tree-sitter-scala 0.24.0</a></li>
|
|
10686
|
+
</ul>
|
|
10687
|
+
<pre class="license-text">(The MIT License)
|
|
10688
|
+
|
|
10689
|
+
Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
|
|
10690
|
+
|
|
10691
|
+
Permission is hereby granted, free of charge, to any person
|
|
10692
|
+
obtaining a copy of this software and associated documentation
|
|
10693
|
+
files (the "Software"), to deal in the Software without
|
|
10694
|
+
restriction, including without limitation the rights to use,
|
|
10695
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10696
|
+
copies of the Software, and to permit persons to whom the
|
|
10697
|
+
Software is furnished to do so, subject to the following
|
|
10698
|
+
conditions:
|
|
10699
|
+
|
|
10700
|
+
The above copyright notice and this permission notice shall be
|
|
10701
|
+
included in all copies or substantial portions of the Software.
|
|
10702
|
+
|
|
10703
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
10704
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
10705
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
10706
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
10707
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
10708
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
10709
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
10710
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
10711
|
+
</pre>
|
|
10680
10712
|
</li>
|
|
10681
10713
|
<li class="license">
|
|
10682
10714
|
<h3 id="MIT">MIT License</h3>
|
|
@@ -12300,32 +12332,6 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
12300
12332
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
12301
12333
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
12302
12334
|
THE SOFTWARE.
|
|
12303
|
-
</pre>
|
|
12304
|
-
</li>
|
|
12305
|
-
<li class="license">
|
|
12306
|
-
<h3 id="MIT">MIT License</h3>
|
|
12307
|
-
<h4>Used by:</h4>
|
|
12308
|
-
<ul class="license-used-by">
|
|
12309
|
-
<li><a href=" https://github.com/tree-sitter/tree-sitter-scala ">tree-sitter-scala 0.24.0</a></li>
|
|
12310
|
-
</ul>
|
|
12311
|
-
<pre class="license-text">This software is released under the MIT license:
|
|
12312
|
-
|
|
12313
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
12314
|
-
this software and associated documentation files (the "Software"), to deal in
|
|
12315
|
-
the Software without restriction, including without limitation the rights to
|
|
12316
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
12317
|
-
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
12318
|
-
subject to the following conditions:
|
|
12319
|
-
|
|
12320
|
-
The above copyright notice and this permission notice shall be included in all
|
|
12321
|
-
copies or substantial portions of the Software.
|
|
12322
|
-
|
|
12323
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
12324
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
12325
|
-
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
12326
|
-
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
12327
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
12328
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12329
12335
|
</pre>
|
|
12330
12336
|
</li>
|
|
12331
12337
|
<li class="license">
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Custom Sources
|
|
3
|
+
description: Learn how to create custom sources in CocoIndex to read data from any system including APIs, databases, file systems, and external services. Build source specs and connectors with list and get_value methods for flexible data ingestion operations.
|
|
4
|
+
toc_max_heading_level: 4
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A custom source allows you to read data from any system you want, such as APIs, databases, file systems, cloud storage, or other external services.
|
|
8
|
+
You can stream data incrementally and provide ordinal information for efficient updates and change tracking.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Custom sources are defined by two components:
|
|
13
|
+
|
|
14
|
+
* A **source spec** that configures the behavior and connection parameters for the source.
|
|
15
|
+
* A **source connector** that handles the actual data reading operations. It provides the following required methods:
|
|
16
|
+
* `create()`: Create a connector instance from the source spec.
|
|
17
|
+
* `list()`: List all available data items. Return keys.
|
|
18
|
+
* `get_value()`: Get the full content for a specific data item by given key.
|
|
19
|
+
|
|
20
|
+
## Source Spec
|
|
21
|
+
|
|
22
|
+
The source spec defines the configuration parameters for your custom source. When you use this source in a flow (typically by calling [`add_source()`](/docs/core/flow_def#import-from-source)), you instantiate this source spec with specific parameter values.
|
|
23
|
+
|
|
24
|
+
A source spec is defined as a class that inherits from `cocoindex.op.SourceSpec`.
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
class CustomSource(cocoindex.op.SourceSpec):
|
|
28
|
+
"""
|
|
29
|
+
Documentation for the source.
|
|
30
|
+
"""
|
|
31
|
+
param1: str
|
|
32
|
+
param2: int | None = None
|
|
33
|
+
...
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Notes:
|
|
37
|
+
|
|
38
|
+
* All fields of the spec must have a type serializable / deserializable by the `json` module.
|
|
39
|
+
* All subclasses of `SourceSpec` can be instantiated similar to a dataclass, i.e. `ClassName(param1=value1, param2=value2, ...)`.
|
|
40
|
+
|
|
41
|
+
## Source Connector
|
|
42
|
+
|
|
43
|
+
A source connector handles the actual data reading operations for your custom source. It defines how data should be accessed from your source system.
|
|
44
|
+
|
|
45
|
+
Source connectors implement methods to list available data and retrieve specific data items.
|
|
46
|
+
|
|
47
|
+
A source connector is defined as a class decorated by `@cocoindex.op.source_connector(spec_cls=CustomSource, key_type=KeyType, value_type=ValueType)`.
|
|
48
|
+
This is a full-featured source connector definition:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
@cocoindex.op.source_connector(
|
|
52
|
+
spec_cls=CustomSource,
|
|
53
|
+
key_type=DataKeyType,
|
|
54
|
+
value_type=DataValueType
|
|
55
|
+
)
|
|
56
|
+
class CustomSourceConnector:
|
|
57
|
+
@staticmethod
|
|
58
|
+
async def create(spec: CustomSource) -> "CustomSourceConnector":
|
|
59
|
+
"""Required. Create a connector instance from the spec."""
|
|
60
|
+
...
|
|
61
|
+
|
|
62
|
+
async def list(self, options: SourceReadOptions) -> AsyncIterator[PartialSourceRow[DataKeyType, DataValueType]]:
|
|
63
|
+
"""Required. List all available data items. `options` is optional."""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
async def get_value(self, key: DataKeyType, options: SourceReadOptions) -> PartialSourceRowData[DataValueType]:
|
|
67
|
+
"""Required. Get the full content for a specific data item. `options` is optional."""
|
|
68
|
+
...
|
|
69
|
+
|
|
70
|
+
def provides_ordinal(self) -> bool:
|
|
71
|
+
"""Optional. Return True if this source provides ordinal information."""
|
|
72
|
+
return False
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Your source connector class doesn't have to have everything above:
|
|
76
|
+
|
|
77
|
+
* `options` arguments are optional. It provides additional hints to tell if the engine needs a certain property currently.
|
|
78
|
+
You don't have to take this argument and always provide available properties.
|
|
79
|
+
* `provides_ordinal()` is optional. It's a hint to tell if the engine needs ordinal information.
|
|
80
|
+
* `create()`, `list()` and `get_value()` methods can be async or sync.
|
|
81
|
+
|
|
82
|
+
The following data types are involved in the method definitions above: `CustomSource`, `DataKeyType`, `DataValueType`, `PartialSourceRow`, `PartialSourceRowData`. They should be replaced with the actual types in your implementation. We will explain each of them below.
|
|
83
|
+
|
|
84
|
+
### Data Access Methods
|
|
85
|
+
|
|
86
|
+
Data access methods handle the actual reading operations - discovering available data and retrieving specific content.
|
|
87
|
+
|
|
88
|
+
#### `async? def create(spec)` (Required)
|
|
89
|
+
|
|
90
|
+
This static method creates a connector instance from the source spec. It should return a connector that can be used to access data from the source.
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
@staticmethod
|
|
94
|
+
async def create(spec: CustomSource) -> "CustomSourceConnector":
|
|
95
|
+
"""
|
|
96
|
+
Create a connector instance. This is where you initialize connections,
|
|
97
|
+
validate configuration, authenticate, etc.
|
|
98
|
+
"""
|
|
99
|
+
# Initialize connections, authenticate, etc.
|
|
100
|
+
return CustomSourceConnector(spec, ...)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### `async? def list(options?)` (Required)
|
|
104
|
+
|
|
105
|
+
This method enumerates all available data items from the source. It should yield `PartialSourceRow` objects containing:
|
|
106
|
+
|
|
107
|
+
* `key`: A unique identifier for the data item
|
|
108
|
+
* `data`: A `PartialSourceRowData` object with metadata (typically just `ordinal` information)
|
|
109
|
+
|
|
110
|
+
The optional `options` parameter provides hints about what information is needed:
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
async def list(self, options: SourceReadOptions) -> AsyncIterator[PartialSourceRow[DataKeyType, DataValueType]]:
|
|
114
|
+
"""
|
|
115
|
+
List all available data items. This method is used by CocoIndex to
|
|
116
|
+
discover what data is available and track changes.
|
|
117
|
+
"""
|
|
118
|
+
# Enumerate data items from your source
|
|
119
|
+
for item_metadata in await self._fetch_item_list():
|
|
120
|
+
data = PartialSourceRowData[DataValueType]()
|
|
121
|
+
|
|
122
|
+
# Include ordinal if requested and available.
|
|
123
|
+
# Must provide if `provides_ordinal()` returns True and `include_ordinal` is True.
|
|
124
|
+
if options.include_ordinal and item_metadata.timestamp:
|
|
125
|
+
data.ordinal = item_metadata.timestamp
|
|
126
|
+
|
|
127
|
+
# Optionally include full value if it's cheap to fetch and requested
|
|
128
|
+
if options.include_value and self._can_fetch_cheaply(item_metadata):
|
|
129
|
+
data.value = await self._fetch_item_content(item_metadata.id)
|
|
130
|
+
|
|
131
|
+
yield PartialSourceRow(
|
|
132
|
+
key=DataKeyType(id=item_metadata.id),
|
|
133
|
+
data=data
|
|
134
|
+
)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`options` is a hint. You don't have to take this argument.
|
|
138
|
+
Without it, provide all fields as long as they're available.
|
|
139
|
+
|
|
140
|
+
#### `async? def get_value(key, options?)` (Required)
|
|
141
|
+
|
|
142
|
+
This method retrieves the full content for a specific data item given its key. It should return a `PartialSourceRowData` object containing the actual data.
|
|
143
|
+
|
|
144
|
+
The optional `options` parameter provides hints about what information is needed:
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
async def get_value(self, key: DataKeyType, options: SourceReadOptions) -> PartialSourceRowData[DataValueType]:
|
|
148
|
+
"""
|
|
149
|
+
Get the full content for a specific data item. CocoIndex calls this
|
|
150
|
+
when it needs the actual data content for processing.
|
|
151
|
+
"""
|
|
152
|
+
# Fetch the full content for the given key
|
|
153
|
+
content = await self._fetch_item_content(key.id)
|
|
154
|
+
if content is None:
|
|
155
|
+
return PartialSourceRowData(
|
|
156
|
+
value=NON_EXISTENCE,
|
|
157
|
+
ordinal=NO_ORDINAL,
|
|
158
|
+
content_version_fp=None
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
data = PartialSourceRowData(
|
|
162
|
+
value=DataValueType(
|
|
163
|
+
title=content.title,
|
|
164
|
+
content=content.body,
|
|
165
|
+
author=content.author
|
|
166
|
+
)
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
# Include ordinal if requested and available
|
|
170
|
+
if options.include_ordinal and content.timestamp:
|
|
171
|
+
data.ordinal = content.timestamp
|
|
172
|
+
|
|
173
|
+
# Include content version fingerprint if requested and easily available
|
|
174
|
+
if options.include_content_version_fp and content.etag:
|
|
175
|
+
data.content_version_fp = content.etag.encode()
|
|
176
|
+
|
|
177
|
+
return data
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
`options` is a hint. You don't have to take this argument.
|
|
181
|
+
Without it, provide all fields as long as they're available.
|
|
182
|
+
|
|
183
|
+
#### `def provides_ordinal()` (Optional)
|
|
184
|
+
|
|
185
|
+
Returns `True` if this source provides ordinal information (such as timestamps) that can be used for efficient change detection. If `True`, CocoIndex can use this information to optimize updates.
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
def provides_ordinal(self) -> bool:
|
|
189
|
+
"""
|
|
190
|
+
Return True if this source provides ordinal information.
|
|
191
|
+
"""
|
|
192
|
+
return True # If your source provides timestamps or version numbers
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Data Types
|
|
196
|
+
|
|
197
|
+
#### SourceReadOptions
|
|
198
|
+
|
|
199
|
+
The `SourceReadOptions` class provides hints to source connectors about what information is needed. This allows connectors to optimize their data fetching:
|
|
200
|
+
|
|
201
|
+
```python
|
|
202
|
+
@dataclasses.dataclass
|
|
203
|
+
class SourceReadOptions:
|
|
204
|
+
"""Options for reading source data."""
|
|
205
|
+
include_ordinal: bool = False
|
|
206
|
+
include_content_version_fp: bool = False
|
|
207
|
+
include_value: bool = False
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Fields:**
|
|
211
|
+
|
|
212
|
+
* `include_ordinal`: Whether to include ordinal information (timestamps, version numbers). Required in `list()` when `provides_ordinal()` returns `True` and this is `True`.
|
|
213
|
+
* `include_content_version_fp`: Whether to include content version fingerprints for change detection. Always optional.
|
|
214
|
+
* `include_value`: Whether to include full values. Required in `get_value()` when this is `True`. Optional in `list()` - useful when fetching values is cheap.
|
|
215
|
+
|
|
216
|
+
#### PartialSourceRow
|
|
217
|
+
|
|
218
|
+
Represents a single data item from the source:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
@dataclasses.dataclass
|
|
222
|
+
class PartialSourceRow(Generic[K, V]):
|
|
223
|
+
key: K # Unique identifier for the data item
|
|
224
|
+
data: PartialSourceRowData[V] # Metadata and optionally the value
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
#### PartialSourceRowData
|
|
228
|
+
|
|
229
|
+
Contains the data and metadata for a source item:
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
@dataclasses.dataclass
|
|
233
|
+
class PartialSourceRowData(Generic[V]):
|
|
234
|
+
value: V | Literal["NON_EXISTENCE"] | None = None # The actual data content
|
|
235
|
+
ordinal: int | Literal["NO_ORDINAL"] | None = None # Timestamp or version number
|
|
236
|
+
content_version_fp: bytes | None = None # Content fingerprint for change detection
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Fields:**
|
|
240
|
+
|
|
241
|
+
* `value`: The actual data content, or `cocoindex.op.NON_EXISTENCE` if the item doesn't exist, or `None` if not included.
|
|
242
|
+
* `ordinal`: Timestamp or version number for change tracking, or `cocoindex.op.NO_ORDINAL` if not available, or `None` if not included. An ordinal needs to be monotonically increasing.
|
|
243
|
+
* `content_version_fp`: Content fingerprint (hash, ETag, etc.) for efficient change detection, or `None` if not available.
|
|
244
|
+
|
|
245
|
+
#### Key Type (`DataKeyType`) and Value Type (`DataValueType`) for Data
|
|
246
|
+
|
|
247
|
+
The data type of custom source is a [*KTable*](/docs/core/data_types#ktable), so the key type and value type also follows the same requirements as key and value of a *KTable*. Specifically:
|
|
248
|
+
|
|
249
|
+
* The key type uniquely identifies each data item in your source. It can be:
|
|
250
|
+
* A `NamedTuple` or frozen dataclass with one or multiple fields.
|
|
251
|
+
|
|
252
|
+
```python
|
|
253
|
+
class DataKeyType(NamedTuple):
|
|
254
|
+
id: str
|
|
255
|
+
category: str | None = None
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
* When there's a single key part, you can also use a simple type like `str` or `int` for single-field keys.
|
|
259
|
+
The key field name will be `cocoindex.KEY_FIELD_NAME` for this case.
|
|
260
|
+
|
|
261
|
+
* The value type represents the actual data content.
|
|
262
|
+
It's typically a dataclass containing all the value fields the source exposes.
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
@dataclasses.dataclass
|
|
266
|
+
class DataValueType:
|
|
267
|
+
title: str
|
|
268
|
+
content: str
|
|
269
|
+
author: str | None
|
|
270
|
+
created_at: datetime | None
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Example
|
|
274
|
+
|
|
275
|
+
See the [custom_source_hn](https://github.com/cocoindex-io/cocoindex/blob/main/examples/custom_source_hn/main.py) example for a complete end-to-end implementation.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Example environment variables for HackerNews Custom Source Example
|
|
2
|
+
# Copy this to .env and fill in your actual database connection string
|
|
3
|
+
|
|
4
|
+
# PostgreSQL database connection URL
|
|
5
|
+
# Format: postgresql://username:password@host:port/database
|
|
6
|
+
COCOINDEX_DATABASE_URL=postgresql://username:password@localhost:5432/cocoindex_hackernews
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# HackerNews Custom Source Example
|
|
2
|
+
|
|
3
|
+
[](https://github.com/cocoindex-io/cocoindex)
|
|
4
|
+
|
|
5
|
+
In this example, we use [CocoIndex Custom Source](https://cocoindex.io/docs/custom_ops/custom_targets) to define a source to get HackerNews recent content, by calling [HackerNews API](https://hn.algolia.com/api).
|
|
6
|
+
We build index for HackerNews threads and their comments, and provides a lightweight query handler to search by keywords.
|
|
7
|
+
|
|
8
|
+
We appreciate a star ⭐ at [CocoIndex Github](https://github.com/cocoindex-io/cocoindex) if this is helpful.
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
|
|
12
|
+
### Indexing Flow
|
|
13
|
+
|
|
14
|
+
1. We define a custom source connector `HackerNews` to get HackerNews recent threads by calling HackerNews API.
|
|
15
|
+
2. We build index for HackerNews threads and their comments.
|
|
16
|
+
|
|
17
|
+
## Prerequisite
|
|
18
|
+
|
|
19
|
+
[Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
|
|
20
|
+
|
|
21
|
+
## Run
|
|
22
|
+
|
|
23
|
+
Install dependencies:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install -e .
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Update the target:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cocoindex update --setup main
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Each time when you run the `update` command, cocoindex will only re-process threads that have changed, and keep the target in sync with the recent 500 threads from HackerNews.
|
|
36
|
+
|
|
37
|
+
You can also run `update` command in live mode, which will keep the target in sync with the source continuously:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cocoindex update --setup -L main.py
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## CocoInsight
|
|
44
|
+
|
|
45
|
+
I used CocoInsight (Free beta now) to troubleshoot the index generation and understand the data lineage of the pipeline.
|
|
46
|
+
It just connects to your local CocoIndex server, with Zero pipeline data retention. Run following command to start CocoInsight:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
cocoindex server -ci -L main
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Then open the CocoInsight UI at [https://cocoindex.io/cocoinsight](https://cocoindex.io/cocoinsight).
|