cocoindex 0.1.31__tar.gz → 0.1.33__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.31 → cocoindex-0.1.33}/Cargo.lock +7 -140
- {cocoindex-0.1.31 → cocoindex-0.1.33}/Cargo.toml +5 -3
- {cocoindex-0.1.31 → cocoindex-0.1.33}/PKG-INFO +2 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/README.md +1 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/code_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
- cocoindex-0.1.33/examples/fastapi_server_docker/.dockerignore +2 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/.env +1 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/README.md +10 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/compose.yaml +18 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/dockerfile +13 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/main.py +30 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/requirements.txt +5 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/sample_code/main.py +113 -0
- cocoindex-0.1.33/examples/fastapi_server_docker/src/cocoindex_funs.py +45 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/pyproject.toml +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/pyproject.toml +1 -1
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/.env +3 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/README.md +66 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/img/cocoinsight.png +0 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/img/neo4j.png +0 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/main.py +185 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p1.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p2.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p3.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p4.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p5.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p6.json +22 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p7.json +26 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p8.json +21 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/products/p9.json +21 -0
- cocoindex-0.1.33/examples/product_taxonomy_knowledge_graph/pyproject.toml +6 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/pyproject.toml +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding_qdrant/pyproject.toml +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/__init__.py +1 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/setting.py +1 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/lib_context.rs +0 -1
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/storages/qdrant.rs +5 -3
- cocoindex-0.1.33/src/server.rs +90 -0
- cocoindex-0.1.33/src/utils/yaml_ser.rs +731 -0
- cocoindex-0.1.31/src/server.rs +0 -80
- cocoindex-0.1.31/src/utils/yaml_ser.rs +0 -349
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.cargo/config.toml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.env.lib_debug +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/scripts/update_version.sh +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/workflows/CI.yml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/workflows/_test.yml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/workflows/docs.yml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.github/workflows/release.yml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.gitignore +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/.vscode/settings.json +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/CODE_OF_CONDUCT.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/CONTRIBUTING.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/LICENSE +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/dev/neo4j.yaml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/dev/postgres.yaml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/.gitignore +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/about/community.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/about/contributing.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/ai/llm.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/basics.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/cli.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/custom_function.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/data_example.svg +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/data_types.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/flow_def.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/flow_example.svg +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/flow_methods.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/core/initialization.mdx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/getting_started/installation.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/getting_started/markdown_files.zip +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/getting_started/overview.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/getting_started/quickstart.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/ops/functions.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/ops/sources.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docs/ops/storages.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/docusaurus.config.ts +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/package.json +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/sidebars.ts +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/src/components/HomepageFeatures/index.tsx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/src/css/custom.css +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/src/theme/Root.js +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/static/.nojekyll +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/static/img/docusaurus.png +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/static/img/favicon.ico +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/static/img/icon.svg +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/static/robots.txt +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/tsconfig.json +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/docs/yarn.lock +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/code_embedding/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/code_embedding/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/code_embedding/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/docs_to_knowledge_graph/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/.env.example +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/.gitignore +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/data/1706.03762v7.docx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/data/1810.04805v2.docx +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/gdrive_text_embedding/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/Text_Embedding.ipynb +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding_qdrant/.env +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding_qdrant/README.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding_qdrant/main.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/pyproject.toml +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/auth_registry.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/cli.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/convert.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/flow.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/functions.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/index.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/lib.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/llm.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/op.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/py.typed +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/query.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/runtime.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/setup.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/sources.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/storages.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/tests/__init__.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/tests/test_convert.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/python/cocoindex/typing.py +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/field_attrs.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/json_schema.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/schema.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/spec.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/base/value.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/builder/analyzed_flow.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/builder/analyzer.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/builder/flow_builder.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/builder/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/builder/plan.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/db_tracking.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/db_tracking_setup.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/dumper.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/evaluator.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/live_updater.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/memoization.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/query.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/row_indexer.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/source_indexer.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/execution/stats.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/lib.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/llm/anthropic.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/llm/gemini.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/llm/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/llm/ollama.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/llm/openai.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/factory_bases.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/functions/extract_by_llm.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/functions/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/functions/parse_json.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/functions/split_recursively.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/interface.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/py_factory.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/registration.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/registry.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/sdk.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/sources/google_drive.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/sources/local_file.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/sources/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/storages/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/storages/neo4j.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/storages/postgres.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/ops/storages/spec.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/prelude.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/py/convert.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/py/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/service/error.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/service/flows.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/service/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/service/search.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/settings.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/auth_registry.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/components.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/db_metadata.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/driver.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/setup/states.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/utils/db.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/utils/fingerprint.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/utils/immutable.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/utils/mod.rs +0 -0
- {cocoindex-0.1.31 → cocoindex-0.1.33}/src/utils/retriable.rs +0 -0
@@ -533,7 +533,7 @@ dependencies = [
|
|
533
533
|
|
534
534
|
[[package]]
|
535
535
|
name = "cocoindex"
|
536
|
-
version = "0.1.
|
536
|
+
version = "0.1.33"
|
537
537
|
dependencies = [
|
538
538
|
"anyhow",
|
539
539
|
"async-openai",
|
@@ -546,7 +546,6 @@ dependencies = [
|
|
546
546
|
"bytes",
|
547
547
|
"chrono",
|
548
548
|
"config",
|
549
|
-
"console-subscriber",
|
550
549
|
"const_format",
|
551
550
|
"derivative",
|
552
551
|
"env_logger",
|
@@ -649,45 +648,6 @@ dependencies = [
|
|
649
648
|
"yaml-rust2 0.8.1",
|
650
649
|
]
|
651
650
|
|
652
|
-
[[package]]
|
653
|
-
name = "console-api"
|
654
|
-
version = "0.8.1"
|
655
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
656
|
-
checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857"
|
657
|
-
dependencies = [
|
658
|
-
"futures-core",
|
659
|
-
"prost",
|
660
|
-
"prost-types",
|
661
|
-
"tonic",
|
662
|
-
"tracing-core",
|
663
|
-
]
|
664
|
-
|
665
|
-
[[package]]
|
666
|
-
name = "console-subscriber"
|
667
|
-
version = "0.4.1"
|
668
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
669
|
-
checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01"
|
670
|
-
dependencies = [
|
671
|
-
"console-api",
|
672
|
-
"crossbeam-channel",
|
673
|
-
"crossbeam-utils",
|
674
|
-
"futures-task",
|
675
|
-
"hdrhistogram",
|
676
|
-
"humantime",
|
677
|
-
"hyper-util",
|
678
|
-
"prost",
|
679
|
-
"prost-types",
|
680
|
-
"serde",
|
681
|
-
"serde_json",
|
682
|
-
"thread_local",
|
683
|
-
"tokio",
|
684
|
-
"tokio-stream",
|
685
|
-
"tonic",
|
686
|
-
"tracing",
|
687
|
-
"tracing-core",
|
688
|
-
"tracing-subscriber",
|
689
|
-
]
|
690
|
-
|
691
651
|
[[package]]
|
692
652
|
name = "const-oid"
|
693
653
|
version = "0.9.6"
|
@@ -802,15 +762,6 @@ dependencies = [
|
|
802
762
|
"cfg-if",
|
803
763
|
]
|
804
764
|
|
805
|
-
[[package]]
|
806
|
-
name = "crossbeam-channel"
|
807
|
-
version = "0.5.15"
|
808
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
809
|
-
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
810
|
-
dependencies = [
|
811
|
-
"crossbeam-utils",
|
812
|
-
]
|
813
|
-
|
814
765
|
[[package]]
|
815
766
|
name = "crossbeam-queue"
|
816
767
|
version = "0.3.12"
|
@@ -1328,8 +1279,8 @@ dependencies = [
|
|
1328
1279
|
"aho-corasick",
|
1329
1280
|
"bstr",
|
1330
1281
|
"log",
|
1331
|
-
"regex-automata
|
1332
|
-
"regex-syntax
|
1282
|
+
"regex-automata",
|
1283
|
+
"regex-syntax",
|
1333
1284
|
]
|
1334
1285
|
|
1335
1286
|
[[package]]
|
@@ -1439,19 +1390,6 @@ dependencies = [
|
|
1439
1390
|
"hashbrown 0.15.2",
|
1440
1391
|
]
|
1441
1392
|
|
1442
|
-
[[package]]
|
1443
|
-
name = "hdrhistogram"
|
1444
|
-
version = "7.5.4"
|
1445
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1446
|
-
checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
|
1447
|
-
dependencies = [
|
1448
|
-
"base64 0.21.7",
|
1449
|
-
"byteorder",
|
1450
|
-
"flate2",
|
1451
|
-
"nom",
|
1452
|
-
"num-traits",
|
1453
|
-
]
|
1454
|
-
|
1455
1393
|
[[package]]
|
1456
1394
|
name = "heck"
|
1457
1395
|
version = "0.5.0"
|
@@ -1543,12 +1481,6 @@ version = "1.0.3"
|
|
1543
1481
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1544
1482
|
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
1545
1483
|
|
1546
|
-
[[package]]
|
1547
|
-
name = "humantime"
|
1548
|
-
version = "2.2.0"
|
1549
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1550
|
-
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
|
1551
|
-
|
1552
1484
|
[[package]]
|
1553
1485
|
name = "hyper"
|
1554
1486
|
version = "1.6.0"
|
@@ -2016,15 +1948,6 @@ version = "0.4.27"
|
|
2016
1948
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2017
1949
|
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
2018
1950
|
|
2019
|
-
[[package]]
|
2020
|
-
name = "matchers"
|
2021
|
-
version = "0.1.0"
|
2022
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2023
|
-
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
|
2024
|
-
dependencies = [
|
2025
|
-
"regex-automata 0.1.10",
|
2026
|
-
]
|
2027
|
-
|
2028
1951
|
[[package]]
|
2029
1952
|
name = "matchit"
|
2030
1953
|
version = "0.7.3"
|
@@ -2822,17 +2745,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
|
2822
2745
|
dependencies = [
|
2823
2746
|
"aho-corasick",
|
2824
2747
|
"memchr",
|
2825
|
-
"regex-automata
|
2826
|
-
"regex-syntax
|
2827
|
-
]
|
2828
|
-
|
2829
|
-
[[package]]
|
2830
|
-
name = "regex-automata"
|
2831
|
-
version = "0.1.10"
|
2832
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2833
|
-
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
|
2834
|
-
dependencies = [
|
2835
|
-
"regex-syntax 0.6.29",
|
2748
|
+
"regex-automata",
|
2749
|
+
"regex-syntax",
|
2836
2750
|
]
|
2837
2751
|
|
2838
2752
|
[[package]]
|
@@ -2843,15 +2757,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
|
2843
2757
|
dependencies = [
|
2844
2758
|
"aho-corasick",
|
2845
2759
|
"memchr",
|
2846
|
-
"regex-syntax
|
2760
|
+
"regex-syntax",
|
2847
2761
|
]
|
2848
2762
|
|
2849
|
-
[[package]]
|
2850
|
-
name = "regex-syntax"
|
2851
|
-
version = "0.6.29"
|
2852
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2853
|
-
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
2854
|
-
|
2855
2763
|
[[package]]
|
2856
2764
|
name = "regex-syntax"
|
2857
2765
|
version = "0.8.5"
|
@@ -3348,15 +3256,6 @@ dependencies = [
|
|
3348
3256
|
"digest",
|
3349
3257
|
]
|
3350
3258
|
|
3351
|
-
[[package]]
|
3352
|
-
name = "sharded-slab"
|
3353
|
-
version = "0.1.7"
|
3354
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3355
|
-
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
|
3356
|
-
dependencies = [
|
3357
|
-
"lazy_static",
|
3358
|
-
]
|
3359
|
-
|
3360
3259
|
[[package]]
|
3361
3260
|
name = "shlex"
|
3362
3261
|
version = "1.3.0"
|
@@ -3768,16 +3667,6 @@ dependencies = [
|
|
3768
3667
|
"syn 2.0.101",
|
3769
3668
|
]
|
3770
3669
|
|
3771
|
-
[[package]]
|
3772
|
-
name = "thread_local"
|
3773
|
-
version = "1.1.8"
|
3774
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3775
|
-
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
|
3776
|
-
dependencies = [
|
3777
|
-
"cfg-if",
|
3778
|
-
"once_cell",
|
3779
|
-
]
|
3780
|
-
|
3781
3670
|
[[package]]
|
3782
3671
|
name = "time"
|
3783
3672
|
version = "0.3.41"
|
@@ -4078,22 +3967,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4078
3967
|
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
|
4079
3968
|
dependencies = [
|
4080
3969
|
"once_cell",
|
4081
|
-
"valuable",
|
4082
|
-
]
|
4083
|
-
|
4084
|
-
[[package]]
|
4085
|
-
name = "tracing-subscriber"
|
4086
|
-
version = "0.3.19"
|
4087
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
4088
|
-
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
|
4089
|
-
dependencies = [
|
4090
|
-
"matchers",
|
4091
|
-
"once_cell",
|
4092
|
-
"regex",
|
4093
|
-
"sharded-slab",
|
4094
|
-
"thread_local",
|
4095
|
-
"tracing",
|
4096
|
-
"tracing-core",
|
4097
3970
|
]
|
4098
3971
|
|
4099
3972
|
[[package]]
|
@@ -4104,7 +3977,7 @@ checksum = "b9ac5ea5e7f2f1700842ec071401010b9c59bf735295f6e9fa079c3dc035b167"
|
|
4104
3977
|
dependencies = [
|
4105
3978
|
"cc",
|
4106
3979
|
"regex",
|
4107
|
-
"regex-syntax
|
3980
|
+
"regex-syntax",
|
4108
3981
|
"serde_json",
|
4109
3982
|
"streaming-iterator",
|
4110
3983
|
"tree-sitter-language",
|
@@ -4476,12 +4349,6 @@ dependencies = [
|
|
4476
4349
|
"serde",
|
4477
4350
|
]
|
4478
4351
|
|
4479
|
-
[[package]]
|
4480
|
-
name = "valuable"
|
4481
|
-
version = "0.1.1"
|
4482
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
4483
|
-
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
4484
|
-
|
4485
4352
|
[[package]]
|
4486
4353
|
name = "vcpkg"
|
4487
4354
|
version = "0.2.15"
|
@@ -2,10 +2,13 @@
|
|
2
2
|
name = "cocoindex"
|
3
3
|
# Version used for local development is always higher than others to take precedence.
|
4
4
|
# Will be overridden for specific release versions.
|
5
|
-
version = "0.1.
|
5
|
+
version = "0.1.33"
|
6
6
|
edition = "2021"
|
7
7
|
|
8
|
-
|
8
|
+
[profile.release]
|
9
|
+
codegen-units = 1
|
10
|
+
lto = true
|
11
|
+
|
9
12
|
[lib]
|
10
13
|
name = "cocoindex_engine"
|
11
14
|
crate-type = ["cdylib"]
|
@@ -52,7 +55,6 @@ itertools = "0.14.0"
|
|
52
55
|
derivative = "2.2.0"
|
53
56
|
hex = "0.4.3"
|
54
57
|
schemars = "0.8.22"
|
55
|
-
console-subscriber = "0.4.1"
|
56
58
|
env_logger = "0.11.7"
|
57
59
|
reqwest = { version = "0.12.15", default-features = false, features = [
|
58
60
|
"json",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cocoindex
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.33
|
4
4
|
Requires-Dist: sentence-transformers>=3.3.1
|
5
5
|
Requires-Dist: click>=8.1.8
|
6
6
|
Requires-Dist: rich>=14.0.0
|
@@ -120,6 +120,7 @@ Go to the [examples directory](examples) to try out with any of the examples, fo
|
|
120
120
|
| [Google Drive Text Embedding](examples/gdrive_text_embedding) | Index text documents from Google Drive |
|
121
121
|
| [Docs to Knowledge Graph](examples/docs_to_knowledge_graph) | Extract relationships from Markdown documents and build a knowledge graph |
|
122
122
|
| [Embeddings to Qdrant](examples/text_embedding_qdrant) | Index documents in a Qdrant collection for semantic search |
|
123
|
+
| [FastAPI Server with Docker](examples/fastapi_server_docker) | Run the semantic search server in a Dockerized FastAPI setup |
|
123
124
|
|
124
125
|
More coming and stay tuned! If there's any specific examples you would like to see, please let us know in our [Discord community](https://discord.com/invite/zpA9S2DR7s) 🌱.
|
125
126
|
|
@@ -104,6 +104,7 @@ Go to the [examples directory](examples) to try out with any of the examples, fo
|
|
104
104
|
| [Google Drive Text Embedding](examples/gdrive_text_embedding) | Index text documents from Google Drive |
|
105
105
|
| [Docs to Knowledge Graph](examples/docs_to_knowledge_graph) | Extract relationships from Markdown documents and build a knowledge graph |
|
106
106
|
| [Embeddings to Qdrant](examples/text_embedding_qdrant) | Index documents in a Qdrant collection for semantic search |
|
107
|
+
| [FastAPI Server with Docker](examples/fastapi_server_docker) | Run the semantic search server in a Dockerized FastAPI setup |
|
107
108
|
|
108
109
|
More coming and stay tuned! If there's any specific examples you would like to see, please let us know in our [Discord community](https://discord.com/invite/zpA9S2DR7s) 🌱.
|
109
110
|
|
@@ -3,4 +3,4 @@ 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.10"
|
6
|
-
dependencies = ["cocoindex>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.32", "python-dotenv>=1.0.1"]
|
@@ -3,4 +3,4 @@ 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.10"
|
6
|
-
dependencies = ["cocoindex>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.32", "python-dotenv>=1.0.1"]
|
@@ -0,0 +1 @@
|
|
1
|
+
COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@coco_db:5432/cocoindex
|
@@ -0,0 +1,10 @@
|
|
1
|
+
## Run cocoindex docker container with a simple query endpoint via fastapi
|
2
|
+
In this example, we provide a simple docker container using docker compose to build pgvector17 along with a simple python fastapi script than runs a simple query endpoint. This example uses the code from the code embedding example.
|
3
|
+
|
4
|
+
## How to run
|
5
|
+
Edit the sample code directory to include the code you want to query over in
|
6
|
+
```sample_code/```
|
7
|
+
|
8
|
+
Edit the configuration code from the file ```src/cocoindex_funs.py``` line 23 to 25.
|
9
|
+
|
10
|
+
Finally build the docker container via: ```docker compose up``` while inside the directory of the example.
|
@@ -0,0 +1,18 @@
|
|
1
|
+
services:
|
2
|
+
coco_db:
|
3
|
+
image: pgvector/pgvector:pg17
|
4
|
+
restart: always
|
5
|
+
environment:
|
6
|
+
POSTGRES_USER: cocoindex
|
7
|
+
POSTGRES_PASSWORD: cocoindex
|
8
|
+
POSTGRES_DB: cocoindex
|
9
|
+
ports:
|
10
|
+
- "5432:5432"
|
11
|
+
|
12
|
+
coco_api:
|
13
|
+
build:
|
14
|
+
context: .
|
15
|
+
ports:
|
16
|
+
- 8080:8080
|
17
|
+
depends_on:
|
18
|
+
- coco_db
|
@@ -0,0 +1,13 @@
|
|
1
|
+
FROM python:3.11-slim
|
2
|
+
|
3
|
+
WORKDIR /app
|
4
|
+
|
5
|
+
COPY requirements.txt .
|
6
|
+
|
7
|
+
RUN pip install -r requirements.txt
|
8
|
+
|
9
|
+
COPY . .
|
10
|
+
|
11
|
+
RUN cat .env
|
12
|
+
|
13
|
+
CMD ["sh", "-c", "echo yes | python main.py cocoindex setup && python main.py cocoindex update && python main.py"]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import cocoindex
|
2
|
+
import uvicorn
|
3
|
+
|
4
|
+
from fastapi import FastAPI
|
5
|
+
from dotenv import load_dotenv
|
6
|
+
|
7
|
+
from src.cocoindex_funs import code_embedding_flow, code_to_embedding
|
8
|
+
|
9
|
+
fastapi_app = FastAPI()
|
10
|
+
|
11
|
+
query_handler = cocoindex.query.SimpleSemanticsQueryHandler(
|
12
|
+
name="SemanticsSearch",
|
13
|
+
flow=code_embedding_flow,
|
14
|
+
target_name="code_embeddings",
|
15
|
+
query_transform_flow=code_to_embedding,
|
16
|
+
default_similarity_metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY
|
17
|
+
)
|
18
|
+
|
19
|
+
@fastapi_app.get("/query")
|
20
|
+
def query_endpoint(string: str):
|
21
|
+
results, _ = query_handler.search(string, 10)
|
22
|
+
return results
|
23
|
+
|
24
|
+
@cocoindex.main_fn()
|
25
|
+
def _run():
|
26
|
+
uvicorn.run(fastapi_app, host="0.0.0.0", port=8080)
|
27
|
+
|
28
|
+
if __name__ == "__main__":
|
29
|
+
load_dotenv(override=True)
|
30
|
+
_run()
|
@@ -0,0 +1,113 @@
|
|
1
|
+
class Button:
|
2
|
+
def __init__(self, label, on_click):
|
3
|
+
self.label = label
|
4
|
+
self.on_click = on_click
|
5
|
+
|
6
|
+
def click(self):
|
7
|
+
print(f"Button '{self.label}' clicked.")
|
8
|
+
if callable(self.on_click):
|
9
|
+
self.on_click()
|
10
|
+
|
11
|
+
|
12
|
+
class ProgressBar:
|
13
|
+
def __init__(self, max_value):
|
14
|
+
self.max_value = max_value
|
15
|
+
self.current_value = 0
|
16
|
+
|
17
|
+
def update(self, value):
|
18
|
+
self.current_value = min(value, self.max_value)
|
19
|
+
self.display()
|
20
|
+
|
21
|
+
def display(self):
|
22
|
+
percent = (self.current_value / self.max_value) * 100
|
23
|
+
print(f"Progress: {percent:.2f}%")
|
24
|
+
|
25
|
+
|
26
|
+
class Slider:
|
27
|
+
def __init__(self, min_value, max_value, initial_value=None):
|
28
|
+
self.min_value = min_value
|
29
|
+
self.max_value = max_value
|
30
|
+
self.value = initial_value if initial_value is not None else min_value
|
31
|
+
|
32
|
+
def set_value(self, new_value):
|
33
|
+
if self.min_value <= new_value <= self.max_value:
|
34
|
+
self.value = new_value
|
35
|
+
print(f"Slider set to {self.value}")
|
36
|
+
else:
|
37
|
+
print("Value out of range.")
|
38
|
+
|
39
|
+
|
40
|
+
class Dropdown:
|
41
|
+
def __init__(self, options):
|
42
|
+
self.options = options
|
43
|
+
self.selected = None
|
44
|
+
|
45
|
+
def select(self, option):
|
46
|
+
if option in self.options:
|
47
|
+
self.selected = option
|
48
|
+
print(f"Dropdown selected: {option}")
|
49
|
+
else:
|
50
|
+
print("Option not available.")
|
51
|
+
|
52
|
+
|
53
|
+
class TextField:
|
54
|
+
def __init__(self, placeholder=''):
|
55
|
+
self.placeholder = placeholder
|
56
|
+
self.text = ''
|
57
|
+
|
58
|
+
def input(self, new_text):
|
59
|
+
self.text = new_text
|
60
|
+
print(f"Text field updated: {self.text}")
|
61
|
+
|
62
|
+
|
63
|
+
class Checkbox:
|
64
|
+
def __init__(self, label):
|
65
|
+
self.label = label
|
66
|
+
self.checked = False
|
67
|
+
|
68
|
+
def toggle(self):
|
69
|
+
self.checked = not self.checked
|
70
|
+
print(f"{self.label}: {'Checked' if self.checked else 'Unchecked'}")
|
71
|
+
|
72
|
+
|
73
|
+
class RadioButton:
|
74
|
+
def __init__(self, group, label):
|
75
|
+
self.group = group
|
76
|
+
self.label = label
|
77
|
+
self.selected = False
|
78
|
+
|
79
|
+
def select(self):
|
80
|
+
self.selected = True
|
81
|
+
print(f"Radio button '{self.label}' selected in group '{self.group}'.")
|
82
|
+
|
83
|
+
|
84
|
+
class ToggleSwitch:
|
85
|
+
def __init__(self, state=False):
|
86
|
+
self.state = state
|
87
|
+
|
88
|
+
def toggle(self):
|
89
|
+
self.state = not self.state
|
90
|
+
print(f"ToggleSwitch is now {'On' if self.state else 'Off'}")
|
91
|
+
|
92
|
+
|
93
|
+
class Tooltip:
|
94
|
+
def __init__(self, text):
|
95
|
+
self.text = text
|
96
|
+
|
97
|
+
def show(self):
|
98
|
+
print(f"Tooltip: {self.text}")
|
99
|
+
|
100
|
+
|
101
|
+
class Modal:
|
102
|
+
def __init__(self, content):
|
103
|
+
self.content = content
|
104
|
+
self.visible = False
|
105
|
+
|
106
|
+
def open(self):
|
107
|
+
self.visible = True
|
108
|
+
print("Modal opened.")
|
109
|
+
print(f"Content: {self.content}")
|
110
|
+
|
111
|
+
def close(self):
|
112
|
+
self.visible = False
|
113
|
+
print("Modal closed.")
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import cocoindex
|
2
|
+
import os
|
3
|
+
|
4
|
+
@cocoindex.op.function()
|
5
|
+
def extract_extension(filename: str) -> str:
|
6
|
+
"""Extract the extension of a filename."""
|
7
|
+
return os.path.splitext(filename)[1]
|
8
|
+
|
9
|
+
def code_to_embedding(text: cocoindex.DataSlice) -> cocoindex.DataSlice:
|
10
|
+
"""
|
11
|
+
Embed the text using a SentenceTransformer model.
|
12
|
+
"""
|
13
|
+
return text.transform(
|
14
|
+
cocoindex.functions.SentenceTransformerEmbed(
|
15
|
+
model="sentence-transformers/all-MiniLM-L6-v2"))
|
16
|
+
|
17
|
+
@cocoindex.flow_def(name="CodeEmbedding")
|
18
|
+
def code_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope):
|
19
|
+
"""
|
20
|
+
Define an example flow that embeds files into a vector database.
|
21
|
+
"""
|
22
|
+
data_scope["files"] = flow_builder.add_source(
|
23
|
+
cocoindex.sources.LocalFile(path="sample_code",
|
24
|
+
included_patterns=["*.py", "*.rs", "*.toml", "*.md", "*.mdx", "*.ts", "*.tsx"],
|
25
|
+
excluded_patterns=[".*", "target", "**/node_modules"]))
|
26
|
+
code_embeddings = data_scope.add_collector()
|
27
|
+
|
28
|
+
with data_scope["files"].row() as file:
|
29
|
+
file["extension"] = file["filename"].transform(extract_extension)
|
30
|
+
file["chunks"] = file["content"].transform(
|
31
|
+
cocoindex.functions.SplitRecursively(),
|
32
|
+
language=file["extension"], chunk_size=1000, chunk_overlap=300)
|
33
|
+
with file["chunks"].row() as chunk:
|
34
|
+
chunk["embedding"] = chunk["text"].call(code_to_embedding)
|
35
|
+
code_embeddings.collect(filename=file["filename"], location=chunk["location"],
|
36
|
+
code=chunk["text"], embedding=chunk["embedding"])
|
37
|
+
|
38
|
+
code_embeddings.export(
|
39
|
+
"code_embeddings",
|
40
|
+
cocoindex.storages.Postgres(),
|
41
|
+
primary_key_fields=["filename", "location"],
|
42
|
+
vector_indexes=[
|
43
|
+
cocoindex.VectorIndexDef(
|
44
|
+
field_name="embedding",
|
45
|
+
metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)])
|
@@ -3,4 +3,4 @@ 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>=0.1.
|
6
|
+
dependencies = ["cocoindex>=0.1.32", "python-dotenv>=1.0.1"]
|
@@ -4,7 +4,7 @@ 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.10"
|
6
6
|
dependencies = [
|
7
|
-
"cocoindex>=0.1.
|
7
|
+
"cocoindex>=0.1.32",
|
8
8
|
"python-dotenv>=1.0.1",
|
9
9
|
"marker-pdf>=1.5.2",
|
10
10
|
]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Build Real-Time Product Recommendation based on LLM Taxonomy Extraction and Knowledge Graph
|
2
|
+
|
3
|
+
We will process a list of products and use LLM to extract the taxonomy and complimentary taxonomy for each product.
|
4
|
+
|
5
|
+
Please drop [CocoIndex on Github](https://github.com/cocoindex-io/cocoindex) a star to support us and stay tuned for more updates. Thank you so much 🥥🤗. [](https://github.com/cocoindex-io/cocoindex)
|
6
|
+
|
7
|
+
|
8
|
+
## Prerequisite
|
9
|
+
* [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
|
10
|
+
* [Install Neo4j](https://cocoindex.io/docs/ops/storages#neo4j) if you don't have one.
|
11
|
+
* [Configure your OpenAI API key](https://cocoindex.io/docs/ai/llm#openai).
|
12
|
+
|
13
|
+
## Documentation
|
14
|
+
You can read the official CocoIndex Documentation for Property Graph Targets [here](https://cocoindex.io/docs/ops/storages#property-graph-targets).
|
15
|
+
|
16
|
+
## Run
|
17
|
+
|
18
|
+
### Build the index
|
19
|
+
|
20
|
+
Install dependencies:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
pip install -e .
|
24
|
+
```
|
25
|
+
|
26
|
+
Setup:
|
27
|
+
|
28
|
+
```bash
|
29
|
+
python main.py cocoindex setup
|
30
|
+
```
|
31
|
+
|
32
|
+
Update index:
|
33
|
+
|
34
|
+
```bash
|
35
|
+
python main.py cocoindex update
|
36
|
+
```
|
37
|
+
|
38
|
+
### Browse the knowledge graph
|
39
|
+
|
40
|
+
After the knowledge graph is built, you can explore the knowledge graph you built in Neo4j Browser.
|
41
|
+
|
42
|
+
For the dev enviroment, you can connect neo4j browser using credentials:
|
43
|
+
- username: `neo4j`
|
44
|
+
- password: `cocoindex`
|
45
|
+
which is pre-configured in the our docker compose [config.yaml](https://raw.githubusercontent.com/cocoindex-io/cocoindex/refs/heads/main/dev/neo4j.yaml).
|
46
|
+
|
47
|
+
You can open it at [http://localhost:7474](http://localhost:7474), and run the following Cypher query to get all relationships:
|
48
|
+
|
49
|
+
```cypher
|
50
|
+
MATCH p=()-->() RETURN p
|
51
|
+
```
|
52
|
+

|
53
|
+
|
54
|
+
## CocoInsight
|
55
|
+
I used CocoInsight (Free beta now) to troubleshoot the index generation and understand the data lineage of the pipeline.
|
56
|
+
It just connects to your local CocoIndex server, with Zero pipeline data retention. Run following command to start CocoInsight:
|
57
|
+
|
58
|
+
```bash
|
59
|
+
python main.py cocoindex server -ci
|
60
|
+
```
|
61
|
+
|
62
|
+
And then open the url https://cocoindex.io/cocoinsight.
|
63
|
+
|
64
|
+

|
65
|
+
|
66
|
+
|
Binary file
|