cocoindex 0.2.0__tar.gz → 0.2.2__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.
Files changed (407) hide show
  1. {cocoindex-0.2.0 → cocoindex-0.2.2}/Cargo.lock +1 -1
  2. {cocoindex-0.2.0 → cocoindex-0.2.2}/Cargo.toml +1 -1
  3. {cocoindex-0.2.0 → cocoindex-0.2.2}/PKG-INFO +2 -2
  4. {cocoindex-0.2.0 → cocoindex-0.2.2}/README.md +1 -1
  5. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/settings.mdx +4 -4
  6. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/academic_papers_index.md +6 -4
  7. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/codebase_index.md +19 -12
  8. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/custom_targets.md +7 -5
  9. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/docs_to_knowledge_graph.md +8 -6
  10. cocoindex-0.2.2/docs/docs/examples/examples/image_search.md +270 -0
  11. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/manual_extraction.md +9 -7
  12. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/multi_format_index.md +29 -26
  13. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/patient_form_extraction.md +8 -6
  14. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/photo_search.md +3 -1
  15. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/product_recommendation.md +7 -5
  16. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/examples/simple_vector_index.md +2 -1
  17. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/getting_started/installation.md +8 -1
  18. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/ops/targets.md +7 -0
  19. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/components/GitHubButton/index.tsx +3 -3
  20. cocoindex-0.2.2/docs/static/img/examples/codebase_index/chunk.png +0 -0
  21. cocoindex-0.2.2/docs/static/img/examples/codebase_index/cover.png +0 -0
  22. cocoindex-0.2.2/docs/static/img/examples/image_search/cover.png +0 -0
  23. cocoindex-0.2.2/docs/static/img/examples/image_search/embedding.png +0 -0
  24. cocoindex-0.2.2/docs/static/img/examples/image_search/flow.png +0 -0
  25. cocoindex-0.2.2/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
  26. cocoindex-0.2.2/docs/static/img/examples/image_search/result.png +0 -0
  27. cocoindex-0.2.2/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
  28. cocoindex-0.2.2/docs/static/img/examples/multi_format_index/cover.png +0 -0
  29. cocoindex-0.2.2/docs/static/img/examples/multi_format_index/embed.png +0 -0
  30. cocoindex-0.2.2/docs/static/img/examples/multi_format_index/flow.png +0 -0
  31. cocoindex-0.2.2/docs/static/img/examples/multi_format_index/pages.png +0 -0
  32. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/yarn.lock +159 -191
  33. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/amazon_s3_embedding/pyproject.toml +1 -1
  34. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/azure_blob_embedding/pyproject.toml +1 -1
  35. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/code_embedding/pyproject.toml +1 -1
  36. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/pyproject.toml +1 -1
  37. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
  38. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/pyproject.toml +1 -1
  39. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/requirements.txt +1 -1
  40. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/gdrive_text_embedding/pyproject.toml +1 -1
  41. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/pyproject.toml +1 -1
  42. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/pyproject.toml +1 -1
  43. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/pyproject.toml +1 -1
  44. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/pyproject.toml +1 -1
  45. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/pyproject.toml +1 -1
  46. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/pyproject.toml +1 -1
  47. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/pyproject.toml +1 -1
  48. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/postgres_source/README.md +4 -5
  49. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/postgres_source/main.py +1 -53
  50. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/postgres_source/prepare_source_data.sql +1 -32
  51. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/postgres_source/pyproject.toml +1 -1
  52. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/pyproject.toml +1 -1
  53. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/pyproject.toml +1 -1
  54. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding_qdrant/pyproject.toml +1 -1
  55. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/flow.py +45 -22
  56. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/setting.py +2 -2
  57. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/subprocess_exec.py +15 -1
  58. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/test_transform_flow.py +31 -0
  59. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/row_indexer.rs +3 -5
  60. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/stats.rs +17 -1
  61. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/lib_context.rs +3 -3
  62. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/postgres.rs +16 -10
  63. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/mod.rs +1 -0
  64. cocoindex-0.2.2/src/utils/str_sanitize.rs +597 -0
  65. cocoindex-0.2.0/docs/docs/examples/examples/image_search.md +0 -214
  66. cocoindex-0.2.0/docs/static/img/examples/codebase_index/chunk.png +0 -0
  67. cocoindex-0.2.0/docs/static/img/examples/codebase_index/cover.png +0 -0
  68. cocoindex-0.2.0/docs/static/img/examples/codebase_index/usecase.png +0 -0
  69. cocoindex-0.2.0/docs/static/img/examples/image_search/cover.png +0 -0
  70. cocoindex-0.2.0/docs/static/img/examples/multi_format_index/cover.png +0 -0
  71. cocoindex-0.2.0/examples/postgres_source/.env.example +0 -22
  72. {cocoindex-0.2.0 → cocoindex-0.2.2}/.cargo/config.toml +0 -0
  73. {cocoindex-0.2.0 → cocoindex-0.2.2}/.env.lib_debug +0 -0
  74. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  75. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  76. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/scripts/update_version.sh +0 -0
  77. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/CI.yml +0 -0
  78. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/_doc_release.yml +0 -0
  79. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/_test.yml +0 -0
  80. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/docs.yml +0 -0
  81. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/format.yml +0 -0
  82. {cocoindex-0.2.0 → cocoindex-0.2.2}/.github/workflows/release.yml +0 -0
  83. {cocoindex-0.2.0 → cocoindex-0.2.2}/.gitignore +0 -0
  84. {cocoindex-0.2.0 → cocoindex-0.2.2}/.pre-commit-config.yaml +0 -0
  85. {cocoindex-0.2.0 → cocoindex-0.2.2}/CODE_OF_CONDUCT.md +0 -0
  86. {cocoindex-0.2.0 → cocoindex-0.2.2}/CONTRIBUTING.md +0 -0
  87. {cocoindex-0.2.0 → cocoindex-0.2.2}/LICENSE +0 -0
  88. {cocoindex-0.2.0 → cocoindex-0.2.2}/dev/neo4j.yaml +0 -0
  89. {cocoindex-0.2.0 → cocoindex-0.2.2}/dev/postgres.yaml +0 -0
  90. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/.gitignore +0 -0
  91. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/README.md +0 -0
  92. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/about/community.md +0 -0
  93. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/ai/llm.mdx +0 -0
  94. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/contributing/guide.md +0 -0
  95. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/contributing/new_built_in_target.mdx +0 -0
  96. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/contributing/setup_dev_environment.md +0 -0
  97. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/basics.md +0 -0
  98. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/cli.mdx +0 -0
  99. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/data_example.svg +0 -0
  100. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/data_types.mdx +0 -0
  101. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/flow_def.mdx +0 -0
  102. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/flow_example.svg +0 -0
  103. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/core/flow_methods.mdx +0 -0
  104. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/custom_ops/custom_functions.mdx +0 -0
  105. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/custom_ops/custom_targets.mdx +0 -0
  106. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/examples/index.md +0 -0
  107. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/getting_started/markdown_files.zip +0 -0
  108. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/getting_started/overview.md +0 -0
  109. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/getting_started/quickstart.md +0 -0
  110. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/ops/functions.md +0 -0
  111. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/ops/sources.md +0 -0
  112. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/query.mdx +0 -0
  113. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/tutorials/live_updates.md +0 -0
  114. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
  115. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/docusaurus.config.ts +0 -0
  116. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/package.json +0 -0
  117. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/sidebars.ts +0 -0
  118. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/css/custom.css +0 -0
  119. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/theme/DocCard/index.tsx +0 -0
  120. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/theme/DocCard/styles.module.css +0 -0
  121. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/theme/DocCardList/index.tsx +0 -0
  122. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/theme/DocCardList/styles.module.css +0 -0
  123. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/src/theme/Root.js +0 -0
  124. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/.nojekyll +0 -0
  125. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/docusaurus.png +0 -0
  126. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
  127. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
  128. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
  129. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
  130. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
  131. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
  132. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
  133. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/codebase_index/flow.png +0 -0
  134. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/custom_targets/convert.png +0 -0
  135. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/custom_targets/cover.png +0 -0
  136. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
  137. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
  138. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
  139. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
  140. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
  141. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
  142. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
  143. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
  144. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/manual_extraction/cover.png +0 -0
  145. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
  146. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/manual_extraction/flow.png +0 -0
  147. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/manual_extraction/summary.png +0 -0
  148. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
  149. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
  150. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
  151. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
  152. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
  153. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/photo_search/cover.png +0 -0
  154. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/photo_search/extraction.png +0 -0
  155. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/photo_search/flow.png +0 -0
  156. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/cover.png +0 -0
  157. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
  158. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
  159. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
  160. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
  161. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
  162. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
  163. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
  164. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
  165. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
  166. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
  167. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
  168. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/simple_vector_index/embed.png +0 -0
  169. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
  170. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/favicon.ico +0 -0
  171. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/icon.svg +0 -0
  172. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/img/incremental-etl.gif +0 -0
  173. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/static/robots.txt +0 -0
  174. {cocoindex-0.2.0 → cocoindex-0.2.2}/docs/tsconfig.json +0 -0
  175. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/amazon_s3_embedding/.env.example +0 -0
  176. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/amazon_s3_embedding/.gitignore +0 -0
  177. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/amazon_s3_embedding/README.md +0 -0
  178. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/amazon_s3_embedding/main.py +0 -0
  179. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/azure_blob_embedding/.env.example +0 -0
  180. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/azure_blob_embedding/.gitignore +0 -0
  181. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/azure_blob_embedding/README.md +0 -0
  182. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/azure_blob_embedding/main.py +0 -0
  183. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/code_embedding/.env +0 -0
  184. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/code_embedding/README.md +0 -0
  185. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/code_embedding/main.py +0 -0
  186. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/.env +0 -0
  187. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/.gitignore +0 -0
  188. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/README.md +0 -0
  189. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/data/bizarre_animals.md +0 -0
  190. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/data/chunk_norris.md +0 -0
  191. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/custom_output_files/main.py +0 -0
  192. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/docs_to_knowledge_graph/.env +0 -0
  193. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/docs_to_knowledge_graph/README.md +0 -0
  194. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/docs_to_knowledge_graph/main.py +0 -0
  195. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/.env +0 -0
  196. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/README.md +0 -0
  197. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
  198. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
  199. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
  200. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/images/einplanck3.jpg +0 -0
  201. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/face_recognition/main.py +0 -0
  202. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/.dockerignore +0 -0
  203. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/.env +0 -0
  204. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/README.md +0 -0
  205. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/compose.yaml +0 -0
  206. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/dockerfile +0 -0
  207. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  208. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/fastapi_server_docker/main.py +0 -0
  209. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/gdrive_text_embedding/.env.example +0 -0
  210. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/gdrive_text_embedding/.gitignore +0 -0
  211. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/gdrive_text_embedding/README.md +0 -0
  212. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/gdrive_text_embedding/main.py +0 -0
  213. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/.env +0 -0
  214. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/README.md +0 -0
  215. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/colpali_main.py +0 -0
  216. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/.gitignore +0 -0
  217. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/index.html +0 -0
  218. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/package-lock.json +0 -0
  219. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/package.json +0 -0
  220. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/src/App.jsx +0 -0
  221. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/src/main.jsx +0 -0
  222. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/src/style.css +0 -0
  223. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/frontend/vite.config.js +0 -0
  224. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/img/cat1.jpeg +0 -0
  225. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/img/dog1.jpeg +0 -0
  226. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/img/elephant1.jpg +0 -0
  227. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/img/giraffe.jpg +0 -0
  228. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/image_search/main.py +0 -0
  229. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/.env +0 -0
  230. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/README.md +0 -0
  231. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/data/bizarre_animals.md +0 -0
  232. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/data/chunk_norris.md +0 -0
  233. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/live_updates/main.py +0 -0
  234. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/.env +0 -0
  235. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/README.md +0 -0
  236. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/main.py +0 -0
  237. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  238. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  239. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  240. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  241. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/.env +0 -0
  242. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/README.md +0 -0
  243. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/main.py +0 -0
  244. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
  245. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
  246. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
  247. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
  248. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
  249. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
  250. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
  251. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
  252. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/.env.example +0 -0
  253. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/.gitignore +0 -0
  254. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/README.md +0 -0
  255. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/main.py +0 -0
  256. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
  257. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
  258. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
  259. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
  260. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/.env.example +0 -0
  261. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/README.md +0 -0
  262. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/data/README.md +0 -0
  263. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  264. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  265. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  266. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  267. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/patient_intake_extraction/main.py +0 -0
  268. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/.env +0 -0
  269. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/README.md +0 -0
  270. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/main.py +0 -0
  271. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  272. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  273. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  274. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/postgres_source/.env +0 -0
  275. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/.env.example +0 -0
  276. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/README.md +0 -0
  277. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/img/cocoinsight.png +0 -0
  278. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/img/neo4j.png +0 -0
  279. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/main.py +0 -0
  280. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p1.json +0 -0
  281. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p2.json +0 -0
  282. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p3.json +0 -0
  283. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p4.json +0 -0
  284. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p5.json +0 -0
  285. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p6.json +0 -0
  286. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p7.json +0 -0
  287. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p8.json +0 -0
  288. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/product_recommendation/products/p9.json +0 -0
  289. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/.env +0 -0
  290. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/README.md +0 -0
  291. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  292. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/main.py +0 -0
  293. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  294. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  295. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  296. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding_qdrant/.env +0 -0
  297. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding_qdrant/README.md +0 -0
  298. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding_qdrant/main.py +0 -0
  299. {cocoindex-0.2.0 → cocoindex-0.2.2}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  300. {cocoindex-0.2.0 → cocoindex-0.2.2}/pyproject.toml +0 -0
  301. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/__init__.py +0 -0
  302. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/auth_registry.py +0 -0
  303. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/cli.py +0 -0
  304. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/convert.py +0 -0
  305. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/functions.py +0 -0
  306. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/index.py +0 -0
  307. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/lib.py +0 -0
  308. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/llm.py +0 -0
  309. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/op.py +0 -0
  310. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/py.typed +0 -0
  311. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/runtime.py +0 -0
  312. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/setup.py +0 -0
  313. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/sources.py +0 -0
  314. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/targets.py +0 -0
  315. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/__init__.py +0 -0
  316. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/test_convert.py +0 -0
  317. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/test_optional_database.py +0 -0
  318. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/test_typing.py +0 -0
  319. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/tests/test_validation.py +0 -0
  320. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/typing.py +0 -0
  321. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/user_app_loader.py +0 -0
  322. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/utils.py +0 -0
  323. {cocoindex-0.2.0 → cocoindex-0.2.2}/python/cocoindex/validation.py +0 -0
  324. {cocoindex-0.2.0 → cocoindex-0.2.2}/ruff.toml +0 -0
  325. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/duration.rs +0 -0
  326. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/field_attrs.rs +0 -0
  327. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/json_schema.rs +0 -0
  328. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/mod.rs +0 -0
  329. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/schema.rs +0 -0
  330. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/spec.rs +0 -0
  331. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/base/value.rs +0 -0
  332. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/analyzed_flow.rs +0 -0
  333. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/analyzer.rs +0 -0
  334. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/exec_ctx.rs +0 -0
  335. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/flow_builder.rs +0 -0
  336. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/mod.rs +0 -0
  337. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/builder/plan.rs +0 -0
  338. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/db_tracking.rs +0 -0
  339. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/db_tracking_setup.rs +0 -0
  340. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/dumper.rs +0 -0
  341. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/evaluator.rs +0 -0
  342. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/indexing_status.rs +0 -0
  343. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/live_updater.rs +0 -0
  344. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/memoization.rs +0 -0
  345. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/mod.rs +0 -0
  346. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/execution/source_indexer.rs +0 -0
  347. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/lib.rs +0 -0
  348. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/anthropic.rs +0 -0
  349. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/gemini.rs +0 -0
  350. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/litellm.rs +0 -0
  351. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/mod.rs +0 -0
  352. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/ollama.rs +0 -0
  353. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/openai.rs +0 -0
  354. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/openrouter.rs +0 -0
  355. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/vllm.rs +0 -0
  356. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/llm/voyage.rs +0 -0
  357. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/factory_bases.rs +0 -0
  358. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/embed_text.rs +0 -0
  359. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/extract_by_llm.rs +0 -0
  360. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/mod.rs +0 -0
  361. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/parse_json.rs +0 -0
  362. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/split_recursively.rs +0 -0
  363. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/functions/test_utils.rs +0 -0
  364. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/interface.rs +0 -0
  365. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/mod.rs +0 -0
  366. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/py_factory.rs +0 -0
  367. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/registration.rs +0 -0
  368. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/registry.rs +0 -0
  369. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sdk.rs +0 -0
  370. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/shared/mod.rs +0 -0
  371. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/shared/postgres.rs +0 -0
  372. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/amazon_s3.rs +0 -0
  373. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/azure_blob.rs +0 -0
  374. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/google_drive.rs +0 -0
  375. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/local_file.rs +0 -0
  376. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/mod.rs +0 -0
  377. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/postgres.rs +0 -0
  378. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/shared/mod.rs +0 -0
  379. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/sources/shared/pattern_matcher.rs +0 -0
  380. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/kuzu.rs +0 -0
  381. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/mod.rs +0 -0
  382. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/neo4j.rs +0 -0
  383. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/qdrant.rs +0 -0
  384. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/shared/mod.rs +0 -0
  385. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/shared/property_graph.rs +0 -0
  386. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/ops/targets/shared/table_columns.rs +0 -0
  387. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/prelude.rs +0 -0
  388. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/py/convert.rs +0 -0
  389. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/py/mod.rs +0 -0
  390. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/server.rs +0 -0
  391. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/service/error.rs +0 -0
  392. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/service/flows.rs +0 -0
  393. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/service/mod.rs +0 -0
  394. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/settings.rs +0 -0
  395. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/auth_registry.rs +0 -0
  396. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/components.rs +0 -0
  397. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/db_metadata.rs +0 -0
  398. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/driver.rs +0 -0
  399. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/flow_features.rs +0 -0
  400. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/mod.rs +0 -0
  401. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/setup/states.rs +0 -0
  402. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/concur_control.rs +0 -0
  403. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/db.rs +0 -0
  404. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/fingerprint.rs +0 -0
  405. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/immutable.rs +0 -0
  406. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/retryable.rs +0 -0
  407. {cocoindex-0.2.0 → cocoindex-0.2.2}/src/utils/yaml_ser.rs +0 -0
