cocoindex 0.2.3__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cocoindex-0.2.3 → cocoindex-0.2.4}/Cargo.lock +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/Cargo.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/PKG-INFO +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/cli.mdx +8 -2
- cocoindex-0.2.4/docs/docs/examples/examples/postgres_source.md +299 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/collector.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/cover.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/description.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/embed.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/flow.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/lineage.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/price.png +0 -0
- cocoindex-0.2.4/docs/static/img/examples/postgres_source/source.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/amazon_s3_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/azure_blob_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/code_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/requirements.txt +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/gdrive_text_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/pyproject.toml +2 -2
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/postgres_source/main.py +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/postgres_source/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding_qdrant/pyproject.toml +1 -1
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/cli.py +22 -4
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/user_app_loader.py +12 -10
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.cargo/config.toml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.env.lib_debug +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/_doc_release.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/_test.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/format.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.github/workflows/release.yml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/.pre-commit-config.yaml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/CONTRIBUTING.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/LICENSE +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/dev/neo4j.yaml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/dev/postgres.yaml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/about/community.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/contributing/guide.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/contributing/new_built_in_target.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/contributing/setup_dev_environment.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/core/settings.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/custom_ops/custom_functions.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/custom_ops/custom_targets.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/academic_papers_index.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/codebase_index.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/custom_targets.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/docs_to_knowledge_graph.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/image_search.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/manual_extraction.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/multi_format_index.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/patient_form_extraction.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/photo_search.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/product_recommendation.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/examples/simple_vector_index.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/examples/index.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/ops/sources.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/ops/targets.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/query.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/tutorials/live_updates.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/package.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/sidebars.ts +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/components/GitHubButton/index.tsx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/css/custom.css +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/theme/DocCard/index.tsx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/theme/DocCard/styles.module.css +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/theme/DocCardList/index.tsx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/theme/DocCardList/styles.module.css +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/.nojekyll +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/codebase_index/chunk.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/codebase_index/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/codebase_index/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/custom_targets/convert.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/custom_targets/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/image_search/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/image_search/embedding.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/image_search/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/image_search/result.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/manual_extraction/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/manual_extraction/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/manual_extraction/summary.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/multi_format_index/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/multi_format_index/embed.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/multi_format_index/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/multi_format_index/pages.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/photo_search/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/photo_search/extraction.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/photo_search/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/simple_vector_index/embed.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/img/incremental-etl.gif +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/static/robots.txt +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/tsconfig.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/docs/yarn.lock +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/amazon_s3_embedding/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/amazon_s3_embedding/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/amazon_s3_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/amazon_s3_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/azure_blob_embedding/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/azure_blob_embedding/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/azure_blob_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/azure_blob_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/code_embedding/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/data/chunk_norris.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/custom_output_files/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/images/einplanck3.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/face_recognition/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/.dockerignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/compose.yaml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/dockerfile +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/fastapi_server_docker/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/colpali_main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/index.html +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/package-lock.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/package.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/src/App.jsx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/src/main.jsx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/src/style.css +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/frontend/vite.config.js +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/img/cat1.jpeg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/img/dog1.jpeg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/img/elephant1.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/img/giraffe.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/image_search/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/data/bizarre_animals.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/data/chunk_norris.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/live_updates/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/.gitignore +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/data/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/patient_intake_extraction/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/postgres_source/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/postgres_source/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/postgres_source/prepare_source_data.sql +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/.env.example +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/img/cocoinsight.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/img/neo4j.png +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p1.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p2.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p3.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p4.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p5.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p6.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p7.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p8.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/product_recommendation/products/p9.json +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding_qdrant/.env +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/pyproject.toml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/__init__.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/convert.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/flow.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/index.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/op.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/setting.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/sources.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/subprocess_exec.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/targets.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/conftest.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/test_optional_database.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/test_transform_flow.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/test_typing.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/tests/test_validation.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/utils.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/python/cocoindex/validation.py +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/ruff.toml +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/duration.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/json_schema.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/schema.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/spec.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/base/value.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/analyzer.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/exec_ctx.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/builder/plan.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/dumper.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/evaluator.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/indexing_status.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/live_updater.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/memoization.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/source_indexer.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/execution/stats.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/lib.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/lib_context.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/gemini.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/litellm.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/ollama.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/openai.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/openrouter.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/vllm.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/llm/voyage.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/embed_text.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/functions/test_utils.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/interface.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/py_factory.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/registration.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/registry.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sdk.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/shared/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/shared/postgres.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/amazon_s3.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/azure_blob.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/google_drive.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/local_file.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/postgres.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/shared/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/sources/shared/pattern_matcher.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/kuzu.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/neo4j.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/postgres.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/qdrant.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/shared/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/shared/property_graph.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/ops/targets/shared/table_columns.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/prelude.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/py/convert.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/py/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/server.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/service/error.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/service/flows.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/service/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/settings.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/components.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/driver.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/flow_features.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/setup/states.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/concur_control.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/db.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/immutable.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/mod.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/retryable.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/src/utils/str_sanitize.rs +0 -0
- {cocoindex-0.2.3 → cocoindex-0.2.4}/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.2.
|
5
|
+
version = "0.2.4"
|
6
6
|
edition = "2024"
|
7
7
|
rust-version = "1.88"
|
8
8
|
readme = "README.md"
|
@@ -17,8 +17,13 @@ Once CocoIndex is installed, you can invoke the CLI directly using the `cocoinde
|
|
17
17
|
### APP_TARGET Format
|
18
18
|
|
19
19
|
The `APP_TARGET` can be:
|
20
|
-
1.
|
21
|
-
|
20
|
+
1. An **Python module name** that contains your flow definitions (e.g., `main`, `my_package.flows`).
|
21
|
+
You can also use `--app-dir <path>` to specify the base directory to load the module from.
|
22
|
+
|
23
|
+
2. A **path to a Python file** defining your flows (e.g., `main.py`, `path/to/my_flows.py`).
|
24
|
+
|
25
|
+
The file will be loaded as a top-level Python module, e.g. relative imports will not work as its parent package is not defined (similar to how `python main.py` works).
|
26
|
+
|
22
27
|
3. For commands that operate on a *specific flow* (like `show`, `update`, `evaluate`), you can combine the application reference with a flow name:
|
23
28
|
* `path/to/my_flows.py:MyFlow`
|
24
29
|
* `my_package.flows:MyFlow`
|
@@ -44,6 +49,7 @@ If no file is found, only existing system environment variables are used.
|
|
44
49
|
CocoIndex CLI supports the following global options:
|
45
50
|
|
46
51
|
* `--env-file <path>`: Load environment variables from a specified `.env` file. If not provided, `.env` in the current directory is loaded if it exists.
|
52
|
+
* `--app-dir <path>`: Load apps from the specified directory. It will be treated as part of `PYTHONPATH`. Default to the current directory.
|
47
53
|
* `--version`: Show the CocoIndex version and exit.
|
48
54
|
* `--help`: Show the main help message and exit.
|
49
55
|
|
@@ -0,0 +1,299 @@
|
|
1
|
+
---
|
2
|
+
title: Transform Data From Structured Source in PostgreSQL
|
3
|
+
description: Transform data from PostgreSQL table as source, transform with both AI models and non-AI data mappings, and write them into PostgreSQL/PgVector for semantic + structured search.
|
4
|
+
sidebar_class_name: hidden
|
5
|
+
slug: /examples/postgres_source
|
6
|
+
canonicalUrl: '/examples/postgres_source'
|
7
|
+
sidebar_custom_props:
|
8
|
+
image: /img/examples/postgres_source/cover.png
|
9
|
+
tags: [data-mapping, vector-index, postgres]
|
10
|
+
tags: [data-mapping, vector-index, postgres]
|
11
|
+
---
|
12
|
+
import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
|
13
|
+
|
14
|
+
<GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/postgres_source" margin="0 0 24px 0" /
|
15
|
+
>
|
16
|
+

|
17
|
+
|
18
|
+
[CocoIndex](https://github.com/cocoindex-io/cocoindex) is one framework for building **incremental** data flows across **structured and unstructured** sources. This tutorial shows how to take data from PostgreSQL table as source, transform with both AI and non-AI data mappings, and write them into a new PostgreSQL table with PgVector for semantic + structured search.
|
19
|
+
|
20
|
+
## PostgreSQL Product Indexing Flow
|
21
|
+

|
22
|
+
|
23
|
+
- Reading data from a PostgreSQL table `source_products`.
|
24
|
+
- Computing additional fields (`total_value`, `full_description`).
|
25
|
+
- Generating embeddings for semantic search.
|
26
|
+
- Storing the results in another PostgreSQL table with a vector index using pgvector
|
27
|
+
|
28
|
+
|
29
|
+
### Connect to source
|
30
|
+
|
31
|
+
`flow_builder.add_source` reads rows from `source_products`.
|
32
|
+
|
33
|
+
```python
|
34
|
+
@cocoindex.flow_def(name="PostgresProductIndexing")
|
35
|
+
def postgres_product_indexing_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope) -> None:
|
36
|
+
|
37
|
+
data_scope["products"] = flow_builder.add_source(
|
38
|
+
cocoindex.sources.Postgres(
|
39
|
+
table_name="source_products",
|
40
|
+
# Optional. Use the default CocoIndex database if not specified.
|
41
|
+
database=cocoindex.add_transient_auth_entry(
|
42
|
+
cocoindex.DatabaseConnectionSpec(
|
43
|
+
url=os.environ["SOURCE_DATABASE_URL"],
|
44
|
+
)
|
45
|
+
),
|
46
|
+
# Optional.
|
47
|
+
ordinal_column="modified_time",
|
48
|
+
notification=cocoindex.sources.PostgresNotification(),
|
49
|
+
),
|
50
|
+
)
|
51
|
+
```
|
52
|
+
This step adds source data from PostgreSQL table `source_products` to the flow as a `KTable`.
|
53
|
+
|
54
|
+

|
55
|
+
|
56
|
+
CocoIndex incrementally sync data from Postgres. When new or updated rows are found, only those rows run through the pipeline, so downstream indexes and search results reflect the latest data while unchanged rows are untouched. The following two arguments (both are optional) make this more efficient:
|
57
|
+
|
58
|
+
- `notification` enables change capture based on Postgres LISTEN/NOTIFY. Each change triggers an incremental processing on the specific row immediately.
|
59
|
+
- Regardless if `notification` is provided or not, CocoIndex still needs to scan the full table to detect changes in some scenarios (e.g. between two `update` invocation), and the `ordinal_column` provides a field that CocoIndex can use to quickly detect which row has changed without reading value columns.
|
60
|
+
|
61
|
+
Check [Postgres source](https://cocoindex.io/docs/ops/sources#postgres) for more details.
|
62
|
+
|
63
|
+
If you use the Postgres database hosted by Supabase, please click Connect on your project dashboard and find the URL there. Check [DatabaseConnectionSpec](https://cocoindex.io/docs/core/settings#databaseconnectionspec)
|
64
|
+
for more details.
|
65
|
+
|
66
|
+
## Simple Data Mapping / Transformation
|
67
|
+
|
68
|
+
Create a simple transformation to calculate the total price.
|
69
|
+
|
70
|
+
```python
|
71
|
+
@cocoindex.op.function()
|
72
|
+
def calculate_total_value(price: float, amount: int) -> float:
|
73
|
+
"""Compute total value for each product."""
|
74
|
+
return price * amount
|
75
|
+
```
|
76
|
+
|
77
|
+
Plug into the flow:
|
78
|
+
|
79
|
+
```python
|
80
|
+
with data_scope["products"].row() as product:
|
81
|
+
# Compute total value
|
82
|
+
product["total_value"] = flow_builder.transform(
|
83
|
+
calculate_total_value,
|
84
|
+
product["price"],
|
85
|
+
product["amount"],
|
86
|
+
)
|
87
|
+
```
|
88
|
+
|
89
|
+

|
90
|
+
|
91
|
+
### Data Transformation & AI Transformation
|
92
|
+
|
93
|
+
Create a custom function creates a `full_description` field by combining the product’s category, name, and description.
|
94
|
+
|
95
|
+
```python
|
96
|
+
@cocoindex.op.function()
|
97
|
+
def make_full_description(category: str, name: str, description: str) -> str:
|
98
|
+
"""Create a detailed product description for embedding."
|
99
|
+
return f"Category: {category}\nName: {name}\n\n{description}"
|
100
|
+
|
101
|
+
```
|
102
|
+
|
103
|
+
Embeddings often perform better with more context. By combining fields into a single text string, we ensure that the semantic meaning of the product is captured fully.
|
104
|
+
|
105
|
+
Now plug into the flow:
|
106
|
+
|
107
|
+
```python
|
108
|
+
with data_scope["products"].row() as product:
|
109
|
+
#.. other transformations
|
110
|
+
|
111
|
+
# Compute full description
|
112
|
+
product["full_description"] = flow_builder.transform(
|
113
|
+
make_full_description,
|
114
|
+
product["product_category"],
|
115
|
+
product["product_name"],
|
116
|
+
product["description"],
|
117
|
+
)
|
118
|
+
|
119
|
+
# Generate embeddings
|
120
|
+
product["embedding"] = product["full_description"].transform(
|
121
|
+
cocoindex.functions.SentenceTransformerEmbed(
|
122
|
+
model="sentence-transformers/all-MiniLM-L6-v2"
|
123
|
+
)
|
124
|
+
)
|
125
|
+
|
126
|
+
# Collect data
|
127
|
+
indexed_product.collect(
|
128
|
+
product_category=product["product_category"],
|
129
|
+
product_name=product["product_name"],
|
130
|
+
description=product["description"],
|
131
|
+
price=product["price"],
|
132
|
+
amount=product["amount"],
|
133
|
+
total_value=product["total_value"],
|
134
|
+
embedding=product["embedding"],
|
135
|
+
)
|
136
|
+
```
|
137
|
+
|
138
|
+
This takes each product row, and does the following:
|
139
|
+
|
140
|
+
1. builds a rich description.
|
141
|
+
|
142
|
+

|
143
|
+
|
144
|
+
2. turns it into an embedding
|
145
|
+
|
146
|
+

|
147
|
+
|
148
|
+
3. collects the embedding along with structured fields (category, name, price, etc.).
|
149
|
+
|
150
|
+

|
151
|
+
|
152
|
+
|
153
|
+
## Export
|
154
|
+
|
155
|
+
```python
|
156
|
+
indexed_product.export(
|
157
|
+
"output",
|
158
|
+
cocoindex.targets.Postgres(),
|
159
|
+
primary_key_fields=["product_category", "product_name"],
|
160
|
+
vector_indexes=[
|
161
|
+
cocoindex.VectorIndexDef(
|
162
|
+
field_name="embedding",
|
163
|
+
metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY,
|
164
|
+
)
|
165
|
+
],
|
166
|
+
)
|
167
|
+
```
|
168
|
+
|
169
|
+
All transformed rows are collected and exported to a new PostgreSQL table with a vector index, ready for semantic search.
|
170
|
+
|
171
|
+
|
172
|
+
## Field lineage
|
173
|
+
When the transform flow starts to getting complex, it's hard to understand how each field is derived.
|
174
|
+
CocoIndex provides a way to visualize the lineage of each field, to make it easier to trace and troubleshoot field origins and downstream dependencies.
|
175
|
+
|
176
|
+
For example, the following image shows the lineage of the `embedding` field, you can click from the final output backward all the way to the source fields, step by step.
|
177
|
+
|
178
|
+

|
179
|
+
|
180
|
+
|
181
|
+
## Running the Pipeline
|
182
|
+
|
183
|
+
1. Set up dependencies:
|
184
|
+
|
185
|
+
```bash
|
186
|
+
pip install -e .
|
187
|
+
```
|
188
|
+
|
189
|
+
2. Create the source table with sample data:
|
190
|
+
|
191
|
+
```bash
|
192
|
+
psql "postgres://cocoindex:cocoindex@localhost/cocoindex" -f ./prepare_source_data.sql
|
193
|
+
```
|
194
|
+
|
195
|
+
3. Setup tables and update the index:
|
196
|
+
|
197
|
+
```bash
|
198
|
+
cocoindex update --setup main.py
|
199
|
+
```
|
200
|
+
|
201
|
+
4. Run CocoInsight:
|
202
|
+
|
203
|
+
```bash
|
204
|
+
cocoindex server -ci main.py
|
205
|
+
```
|
206
|
+
You can walk through the project step by step in CocoInsight to see exactly how each field is constructed and what happens behind the scenes. It connects to your local CocoIndex server, with zero pipeline data retention.
|
207
|
+
|
208
|
+
|
209
|
+
## Continuous Updating
|
210
|
+
|
211
|
+
For continuous updating when the source changes, add `-L`:
|
212
|
+
|
213
|
+
```bash
|
214
|
+
cocoindex server -ci -L main.py
|
215
|
+
```
|
216
|
+
Check [live updates](https://cocoindex.io/docs/tutorials/live_updates) for more details.
|
217
|
+
|
218
|
+
## Search and Query the Index
|
219
|
+
|
220
|
+
### Query
|
221
|
+
|
222
|
+
Runs a semantic similarity search over the indexed products table, returning the top matches for a given query.
|
223
|
+
|
224
|
+
```python
|
225
|
+
def search(pool: ConnectionPool, query: str, top_k: int = 5) -> list[dict[str, Any]]:
|
226
|
+
# Get the table name, for the export target in the text_embedding_flow above.
|
227
|
+
table_name = cocoindex.utils.get_target_default_name(
|
228
|
+
postgres_product_indexing_flow, "output"
|
229
|
+
)
|
230
|
+
# Evaluate the transform flow defined above with the input query, to get the embedding.
|
231
|
+
query_vector = text_to_embedding.eval(query)
|
232
|
+
# Run the query and get the results.
|
233
|
+
with pool.connection() as conn:
|
234
|
+
register_vector(conn)
|
235
|
+
with conn.cursor(row_factory=dict_row) as cur:
|
236
|
+
cur.execute(
|
237
|
+
f"""
|
238
|
+
SELECT
|
239
|
+
product_category,
|
240
|
+
product_name,
|
241
|
+
description,
|
242
|
+
amount,
|
243
|
+
total_value,
|
244
|
+
(embedding <=> %s) AS distance
|
245
|
+
FROM {table_name}
|
246
|
+
ORDER BY distance ASC
|
247
|
+
LIMIT %s
|
248
|
+
""",
|
249
|
+
(query_vector, top_k),
|
250
|
+
)
|
251
|
+
return cur.fetchall()
|
252
|
+
```
|
253
|
+
This function
|
254
|
+
|
255
|
+
- Converts the query text into an embedding (`query_vector`).
|
256
|
+
- Compares it with each product’s stored embedding (`embedding`) using vector distance.
|
257
|
+
- Returns the closest matches, including both metadata and the similarity score (`distance`).
|
258
|
+
|
259
|
+
### Create an command-line interactive loop
|
260
|
+
|
261
|
+
```python
|
262
|
+
def _main() -> None:
|
263
|
+
# Initialize the database connection pool.
|
264
|
+
pool = ConnectionPool(os.environ["COCOINDEX_DATABASE_URL"])
|
265
|
+
# Run queries in a loop to demonstrate the query capabilities.
|
266
|
+
while True:
|
267
|
+
query = input("Enter search query (or Enter to quit): ")
|
268
|
+
if query == "":
|
269
|
+
break
|
270
|
+
# Run the query function with the database connection pool and the query.
|
271
|
+
results = search(pool, query)
|
272
|
+
print("\nSearch results:")
|
273
|
+
for result in results:
|
274
|
+
score = 1.0 - result["distance"]
|
275
|
+
print(
|
276
|
+
f"[{score:.3f}] {result['product_category']} | {result['product_name']} | {result['amount']} | {result['total_value']}"
|
277
|
+
)
|
278
|
+
print(f" {result['description']}")
|
279
|
+
print("---")
|
280
|
+
print()
|
281
|
+
|
282
|
+
if __name__ == "__main__":
|
283
|
+
load_dotenv()
|
284
|
+
cocoindex.init()
|
285
|
+
_main()
|
286
|
+
```
|
287
|
+
|
288
|
+
### Run as a Service
|
289
|
+
|
290
|
+
This [example](https://cocoindex.io/docs/examples/image_search#fast-api-application) runs as a service using Fast API.
|
291
|
+
|
292
|
+
|
293
|
+
## Why One Framework for Structured + Unstructured?
|
294
|
+
|
295
|
+
- One mental model: Treat files, APIs, and databases uniformly; AI steps are ordinary ops.
|
296
|
+
- Incremental by default: Use an ordinal column to sync only changes; no fragile glue jobs.
|
297
|
+
- Consistency: Embeddings are always derived from the exact transformed row state.
|
298
|
+
- Operational simplicity: One deployment, one lineage view, fewer moving parts.
|
299
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -4,7 +4,7 @@ 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
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"psycopg[binary,pool]",
|
10
10
|
]
|
@@ -4,7 +4,7 @@ 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
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"psycopg[binary,pool]",
|
10
10
|
]
|
@@ -4,7 +4,7 @@ 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
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"pgvector>=0.4.1",
|
10
10
|
"psycopg[binary,pool]",
|
@@ -3,7 +3,7 @@ name = "custom-output-files"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: convert markdown files to HTML files and save them to a local directory."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex>=0.2.
|
6
|
+
dependencies = ["cocoindex>=0.2.3", "markdown-it-py[linkify,plugins]"]
|
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.2.
|
6
|
+
dependencies = ["cocoindex>=0.2.3"]
|
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 Google Drive files."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"psycopg[binary,pool]",
|
10
10
|
]
|
@@ -4,11 +4,11 @@ version = "0.1.0"
|
|
4
4
|
description = "Image search examples for cocoindex: CLIP and ColPali-based embedding."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[colpali]>=0.2.
|
7
|
+
"cocoindex[colpali]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"fastapi>=0.100.0",
|
10
10
|
"torch>=2.0.0",
|
11
|
-
"transformers>=4.29.0",
|
11
|
+
"transformers>=4.29.0", # For CLIP model in main.py
|
12
12
|
"qdrant-client>=1.14.2",
|
13
13
|
"uvicorn>=0.34.3",
|
14
14
|
]
|
@@ -3,7 +3,7 @@ name = "live-updates-example"
|
|
3
3
|
version = "0.1.0"
|
4
4
|
description = "Simple example for cocoindex: perform live updates based on local markdown files."
|
5
5
|
requires-python = ">=3.11"
|
6
|
-
dependencies = ["cocoindex>=0.2.
|
6
|
+
dependencies = ["cocoindex>=0.2.3", "python-dotenv>=1.1.0"]
|
7
7
|
|
8
8
|
[tools.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.2.
|
6
|
+
dependencies = ["cocoindex>=0.2.3", "marker-pdf>=1.8.5"]
|
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 PDF files."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[colpali]>=0.2.
|
7
|
+
"cocoindex[colpali]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"pdf2image>=1.17.0",
|
10
10
|
"qdrant-client>=1.15.0",
|
@@ -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.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"marker-pdf>=1.8.5",
|
10
10
|
"psycopg[binary,pool]",
|
@@ -63,8 +63,8 @@ def postgres_product_indexing_flow(
|
|
63
63
|
),
|
64
64
|
# Optional.
|
65
65
|
ordinal_column="modified_time",
|
66
|
+
notification=cocoindex.sources.PostgresNotification(),
|
66
67
|
),
|
67
|
-
refresh_interval=datetime.timedelta(seconds=30),
|
68
68
|
)
|
69
69
|
|
70
70
|
indexed_product = data_scope.add_collector()
|
@@ -4,7 +4,7 @@ version = "0.1.0"
|
|
4
4
|
description = "Demonstrate how to use Postgres tables as the source for CocoIndex."
|
5
5
|
requires-python = ">=3.11"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex[embeddings]>=0.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"pgvector>=0.4.1",
|
10
10
|
"psycopg[binary,pool]",
|
@@ -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.2.
|
6
|
+
dependencies = ["cocoindex>=0.2.3", "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.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
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.2.
|
7
|
+
"cocoindex[embeddings]>=0.2.3",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"qdrant-client>=1.6.0",
|
10
10
|
]
|
@@ -5,6 +5,7 @@ import importlib.util
|
|
5
5
|
import os
|
6
6
|
import signal
|
7
7
|
import threading
|
8
|
+
import sys
|
8
9
|
from types import FrameType
|
9
10
|
from typing import Any, Iterable
|
10
11
|
|
@@ -19,9 +20,8 @@ from . import flow, lib, setting
|
|
19
20
|
from .setup import flow_names_with_setup
|
20
21
|
from .runtime import execution_context
|
21
22
|
from .subprocess_exec import add_user_app
|
22
|
-
from .user_app_loader import load_user_app
|
23
|
+
from .user_app_loader import load_user_app, Error as UserAppLoaderError
|
23
24
|
|
24
|
-
# Create ServerSettings lazily upon first call, as environment variables may be loaded from files, etc.
|
25
25
|
COCOINDEX_HOST = "https://cocoindex.io"
|
26
26
|
|
27
27
|
|
@@ -77,7 +77,16 @@ def _get_app_ref_from_specifier(
|
|
77
77
|
|
78
78
|
|
79
79
|
def _load_user_app(app_target: str) -> None:
|
80
|
-
|
80
|
+
if not app_target:
|
81
|
+
raise click.ClickException("Application target not provided.")
|
82
|
+
|
83
|
+
try:
|
84
|
+
load_user_app(app_target)
|
85
|
+
except UserAppLoaderError as e:
|
86
|
+
raise click.ClickException(
|
87
|
+
f"Failed to load APP_TARGET '{app_target}': {e}"
|
88
|
+
) from e
|
89
|
+
|
81
90
|
add_user_app(app_target)
|
82
91
|
|
83
92
|
|
@@ -99,7 +108,13 @@ def _initialize_cocoindex_in_process() -> None:
|
|
99
108
|
default=None,
|
100
109
|
show_default=False,
|
101
110
|
)
|
102
|
-
|
111
|
+
@click.option(
|
112
|
+
"--app-dir",
|
113
|
+
help="Load apps from the specified directory. Default to the current directory.",
|
114
|
+
default="",
|
115
|
+
show_default=True,
|
116
|
+
)
|
117
|
+
def cli(env_file: str | None = None, app_dir: str | None = "") -> None:
|
103
118
|
"""
|
104
119
|
CLI for Cocoindex.
|
105
120
|
"""
|
@@ -109,6 +124,9 @@ def cli(env_file: str | None = None) -> None:
|
|
109
124
|
loaded_env_path = os.path.abspath(dotenv_path)
|
110
125
|
click.echo(f"Loaded environment variables from: {loaded_env_path}\n", err=True)
|
111
126
|
|
127
|
+
if app_dir is not None:
|
128
|
+
sys.path.insert(0, app_dir)
|
129
|
+
|
112
130
|
try:
|
113
131
|
_initialize_cocoindex_in_process()
|
114
132
|
except Exception as e:
|