cocoindex 0.1.80__tar.gz → 0.1.81__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.1.80 → cocoindex-0.1.81}/Cargo.lock +1 -1
- {cocoindex-0.1.80 → cocoindex-0.1.81}/Cargo.toml +1 -1
- {cocoindex-0.1.80 → cocoindex-0.1.81}/PKG-INFO +1 -1
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ai/llm.mdx +24 -1
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/custom_ops/custom_targets.mdx +89 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/.env.example +4 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/.env.example +4 -0
- cocoindex-0.1.81/examples/code_embedding/.env +6 -0
- cocoindex-0.1.81/examples/face_recognition/.env +6 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/.env +4 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/.env.example +4 -0
- cocoindex-0.1.81/examples/image_search/.env +5 -0
- cocoindex-0.1.81/examples/manuals_llm_extraction/.env +6 -0
- cocoindex-0.1.81/examples/multi_format_indexing/.env +6 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/README.md +2 -0
- {cocoindex-0.1.80/examples/patient_intake_extraction → cocoindex-0.1.81/examples/paper_metadata}/.env.example +4 -0
- cocoindex-0.1.81/examples/pdf_embedding/.env +6 -0
- cocoindex-0.1.81/examples/text_embedding/.env +6 -0
- cocoindex-0.1.81/examples/text_embedding_qdrant/.env +6 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/evaluator.rs +25 -18
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/live_updater.rs +9 -3
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/source_indexer.rs +18 -9
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/error.rs +1 -1
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/flow_features.rs +1 -1
- cocoindex-0.1.80/examples/face_recognition/.env +0 -2
- cocoindex-0.1.80/examples/image_search/.env +0 -1
- cocoindex-0.1.80/examples/manuals_llm_extraction/.env +0 -2
- cocoindex-0.1.80/examples/multi_format_indexing/.env +0 -2
- cocoindex-0.1.80/examples/pdf_embedding/.env +0 -2
- cocoindex-0.1.80/examples/product_recommendation/.env +0 -2
- cocoindex-0.1.80/examples/text_embedding/.env +0 -2
- cocoindex-0.1.80/examples/text_embedding_qdrant/.env +0 -2
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.cargo/config.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.env.lib_debug +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/_doc_release.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/_test.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/format.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/release.yml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/.pre-commit-config.yaml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/CONTRIBUTING.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/LICENSE +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/dev/neo4j.yaml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/dev/postgres.yaml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/about/community.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/about/contributing.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/custom_ops/custom_functions.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/sources.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/targets.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/query.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/tutorials/live_updates.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/package.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/sidebars.ts +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/components/HomepageFeatures/index.tsx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/css/custom.css +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/.nojekyll +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/incremental-etl.gif +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/robots.txt +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/tsconfig.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/yarn.lock +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80/examples/code_embedding → cocoindex-0.1.81/examples/custom_output_files}/.env +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/data/bizarre_animals.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/data/chunk_norris.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/pyproject.toml +0 -0
- {cocoindex-0.1.80/examples/custom_output_files → cocoindex-0.1.81/examples/docs_to_knowledge_graph}/.env +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/einplanck3.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/requirements.txt +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/colpali_main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/.env +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/data/bizarre_animals.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/data/chunk_norris.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/.gitignore +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/pyproject.toml +0 -0
- {cocoindex-0.1.80/examples/paper_metadata → cocoindex-0.1.81/examples/patient_intake_extraction}/.env.example +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80/examples/docs_to_knowledge_graph → cocoindex-0.1.81/examples/product_recommendation}/.env +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/pyproject.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/__init__.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/cli.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/convert.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/flow.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/index.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/op.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/sources.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/targets.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_optional_database.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_transform_flow.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_typing.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_validation.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/validation.py +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/ruff.toml +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/duration.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/json_schema.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/schema.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/spec.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/value.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/analyzer.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/exec_ctx.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/plan.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/dumper.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/indexing_status.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/memoization.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/stats.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/lib.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/lib_context.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/gemini.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/litellm.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/ollama.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/openai.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/openrouter.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/vllm.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/voyage.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/embed_text.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/test_utils.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/interface.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/py_factory.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/registration.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/registry.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sdk.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/amazon_s3.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/azure_blob.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/google_drive.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/local_file.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/shared/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/shared/pattern_matcher.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/kuzu.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/neo4j.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/postgres.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/qdrant.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/property_graph.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/table_columns.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/prelude.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/py/convert.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/py/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/server.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/flows.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/settings.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/components.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/driver.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/states.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/concur_control.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/db.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/immutable.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/mod.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/retryable.rs +0 -0
- {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/yaml_ser.rs +0 -0
@@ -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.1.
|
5
|
+
version = "0.1.81"
|
6
6
|
edition = "2024"
|
7
7
|
rust-version = "1.88"
|
8
8
|
readme = "README.md"
|
@@ -20,7 +20,7 @@ We support the following types of LLM APIs:
|
|
20
20
|
| API Name | `LlmApiType` enum | Text Generation | Text Embedding |
|
21
21
|
|----------|---------------------|--------------------|--------------------|
|
22
22
|
| [OpenAI](#openai) | `LlmApiType.OPENAI` | ✅ | ✅ |
|
23
|
-
| [Ollama](#ollama) | `LlmApiType.OLLAMA` | ✅ |
|
23
|
+
| [Ollama](#ollama) | `LlmApiType.OLLAMA` | ✅ | ✅ |
|
24
24
|
| [Google Gemini](#google-gemini) | `LlmApiType.GEMINI` | ✅ | ✅ |
|
25
25
|
| [Vertex AI](#vertex-ai) | `LlmApiType.VERTEX_AI` | ✅ | ✅ |
|
26
26
|
| [Anthropic](#anthropic) | `LlmApiType.ANTHROPIC` | ✅ | ❌ |
|
@@ -141,6 +141,29 @@ cocoindex.LlmSpec(
|
|
141
141
|
</TabItem>
|
142
142
|
</Tabs>
|
143
143
|
|
144
|
+
For text embedding with Ollama, you'll need to pull an embedding model first:
|
145
|
+
|
146
|
+
```bash
|
147
|
+
ollama pull nomic-embed-text
|
148
|
+
```
|
149
|
+
|
150
|
+
Then, a spec for Ollama embedding looks like this:
|
151
|
+
|
152
|
+
<Tabs>
|
153
|
+
<TabItem value="python" label="Python" default>
|
154
|
+
|
155
|
+
```python
|
156
|
+
cocoindex.functions.EmbedText(
|
157
|
+
api_type=cocoindex.LlmApiType.OLLAMA,
|
158
|
+
model="nomic-embed-text",
|
159
|
+
# Optional, use Ollama's default port (11434) on localhost if not specified
|
160
|
+
address="http://localhost:11434",
|
161
|
+
)
|
162
|
+
```
|
163
|
+
|
164
|
+
</TabItem>
|
165
|
+
</Tabs>
|
166
|
+
|
144
167
|
### Google Gemini
|
145
168
|
|
146
169
|
Google exposes Gemini through Google AI Studio APIs.
|
@@ -158,6 +158,95 @@ def prepare(spec: CustomTarget) -> PreparedCustomTarget:
|
|
158
158
|
|
159
159
|
If not provided, the original spec will be passed directly to `mutate`.
|
160
160
|
|
161
|
+
### Complete Example
|
162
|
+
|
163
|
+
In this example, we define a custom target that accepts data with the following fields:
|
164
|
+
- `filename` (key field)
|
165
|
+
- `author` (value field)
|
166
|
+
- `html` (value field)
|
167
|
+
|
168
|
+
<Tabs>
|
169
|
+
<TabItem value="python" label="Python" default>
|
170
|
+
|
171
|
+
```python
|
172
|
+
import dataclasses
|
173
|
+
import cocoindex
|
174
|
+
|
175
|
+
# 1. Define the target spec
|
176
|
+
class MyCustomTarget(cocoindex.op.TargetSpec):
|
177
|
+
"""Spec of the custom target, to configure the target location etc."""
|
178
|
+
location: str
|
179
|
+
|
180
|
+
# 2. Define the value dataclass for exported data
|
181
|
+
@dataclasses.dataclass
|
182
|
+
class LocalFileTargetValues:
|
183
|
+
"""Represents value fields of exported data."""
|
184
|
+
author: str
|
185
|
+
html: str
|
186
|
+
|
187
|
+
# 3. Define the target connector
|
188
|
+
@cocoindex.op.target_connector(spec_cls=MyCustomTarget)
|
189
|
+
class LocalFileTargetConnector:
|
190
|
+
@staticmethod
|
191
|
+
def get_persistent_key(spec: MyCustomTarget, target_name: str) -> str:
|
192
|
+
return spec.location
|
193
|
+
|
194
|
+
@staticmethod
|
195
|
+
def apply_setup_change(
|
196
|
+
key: str, previous: MyCustomTarget | None, current: MyCustomTarget | None
|
197
|
+
) -> None:
|
198
|
+
# Setup/teardown logic here
|
199
|
+
...
|
200
|
+
|
201
|
+
@staticmethod
|
202
|
+
def mutate(
|
203
|
+
*all_mutations: tuple[MyCustomTarget, dict[str, LocalFileTargetValues | None]],
|
204
|
+
) -> None:
|
205
|
+
"""Apply data mutations to the target."""
|
206
|
+
for spec, mutations in all_mutations:
|
207
|
+
for filename, mutation in mutations.items():
|
208
|
+
if mutation is None:
|
209
|
+
# Delete the file
|
210
|
+
...
|
211
|
+
else:
|
212
|
+
# Write the file with author and html content
|
213
|
+
...
|
214
|
+
|
215
|
+
# 4. Usage in a flow
|
216
|
+
@cocoindex.flow_def(name="ExampleFlow")
|
217
|
+
def example_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope) -> None:
|
218
|
+
# Add data source
|
219
|
+
data_scope["documents"] = flow_builder.add_source(...)
|
220
|
+
|
221
|
+
# Create collector
|
222
|
+
output_data = data_scope.add_collector()
|
223
|
+
|
224
|
+
# Collect data
|
225
|
+
with data_scope["documents"].row() as doc:
|
226
|
+
# Create the "author" and "fieldname" field
|
227
|
+
...
|
228
|
+
|
229
|
+
# Collect the data
|
230
|
+
output_data.collect(filename=doc["filename"], author=doc["author"], html=doc["transformed_html"])
|
231
|
+
|
232
|
+
# Export to custom target
|
233
|
+
output_data.export(
|
234
|
+
"OutputData",
|
235
|
+
MyCustomTarget(location=...),
|
236
|
+
primary_key_fields=["filename"],
|
237
|
+
)
|
238
|
+
```
|
239
|
+
|
240
|
+
In this example, the type for data in `all_mutations` is `dict[str, LocalFileTargetValues | None]`:
|
241
|
+
- `str` is the `DataKeyType` (the filename)
|
242
|
+
- `LocalFileTargetValues` is the `DataValueType` (containing `html` and `author` fields)
|
243
|
+
- The `mutate()` method receives tuples of `(MyCustomTarget, dict[str, LocalFileTargetValues | None])`
|
244
|
+
|
245
|
+
For simplicity, the type hints can be omitted and a `dict` will be created instead of a dataclass instance, and `author` and `html` will be the keys of the dict.
|
246
|
+
|
247
|
+
</TabItem>
|
248
|
+
</Tabs>
|
249
|
+
|
161
250
|
## Best Practices
|
162
251
|
|
163
252
|
### Idempotency of Methods with Side Effects
|
@@ -5,3 +5,7 @@ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
|
|
5
5
|
AZURE_STORAGE_ACCOUNT_NAME=testnamecocoindex1
|
6
6
|
AZURE_BLOB_CONTAINER_NAME=testpublic1
|
7
7
|
AZURE_BLOB_PREFIX=
|
8
|
+
|
9
|
+
# Fallback to CPU for operations not supported by MPS on Mac.
|
10
|
+
# It's no-op for other platforms.
|
11
|
+
PYTORCH_ENABLE_MPS_FALLBACK=1
|
@@ -3,3 +3,7 @@ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@coco_db:5436/cocoindex
|
|
3
3
|
|
4
4
|
# For local testing
|
5
5
|
# COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
|
6
|
+
|
7
|
+
# Fallback to CPU for operations not supported by MPS on Mac.
|
8
|
+
# It's no-op for other platforms.
|
9
|
+
PYTORCH_ENABLE_MPS_FALLBACK=1
|
@@ -8,3 +8,7 @@ GOOGLE_SERVICE_ACCOUNT_CREDENTIAL=/path/to/service_account_credential.json
|
|
8
8
|
# Google Drive root folder IDs, comma separated.
|
9
9
|
#! PLEASE FILL IN
|
10
10
|
GOOGLE_DRIVE_ROOT_FOLDER_IDS=id1,id2
|
11
|
+
|
12
|
+
# Fallback to CPU for operations not supported by MPS on Mac.
|
13
|
+
# It's no-op for other platforms.
|
14
|
+
PYTORCH_ENABLE_MPS_FALLBACK=1
|
@@ -37,6 +37,8 @@ Install dependencies:
|
|
37
37
|
pip install -e .
|
38
38
|
```
|
39
39
|
|
40
|
+
**NOTE**: The `pdf2image` requires `poppler` to be installed manually. Please refer to [this document](https://pdf2image.readthedocs.io/en/latest/installation.html#installing-poppler) for the specific installation instructions for your platform.
|
41
|
+
|
40
42
|
Setup:
|
41
43
|
|
42
44
|
```bash
|
@@ -354,24 +354,31 @@ async fn evaluate_op_scope(
|
|
354
354
|
let mut input_values = Vec::with_capacity(op.inputs.len());
|
355
355
|
input_values
|
356
356
|
.extend(assemble_input_values(&op.inputs, scoped_entries).collect::<Vec<_>>());
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
357
|
+
if op.function_exec_info.enable_cache {
|
358
|
+
let output_value_cell = memory.get_cache_entry(
|
359
|
+
|| {
|
360
|
+
Ok(op
|
361
|
+
.function_exec_info
|
362
|
+
.fingerprinter
|
363
|
+
.clone()
|
364
|
+
.with(&input_values)?
|
365
|
+
.into_fingerprint())
|
366
|
+
},
|
367
|
+
&op.function_exec_info.output_type,
|
368
|
+
/*ttl=*/ None,
|
369
|
+
)?;
|
370
|
+
evaluate_with_cell(output_value_cell.as_ref(), move || {
|
371
|
+
op.executor.evaluate(input_values)
|
372
|
+
})
|
373
|
+
.await
|
374
|
+
.and_then(|v| head_scope.define_field(&op.output, &v))
|
375
|
+
} else {
|
376
|
+
op.executor
|
377
|
+
.evaluate(input_values)
|
378
|
+
.await
|
379
|
+
.and_then(|v| head_scope.define_field(&op.output, &v))
|
380
|
+
}
|
381
|
+
.with_context(|| format!("Evaluating Transform op `{}`", op.name,))?
|
375
382
|
}
|
376
383
|
|
377
384
|
AnalyzedReactiveOp::ForEach(op) => {
|
@@ -1,4 +1,7 @@
|
|
1
|
-
use crate::{
|
1
|
+
use crate::{
|
2
|
+
execution::{source_indexer::ProcessSourceKeyOptions, stats::UpdateStats},
|
3
|
+
prelude::*,
|
4
|
+
};
|
2
5
|
|
3
6
|
use super::stats;
|
4
7
|
use futures::future::try_join_all;
|
@@ -191,14 +194,17 @@ impl SourceUpdateTask {
|
|
191
194
|
.await?;
|
192
195
|
tokio::spawn(source_context.clone().process_source_key(
|
193
196
|
change.key,
|
194
|
-
Some(change.key_aux_info),
|
195
|
-
change.data,
|
196
197
|
update_stats.clone(),
|
197
198
|
concur_permit,
|
198
199
|
Some(move || async move {
|
199
200
|
SharedAckFn::ack(&shared_ack_fn).await
|
200
201
|
}),
|
201
202
|
pool.clone(),
|
203
|
+
ProcessSourceKeyOptions {
|
204
|
+
key_aux_info: Some(change.key_aux_info),
|
205
|
+
source_data: change.data,
|
206
|
+
..Default::default()
|
207
|
+
},
|
202
208
|
));
|
203
209
|
}
|
204
210
|
}
|
@@ -48,6 +48,13 @@ pub struct SourceIndexingContext {
|
|
48
48
|
|
49
49
|
pub const NO_ACK: Option<fn() -> Ready<Result<()>>> = None;
|
50
50
|
|
51
|
+
#[derive(Default)]
|
52
|
+
pub struct ProcessSourceKeyOptions {
|
53
|
+
/// `key_aux_info` is not available for deletions. It must not be provided if `source_data` is `None`.
|
54
|
+
pub key_aux_info: Option<serde_json::Value>,
|
55
|
+
pub source_data: Option<interface::SourceData>,
|
56
|
+
}
|
57
|
+
|
51
58
|
impl SourceIndexingContext {
|
52
59
|
pub async fn load(
|
53
60
|
flow: Arc<builder::AnalyzedFlow>,
|
@@ -100,31 +107,29 @@ impl SourceIndexingContext {
|
|
100
107
|
})
|
101
108
|
}
|
102
109
|
|
103
|
-
/// `key_aux_info` is not available for deletions. It must not be provided if `source_data` is `None`.
|
104
110
|
pub async fn process_source_key<
|
105
111
|
AckFut: Future<Output = Result<()>> + Send + 'static,
|
106
112
|
AckFn: FnOnce() -> AckFut,
|
107
113
|
>(
|
108
114
|
self: Arc<Self>,
|
109
115
|
key: value::KeyValue,
|
110
|
-
key_aux_info: Option<serde_json::Value>,
|
111
|
-
source_data: Option<interface::SourceData>,
|
112
116
|
update_stats: Arc<stats::UpdateStats>,
|
113
117
|
_concur_permit: concur_control::CombinedConcurrencyControllerPermit,
|
114
118
|
ack_fn: Option<AckFn>,
|
115
119
|
pool: PgPool,
|
120
|
+
options: ProcessSourceKeyOptions,
|
116
121
|
) {
|
117
122
|
let process = async {
|
118
123
|
let plan = self.flow.get_execution_plan().await?;
|
119
124
|
let import_op = &plan.import_ops[self.source_idx];
|
120
125
|
let schema = &self.flow.data_schema;
|
121
|
-
let source_data = match source_data {
|
126
|
+
let source_data = match options.source_data {
|
122
127
|
Some(source_data) => source_data,
|
123
128
|
None => import_op
|
124
129
|
.executor
|
125
130
|
.get_value(
|
126
131
|
&key,
|
127
|
-
key_aux_info.as_ref().ok_or_else(|| {
|
132
|
+
options.key_aux_info.as_ref().ok_or_else(|| {
|
128
133
|
anyhow::anyhow!(
|
129
134
|
"`key_aux_info` must be provided when there's no `source_data`"
|
130
135
|
)
|
@@ -337,12 +342,14 @@ impl SourceIndexingContext {
|
|
337
342
|
.await?;
|
338
343
|
join_set.spawn(self.clone().process_source_key(
|
339
344
|
row.key,
|
340
|
-
Some(row.key_aux_info),
|
341
|
-
None,
|
342
345
|
update_stats.clone(),
|
343
346
|
concur_permit,
|
344
347
|
NO_ACK,
|
345
348
|
pool.clone(),
|
349
|
+
ProcessSourceKeyOptions {
|
350
|
+
key_aux_info: Some(row.key_aux_info),
|
351
|
+
..Default::default()
|
352
|
+
},
|
346
353
|
));
|
347
354
|
}
|
348
355
|
}
|
@@ -372,12 +379,14 @@ impl SourceIndexingContext {
|
|
372
379
|
let concur_permit = import_op.concurrency_controller.acquire(Some(|| 0)).await?;
|
373
380
|
join_set.spawn(self.clone().process_source_key(
|
374
381
|
key,
|
375
|
-
None,
|
376
|
-
Some(source_data),
|
377
382
|
update_stats.clone(),
|
378
383
|
concur_permit,
|
379
384
|
NO_ACK,
|
380
385
|
pool.clone(),
|
386
|
+
ProcessSourceKeyOptions {
|
387
|
+
source_data: Some(source_data),
|
388
|
+
..Default::default()
|
389
|
+
},
|
381
390
|
));
|
382
391
|
}
|
383
392
|
while let Some(result) = join_set.join_next().await {
|
@@ -47,7 +47,7 @@ impl IntoResponse for ApiError {
|
|
47
47
|
fn into_response(self) -> Response {
|
48
48
|
debug!("Internal server error:\n{:?}", self.err);
|
49
49
|
let error_response = ErrorResponse {
|
50
|
-
error: self.err
|
50
|
+
error: format!("{:?}", self.err),
|
51
51
|
};
|
52
52
|
(self.status_code, Json(error_response)).into_response()
|
53
53
|
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export COCOINDEX_DATABASE_URL="postgres://cocoindex:cocoindex@localhost/cocoindex"
|
File without changes
|
File without changes
|
{cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md"
RENAMED
File without changes
|
{cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md"
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/components/HomepageFeatures/styles.module.css
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|