@@ -1283,7 +1283,7 @@ dependencies = [
1283
1283
 
1284
1284
  [[package]]
1285
1285
  name = "cocoindex"
1286
- version = "0.2.0"
1286
+ version = "0.2.2"
1287
1287
  dependencies = [
1288
1288
  "anyhow",
1289
1289
  "async-openai",
@@ -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.0"
5
+ version = "0.2.2"
6
6
  edition = "2024"
7
7
  rust-version = "1.88"
8
8
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Requires-Dist: click>=8.1.8
5
5
  Requires-Dist: rich>=14.0.0
6
6
  Requires-Dist: python-dotenv>=1.1.0
@@ -84,7 +84,7 @@ CocoIndex makes it effortless to transform data with AI, and keep source data an
84
84
  </br>
85
85
 
86
86
  <p align="center">
87
- <img width="4187" height="1883" alt="CocoIndex Features" src="https://github.com/user-attachments/assets/6147673f-0daf-4313-a0c7-7c4205ba2e31" />
87
+ <img alt="CocoIndex Features" src="https://cocoindex.io/images/venn2.svg" />
88
88
  </p>
89
89
 
90
90
  </br>
@@ -55,7 +55,7 @@ CocoIndex makes it effortless to transform data with AI, and keep source data an
55
55
  </br>
56
56
 
57
57
  <p align="center">
58
- <img width="4187" height="1883" alt="CocoIndex Features" src="https://github.com/user-attachments/assets/6147673f-0daf-4313-a0c7-7c4205ba2e31" />
58
+ <img alt="CocoIndex Features" src="https://cocoindex.io/images/venn2.svg" />
59
59
  </p>
60
60
 
61
61
  </br>
@@ -96,11 +96,11 @@ If not set, all flows are in a default unnamed namespace.
96
96
 
97
97
  :::
98
98
 
99
- * `max_connections` (type: `int`, default: `64`): The maximum number of connections to keep in the pool.
99
+ * `max_connections` (type: `int`, default: `25`): The maximum number of connections to keep in the pool.
100
100
 
101
101
  *Environment variable* for `Settings.database.max_connections`: `COCOINDEX_DATABASE_MAX_CONNECTIONS`
102
102
 
103
- * `min_connections` (type: `int`, default: `16`): The minimum number of connections to keep in the pool.
103
+ * `min_connections` (type: `int`, default: `5`): The minimum number of connections to keep in the pool.
104
104
 
105
105
  *Environment variable* for `Settings.database.min_connections`: `COCOINDEX_DATABASE_MIN_CONNECTIONS`
106
106
 
@@ -134,7 +134,7 @@ This is the list of environment variables, each of which has a corresponding fie
134
134
  | `COCOINDEX_DATABASE_URL` | `database.url` | Yes |
135
135
  | `COCOINDEX_DATABASE_USER` | `database.user` | No |
136
136
  | `COCOINDEX_DATABASE_PASSWORD` | `database.password` | No |
137
- | `COCOINDEX_DATABASE_MAX_CONNECTIONS` | `database.max_connections` | No (default: `64`) |
138
- | `COCOINDEX_DATABASE_MIN_CONNECTIONS` | `database.min_connections` | No (default: `16`) |
137
+ | `COCOINDEX_DATABASE_MAX_CONNECTIONS` | `database.max_connections` | No (default: `25`) |
138
+ | `COCOINDEX_DATABASE_MIN_CONNECTIONS` | `database.min_connections` | No (default: `5`) |
139
139
  | `COCOINDEX_SOURCE_MAX_INFLIGHT_ROWS` | `global_execution_options.source_max_inflight_rows` | No (default: `1024`) |
140
140
  | `COCOINDEX_SOURCE_MAX_INFLIGHT_BYTES` | `global_execution_options.source_max_inflight_bytes` | No |
@@ -12,7 +12,9 @@ tags: [vector-index, metadata]
12
12
 
13
13
  import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
14
14
 
15
- <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/paper_metadata"/>
15
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/paper_metadata" margin="0 0 24px 0" />
16
+
17
+ ![Academic Papers Index](/img/examples/academic_papers_index/cover.png)
16
18
 
17
19
  ## What we will achieve
18
20
 
@@ -45,7 +47,7 @@ to answer questions like "Give me all the papers by Jeff Dean."
45
47
  CocoIndex uses PostgreSQL internally for incremental processing.
46
48
  - [Configure your OpenAI API key](https://cocoindex.io/docs/ai/llm#openai). Alternatively, we have native support for Gemini, Ollama, LiteLLM. You can choose your favorite LLM provider and work completely on-premises.
47
49
 
48
- <DocumentationButton href="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
50
+ <DocumentationButton url="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
49
51
 
50
52
  ## Import the Papers
51
53
 
@@ -61,7 +63,7 @@ def paper_metadata_flow(
61
63
  ```
62
64
 
63
65
  `flow_builder.add_source` will create a table with sub fields (`filename`, `content`).
64
- <DocumentationButton href="https://cocoindex.io/docs/ops/sources" text="Sources" margin="0 0 16px 0" />
66
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Sources" margin="0 0 16px 0" />
65
67
 
66
68
  ## Extract and collect metadata
67
69
 
@@ -321,7 +323,7 @@ metadata_embeddings.export(
321
323
 
322
324
  In this example we use PGVector as embedding store. With CocoIndex, you can do one line switch on other supported Vector databases.
323
325
 
324
- <DocumentationButton href="https://cocoindex.io/docs/ops/targets#entry-oriented-targets" text="Entry Oriented Targets" margin="0 0 16px 0" />
326
+ <DocumentationButton url="https://cocoindex.io/docs/ops/targets#entry-oriented-targets" text="Entry Oriented Targets" margin="0 0 16px 0" />
325
327
 
326
328
  ## Query the index
327
329
 
@@ -12,23 +12,23 @@ tags: [vector-index, codebase]
12
12
 
13
13
  import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
14
14
 
15
- <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/code_embedding"/>
16
- <YouTubeButton url="https://youtu.be/G3WstvhHO24?si=ndYfM0XRs03_hVPR" />
15
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/code_embedding" margin="0 0 24px 0" />
16
+ <YouTubeButton url="https://youtu.be/G3WstvhHO24?si=ndYfM0XRs03_hVPR" margin="0 0 24px 0" />
17
+
18
+ ![Codebase Index](/img/examples/codebase_index/cover.png)
17
19
 
18
20
  ## Overview
19
21
  In this tutorial, we will build codebase index. [CocoIndex](https://github.com/cocoindex-io/cocoindex) provides built-in support for codebase chunking, with native Tree-sitter support. It works with large codebases, and can be updated in near real-time with incremental processing - only reprocess what's changed.
20
22
 
21
23
  ## Use Cases
22
- A wide range of applications can be built with an effective codebase index that is always up-to-date. Some examples include:
23
-
24
- ![Use case illustration](/img/examples/codebase_index/usecase.png)
24
+ A wide range of applications can be built with an effective codebase index that is always up-to-date.
25
25
 
26
26
  - Semantic code context for AI coding agents like Claude, Codex, Gemini CLI.
27
27
  - MCP for code editors such as Cursor, Windsurf, and VSCode.
28
28
  - Context-aware code search applications—semantic code search, natural language code retrieval.
29
29
  - Context for code review agents—AI code review, automated code analysis, code quality checks, pull request summarization.
30
30
  - Automated code refactoring, large-scale code migration.
31
- - Enhance SRE workflows: enable rapid root cause analysis, incident response, and change impact assessment by indexing infrastructure-as-code, deployment scripts, and config files for semantic search and lineage tracking.
31
+ - SRE workflows: enable rapid root cause analysis, incident response, and change impact assessment by indexing infrastructure-as-code, deployment scripts, and config files for semantic search and lineage tracking.
32
32
  - Automatically generate design documentation from code—keep design docs up-to-date.
33
33
 
34
34
  ## Flow Overview
@@ -67,7 +67,7 @@ def code_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoind
67
67
  - Exclude files and directories starting `.`, `target` in the root and `node_modules` under any directory.
68
68
 
69
69
  `flow_builder.add_source` will create a table with sub fields (`filename`, `content`).
70
- <DocumentationButton href="https://cocoindex.io/docs/ops/sources" text="Sources" />
70
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Sources" />
71
71
 
72
72
 
73
73
  ## Process each file and collect the information
@@ -84,7 +84,7 @@ def extract_extension(filename: str) -> str:
84
84
  return os.path.splitext(filename)[1]
85
85
  ```
86
86
 
87
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
87
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
88
88
 
89
89
  ### Split the file into chunks
90
90
  We use the `SplitRecursively` function to split the file into chunks. `SplitRecursively` is CocoIndex building block, with native integration with Tree-sitter. You need to pass in the language to the `language` parameter if you are processing code.
@@ -97,7 +97,7 @@ with data_scope["files"].row() as file:
97
97
  cocoindex.functions.SplitRecursively(),
98
98
  language=file["extension"], chunk_size=1000, chunk_overlap=300)
99
99
  ```
100
- <DocumentationButton href="https://cocoindex.io/docs/ops/functions#splitrecursively" text="SplitRecursively" margin="0 0 16px 0" />
100
+ <DocumentationButton url="https://cocoindex.io/docs/ops/functions#splitrecursively" text="SplitRecursively" margin="0 0 16px 0" />
101
101
 
102
102
  ![SplitRecursively](/img/examples/codebase_index/chunk.png)
103
103
 
@@ -112,13 +112,13 @@ def code_to_embedding(text: cocoindex.DataSlice[str]) -> cocoindex.DataSlice[lis
112
112
  model="sentence-transformers/all-MiniLM-L6-v2"))
113
113
  ```
114
114
 
115
- <DocumentationButton href="https://cocoindex.io/docs/ops/functions#sentencetransformerembed" text="SentenceTransformerEmbed" margin="0 0 16px 0" />
115
+ <DocumentationButton url="https://cocoindex.io/docs/ops/functions#sentencetransformerembed" text="SentenceTransformerEmbed" margin="0 0 16px 0" />
116
116
 
117
117
  :::tip
118
118
  `@cocoindex.transform_flow()` is needed to share the transformation across indexing and query. When building a vector index and querying against it, the embedding computation must remain consistent between indexing and querying.
119
119
  :::
120
120
 
121
- <DocumentationButton href="https://cocoindex.io/docs/query#transform-flow" text="Transform Flow" margin="0 0 16px 0" />
121
+ <DocumentationButton url="https://cocoindex.io/docs/query#transform-flow" text="Transform Flow" margin="0 0 16px 0" />
122
122
 
123
123
  Then for each chunk, we will embed it using the `code_to_embedding` function, and collect the embeddings to the `code_embeddings` collector.
124
124
 
@@ -222,4 +222,11 @@ To spin up, it is super easy.
222
222
  ```
223
223
  cocoindex server main.py -ci
224
224
  ```
225
- Follow the url from the terminal - `https://cocoindex.io/cocoinsight` to access the CocoInsight.
225
+ Follow the url from the terminal - `https://cocoindex.io/cocoinsight` to access the CocoInsight.
226
+
227
+
228
+ ## Supported Languages
229
+
230
+ SplitRecursively has native support for all major programming languages.
231
+
232
+ <DocumentationButton url="https://cocoindex.io/docs/ops/functions#supported-languages" text="Supported Languages" margin="0 0 16px 0" />
@@ -11,7 +11,9 @@ tags: [custom-building-blocks]
11
11
  ---
12
12
  import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
13
13
 
14
- <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/custom_output_files"/>
14
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/custom_output_files" margin="0 0 24px 0" />
15
+
16
+ ![Custom Targets](/img/examples/custom_targets/cover.png)
15
17
 
16
18
  ## Overview
17
19
 
@@ -33,7 +35,7 @@ flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope
33
35
  )
34
36
  ```
35
37
  This ingestion creates a table with `filename` and `content` fields.
36
- <DocumentationButton href="https://cocoindex.io/docs/ops/sources" text="Sources" />
38
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Sources" />
37
39
 
38
40
  ## Process each file and collect
39
41
 
@@ -45,7 +47,7 @@ def markdown_to_html(text: str) -> str:
45
47
  return _markdown_it.render(text)
46
48
  ```
47
49
 
48
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
50
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
49
51
 
50
52
  Define data collector and transform each document to html.
51
53
 
@@ -62,7 +64,7 @@ with data_scope["documents"].row() as doc:
62
64
 
63
65
  ### Define the target spec
64
66
 
65
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_targets#target-spec" text="Target Spec" margin="0 0 16px 0" />
67
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_targets#target-spec" text="Target Spec" margin="0 0 16px 0" />
66
68
 
67
69
  The target spec contains a directory for output files:
68
70
 
@@ -74,7 +76,7 @@ class LocalFileTarget(cocoindex.op.TargetSpec):
74
76
 
75
77
  ### Implement the connector
76
78
 
77
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_targets#target-connector" text="Target Connector" margin="0 0 16px 0" />
79
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_targets#target-connector" text="Target Connector" margin="0 0 16px 0" />
78
80
 
79
81
  `get_persistent_key()` defines the persistent key,
80
82
  which uniquely identifies the target for change tracking and incremental updates. Here, we simply use the target directory as the key (e.g., `./data/output`).
@@ -12,8 +12,10 @@ tags: [knowledge-graph, structured-data-extraction]
12
12
 
13
13
  import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
14
14
 
15
- <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/docs_to_knowledge_graph"/>
16
- <YouTubeButton url="https://youtu.be/2KVkpUGRtnk?si=MRalDweWrid-IFje" />
15
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/docs_to_knowledge_graph" margin="0 0 24px 0" />
16
+ <YouTubeButton url="https://youtu.be/2KVkpUGRtnk?si=MRalDweWrid-IFje" margin="0 0 24px 0" />
17
+
18
+ ![Knowledge Graph for Docs](/img/examples/docs_to_knowledge_graph/cover.png)
17
19
 
18
20
  ## Overview
19
21
  [CocoIndex](https://github.com/cocoindex-io/cocoindex) makes it easy to build and maintain knowledge graphs with continuous source updates. In this tutorial, we will use LLM to extract relationships between the concepts in each document, and generate two kinds of relationships:
@@ -37,11 +39,11 @@ and then build a knowledge graph.
37
39
  * [Install Neo4j](https://cocoindex.io/docs/ops/targets#neo4j-dev-instance), a graph database.
38
40
  * [Configure your OpenAI API key](https://cocoindex.io/docs/ai/llm#openai). Alternatively, we have native support for Gemini, Ollama, LiteLLM. You can choose your favorite LLM provider and work completely on-premises.
39
41
 
40
- <DocumentationButton href="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
42
+ <DocumentationButton url="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
41
43
 
42
44
 
43
45
  ## Documentation
44
- <DocumentationButton href="https://cocoindex.io/docs/ops/targets#property-graph-targets" text="Property Graph Targets" margin="0 0 16px 0" />
46
+ <DocumentationButton url="https://cocoindex.io/docs/ops/targets#property-graph-targets" text="Property Graph Targets" margin="0 0 16px 0" />
45
47
 
46
48
 
47
49
  ## Data flow to build knowledge graph
@@ -61,7 +63,7 @@ def docs_to_kg_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.D
61
63
  Here `flow_builder.add_source` creates a [KTable](https://cocoindex.io/docs/core/data_types#KTable).
62
64
  `filename` is the key of the KTable.
63
65
 
64
- <DocumentationButton href="https://cocoindex.io/docs/ops/sources" text="Sources" margin="0 0 16px 0" />
66
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Sources" margin="0 0 16px 0" />
65
67
 
66
68
 
67
69
  ### Add data collectors
@@ -366,7 +368,7 @@ MATCH p=()-->() RETURN p
366
368
  ## Kuzu
367
369
  Cocoindex natively supports Kuzu - a high performant, embedded open source graph database.
368
370
 
369
- <DocumentationButton href="https://cocoindex.io/docs/ops/targets#kuzu" text="Kuzu" margin="0 0 16px 0" />
371
+ <DocumentationButton url="https://cocoindex.io/docs/ops/targets#kuzu" text="Kuzu" margin="0 0 16px 0" />
370
372
 
371
373
  The GraphDB interface in CocoIndex is standardized, you just need to **switch the configuration** without any additional code changes. CocoIndex supports exporting to Kuzu through its API server. You can bring up a Kuzu API server locally by running:
372
374
 
@@ -0,0 +1,270 @@
1
+ ---
2
+ title: Image Search App with ColPali and FastAPI
3
+ description: Build image search index with ColPali and FastAPI
4
+ sidebar_class_name: hidden
5
+ slug: /examples/image_search
6
+ canonicalUrl: '/examples/image_search'
7
+ sidebar_custom_props:
8
+ image: /img/examples/image_search/cover.png
9
+ tags: [vector-index, multi-modal]
10
+ tags: [vector-index, multi-modal]
11
+ ---
12
+
13
+ import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
14
+
15
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/image_search" margin="0 0 24px 0" />
16
+
17
+ ![Image Search](/img/examples/image_search/cover.png)
18
+
19
+ ## Overview
20
+ CocoIndex supports native integration with ColPali - with just a few lines of code, you embed and index images with ColPali’s late-interaction architecture. We also build a light weight image search application with FastAPI.
21
+
22
+
23
+ ## ColPali
24
+
25
+ **ColPali (Contextual Late-interaction over Patches)** is a powerful model for multimodal retrieval.
26
+
27
+ It fundamentally rethinks how documents—especially visually complex or image-rich ones—are represented and searched. Instead of reducing each image or page to a single dense vector (as in traditional bi-encoders), ColPali breaks an image into many smaller patches, preserving local spatial and semantic structure. Each patch receives its own embedding, which together form a multi-vector representation of the complete document.
28
+
29
+ ![ColPali Architecture](/img/examples/image_search/multi_modal_architecture.png)
30
+
31
+
32
+ ## Flow Overview
33
+ ![Flow](/img/examples/image_search/flow.png)
34
+
35
+ 1. Ingest image files from the local filesystem
36
+ 2. Use **ColPali** to embed each image into patch-level multi-vectors
37
+ 3. Optionally extract image captions using an LLM
38
+ 4. Export the embeddings (and optional captions) to a Qdrant collection
39
+
40
+ ## Setup
41
+ - [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
42
+
43
+ - Make sure Qdrant is running
44
+ ```
45
+ docker run -d -p 6334:6334 -p 6333:6333 qdrant/qdrant
46
+ ```
47
+
48
+
49
+ ## Add Source
50
+
51
+ We start by defining a flow to read `.jpg`, `.jpeg`, and `.png` files from a local directory using `LocalFile`.
52
+
53
+ ```python
54
+ @cocoindex.flow_def(name="ImageObjectEmbeddingColpali")
55
+ def image_object_embedding_flow(flow_builder, data_scope):
56
+ data_scope["images"] = flow_builder.add_source(
57
+ cocoindex.sources.LocalFile(
58
+ path="img",
59
+ included_patterns=["*.jpg", "*.jpeg", "*.png"],
60
+ binary=True
61
+ ),
62
+ refresh_interval=datetime.timedelta(minutes=1),
63
+ )
64
+ ```
65
+
66
+ The `add_source` function sets up a table with fields like `filename` and `content`. Images are automatically re-scanned every minute.
67
+
68
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources#localfile" text="LocalFile" />
69
+
70
+
71
+ ## Process Each Image and Collect the Embedding
72
+
73
+ We use CocoIndex's built-in `ColPaliEmbedImage` function, which returns a **multi-vector representation** for each image. Each patch receives its own vector, preserving spatial and semantic information.
74
+
75
+ <DocumentationButton url="https://cocoindex.io/docs/ops/functions#colpaliembedimage" text="ColPaliEmbedImage" margin="0 0 16px 0" />
76
+
77
+ ```python
78
+ img_embeddings = data_scope.add_collector()
79
+ with data_scope["images"].row() as img:
80
+ img["embedding"] = img["content"].transform(cocoindex.functions.ColPaliEmbedImage(model="vidore/colpali-v1.2"))
81
+ collect_fields = {
82
+ "id": cocoindex.GeneratedField.UUID,
83
+ "filename": img["filename"],
84
+ "embedding": img["embedding"],
85
+ }
86
+ img_embeddings.collect(**collect_fields)
87
+ ```
88
+
89
+ This transformation turns the raw image bytes into a list of vectors — one per patch — that can later be used for **late interaction search**. And then we collect the embeddings.
90
+
91
+ ![ColPali Embedding](/img/examples/image_search/embedding.png)
92
+
93
+ ## Export the Embeddings
94
+
95
+ ```python
96
+ img_embeddings.export(
97
+ "img_embeddings",
98
+ cocoindex.targets.Qdrant(collection_name="ImageSearchColpali"),
99
+ primary_key_fields=["id"],
100
+ )
101
+ ```
102
+
103
+ This creates a vector collection in Qdrant that supports **multi-vector fields** — required for ColPali-style late interaction search.
104
+
105
+
106
+ ## Enable Real-Time Indexing
107
+
108
+ To keep the image index up to date automatically, we wrap the flow in a `FlowLiveUpdater`:
109
+
110
+ ```python
111
+ @asynccontextmanager
112
+ async def lifespan(app: FastAPI):
113
+ load_dotenv()
114
+ cocoindex.init()
115
+ image_object_embedding_flow.setup(report_to_stdout=True)
116
+ app.state.live_updater = cocoindex.FlowLiveUpdater(image_object_embedding_flow)
117
+ app.state.live_updater.start()
118
+ yield
119
+ ```
120
+
121
+ This keeps your vector index fresh as new images arrive.
122
+
123
+ ## Fast API Application
124
+
125
+ We build a simple FastAPI application to query the index.
126
+
127
+ ```python
128
+ app = FastAPI(lifespan=lifespan)
129
+
130
+ app.add_middleware(
131
+ CORSMiddleware,
132
+ allow_origins=["*"],
133
+ allow_credentials=True,
134
+ allow_methods=["*"],
135
+ allow_headers=["*"],
136
+ )
137
+ # Serve images from the 'img' directory at /img
138
+ app.mount("/img", StaticFiles(directory="img"), name="img")
139
+ ```
140
+
141
+ ## Search API & Query the index
142
+
143
+ We use `ColPaliEmbedQuery` to embed the query text into a multi-vector format.
144
+
145
+ <DocumentationButton url="https://cocoindex.io/docs/ops/functions#colpaliembedquery" text="ColPaliEmbedQuery" margin="0 0 16px 0" />
146
+
147
+ ```python
148
+ @cocoindex.transform_flow()
149
+ def text_to_colpali_embedding(
150
+ text: cocoindex.DataSlice[str],
151
+ ) -> cocoindex.DataSlice[list[list[float]]]:
152
+ return text.transform(
153
+ cocoindex.functions.ColPaliEmbedQuery(model=COLPALI_MODEL_NAME)
154
+ )
155
+ ```
156
+ Then we build a search API to query the index.
157
+
158
+ ```python
159
+ # --- Search API ---
160
+ @app.get("/search")
161
+ def search(
162
+ q: str = Query(..., description="Search query"),
163
+ limit: int = Query(5, description="Number of results"),
164
+ ) -> Any:
165
+ # Get the multi-vector embedding for the query
166
+ query_embedding = text_to_colpali_embedding.eval(q)
167
+ print(
168
+ f"🔍 Query multi-vector shape: {len(query_embedding)} tokens x {len(query_embedding[0]) if query_embedding else 0} dims"
169
+ )
170
+
171
+ # Search in Qdrant with multi-vector MaxSim scoring using query_points API
172
+ search_results = app.state.qdrant_client.query_points(
173
+ collection_name=QDRANT_COLLECTION,
174
+ query=query_embedding, # Multi-vector format: list[list[float]]
175
+ using="embedding", # Specify the vector field name
176
+ limit=limit,
177
+ with_payload=True,
178
+ )
179
+
180
+ print(f"📈 Found {len(search_results.points)} results with MaxSim scoring")
181
+
182
+ return {
183
+ "results": [
184
+ {
185
+ "filename": result.payload["filename"],
186
+ "score": result.score,
187
+ "caption": result.payload.get("caption"),
188
+ }
189
+ for result in search_results.points
190
+ ]
191
+ }
192
+ ```
193
+
194
+ ## Run the application
195
+
196
+ - Install dependencies:
197
+ ```
198
+ pip install -e .
199
+ pip install 'cocoindex[colpali]' # Adds ColPali support
200
+ ```
201
+
202
+ - Configure model (optional):
203
+ ```sh
204
+ # All ColVision models supported by colpali-engine are available
205
+ # See https://github.com/illuin-tech/colpali#list-of-colvision-models for the complete list
206
+
207
+ # ColPali models (colpali-*) - PaliGemma-based, best for general document retrieval
208
+ export COLPALI_MODEL="vidore/colpali-v1.2" # Default model
209
+ export COLPALI_MODEL="vidore/colpali-v1.3" # Latest version
210
+
211
+ # ColQwen2 models (colqwen-*) - Qwen2-VL-based, excellent for multilingual text (29+ languages) and general vision
212
+ export COLPALI_MODEL="vidore/colqwen2-v1.0"
213
+ export COLPALI_MODEL="vidore/colqwen2.5-v0.2" # Latest Qwen2.5 model
214
+
215
+ # ColSmol models (colsmol-*) - Lightweight, good for resource-constrained environments
216
+ export COLPALI_MODEL="vidore/colSmol-256M"
217
+
218
+ # Any other ColVision models from https://github.com/illuin-tech/colpali are supported
219
+ ```
220
+
221
+ - Run ColPali Backend:
222
+ ```
223
+ uvicorn colpali_main:app --reload --host 0.0.0.0 --port 8000
224
+ ```
225
+ :::warning
226
+ Note that recent Nvidia GPUs (such as the RTX 5090) are not supported by the stable PyTorch version up to 2.7.1.
227
+ :::
228
+
229
+ If you get this error:
230
+
231
+ ```
232
+ The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 sm_80 sm_86 sm_90 compute_37.
233
+ ```
234
+
235
+ You can install the nightly pytorch build here: https://pytorch.org/get-started/locally/
236
+
237
+ ```sh
238
+ pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu129
239
+ ```
240
+ - Run Frontend:
241
+ ```
242
+ cd frontend
243
+ npm install
244
+ npm run dev
245
+ ```
246
+
247
+ Go to `http://localhost:5173` to search. The frontend works with both backends identically.
248
+
249
+ ![Result](/img/examples/image_search/result.png)
250
+
251
+ ## CLIP Model & Comparison with ColPali
252
+ We've also had a similar application built with CLIP model.
253
+
254
+ <DocumentationButton url="https://cocoindex.io/blogs/live-image-search" text="Image Search App with CLIP" margin="0 0 16px 0" />
255
+
256
+ In general,
257
+ - CLIP: Faster, good for general image-text matching
258
+ - ColPali: More accurate for document images and text-heavy content, supports multi-vector late interaction for better precision
259
+
260
+ ## Connect to Any Data Source
261
+
262
+ One of CocoIndex’s core strengths is its ability to connect to your existing data sources and automatically keep your index fresh. Beyond local files, CocoIndex natively supports source connectors including:
263
+
264
+ - Google Drive
265
+ - Amazon S3 / SQS
266
+ - Azure Blob Storage
267
+
268
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="Sources" margin="0 0 16px 0" />
269
+
270
+ Once connected, CocoIndex continuously watches for changes — new uploads, updates, or deletions — and applies them to your index in real time.
@@ -12,7 +12,9 @@ tags: [structured-data-extraction, data-mapping]
12
12
 
13
13
  import { GitHubButton, YouTubeButton, DocumentationButton } from '../../../src/components/GitHubButton';
14
14
 
15
- <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/manuals_llm_extraction"/>
15
+ <GitHubButton url="https://github.com/cocoindex-io/cocoindex/tree/main/examples/manuals_llm_extraction" margin="0 0 24px 0" />
16
+
17
+ ![Manual Extraction](/img/examples/manual_extraction/cover.png)
16
18
 
17
19
  ## Overview
18
20
  This example shows how to extract structured data from Python Manuals using Ollama.
@@ -36,11 +38,11 @@ This example shows how to extract structured data from Python Manuals using Olla
36
38
  ollama pull llama3.2
37
39
  ```
38
40
 
39
- <DocumentationButton href="https://cocoindex.io/docs/ai/llm#ollama" text="Ollama" margin="0 0 16px 0" />
41
+ <DocumentationButton url="https://cocoindex.io/docs/ai/llm#ollama" text="Ollama" margin="0 0 16px 0" />
40
42
 
41
43
  Alternatively, CocoIndex have native support for Gemini, Ollama, LiteLLM. You can choose your favorite LLM provider and work completely on-premises.
42
44
 
43
- <DocumentationButton href="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
45
+ <DocumentationButton url="https://cocoindex.io/docs/ai/llm" text="LLM" margin="0 0 16px 0" />
44
46
 
45
47
  ## Add Source
46
48
  Let's add Python docs as a source.
@@ -64,7 +66,7 @@ def manual_extraction_flow(
64
66
  - `filename` (key, type: `str`): the filename of the file, e.g. `dir1/file1.md`
65
67
  - `content` (type: `str` if `binary` is `False`, otherwise `bytes`): the content of the file
66
68
 
67
- <DocumentationButton href="https://cocoindex.io/docs/ops/sources" text="LocalFile" margin="0 0 16px 0" />
69
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources" text="LocalFile" margin="0 0 16px 0" />
68
70
 
69
71
  ## Parse Markdown
70
72
 
@@ -97,7 +99,7 @@ class PdfToMarkdownExecutor:
97
99
  ```
98
100
  You may wonder why we want to define a spec + executor (instead of using a standalone function) here. The main reason is there're some heavy preparation work (initialize the parser) needs to be done before being ready to process real data.
99
101
 
100
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
102
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
101
103
 
102
104
  Plug in the function to the flow.
103
105
 
@@ -160,7 +162,7 @@ with data_scope["documents"].row() as doc:
160
162
  instruction="Please extract Python module information from the manual."))
161
163
  ```
162
164
 
163
- <DocumentationButton href="https://cocoindex.io/docs/core/functions#extractbyllm" text="ExtractByLlm" margin="0 0 16px 0" />
165
+ <DocumentationButton url="https://cocoindex.io/docs/core/functions#extractbyllm" text="ExtractByLlm" margin="0 0 16px 0" />
164
166
 
165
167
  ![ExtractByLlm](/img/examples/manual_extraction/extraction.png)
166
168
 
@@ -194,7 +196,7 @@ with data_scope["documents"].row() as doc:
194
196
  doc["module_summary"] = doc["module_info"].transform(summarize_module)
195
197
  ```
196
198
 
197
- <DocumentationButton href="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
199
+ <DocumentationButton url="https://cocoindex.io/docs/custom_ops/custom_functions" text="Custom Function" margin="0 0 16px 0" />
198
200
 
199
201
  ![Summarize Module](/img/examples/manual_extraction/summary.png)
200
202