cocoindex 0.1.67__tar.gz → 0.1.68__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.67 → cocoindex-0.1.68}/.pre-commit-config.yaml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/Cargo.lock +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/Cargo.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/PKG-INFO +25 -5
- {cocoindex-0.1.67 → cocoindex-0.1.68}/README.md +22 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/about/contributing.md +2 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/data_types.mdx +0 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/flow_def.mdx +1 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/flow_methods.mdx +53 -10
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/ops/sources.md +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/src/css/custom.css +1 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/amazon_s3_embedding/main.py +7 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/amazon_s3_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/azure_blob_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/code_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/gdrive_text_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/pyproject.toml +2 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding_qdrant/pyproject.toml +1 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/pyproject.toml +1 -2
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/__init__.py +2 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/flow.py +35 -7
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/runtime.py +5 -2
- cocoindex-0.1.68/src/execution/live_updater.rs +399 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/source_indexer.rs +57 -55
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sources/amazon_s3.rs +13 -1
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/py/mod.rs +33 -15
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/service/flows.rs +1 -1
- cocoindex-0.1.67/src/execution/live_updater.rs +0 -269
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.cargo/config.toml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.env.lib_debug +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/_doc_release.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/_test.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/format.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.github/workflows/release.yml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/CONTRIBUTING.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/LICENSE +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/dev/neo4j.yaml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/dev/postgres.yaml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/about/community.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/custom_function.mdx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/ops/targets.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docs/query.mdx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/package.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/sidebars.ts +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/src/components/HomepageFeatures/index.tsx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/.nojekyll +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/img/incremental-etl.gif +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/static/robots.txt +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/tsconfig.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/docs/yarn.lock +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/amazon_s3_embedding/.env.example +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/azure_blob_embedding/.env.example +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/azure_blob_embedding/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/azure_blob_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/azure_blob_embedding/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/code_embedding/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/fastapi_server_docker/requirements.txt +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/image_search/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/.env.example +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/.gitignore +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/.env.example +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/patient_intake_extraction/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding_qdrant/.env +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/cli.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/convert.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/index.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/op.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/sources.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/targets.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/tests/test_optional_database.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/tests/test_typing.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/ruff.toml +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/duration.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/json_schema.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/schema.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/spec.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/base/value.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/analyzer.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/exec_ctx.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/builder/plan.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/dumper.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/evaluator.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/indexing_status.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/memoization.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/execution/stats.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/lib.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/lib_context.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/gemini.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/litellm.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/ollama.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/openai.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/openrouter.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/vertex_ai.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/vllm.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/llm/voyage.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/embed_text.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/functions/test_utils.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/interface.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/py_factory.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/registration.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/registry.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sdk.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sources/azure_blob.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sources/google_drive.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sources/local_file.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/kuzu.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/neo4j.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/postgres.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/qdrant.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/shared/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/shared/property_graph.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/ops/targets/shared/table_columns.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/prelude.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/py/convert.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/server.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/service/error.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/service/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/settings.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/components.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/driver.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/setup/states.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/concur_control.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/db.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/immutable.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/mod.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/retryable.rs +0 -0
- {cocoindex-0.1.67 → cocoindex-0.1.68}/src/utils/yaml_ser.rs +0 -0
@@ -1,17 +1,17 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cocoindex
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.68
|
4
4
|
Requires-Dist: click>=8.1.8
|
5
5
|
Requires-Dist: rich>=14.0.0
|
6
6
|
Requires-Dist: python-dotenv>=1.1.0
|
7
7
|
Requires-Dist: watchfiles>=1.1.0
|
8
8
|
Requires-Dist: numpy>=1.23.2
|
9
|
-
Requires-Dist: pytest ; extra == '
|
9
|
+
Requires-Dist: pytest ; extra == 'dev'
|
10
10
|
Requires-Dist: ruff ; extra == 'dev'
|
11
|
+
Requires-Dist: mypy ; extra == 'dev'
|
11
12
|
Requires-Dist: pre-commit ; extra == 'dev'
|
12
13
|
Requires-Dist: sentence-transformers>=3.3.1 ; extra == 'embeddings'
|
13
14
|
Requires-Dist: cocoindex[embeddings] ; extra == 'all'
|
14
|
-
Provides-Extra: test
|
15
15
|
Provides-Extra: dev
|
16
16
|
Provides-Extra: embeddings
|
17
17
|
Provides-Extra: all
|
@@ -36,16 +36,36 @@ Project-URL: Homepage, https://cocoindex.io/
|
|
36
36
|
[](https://opensource.org/licenses/Apache-2.0)
|
37
37
|
[](https://pypi.org/project/cocoindex/)
|
38
38
|
[](https://pypistats.org/packages/cocoindex)
|
39
|
-
|
40
39
|
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml)
|
41
40
|
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml)
|
42
41
|
[](https://discord.com/invite/zpA9S2DR7s)
|
42
|
+
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div align="center">
|
46
|
+
<a href="https://trendshift.io/repositories/13939" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13939" alt="cocoindex-io%2Fcocoindex | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
43
47
|
</div>
|
44
48
|
|
49
|
+
|
45
50
|
Ultra performant data transformation framework for AI, with core engine written in Rust. Support incremental processing and data lineage out-of-box. Exceptional developer velocity. Production-ready at day 0.
|
46
51
|
|
47
52
|
⭐ Drop a star to help us grow!
|
48
53
|
|
54
|
+
<div align="center">
|
55
|
+
|
56
|
+
<!-- Keep these links. Translations will automatically update with the README. -->
|
57
|
+
[Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex?lang=de) |
|
58
|
+
[English](https://readme-i18n.com/cocoindex-io/cocoindex?lang=en) |
|
59
|
+
[Español](https://readme-i18n.com/cocoindex-io/cocoindex?lang=es) |
|
60
|
+
[français](https://readme-i18n.com/cocoindex-io/cocoindex?lang=fr) |
|
61
|
+
[日本語](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ja) |
|
62
|
+
[한국어](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ko) |
|
63
|
+
[Português](https://readme-i18n.com/cocoindex-io/cocoindex?lang=pt) |
|
64
|
+
[Русский](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ru) |
|
65
|
+
[中文](https://readme-i18n.com/cocoindex-io/cocoindex?lang=zh)
|
66
|
+
|
67
|
+
</div>
|
68
|
+
|
49
69
|
</br>
|
50
70
|
|
51
71
|
<p align="center">
|
@@ -59,7 +79,7 @@ CocoIndex makes it super easy to transform data with AI workloads, and keep sour
|
|
59
79
|
</br>
|
60
80
|
|
61
81
|
<p align="center">
|
62
|
-
<img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='
|
82
|
+
<img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='400'>
|
63
83
|
</p>
|
64
84
|
|
65
85
|
</br>
|
@@ -11,16 +11,36 @@
|
|
11
11
|
[](https://opensource.org/licenses/Apache-2.0)
|
12
12
|
[](https://pypi.org/project/cocoindex/)
|
13
13
|
[](https://pypistats.org/packages/cocoindex)
|
14
|
-
|
15
14
|
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml)
|
16
15
|
[](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml)
|
17
16
|
[](https://discord.com/invite/zpA9S2DR7s)
|
17
|
+
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<div align="center">
|
21
|
+
<a href="https://trendshift.io/repositories/13939" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13939" alt="cocoindex-io%2Fcocoindex | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
18
22
|
</div>
|
19
23
|
|
24
|
+
|
20
25
|
Ultra performant data transformation framework for AI, with core engine written in Rust. Support incremental processing and data lineage out-of-box. Exceptional developer velocity. Production-ready at day 0.
|
21
26
|
|
22
27
|
⭐ Drop a star to help us grow!
|
23
28
|
|
29
|
+
<div align="center">
|
30
|
+
|
31
|
+
<!-- Keep these links. Translations will automatically update with the README. -->
|
32
|
+
[Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex?lang=de) |
|
33
|
+
[English](https://readme-i18n.com/cocoindex-io/cocoindex?lang=en) |
|
34
|
+
[Español](https://readme-i18n.com/cocoindex-io/cocoindex?lang=es) |
|
35
|
+
[français](https://readme-i18n.com/cocoindex-io/cocoindex?lang=fr) |
|
36
|
+
[日本語](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ja) |
|
37
|
+
[한국어](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ko) |
|
38
|
+
[Português](https://readme-i18n.com/cocoindex-io/cocoindex?lang=pt) |
|
39
|
+
[Русский](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ru) |
|
40
|
+
[中文](https://readme-i18n.com/cocoindex-io/cocoindex?lang=zh)
|
41
|
+
|
42
|
+
</div>
|
43
|
+
|
24
44
|
</br>
|
25
45
|
|
26
46
|
<p align="center">
|
@@ -34,7 +54,7 @@ CocoIndex makes it super easy to transform data with AI workloads, and keep sour
|
|
34
54
|
</br>
|
35
55
|
|
36
56
|
<p align="center">
|
37
|
-
<img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='
|
57
|
+
<img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='400'>
|
38
58
|
</p>
|
39
59
|
|
40
60
|
</br>
|
@@ -46,12 +46,12 @@ Following the steps below to get cocoindex build on latest codebase locally - if
|
|
46
46
|
|
47
47
|
- Install required tools:
|
48
48
|
```sh
|
49
|
-
pip install maturin
|
49
|
+
pip install maturin
|
50
50
|
```
|
51
51
|
|
52
52
|
- Build the library. Run at the root of cocoindex directory:
|
53
53
|
```sh
|
54
|
-
maturin develop
|
54
|
+
maturin develop -E all,dev
|
55
55
|
```
|
56
56
|
|
57
57
|
- Install and enable pre-commit hooks. This ensures all checks run automatically before each commit:
|
@@ -28,8 +28,6 @@ When you define a [custom function](/docs/core/custom_function), you need to ann
|
|
28
28
|
we use the type annotation as a guidance to construct the Python value.
|
29
29
|
Type annotation is optional for basic types and struct types, and required for table types.
|
30
30
|
|
31
|
-
* When you define a [custom function](/docs/core/custom_function), type annotation is required for arguments and return values.
|
32
|
-
|
33
31
|
### Basic Types
|
34
32
|
|
35
33
|
#### Primitive Types
|
@@ -57,8 +57,7 @@ After it's called, `demo_flow` becomes an invalid object, and you should not cal
|
|
57
57
|
:::note
|
58
58
|
|
59
59
|
This only removes states of the flow from the current process, and it won't affect the persistent states.
|
60
|
-
|
61
|
-
If you w
|
60
|
+
See [Setup / drop flow](/docs/core/flow_methods#setup--drop-flow) if you want to clean up the persistent states.
|
62
61
|
|
63
62
|
:::
|
64
63
|
|
@@ -241,13 +241,27 @@ A `FlowLiveUpdater` object supports the following methods:
|
|
241
241
|
|
242
242
|
* `start()`: Start the updater.
|
243
243
|
CocoIndex will continuously capture changes from the source data and update the target data accordingly in background threads managed by the engine.
|
244
|
+
|
244
245
|
* `abort()`: Abort the updater.
|
246
|
+
|
245
247
|
* `wait()`: Wait for the updater to finish. It only unblocks in one of the following cases:
|
246
248
|
* The updater was aborted.
|
247
249
|
* A one time update is done, and live update is not enabled:
|
248
250
|
either `live_mode` is `False`, or all data sources have no change capture mechanisms enabled.
|
251
|
+
|
252
|
+
* `next_status_updates()`: Get the next status updates.
|
253
|
+
It blocks until there's a new status updates, including the processing finishes for a bunch of source updates, and live updater stops (aborted, or no more sources to process).
|
254
|
+
You can continuously call this method in a loop to get the latest status updates and react accordingly.
|
255
|
+
|
256
|
+
It returns a `cocoindex.FlowUpdaterStatusUpdates` object, with the following properties:
|
257
|
+
* `active_sources`: Names of sources that are still active, i.e. not stopped processing. If it's empty, it means the updater is stopped.
|
258
|
+
* `updated_sources`: Names of sources with updates since last time.
|
259
|
+
You can check this to see which sources have recent updates and get processed.
|
260
|
+
|
249
261
|
* `update_stats()`: It returns the stats of the updater.
|
250
262
|
|
263
|
+
This snippets shows the lifecycle of a live updater:
|
264
|
+
|
251
265
|
```python
|
252
266
|
my_updater = cocoindex.FlowLiveUpdater(demo_flow)
|
253
267
|
# Start the updater.
|
@@ -256,14 +270,37 @@ my_updater.start()
|
|
256
270
|
# Perform your own logic (e.g. a query loop).
|
257
271
|
...
|
258
272
|
|
259
|
-
|
260
|
-
print(my_updater.update_stats())
|
261
|
-
# Abort the updater.
|
262
|
-
my_updater.abort()
|
273
|
+
...
|
263
274
|
# Wait for the updater to finish.
|
264
275
|
my_updater.wait()
|
276
|
+
# Print the update stats.
|
277
|
+
print(my_updater.update_stats())
|
265
278
|
```
|
266
279
|
|
280
|
+
Somewhere (in the same or other threads) you can also continuously call `next_status_updates()` to get the latest status updates and react accordingly, e.g.
|
281
|
+
|
282
|
+
```python
|
283
|
+
while True:
|
284
|
+
updates = my_updater.next_status_updates()
|
285
|
+
|
286
|
+
for source in updates.updated_sources:
|
287
|
+
# Perform downstream operations on the target of the source.
|
288
|
+
run_your_downstream_operations_for(source)
|
289
|
+
|
290
|
+
# Break the loop if there's no more active sources.
|
291
|
+
if not updates.active_sources:
|
292
|
+
break
|
293
|
+
```
|
294
|
+
|
295
|
+
:::info
|
296
|
+
|
297
|
+
`next_status_updates()` automatically combines multiple status updates if more than one arrives between two calls,
|
298
|
+
e.g. your downstream operations may take more time, or you don't need to process too frequently (in which case you can explicitly sleep for a while).
|
299
|
+
|
300
|
+
So you don't need to worry about the status updates piling up.
|
301
|
+
|
302
|
+
:::
|
303
|
+
|
267
304
|
Python SDK also allows you to use the updater as a context manager.
|
268
305
|
It will automatically start the updater during the context entry, and abort and wait for the updater to finish automatically when the context is exited.
|
269
306
|
The following code is equivalent to the code above (if no early return happens):
|
@@ -272,7 +309,6 @@ The following code is equivalent to the code above (if no early return happens):
|
|
272
309
|
with cocoindex.FlowLiveUpdater(demo_flow) as my_updater:
|
273
310
|
# Perform your own logic (e.g. a query loop).
|
274
311
|
...
|
275
|
-
print(my_updater.update_stats())
|
276
312
|
```
|
277
313
|
|
278
314
|
CocoIndex also provides asynchronous versions of APIs for blocking operations, including:
|
@@ -287,20 +323,27 @@ CocoIndex also provides asynchronous versions of APIs for blocking operations, i
|
|
287
323
|
# Perform your own logic (e.g. a query loop).
|
288
324
|
...
|
289
325
|
|
290
|
-
# Print the update stats.
|
291
|
-
print(my_updater.update_stats())
|
292
|
-
# Abort the updater.
|
293
|
-
my_updater.abort()
|
294
326
|
# Wait for the updater to finish.
|
295
327
|
await my_updater.wait_async()
|
328
|
+
# Print the update stats.
|
329
|
+
print(my_updater.update_stats())
|
330
|
+
```
|
331
|
+
|
332
|
+
* `next_status_updates_async()`, e.g.
|
333
|
+
|
334
|
+
```python
|
335
|
+
while True:
|
336
|
+
updates = await my_updater.next_status_updates_async()
|
337
|
+
|
338
|
+
...
|
296
339
|
```
|
340
|
+
|
297
341
|
* Async context manager, e.g.
|
298
342
|
|
299
343
|
```python
|
300
344
|
async with cocoindex.FlowLiveUpdater(demo_flow) as my_updater:
|
301
345
|
# Perform your own logic (e.g. a query loop).
|
302
346
|
...
|
303
|
-
print(my_updater.update_stats())
|
304
347
|
```
|
305
348
|
|
306
349
|
</TabItem>
|
@@ -167,7 +167,7 @@ These are actions you need to take:
|
|
167
167
|
* Create a storage account in the [Azure Portal](https://portal.azure.com/).
|
168
168
|
* Create a container in the storage account.
|
169
169
|
* Upload your files to the container.
|
170
|
-
* Grant the user / identity / service principal (depends on your authentication method, see below) access to the
|
170
|
+
* Grant the user / identity / service principal (depends on your authentication method, see below) access to the storage account. At minimum, a **Storage Blob Data Reader** role is needed. See [this doc](https://learn.microsoft.com/en-us/azure/storage/blobs/authorize-data-operations-portal) for reference.
|
171
171
|
|
172
172
|
#### Authentication
|
173
173
|
|
@@ -101,7 +101,13 @@ def _main() -> None:
|
|
101
101
|
pool = ConnectionPool(os.getenv("COCOINDEX_DATABASE_URL"))
|
102
102
|
|
103
103
|
amazon_s3_text_embedding_flow.setup()
|
104
|
-
with cocoindex.FlowLiveUpdater(amazon_s3_text_embedding_flow):
|
104
|
+
with cocoindex.FlowLiveUpdater(amazon_s3_text_embedding_flow) as updater:
|
105
|
+
while True:
|
106
|
+
updates = updater.next_status_updates()
|
107
|
+
print(f"Updates: {updates}")
|
108
|
+
if not updates.active_sources:
|
109
|
+
break
|
110
|
+
|
105
111
|
# Run queries in a loop to demonstrate the query capabilities.
|
106
112
|
while True:
|
107
113
|
query = input("Enter search query (or Enter to quit): ")
|
@@ -3,7 +3,7 @@ name = "amazon-s3-text-embedding"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on Amazon S3 files."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex[embeddings]>=0.1.
|
6
|
+
dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -3,7 +3,7 @@ name = "azure-blob-text-embedding"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on Azure Blob Storage files."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex[embeddings]>=0.1.
|
6
|
+
dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -3,7 +3,7 @@ name = "code-embedding"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on source code."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex[embeddings]>=0.1.
|
6
|
+
dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -3,7 +3,7 @@ name = "manuals-to-kg"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: extract triples from files and build knowledge graph."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.67"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -3,7 +3,7 @@ name = "gdrive-text-embedding"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on Google Drive files."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex[embeddings]>=0.1.
|
6
|
+
dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -3,7 +3,7 @@ name = "manuals-llm-extraction"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: extract structured information from a Markdown file using LLM."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.67", "marker-pdf>=1.5.2"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -4,8 +4,8 @@ version = "0.1.0"
|
|
4
4
|
description = "Extract structured information from patient intake forms using LLM."
|
5
5
|
requires-python = ">=3.10"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex>=0.1.
|
7
|
+
"cocoindex>=0.1.67",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"markitdown>=0.1.2",
|
10
|
-
"openai>=1.68.2"
|
10
|
+
"openai>=1.68.2",
|
11
11
|
]
|
@@ -4,7 +4,7 @@ version = "0.1.0"
|
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on local PDF files."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.1.
|
7
|
+
"cocoindex[embeddings]>=0.1.67",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"marker-pdf>=1.5.2",
|
10
10
|
]
|
@@ -3,7 +3,7 @@ name = "cocoindex-ecommerce-taxonomy"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for CocoIndex: extract taxonomy from e-commerce products and build knowledge graph."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.67", "jinja2>=3.1.6"]
|
7
7
|
|
8
8
|
[tool.setuptools]
|
9
9
|
packages = []
|
@@ -4,7 +4,7 @@ version = "0.1.0"
|
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on local text files."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.1.
|
7
|
+
"cocoindex[embeddings]>=0.1.67",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"pgvector>=0.4.1",
|
10
10
|
"psycopg[binary,pool]",
|
@@ -4,7 +4,7 @@ version = "0.1.0"
|
|
4
4
|
description = "Simple example for cocoindex: build embedding index based on local text files."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.1.
|
7
|
+
"cocoindex[embeddings]>=0.1.67",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"qdrant-client>=1.6.0",
|
10
10
|
]
|
@@ -29,8 +29,7 @@ module-name = "cocoindex._engine"
|
|
29
29
|
features = ["pyo3/extension-module"]
|
30
30
|
|
31
31
|
[project.optional-dependencies]
|
32
|
-
|
33
|
-
dev = ["ruff", "pre-commit"]
|
32
|
+
dev = ["pytest", "ruff", "mypy", "pre-commit"]
|
34
33
|
embeddings = ["sentence-transformers>=3.3.1"]
|
35
34
|
all = ["cocoindex[embeddings]"]
|
36
35
|
|
@@ -10,7 +10,7 @@ from .auth_registry import AuthEntryReference, add_auth_entry, ref_auth_entry
|
|
10
10
|
from .flow import FlowBuilder, DataScope, DataSlice, Flow, transform_flow
|
11
11
|
from .flow import flow_def
|
12
12
|
from .flow import EvaluateAndDumpOptions, GeneratedField
|
13
|
-
from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions
|
13
|
+
from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions, FlowUpdaterStatusUpdates
|
14
14
|
from .flow import add_flow_def, remove_flow
|
15
15
|
from .flow import update_all_flows_async, setup_all_flows, drop_all_flows
|
16
16
|
from .lib import init, start_server, stop
|
@@ -54,6 +54,7 @@ __all__ = [
|
|
54
54
|
"GeneratedField",
|
55
55
|
"FlowLiveUpdater",
|
56
56
|
"FlowLiveUpdaterOptions",
|
57
|
+
"FlowUpdaterStatusUpdates",
|
57
58
|
"add_flow_def",
|
58
59
|
"remove_flow",
|
59
60
|
"update_all_flows_async",
|
@@ -534,6 +534,18 @@ class FlowLiveUpdaterOptions:
|
|
534
534
|
print_stats: bool = False
|
535
535
|
|
536
536
|
|
537
|
+
class FlowUpdaterStatusUpdates(NamedTuple):
|
538
|
+
"""
|
539
|
+
Status updates for a flow updater.
|
540
|
+
"""
|
541
|
+
|
542
|
+
# Sources that are still active, i.e. not stopped processing.
|
543
|
+
active_sources: list[str]
|
544
|
+
|
545
|
+
# Sources with updates since last time.
|
546
|
+
updated_sources: list[str]
|
547
|
+
|
548
|
+
|
537
549
|
class FlowLiveUpdater:
|
538
550
|
"""
|
539
551
|
A live updater for a flow.
|
@@ -587,7 +599,26 @@ class FlowLiveUpdater:
|
|
587
599
|
"""
|
588
600
|
Wait for the live updater to finish. Async version.
|
589
601
|
"""
|
590
|
-
await self._get_engine_live_updater().
|
602
|
+
await self._get_engine_live_updater().wait_async()
|
603
|
+
|
604
|
+
def next_status_updates(self) -> FlowUpdaterStatusUpdates:
|
605
|
+
"""
|
606
|
+
Get the next status updates.
|
607
|
+
|
608
|
+
It blocks until there's a new status updates, including the processing finishes for a bunch of source updates,
|
609
|
+
and live updater stops (aborted, or no more sources to process).
|
610
|
+
"""
|
611
|
+
return execution_context.run(self.next_status_updates_async())
|
612
|
+
|
613
|
+
async def next_status_updates_async(self) -> FlowUpdaterStatusUpdates:
|
614
|
+
"""
|
615
|
+
Get the next status updates. Async version.
|
616
|
+
"""
|
617
|
+
updates = await self._get_engine_live_updater().next_status_updates_async()
|
618
|
+
return FlowUpdaterStatusUpdates(
|
619
|
+
active_sources=updates.active_sources,
|
620
|
+
updated_sources=updates.updated_sources,
|
621
|
+
)
|
591
622
|
|
592
623
|
def abort(self) -> None:
|
593
624
|
"""
|
@@ -879,10 +910,7 @@ def update_all_flows(
|
|
879
910
|
"""
|
880
911
|
Update all flows.
|
881
912
|
"""
|
882
|
-
return
|
883
|
-
dict[str, _engine.IndexUpdateInfo],
|
884
|
-
execution_context.run(update_all_flows_async(options)),
|
885
|
-
)
|
913
|
+
return execution_context.run(update_all_flows_async(options))
|
886
914
|
|
887
915
|
|
888
916
|
async def update_all_flows_async(
|
@@ -958,7 +986,7 @@ class TransformFlow(Generic[T]):
|
|
958
986
|
def _flow_info(self) -> TransformFlowInfo:
|
959
987
|
if self._lazy_flow_info is not None:
|
960
988
|
return self._lazy_flow_info
|
961
|
-
return
|
989
|
+
return execution_context.run(self._flow_info_async())
|
962
990
|
|
963
991
|
async def _flow_info_async(self) -> TransformFlowInfo:
|
964
992
|
if self._lazy_flow_info is not None:
|
@@ -1037,7 +1065,7 @@ class TransformFlow(Generic[T]):
|
|
1037
1065
|
"""
|
1038
1066
|
Evaluate the transform flow.
|
1039
1067
|
"""
|
1040
|
-
return
|
1068
|
+
return execution_context.run(self.eval_async(*args, **kwargs))
|
1041
1069
|
|
1042
1070
|
async def eval_async(self, *args: Any, **kwargs: Any) -> T:
|
1043
1071
|
"""
|
@@ -5,7 +5,10 @@ manner.
|
|
5
5
|
|
6
6
|
import threading
|
7
7
|
import asyncio
|
8
|
-
from typing import Any, Coroutine
|
8
|
+
from typing import Any, Coroutine, TypeVar
|
9
|
+
|
10
|
+
|
11
|
+
T = TypeVar("T")
|
9
12
|
|
10
13
|
|
11
14
|
class _ExecutionContext:
|
@@ -26,7 +29,7 @@ class _ExecutionContext:
|
|
26
29
|
).start()
|
27
30
|
return self._event_loop
|
28
31
|
|
29
|
-
def run(self, coro: Coroutine[Any, Any,
|
32
|
+
def run(self, coro: Coroutine[Any, Any, T]) -> T:
|
30
33
|
"""Run a coroutine in the event loop, blocking until it finishes. Return its result."""
|
31
34
|
return asyncio.run_coroutine_threadsafe(coro, self.event_loop).result()
|
32
35
|
|