cocoindex 0.1.43__tar.gz → 0.1.44__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.43 → cocoindex-0.1.44}/Cargo.lock +1 -1
- {cocoindex-0.1.43 → cocoindex-0.1.44}/Cargo.toml +1 -1
- {cocoindex-0.1.43 → cocoindex-0.1.44}/PKG-INFO +1 -1
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/main.py +4 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/README.md +23 -26
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/main.py +26 -14
- cocoindex-0.1.44/examples/image_search/pyproject.toml +9 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/cli.py +1 -1
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/flow.py +2 -2
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.cargo/config.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.env.lib_debug +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/_test.yml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/release.yml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.gitignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/.vscode/settings.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/CONTRIBUTING.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/LICENSE +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/dev/neo4j.yaml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/dev/postgres.yaml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/.gitignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/about/community.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/about/contributing.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/custom_function.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/sources.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/storages.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/query.mdx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/package.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/sidebars.ts +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/components/HomepageFeatures/index.tsx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/css/custom.css +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/.nojekyll +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/robots.txt +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/tsconfig.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/yarn.lock +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/.env.example +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/requirements.txt +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/sample_code/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/src/cocoindex_funs.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/requirements.txt +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/.env +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/pyproject.toml +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/__init__.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/convert.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/index.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/op.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/query.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/sources.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/storages.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/duration.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/json_schema.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/schema.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/spec.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/value.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/analyzer.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/plan.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/dumper.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/evaluator.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/indexing_status.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/live_updater.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/memoization.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/query.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/source_indexer.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/stats.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/lib.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/lib_context.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/gemini.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/ollama.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/openai.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/interface.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/py_factory.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/registration.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/registry.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sdk.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/amazon_s3.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/google_drive.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/local_file.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/neo4j.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/postgres.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/qdrant.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/spec.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/prelude.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/py/convert.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/py/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/server.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/error.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/flows.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/search.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/settings.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/components.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/driver.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/states.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/db.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/immutable.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/mod.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/retryable.rs +0 -0
- {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/yaml_ser.rs +0 -0
@@ -66,6 +66,10 @@ def search(pool: ConnectionPool, query: str, top_k: int = 5):
|
|
66
66
|
]
|
67
67
|
|
68
68
|
def _main():
|
69
|
+
# Make sure the flow is built and up-to-date.
|
70
|
+
stats = code_embedding_flow.update()
|
71
|
+
print("Updated index: ", stats)
|
72
|
+
|
69
73
|
# Initialize the database connection pool.
|
70
74
|
pool = ConnectionPool(os.getenv("COCOINDEX_DATABASE_URL"))
|
71
75
|
# Run queries in a loop to demonstrate the query capabilities.
|
@@ -2,23 +2,22 @@
|
|
2
2
|
|
3
3
|

