cocoindex 0.2.2__tar.gz → 0.2.3__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.
- cocoindex-0.2.3/.github/workflows/_test.yml +65 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/workflows/release.yml +29 -11
- {cocoindex-0.2.2 → cocoindex-0.2.3}/Cargo.lock +1 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/Cargo.toml +7 -2
- {cocoindex-0.2.2 → cocoindex-0.2.3}/PKG-INFO +17 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/simple_vector_index.md +43 -21
- cocoindex-0.2.3/docs/docs/getting_started/quickstart.md +177 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/ops/sources.md +21 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docusaurus.config.ts +1 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/components/GitHubButton/index.tsx +2 -2
- cocoindex-0.2.3/docs/static/img/examples/simple_vector_index/embed.png +0 -0
- cocoindex-0.2.3/examples/postgres_source/main.py +164 -0
- cocoindex-0.2.3/examples/postgres_source/pyproject.toml +15 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/pyproject.toml +29 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/convert.py +37 -26
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/op.py +4 -19
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/sources.py +13 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/subprocess_exec.py +27 -3
- cocoindex-0.2.3/python/cocoindex/tests/conftest.py +38 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/value.rs +151 -194
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/analyzer.rs +9 -17
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/plan.rs +1 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/dumper.rs +6 -5
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/evaluator.rs +7 -7
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/indexing_status.rs +1 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/live_updater.rs +13 -9
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/row_indexer.rs +13 -14
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/source_indexer.rs +48 -46
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/factory_bases.rs +5 -2
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/split_recursively.rs +2 -2
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/interface.rs +37 -28
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/py_factory.rs +2 -2
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/shared/postgres.rs +9 -24
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/amazon_s3.rs +17 -9
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/azure_blob.rs +16 -8
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/google_drive.rs +18 -10
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/local_file.rs +16 -8
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/postgres.rs +353 -100
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/kuzu.rs +9 -12
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/neo4j.rs +2 -5
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/postgres.rs +4 -11
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/qdrant.rs +6 -5
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/shared/property_graph.rs +3 -1
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/py/convert.rs +32 -5
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/service/flows.rs +6 -5
- cocoindex-0.2.2/.github/workflows/_test.yml +0 -58
- cocoindex-0.2.2/docs/docs/getting_started/quickstart.md +0 -283
- cocoindex-0.2.2/docs/static/img/examples/simple_vector_index/embed.png +0 -0
- cocoindex-0.2.2/examples/postgres_source/main.py +0 -82
- cocoindex-0.2.2/examples/postgres_source/pyproject.toml +0 -9
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.cargo/config.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.env.lib_debug +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/workflows/_doc_release.yml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.github/workflows/format.yml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/.pre-commit-config.yaml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/CONTRIBUTING.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/LICENSE +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/dev/neo4j.yaml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/dev/postgres.yaml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/about/community.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/contributing/guide.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/contributing/new_built_in_target.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/contributing/setup_dev_environment.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/custom_ops/custom_functions.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/custom_ops/custom_targets.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/academic_papers_index.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/codebase_index.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/custom_targets.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/docs_to_knowledge_graph.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/image_search.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/manual_extraction.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/multi_format_index.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/patient_form_extraction.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/photo_search.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/examples/product_recommendation.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/examples/index.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/ops/targets.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/query.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/tutorials/live_updates.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/package.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/sidebars.ts +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/css/custom.css +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/theme/DocCard/index.tsx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/theme/DocCard/styles.module.css +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/theme/DocCardList/index.tsx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/theme/DocCardList/styles.module.css +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/.nojekyll +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/codebase_index/chunk.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/codebase_index/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/codebase_index/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/custom_targets/convert.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/custom_targets/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/image_search/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/image_search/embedding.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/image_search/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/image_search/result.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/manual_extraction/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/manual_extraction/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/manual_extraction/summary.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/multi_format_index/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/multi_format_index/embed.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/multi_format_index/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/multi_format_index/pages.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/photo_search/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/photo_search/extraction.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/photo_search/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/img/incremental-etl.gif +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/static/robots.txt +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/tsconfig.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/docs/yarn.lock +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/amazon_s3_embedding/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/amazon_s3_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/amazon_s3_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/azure_blob_embedding/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/azure_blob_embedding/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/azure_blob_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/azure_blob_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/azure_blob_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/code_embedding/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/code_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/data/chunk_norris.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/custom_output_files/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/images/einplanck3.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/face_recognition/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/fastapi_server_docker/requirements.txt +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/gdrive_text_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/colpali_main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/image_search/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/data/chunk_norris.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/live_updates/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/manuals_llm_extraction/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/.gitignore +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/paper_metadata/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/data/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/patient_intake_extraction/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/pdf_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/postgres_source/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/postgres_source/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/postgres_source/prepare_source_data.sql +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/.env.example +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/product_recommendation/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding_qdrant/.env +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/examples/text_embedding_qdrant/pyproject.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/__init__.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/cli.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/flow.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/index.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/targets.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/test_optional_database.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/test_transform_flow.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/test_typing.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/tests/test_validation.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/user_app_loader.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/python/cocoindex/validation.py +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/ruff.toml +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/duration.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/json_schema.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/schema.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/base/spec.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/exec_ctx.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/builder/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/memoization.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/execution/stats.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/lib.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/lib_context.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/gemini.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/litellm.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/ollama.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/openai.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/openrouter.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/vllm.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/llm/voyage.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/embed_text.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/functions/test_utils.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/registration.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/registry.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sdk.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/shared/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/shared/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/sources/shared/pattern_matcher.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/shared/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/ops/targets/shared/table_columns.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/prelude.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/py/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/server.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/service/error.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/service/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/settings.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/components.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/driver.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/flow_features.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/setup/states.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/concur_control.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/db.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/immutable.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/mod.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/retryable.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/str_sanitize.rs +0 -0
- {cocoindex-0.2.2 → cocoindex-0.2.3}/src/utils/yaml_ser.rs +0 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
name: Run Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
workflow_call:
|
5
|
+
|
6
|
+
env:
|
7
|
+
CARGO_TERM_COLOR: always
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build-test:
|
11
|
+
strategy:
|
12
|
+
matrix:
|
13
|
+
python-version: [3.11]
|
14
|
+
platform:
|
15
|
+
- { runner: ubuntu-latest, python_exec: ".venv/bin/python" }
|
16
|
+
- { runner: ubuntu-24.04-arm, python_exec: ".venv/bin/python" }
|
17
|
+
- { runner: macos-latest, python_exec: ".venv/bin/python" }
|
18
|
+
- { runner: macos-13, python_exec: ".venv/bin/python" }
|
19
|
+
- { runner: windows-latest, python_exec: ".venv\\Scripts\\python" }
|
20
|
+
runs-on: ${{ matrix.platform.runner }}
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v4
|
23
|
+
|
24
|
+
- uses: actions/setup-python@v5
|
25
|
+
id: setup_python
|
26
|
+
with:
|
27
|
+
python-version: ${{ matrix.python-version }}
|
28
|
+
cache: 'pip'
|
29
|
+
|
30
|
+
- run: rustup toolchain install stable --profile minimal
|
31
|
+
- name: Rust Cache
|
32
|
+
uses: Swatinem/rust-cache@v2
|
33
|
+
with:
|
34
|
+
key: rust-${{ matrix.platform.runner }}-${{ matrix.python-version }}
|
35
|
+
- name: Rust tests
|
36
|
+
run: cargo test --verbose
|
37
|
+
|
38
|
+
- uses: actions/cache@v4
|
39
|
+
with:
|
40
|
+
path: .venv
|
41
|
+
key: pyenv-${{ matrix.platform.runner }}-${{ steps.setup_python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
|
42
|
+
restore-keys: |
|
43
|
+
pyenv-${{ matrix.platform.runner }}-${{ steps.setup_python.outputs.python-version }}-
|
44
|
+
|
45
|
+
- name: Setup venv
|
46
|
+
run: |
|
47
|
+
python -m venv .venv
|
48
|
+
- name: Install Python toolchains
|
49
|
+
run: |
|
50
|
+
${{ matrix.platform.python_exec }} -m pip install maturin mypy pytest pytest-asyncio
|
51
|
+
- name: Python build
|
52
|
+
run: |
|
53
|
+
${{ matrix.platform.python_exec }} -m maturin develop -E all
|
54
|
+
- name: Python type check (mypy)
|
55
|
+
run: |
|
56
|
+
${{ matrix.platform.python_exec }} -m mypy python
|
57
|
+
- name: Python tests
|
58
|
+
if: ${{ !startsWith(matrix.platform.runner, 'windows') }}
|
59
|
+
run: |
|
60
|
+
${{ matrix.platform.python_exec }} -m pytest --capture=no python/cocoindex/tests
|
61
|
+
- name: Python tests (Windows cmd)
|
62
|
+
if: ${{ startsWith(matrix.platform.runner, 'windows') }}
|
63
|
+
shell: cmd # Use `cmd` to run test for Windows, as PowerShell doesn't detect exit code by `os._exit(0)` correctly.
|
64
|
+
run: |
|
65
|
+
${{ matrix.platform.python_exec }} -m pytest --capture=no python/cocoindex/tests
|
@@ -1,8 +1,7 @@
|
|
1
|
-
# This
|
2
|
-
# To update, run
|
3
|
-
#
|
4
|
-
# maturin generate-ci github
|
1
|
+
# This workflow can be triggered on tags push (automatic release) or manually on any branch.
|
5
2
|
#
|
3
|
+
# - When triggered on tags push, it will build and publishes a new version including docs.
|
4
|
+
# - When triggered manually, it's a dry-run: only build, without publishing anything.
|
6
5
|
name: release
|
7
6
|
|
8
7
|
on:
|
@@ -31,11 +30,11 @@ jobs:
|
|
31
30
|
strategy:
|
32
31
|
matrix:
|
33
32
|
platform:
|
34
|
-
- { os: linux, runner: ubuntu-
|
35
|
-
- { os: linux, runner: ubuntu-24.04, target: aarch64, container: "ghcr.io/rust-cross/manylinux_2_28-cross:aarch64" }
|
36
|
-
- { os:
|
33
|
+
- { os: linux, runner: ubuntu-latest, target: x86_64, container: "ghcr.io/rust-cross/manylinux_2_28-cross:x86_64" }
|
34
|
+
- { os: linux, runner: ubuntu-24.04-arm, target: aarch64, container: "ghcr.io/rust-cross/manylinux_2_28-cross:aarch64" }
|
35
|
+
- { os: macos, runner: macos-latest, target: aarch64 }
|
37
36
|
- { os: macos, runner: macos-13, target: x86_64 }
|
38
|
-
- { os:
|
37
|
+
- { os: windows, runner: windows-latest, target: x64 }
|
39
38
|
steps:
|
40
39
|
- uses: actions/checkout@v4
|
41
40
|
- uses: actions/download-artifact@v4
|
@@ -43,12 +42,12 @@ jobs:
|
|
43
42
|
name: Cargo.toml
|
44
43
|
- uses: actions/setup-python@v5
|
45
44
|
with:
|
46
|
-
python-version: 3.
|
45
|
+
python-version: 3.13
|
47
46
|
- name: Build wheels
|
48
47
|
uses: PyO3/maturin-action@v1
|
49
48
|
with:
|
50
49
|
target: ${{ matrix.platform.target }}
|
51
|
-
args: --release --out dist
|
50
|
+
args: --release --out dist
|
52
51
|
sccache: 'true'
|
53
52
|
manylinux: auto
|
54
53
|
container: ${{ matrix.platform.container }}
|
@@ -58,6 +57,24 @@ jobs:
|
|
58
57
|
name: wheels-${{ matrix.platform.os }}-${{ matrix.platform.target }}
|
59
58
|
path: dist
|
60
59
|
|
60
|
+
test-abi3:
|
61
|
+
runs-on: ubuntu-24.04
|
62
|
+
needs: build
|
63
|
+
strategy:
|
64
|
+
matrix:
|
65
|
+
py: ["3.11", "3.12", "3.13"]
|
66
|
+
steps:
|
67
|
+
- uses: actions/download-artifact@v4
|
68
|
+
with:
|
69
|
+
name: wheels-linux-x86_64
|
70
|
+
- uses: actions/setup-python@v5
|
71
|
+
with:
|
72
|
+
python-version: ${{ matrix.py }}
|
73
|
+
- run: python -V
|
74
|
+
- run: pip install --find-links=./ cocoindex
|
75
|
+
- run: python -c "import cocoindex, sys; print('import ok on', sys.version)"
|
76
|
+
|
77
|
+
|
61
78
|
sdist:
|
62
79
|
runs-on: ubuntu-latest
|
63
80
|
needs: [create-versioned-toml]
|
@@ -80,7 +97,7 @@ jobs:
|
|
80
97
|
release:
|
81
98
|
name: Release
|
82
99
|
runs-on: ubuntu-latest
|
83
|
-
needs: [create-versioned-toml, build, sdist]
|
100
|
+
needs: [create-versioned-toml, build, test-abi3, sdist]
|
84
101
|
permissions:
|
85
102
|
# Use to sign the release artifacts
|
86
103
|
id-token: write
|
@@ -111,5 +128,6 @@ jobs:
|
|
111
128
|
release-docs:
|
112
129
|
name: Release Docs
|
113
130
|
needs: [release]
|
131
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
114
132
|
uses: ./.github/workflows/_doc_release.yml
|
115
133
|
secrets: inherit
|
@@ -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.3"
|
6
6
|
edition = "2024"
|
7
7
|
rust-version = "1.88"
|
8
8
|
readme = "README.md"
|
@@ -16,7 +16,12 @@ name = "cocoindex_engine"
|
|
16
16
|
crate-type = ["cdylib"]
|
17
17
|
|
18
18
|
[dependencies]
|
19
|
-
pyo3 = { version = "0.25.1", features = [
|
19
|
+
pyo3 = { version = "0.25.1", features = [
|
20
|
+
"abi3-py311",
|
21
|
+
"auto-initialize",
|
22
|
+
"chrono",
|
23
|
+
"uuid",
|
24
|
+
] }
|
20
25
|
pythonize = "0.25.0"
|
21
26
|
pyo3-async-runtimes = { version = "0.25.0", features = ["tokio-runtime"] }
|
22
27
|
|
@@ -1,6 +1,21 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cocoindex
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.3
|
4
|
+
Classifier: Development Status :: 3 - Alpha
|
5
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
6
|
+
Classifier: Operating System :: OS Independent
|
7
|
+
Classifier: Programming Language :: Rust
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
14
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
15
|
+
Classifier: Topic :: Text Processing :: Indexing
|
16
|
+
Classifier: Intended Audience :: Developers
|
17
|
+
Classifier: Natural Language :: English
|
18
|
+
Classifier: Typing :: Typed
|
4
19
|
Requires-Dist: click>=8.1.8
|
5
20
|
Requires-Dist: rich>=14.0.0
|
6
21
|
Requires-Dist: python-dotenv>=1.1.0
|
@@ -21,6 +36,7 @@ Provides-Extra: colpali
|
|
21
36
|
Provides-Extra: all
|
22
37
|
License-File: LICENSE
|
23
38
|
Summary: With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes.
|
39
|
+
Keywords: indexing,real-time,incremental,pipeline,search,ai,etl,rag,dataflow,context-engineering
|
24
40
|
Author-email: CocoIndex <cocoindex.io@gmail.com>
|
25
41
|
License-Expression: Apache-2.0
|
26
42
|
Requires-Python: >=3.11
|
@@ -71,34 +71,21 @@ with data_scope["documents"].row() as doc:
|
|
71
71
|
### Embed each chunk
|
72
72
|
|
73
73
|
```python
|
74
|
-
|
75
|
-
|
76
|
-
"""
|
77
|
-
Embed the text using a SentenceTransformer model.
|
78
|
-
This is a shared logic between indexing and querying, so extract it as a function.
|
79
|
-
"""
|
80
|
-
return text.transform(
|
74
|
+
with doc["chunks"].row() as chunk:
|
75
|
+
chunk["embedding"] = chunk["text"].transform(
|
81
76
|
cocoindex.functions.SentenceTransformerEmbed(
|
82
|
-
model="sentence-transformers/all-MiniLM-L6-v2"
|
77
|
+
model="sentence-transformers/all-MiniLM-L6-v2"
|
78
|
+
)
|
79
|
+
)
|
80
|
+
doc_embeddings.collect(filename=doc["filename"], location=chunk["location"],
|
81
|
+
text=chunk["text"], embedding=chunk["embedding"])
|
83
82
|
```
|
84
|
-

|
85
|
-
|
86
|
-
This code defines a transformation function that converts text into vector embeddings using the SentenceTransformer model.
|
87
|
-
`@cocoindex.transform_flow()` is needed to share the transformation across indexing and query.
|
88
|
-
This decorator marks this as a reusable transformation flow that can be called on specific input data from user code using `eval()`, as shown in the search function below.
|
89
83
|
|
90
84
|
The `MiniLM-L6-v2` model is a good balance of speed and quality for text embeddings, though you can swap in other SentenceTransformer models as needed.
|
91
85
|
|
92
86
|
<DocumentationButton url="https://cocoindex.io/docs/ops/functions#sentencetransformerembed" text="SentenceTransformerEmbed" margin="0 0 16px 0" />
|
93
|
-
|
94
|
-
Plug in the `text_to_embedding` function and collect the embeddings.
|
95
87
|
|
96
|
-
|
97
|
-
with doc["chunks"].row() as chunk:
|
98
|
-
chunk["embedding"] = text_to_embedding(chunk["text"])
|
99
|
-
doc_embeddings.collect(filename=doc["filename"], location=chunk["location"],
|
100
|
-
text=chunk["text"], embedding=chunk["embedding"])
|
101
|
-
```
|
88
|
+

|
102
89
|
|
103
90
|
## Export the embeddings
|
104
91
|
|
@@ -119,10 +106,32 @@ CocoIndex supports other vector databases as well, with 1-line switch.
|
|
119
106
|
|
120
107
|
## Query the index
|
121
108
|
|
109
|
+
### Define a shared flow for both indexing and querying
|
110
|
+
|
111
|
+
```python
|
112
|
+
@cocoindex.transform_flow()
|
113
|
+
def text_to_embedding(text: cocoindex.DataSlice[str]) -> cocoindex.DataSlice[list[float]]:
|
114
|
+
"""
|
115
|
+
Embed the text using a SentenceTransformer model.
|
116
|
+
This is a shared logic between indexing and querying, so extract it as a function.
|
117
|
+
"""
|
118
|
+
return text.transform(
|
119
|
+
cocoindex.functions.SentenceTransformerEmbed(
|
120
|
+
model="sentence-transformers/all-MiniLM-L6-v2"))
|
121
|
+
```
|
122
|
+
|
123
|
+
This code defines a transformation function that converts text into vector embeddings using the SentenceTransformer model.
|
124
|
+
`@cocoindex.transform_flow()` is needed to share the transformation across indexing and query.
|
125
|
+
|
126
|
+
This decorator marks this as a reusable transformation flow that can be called on specific input data from user code using `eval()`, as shown in the search function below.
|
127
|
+
|
128
|
+
### Write query
|
129
|
+
|
122
130
|
CocoIndex doesn't provide additional query interface at the moment. We can write SQL or rely on the query engine by the target storage, if any.
|
123
131
|
|
124
132
|
<DocumentationButton url="https://cocoindex.io/docs/ops/targets#postgres" text="Postgres" margin="0 0 16px 0" />
|
125
133
|
|
134
|
+
|
126
135
|
```python
|
127
136
|
def search(pool: ConnectionPool, query: str, top_k: int = 5):
|
128
137
|
table_name = cocoindex.utils.get_target_storage_default_name(text_embedding_flow, "doc_embeddings")
|
@@ -166,6 +175,19 @@ if __name__ == "__main__":
|
|
166
175
|
_main()
|
167
176
|
```
|
168
177
|
|
178
|
+
In the function above, most parts are standard query logic - you can use any libraries you like.
|
179
|
+
There're two CocoIndex-specific logic:
|
180
|
+
|
181
|
+
1. Get the table name from the export target in the `text_embedding_flow` above.
|
182
|
+
Since the table name for the `Postgres` target is not explicitly specified in the `export()` call,
|
183
|
+
CocoIndex uses a default name.
|
184
|
+
`cocoindex.utils.get_target_default_name()` is a utility function to get the default table name for this case.
|
185
|
+
|
186
|
+
2. Evaluate the transform flow defined above with the input query, to get the embedding.
|
187
|
+
It's done by the `eval()` method of the transform flow `text_to_embedding`.
|
188
|
+
The return type of this method is `NDArray[np.float32]` as declared in the `text_to_embedding()` function (`cocoindex.DataSlice[NDArray[np.float32]]`).
|
189
|
+
|
190
|
+
|
169
191
|
|
170
192
|
## Time to have fun!
|
171
193
|
- Run the following command to setup and update the index.
|
@@ -0,0 +1,177 @@
|
|
1
|
+
---
|
2
|
+
title: Quickstart
|
3
|
+
description: Get started with CocoIndex in 10 minutes
|
4
|
+
---
|
5
|
+
|
6
|
+
import { GitHubButton, YouTubeButton, DocumentationButton } from '../../src/components/GitHubButton';
|
7
|
+
|
8
|
+
<GitHubButton url="https://github.com/cocoindex-io/cocoindex-quickstart" margin="0 0 24px 0"/>
|
9
|
+
<YouTubeButton url="https://www.youtube.com/watch?v=gv5R8nOXsWU" margin="0 0 24px 0"/>
|
10
|
+
|
11
|
+
In this tutorial, we’ll build an index with text embeddings, keeping it minimal and focused on the core indexing flow.
|
12
|
+
|
13
|
+
|
14
|
+
## Flow Overview
|
15
|
+

|
16
|
+
|
17
|
+
1. Read text files from the local filesystem
|
18
|
+
2. Chunk each document
|
19
|
+
3. For each chunk, embed it with a text embedding model
|
20
|
+
4. Store the embeddings in a vector database for retrieval
|
21
|
+
|
22
|
+
|
23
|
+
## Setup
|
24
|
+
1. Install CocoIndex:
|
25
|
+
|
26
|
+
```bash
|
27
|
+
pip install -U 'cocoindex[embeddings]'
|
28
|
+
```
|
29
|
+
|
30
|
+
2. [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres).
|
31
|
+
|
32
|
+
3. Create a new directory for your project:
|
33
|
+
|
34
|
+
```bash
|
35
|
+
mkdir cocoindex-quickstart
|
36
|
+
cd cocoindex-quickstart
|
37
|
+
```
|
38
|
+
|
39
|
+
4. Place input files in a directory `markdown_files`. You may download from [markdown_files.zip](markdown_files.zip).
|
40
|
+
|
41
|
+
|
42
|
+
## Define a flow
|
43
|
+
|
44
|
+
Create a new file `main.py` and define a flow.
|
45
|
+
|
46
|
+
```python title="main.py"
|
47
|
+
import cocoindex
|
48
|
+
|
49
|
+
@cocoindex.flow_def(name="TextEmbedding")
|
50
|
+
def text_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope):
|
51
|
+
# ... See subsections below for function body
|
52
|
+
```
|
53
|
+
|
54
|
+
### Add Source and Collector
|
55
|
+
|
56
|
+
```python title="main.py"
|
57
|
+
# add source
|
58
|
+
data_scope["documents"] = flow_builder.add_source(
|
59
|
+
cocoindex.sources.LocalFile(path="markdown_files"))
|
60
|
+
|
61
|
+
# add data collector
|
62
|
+
doc_embeddings = data_scope.add_collector()
|
63
|
+
```
|
64
|
+
|
65
|
+
`flow_builder.add_source` will create a table with sub fields (`filename`, `content`)
|
66
|
+
|
67
|
+
<DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Source" />
|
68
|
+
|
69
|
+
<DocumentationButton url="https://cocoindex.io/docs/core/flow_def#data-collector" text="Data Collector" />
|
70
|
+
|
71
|
+
### Process each document
|
72
|
+
|
73
|
+
With CocoIndex, it is easy to process nested data structures.
|
74
|
+
|
75
|
+
```python title="main.py"
|
76
|
+
with data_scope["documents"].row() as doc:
|
77
|
+
# ... See subsections below for function body
|
78
|
+
```
|
79
|
+
|
80
|
+
|
81
|
+
#### Chunk each document
|
82
|
+
|
83
|
+
```python title="main.py"
|
84
|
+
doc["chunks"] = doc["content"].transform(
|
85
|
+
cocoindex.functions.SplitRecursively(),
|
86
|
+
language="markdown", chunk_size=2000, chunk_overlap=500)
|
87
|
+
```
|
88
|
+
|
89
|
+
We extend a new field `chunks` to each row by *transforming* the `content` field using `SplitRecursively`. The output of the `SplitRecursively` is a KTable representing each chunk of the document.
|
90
|
+
|
91
|
+
<DocumentationButton url="https://cocoindex.io/docs/ops/functions#splitrecursively" text="SplitRecursively" margin="0 0 16px 0" />
|
92
|
+
|
93
|
+

|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
#### Embed each chunk and collect the embeddings
|
98
|
+
|
99
|
+
```python title="main.py"
|
100
|
+
with doc["chunks"].row() as chunk:
|
101
|
+
# embed
|
102
|
+
chunk["embedding"] = chunk["text"].transform(
|
103
|
+
cocoindex.functions.SentenceTransformerEmbed(
|
104
|
+
model="sentence-transformers/all-MiniLM-L6-v2"
|
105
|
+
)
|
106
|
+
)
|
107
|
+
|
108
|
+
# collect
|
109
|
+
doc_embeddings.collect(
|
110
|
+
filename=doc["filename"],
|
111
|
+
location=chunk["location"],
|
112
|
+
text=chunk["text"],
|
113
|
+
embedding=chunk["embedding"],
|
114
|
+
)
|
115
|
+
```
|
116
|
+
|
117
|
+
This code embeds each chunk using the SentenceTransformer library and collects the results.
|
118
|
+
|
119
|
+

|
120
|
+
|
121
|
+
<DocumentationButton url="https://cocoindex.io/docs/ops/functions#sentencetransformerembed" text="SentenceTransformerEmbed" margin="0 0 16px 0" />
|
122
|
+
|
123
|
+
### Export the embeddings to Postgres
|
124
|
+
|
125
|
+
```python title="main.py"
|
126
|
+
doc_embeddings.export(
|
127
|
+
"doc_embeddings",
|
128
|
+
cocoindex.storages.Postgres(),
|
129
|
+
primary_key_fields=["filename", "location"],
|
130
|
+
vector_indexes=[
|
131
|
+
cocoindex.VectorIndexDef(
|
132
|
+
field_name="embedding",
|
133
|
+
metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY,
|
134
|
+
)
|
135
|
+
],
|
136
|
+
)
|
137
|
+
```
|
138
|
+
|
139
|
+
CocoIndex supports other vector databases as well, with 1-line switch.
|
140
|
+
|
141
|
+
<DocumentationButton url="https://cocoindex.io/docs/ops/targets" text="Targets" />
|
142
|
+
|
143
|
+
|
144
|
+
## Run the indexing pipeline
|
145
|
+
|
146
|
+
- Specify the database URL by environment variable:
|
147
|
+
|
148
|
+
```bash
|
149
|
+
export COCOINDEX_DATABASE_URL="postgresql://cocoindex:cocoindex@localhost:5432/cocoindex"
|
150
|
+
```
|
151
|
+
|
152
|
+
- Build the index:
|
153
|
+
|
154
|
+
```bash
|
155
|
+
cocoindex update --setup main.py
|
156
|
+
```
|
157
|
+
|
158
|
+
CocoIndex will run for a few seconds and populate the target table with data as declared by the flow. It will output the following statistics:
|
159
|
+
|
160
|
+
```
|
161
|
+
documents: 3 added, 0 removed, 0 updated
|
162
|
+
```
|
163
|
+
|
164
|
+
That's it for the main indexing flow.
|
165
|
+
|
166
|
+
|
167
|
+
## End to end: Query the index (Optional)
|
168
|
+
|
169
|
+
If you want to build a end to end query flow that also searches the index, you can follow the [simple_vector_index](https://cocoindex.io/docs/examples/simple_vector_index#query-the-index) example.
|
170
|
+
|
171
|
+
|
172
|
+
## Next Steps
|
173
|
+
|
174
|
+
Next, you may want to:
|
175
|
+
|
176
|
+
* Learn about [CocoIndex Basics](../core/basics.md).
|
177
|
+
* Explore more of what you can build with CocoIndex in the [examples](https://cocoindex.io/docs/examples) directory.
|
@@ -313,6 +313,27 @@ The spec takes the following fields:
|
|
313
313
|
* `included_columns` (`list[str]`, optional): non-primary-key columns to include. If not specified, all non-PK columns are included.
|
314
314
|
* `ordinal_column` (`str`, optional): to specify a non-primary-key column used for change tracking and ordering, e.g. can be a modified timestamp or a monotonic version number. Supported types are integer-like (`bigint`/`integer`) and timestamps (`timestamp`, `timestamptz`).
|
315
315
|
`ordinal_column` must not be a primary key column.
|
316
|
+
* `notification` (`cocoindex.sources.PostgresNotification`, optional): when present, enable change capture based on Postgres LISTEN/NOTIFY. It has the following fields:
|
317
|
+
* `channel_name` (`str`, optional): the Postgres notification channel to listen on. CocoIndex will automatically create the channel with the given name. If omitted, CocoIndex uses `{flow_name}__{source_name}__cocoindex`.
|
318
|
+
|
319
|
+
:::info
|
320
|
+
|
321
|
+
If `notification` is provided, CocoIndex listens for row changes using Postgres LISTEN/NOTIFY and creates the required database objects on demand when the flow starts listening:
|
322
|
+
|
323
|
+
- Function to create notification message: `{channel_name}_n`.
|
324
|
+
- Trigger to react to table changes: `{channel_name}_t` on the specified `table_name`.
|
325
|
+
|
326
|
+
Creation is automatic when listening begins.
|
327
|
+
|
328
|
+
Currently CocoIndex doesn't automatically clean up these objects when the flow is dropped (unlike targets)
|
329
|
+
It's usually OK to leave them as they are, but if you want to clean them up, you can run the following SQL statements to manually drop them:
|
330
|
+
|
331
|
+
```sql
|
332
|
+
DROP TRIGGER IF EXISTS {channel_name}_t ON "{table_name}";
|
333
|
+
DROP FUNCTION IF EXISTS {channel_name}_n();
|
334
|
+
```
|
335
|
+
|
336
|
+
:::
|
316
337
|
|
317
338
|
### Schema
|
318
339
|
|
@@ -35,7 +35,7 @@ type GitHubButtonProps = {
|
|
35
35
|
margin?: string;
|
36
36
|
};
|
37
37
|
|
38
|
-
function GitHubButton({ url, margin }: GitHubButtonProps): ReactNode {
|
38
|
+
function GitHubButton({ url, margin = '0' }: GitHubButtonProps): ReactNode {
|
39
39
|
return (
|
40
40
|
<Button href={url} margin={margin}>
|
41
41
|
<FaGithub style={{ marginRight: '8px', verticalAlign: 'middle', fontSize: '1rem' }} />
|
@@ -49,7 +49,7 @@ type YouTubeButtonProps = {
|
|
49
49
|
margin?: string;
|
50
50
|
};
|
51
51
|
|
52
|
-
function YouTubeButton({ url, margin }: YouTubeButtonProps): ReactNode {
|
52
|
+
function YouTubeButton({ url, margin = '0' }: YouTubeButtonProps): ReactNode {
|
53
53
|
return (
|
54
54
|
<Button href={url} margin={margin}>
|
55
55
|
<FaYoutube style={{ marginRight: '8px', verticalAlign: 'middle', fontSize: '1rem' }} />
|
Binary file
|