|
4
4
|
|
5
|
-
-
|
5
|
+
- Qdrant for Vector Storage
|
6
6
|
- Ollama Gemma3 (Image to Text)
|
7
7
|
- CLIP ViT-L/14 - Embeddings Model
|
8
8
|
- Live Update
|
9
9
|
|
10
10
|
## Make sure Postgres and Qdrant are running
|
11
11
|
```
|
12
|
-
docker run -d
|
12
|
+
docker run -d -p 6334:6334 -p 6333:6333 qdrant/qdrant
|
13
13
|
export COCOINDEX_DATABASE_URL="postgres://cocoindex:cocoindex@localhost/cocoindex"
|
14
14
|
```
|
15
15
|
|
16
|
-
## Create
|
16
|
+
## Create Qdrant Collection
|
17
17
|
```
|
18
|
-
curl -X PUT
|
19
|
-
'
|
20
|
-
|
21
|
-
--data-raw '{
|
18
|
+
curl -X PUT 'http://localhost:6333/collections/image_search' \
|
19
|
+
-H 'Content-Type: application/json' \
|
20
|
+
-d '{
|
22
21
|
"vectors": {
|
23
22
|
"embedding": {
|
24
23
|
"size": 768,
|
@@ -26,7 +25,6 @@ curl -X PUT
|
|
26
25
|
}
|
27
26
|
}
|
28
27
|
}'
|
29
|
-
|
30
28
|
```
|
31
29
|
|
32
30
|
## Run Ollama
|
@@ -35,29 +33,28 @@ ollama pull gemma3
|
|
35
33
|
ollama serve
|
36
34
|
```
|
37
35
|
|
38
|
-
## Create virtual environment and install dependencies
|
39
|
-
```
|
40
|
-
python -m venv .venv
|
41
|
-
source .venv/bin/activate
|
42
|
-
pip install -r requirements.txt
|
43
|
-
```
|
44
|
-
|
45
36
|
### Place your images in the `img` directory.
|
46
37
|
- No need to update manually. CocoIndex will automatically update the index as new images are added to the directory.
|
47
38
|
|
48
39
|
|
49
40
|
## Run Backend
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
```
|
54
|
-
|
55
|
-
|
56
|
-
```
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
41
|
+
- Install dependencies:
|
42
|
+
```
|
43
|
+
pip install -e .
|
44
|
+
```
|
45
|
+
|
46
|
+
- Run Backend
|
47
|
+
```
|
48
|
+
cocoindex setup main.py
|
49
|
+
uvicorn main:app --reload --host 0.0.0.0 --port 8000
|
50
|
+
```
|
51
|
+
|
52
|
+
- Run Frontend
|
53
|
+
```
|
54
|
+
cd frontend
|
55
|
+
npm install
|
56
|
+
npm run dev
|
57
|
+
```
|
61
58
|
|
62
59
|
Go to `http://localhost:5174` to search.
|
63
60
|
|
@@ -7,9 +7,11 @@ import base64
|
|
7
7
|
from fastapi import FastAPI, Query
|
8
8
|
from fastapi.middleware.cors import CORSMiddleware
|
9
9
|
from fastapi.staticfiles import StaticFiles
|
10
|
+
from qdrant_client import QdrantClient
|
10
11
|
|
11
12
|
OLLAMA_URL = "http://localhost:11434/api/generate"
|
12
13
|
OLLAMA_MODEL = "gemma3"
|
14
|
+
QDRANT_GRPC_URL = os.getenv("QDRANT_GRPC_URL", "http://localhost:6334/")
|
13
15
|
|
14
16
|
# 1. Extract caption from image using Ollama vision model
|
15
17
|
@cocoindex.op.function(cache=True, behavior_version=1)
|
@@ -42,7 +44,12 @@ def get_image_caption(img_bytes: bytes) -> str:
|
|
42
44
|
|
43
45
|
|
44
46
|
# 2. Embed the caption string
|
45
|
-
|
47
|
+
@cocoindex.transform_flow()
|
48
|
+
def caption_to_embedding(caption: cocoindex.DataSlice[str]) -> cocoindex.DataSlice[list[float]]:
|
49
|
+
"""
|
50
|
+
Embed the caption using a CLIP model.
|
51
|
+
This is shared logic between indexing and querying.
|
52
|
+
"""
|
46
53
|
return caption.transform(
|
47
54
|
cocoindex.functions.SentenceTransformerEmbed(
|
48
55
|
model="clip-ViT-L-14",
|
@@ -70,7 +77,7 @@ def image_object_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope:
|
|
70
77
|
"img_embeddings",
|
71
78
|
cocoindex.storages.Qdrant(
|
72
79
|
collection_name="image_search",
|
73
|
-
grpc_url=
|
80
|
+
grpc_url=QDRANT_GRPC_URL,
|
74
81
|
),
|
75
82
|
primary_key_fields=["id"],
|
76
83
|
setup_by_user=True,
|
@@ -93,26 +100,31 @@ app.mount("/img", StaticFiles(directory="img"), name="img")
|
|
93
100
|
def startup_event():
|
94
101
|
load_dotenv()
|
95
102
|
cocoindex.init()
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
query_transform_flow=caption_to_embedding,
|
101
|
-
default_similarity_metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY,
|
103
|
+
# Initialize Qdrant client
|
104
|
+
app.state.qdrant_client = QdrantClient(
|
105
|
+
url=QDRANT_GRPC_URL,
|
106
|
+
prefer_grpc=True
|
102
107
|
)
|
103
108
|
app.state.live_updater = cocoindex.FlowLiveUpdater(image_object_embedding_flow)
|
104
109
|
app.state.live_updater.start()
|
105
110
|
|
106
111
|
@app.get("/search")
|
107
112
|
def search(q: str = Query(..., description="Search query"), limit: int = Query(5, description="Number of results")):
|
108
|
-
|
109
|
-
|
113
|
+
# Get the embedding for the query
|
114
|
+
query_embedding = caption_to_embedding.eval(q)
|
115
|
+
|
116
|
+
# Search in Qdrant
|
117
|
+
search_results = app.state.qdrant_client.search(
|
118
|
+
collection_name="image_search",
|
119
|
+
query_vector=("embedding", query_embedding),
|
120
|
+
limit=limit
|
121
|
+
)
|
122
|
+
|
123
|
+
# Format results
|
110
124
|
out = []
|
111
|
-
for result in
|
112
|
-
row = dict(result.data)
|
113
|
-
# Only include filename and score
|
125
|
+
for result in search_results:
|
114
126
|
out.append({
|
115
|
-
"filename":
|
127
|
+
"filename": result.payload["filename"],
|
116
128
|
"score": result.score
|
117
129
|
})
|
118
130
|
return {"results": out}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
[project]
|
2
|
+
name = "image-search"
|
3
|
+
version = "0.1.0"
|
4
|
+
description = "Simple example for cocoindex: build embedding index based on images."
|
5
|
+
requires-python = ">=3.11"
|
6
|
+
dependencies = ["cocoindex>=0.1.42", "python-dotenv>=1.0.1", "fastapi>=0.100.0"]
|
7
|
+
|
8
|
+
[tool.setuptools]
|
9
|
+
packages = []
|
@@ -354,7 +354,7 @@ def evaluate(app_flow_specifier: str, output_dir: str | None, cache: bool = True
|
|
354
354
|
|
355
355
|
fl = _flow_by_name(flow_ref)
|
356
356
|
if output_dir is None:
|
357
|
-
output_dir = f"eval_{setting.get_app_namespace(trailing_delimiter='_')}{
|
357
|
+
output_dir = f"eval_{setting.get_app_namespace(trailing_delimiter='_')}{fl.name}_{datetime.datetime.now().strftime('%y%m%d_%H%M%S')}"
|
358
358
|
options = flow.EvaluateAndDumpOptions(output_dir=output_dir, use_cache=cache)
|
359
359
|
fl.evaluate_and_dump(options)
|
360
360
|
|
@@ -538,8 +538,8 @@ class Flow:
|
|
538
538
|
Update the index defined by the flow.
|
539
539
|
Once the function returns, the index is fresh up to the moment when the function is called.
|
540
540
|
"""
|
541
|
-
|
542
|
-
|
541
|
+
async with FlowLiveUpdater(self, FlowLiveUpdaterOptions(live_mode=False)) as updater:
|
542
|
+
await updater.wait_async()
|
543
543
|
return updater.update_stats()
|
544
544
|
|
545
545
|
def evaluate_and_dump(self, options: EvaluateAndDumpOptions):
|
File without changes
|
File without changes
|
{cocoindex-0.1.43 → cocoindex-0.1.44}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md"
RENAMED
File without changes
|
{cocoindex-0.1.43 → cocoindex-0.1.44}/.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
|
{cocoindex-0.1.43 → cocoindex-0.1.44}/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
|
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
|
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.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1706.03762v7.md
RENAMED
File without changes
|
{cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1810.04805v2.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/markdown_files/rfc8259.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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|