cocoindex 0.2.7__tar.gz → 0.2.9__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 (419) hide show
  1. {cocoindex-0.2.7 → cocoindex-0.2.9}/Cargo.lock +2 -1
  2. {cocoindex-0.2.7 → cocoindex-0.2.9}/Cargo.toml +2 -1
  3. {cocoindex-0.2.7 → cocoindex-0.2.9}/PKG-INFO +1 -1
  4. {cocoindex-0.2.7 → cocoindex-0.2.9}/THIRD_PARTY_NOTICES.html +1 -1
  5. {cocoindex-0.2.7 → cocoindex-0.2.9}/dev/neo4j.yaml +6 -7
  6. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/ops/targets.md +0 -9
  7. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/amazon_s3_embedding/pyproject.toml +1 -1
  8. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/azure_blob_embedding/pyproject.toml +1 -1
  9. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/code_embedding/pyproject.toml +1 -1
  10. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/pyproject.toml +1 -1
  11. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
  12. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/pyproject.toml +1 -1
  13. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/requirements.txt +1 -1
  14. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/gdrive_text_embedding/pyproject.toml +1 -1
  15. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/pyproject.toml +1 -1
  16. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/pyproject.toml +1 -1
  17. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/pyproject.toml +1 -1
  18. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/pyproject.toml +1 -1
  19. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/pyproject.toml +1 -1
  20. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/pyproject.toml +1 -1
  21. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/pyproject.toml +1 -1
  22. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/postgres_source/pyproject.toml +1 -1
  23. cocoindex-0.2.9/examples/product_recommendation/.gitignore +1 -0
  24. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/pyproject.toml +1 -1
  25. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/pyproject.toml +1 -1
  26. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding_qdrant/pyproject.toml +1 -1
  27. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/setting.py +1 -2
  28. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/value.rs +32 -13
  29. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/analyzed_flow.rs +3 -1
  30. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/analyzer.rs +11 -10
  31. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/source_indexer.rs +2 -1
  32. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/lib_context.rs +1 -1
  33. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/anthropic.rs +1 -1
  34. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/gemini.rs +2 -2
  35. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/factory_bases.rs +15 -11
  36. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/extract_by_llm.rs +1 -1
  37. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/parse_json.rs +1 -1
  38. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/amazon_s3.rs +1 -1
  39. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/postgres.rs +1 -1
  40. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/neo4j.rs +1 -5
  41. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/qdrant.rs +1 -1
  42. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/service/flows.rs +1 -1
  43. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/auth_registry.rs +1 -1
  44. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/driver.rs +2 -2
  45. cocoindex-0.2.9/src/utils/deser.rs +25 -0
  46. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/mod.rs +1 -0
  47. {cocoindex-0.2.7 → cocoindex-0.2.9}/.cargo/config.toml +0 -0
  48. {cocoindex-0.2.7 → cocoindex-0.2.9}/.env.lib_debug +0 -0
  49. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  50. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  51. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/scripts/update_version.sh +0 -0
  52. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/CI.yml +0 -0
  53. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/_docs_release.yml +0 -0
  54. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/_test.yml +0 -0
  55. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/docs_release.yml +0 -0
  56. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/docs_test.yml +0 -0
  57. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/format.yml +0 -0
  58. {cocoindex-0.2.7 → cocoindex-0.2.9}/.github/workflows/release.yml +0 -0
  59. {cocoindex-0.2.7 → cocoindex-0.2.9}/.gitignore +0 -0
  60. {cocoindex-0.2.7 → cocoindex-0.2.9}/.pre-commit-config.yaml +0 -0
  61. {cocoindex-0.2.7 → cocoindex-0.2.9}/CODE_OF_CONDUCT.md +0 -0
  62. {cocoindex-0.2.7 → cocoindex-0.2.9}/CONTRIBUTING.md +0 -0
  63. {cocoindex-0.2.7 → cocoindex-0.2.9}/LICENSE +0 -0
  64. {cocoindex-0.2.7 → cocoindex-0.2.9}/README.md +0 -0
  65. {cocoindex-0.2.7 → cocoindex-0.2.9}/about.hbs +0 -0
  66. {cocoindex-0.2.7 → cocoindex-0.2.9}/about.toml +0 -0
  67. {cocoindex-0.2.7 → cocoindex-0.2.9}/dev/postgres.yaml +0 -0
  68. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/.gitignore +0 -0
  69. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/README.md +0 -0
  70. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/about/community.md +0 -0
  71. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/ai/llm.mdx +0 -0
  72. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/contributing/guide.md +0 -0
  73. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/contributing/new_built_in_target.mdx +0 -0
  74. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/contributing/setup_dev_environment.md +0 -0
  75. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/basics.md +0 -0
  76. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/cli.mdx +0 -0
  77. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/data_example.svg +0 -0
  78. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/data_types.mdx +0 -0
  79. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/flow_def.mdx +0 -0
  80. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/flow_example.svg +0 -0
  81. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/flow_methods.mdx +0 -0
  82. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/core/settings.mdx +0 -0
  83. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/custom_ops/custom_functions.mdx +0 -0
  84. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/custom_ops/custom_targets.mdx +0 -0
  85. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/academic_papers_index.md +0 -0
  86. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/codebase_index.md +0 -0
  87. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/custom_targets.md +0 -0
  88. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/docs_to_knowledge_graph.md +0 -0
  89. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/document_ai.md +0 -0
  90. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/image_search.md +0 -0
  91. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/manual_extraction.md +0 -0
  92. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/multi_format_index.md +0 -0
  93. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/patient_form_extraction.md +0 -0
  94. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/photo_search.md +0 -0
  95. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/postgres_source.md +0 -0
  96. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/product_recommendation.md +0 -0
  97. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/examples/simple_vector_index.md +0 -0
  98. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/examples/index.md +0 -0
  99. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/getting_started/installation.md +0 -0
  100. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/getting_started/markdown_files.zip +0 -0
  101. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/getting_started/overview.md +0 -0
  102. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/getting_started/quickstart.md +0 -0
  103. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/ops/functions.md +0 -0
  104. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/ops/sources.md +0 -0
  105. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/query.mdx +0 -0
  106. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/tutorials/live_updates.md +0 -0
  107. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
  108. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/docusaurus.config.ts +0 -0
  109. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/package.json +0 -0
  110. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/sidebars.ts +0 -0
  111. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/components/GitHubButton/index.tsx +0 -0
  112. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/css/custom.css +0 -0
  113. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/theme/DocCard/index.tsx +0 -0
  114. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/theme/DocCard/styles.module.css +0 -0
  115. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/theme/DocCardList/index.tsx +0 -0
  116. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/theme/DocCardList/styles.module.css +0 -0
  117. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/src/theme/Root.js +0 -0
  118. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/.nojekyll +0 -0
  119. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/docusaurus.png +0 -0
  120. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
  121. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
  122. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
  123. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
  124. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
  125. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
  126. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
  127. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/codebase_index/chunk.png +0 -0
  128. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/codebase_index/cover.png +0 -0
  129. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/codebase_index/flow.png +0 -0
  130. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/custom_targets/convert.png +0 -0
  131. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/custom_targets/cover.png +0 -0
  132. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
  133. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
  134. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
  135. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
  136. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
  137. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
  138. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
  139. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
  140. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/document_ai/cover.png +0 -0
  141. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/document_ai/document_ai.png +0 -0
  142. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/document_ai/processor.png +0 -0
  143. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/image_search/cover.png +0 -0
  144. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/image_search/embedding.png +0 -0
  145. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/image_search/flow.png +0 -0
  146. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
  147. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/image_search/result.png +0 -0
  148. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/manual_extraction/cover.png +0 -0
  149. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
  150. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/manual_extraction/flow.png +0 -0
  151. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/manual_extraction/summary.png +0 -0
  152. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
  153. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/multi_format_index/cover.png +0 -0
  154. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/multi_format_index/embed.png +0 -0
  155. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/multi_format_index/flow.png +0 -0
  156. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/multi_format_index/pages.png +0 -0
  157. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
  158. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
  159. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
  160. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
  161. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
  162. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/photo_search/cover.png +0 -0
  163. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/photo_search/extraction.png +0 -0
  164. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/photo_search/flow.png +0 -0
  165. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/collector.png +0 -0
  166. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/cover.png +0 -0
  167. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/description.png +0 -0
  168. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/embed.png +0 -0
  169. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/flow.png +0 -0
  170. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/lineage.png +0 -0
  171. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/price.png +0 -0
  172. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/postgres_source/source.png +0 -0
  173. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/cover.png +0 -0
  174. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
  175. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
  176. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
  177. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
  178. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
  179. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
  180. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
  181. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
  182. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
  183. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
  184. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
  185. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/simple_vector_index/embed.png +0 -0
  186. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
  187. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/favicon.ico +0 -0
  188. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/icon.svg +0 -0
  189. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/img/incremental-etl.gif +0 -0
  190. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/static/robots.txt +0 -0
  191. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/tsconfig.json +0 -0
  192. {cocoindex-0.2.7 → cocoindex-0.2.9}/docs/yarn.lock +0 -0
  193. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/amazon_s3_embedding/.env.example +0 -0
  194. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/amazon_s3_embedding/.gitignore +0 -0
  195. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/amazon_s3_embedding/README.md +0 -0
  196. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/amazon_s3_embedding/main.py +0 -0
  197. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/azure_blob_embedding/.env.example +0 -0
  198. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/azure_blob_embedding/.gitignore +0 -0
  199. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/azure_blob_embedding/README.md +0 -0
  200. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/azure_blob_embedding/main.py +0 -0
  201. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/code_embedding/.env +0 -0
  202. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/code_embedding/README.md +0 -0
  203. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/code_embedding/main.py +0 -0
  204. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/.env +0 -0
  205. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/.gitignore +0 -0
  206. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/README.md +0 -0
  207. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/data/bizarre_animals.md +0 -0
  208. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/data/chunk_norris.md +0 -0
  209. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/custom_output_files/main.py +0 -0
  210. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/docs_to_knowledge_graph/.env +0 -0
  211. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/docs_to_knowledge_graph/README.md +0 -0
  212. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/docs_to_knowledge_graph/main.py +0 -0
  213. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/.env +0 -0
  214. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/README.md +0 -0
  215. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
  216. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
  217. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
  218. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/images/einplanck3.jpg +0 -0
  219. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/face_recognition/main.py +0 -0
  220. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/.dockerignore +0 -0
  221. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/.env +0 -0
  222. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/README.md +0 -0
  223. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/compose.yaml +0 -0
  224. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/dockerfile +0 -0
  225. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  226. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/fastapi_server_docker/main.py +0 -0
  227. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/gdrive_text_embedding/.env.example +0 -0
  228. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/gdrive_text_embedding/.gitignore +0 -0
  229. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/gdrive_text_embedding/README.md +0 -0
  230. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/gdrive_text_embedding/main.py +0 -0
  231. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/.env +0 -0
  232. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/README.md +0 -0
  233. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/colpali_main.py +0 -0
  234. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/.gitignore +0 -0
  235. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/index.html +0 -0
  236. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/package-lock.json +0 -0
  237. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/package.json +0 -0
  238. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/src/App.jsx +0 -0
  239. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/src/main.jsx +0 -0
  240. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/src/style.css +0 -0
  241. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/frontend/vite.config.js +0 -0
  242. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/img/cat1.jpeg +0 -0
  243. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/img/dog1.jpeg +0 -0
  244. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/img/elephant1.jpg +0 -0
  245. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/img/giraffe.jpg +0 -0
  246. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/image_search/main.py +0 -0
  247. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/.env +0 -0
  248. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/README.md +0 -0
  249. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/data/bizarre_animals.md +0 -0
  250. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/data/chunk_norris.md +0 -0
  251. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/live_updates/main.py +0 -0
  252. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/.env +0 -0
  253. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/README.md +0 -0
  254. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/main.py +0 -0
  255. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  256. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  257. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  258. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  259. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/.env +0 -0
  260. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/README.md +0 -0
  261. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/main.py +0 -0
  262. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
  263. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
  264. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
  265. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
  266. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
  267. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
  268. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
  269. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
  270. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/.env.example +0 -0
  271. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/.gitignore +0 -0
  272. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/README.md +0 -0
  273. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/main.py +0 -0
  274. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
  275. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
  276. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
  277. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
  278. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/.env.example +0 -0
  279. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/README.md +0 -0
  280. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/data/README.md +0 -0
  281. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  282. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  283. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  284. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  285. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/patient_intake_extraction/main.py +0 -0
  286. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/.env +0 -0
  287. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/README.md +0 -0
  288. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/main.py +0 -0
  289. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  290. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  291. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  292. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/postgres_source/.env +0 -0
  293. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/postgres_source/README.md +0 -0
  294. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/postgres_source/main.py +0 -0
  295. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/postgres_source/prepare_source_data.sql +0 -0
  296. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/.env.example +0 -0
  297. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/README.md +0 -0
  298. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/img/cocoinsight.png +0 -0
  299. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/img/neo4j.png +0 -0
  300. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/main.py +0 -0
  301. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p1.json +0 -0
  302. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p2.json +0 -0
  303. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p3.json +0 -0
  304. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p4.json +0 -0
  305. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p5.json +0 -0
  306. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p6.json +0 -0
  307. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p7.json +0 -0
  308. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p8.json +0 -0
  309. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/product_recommendation/products/p9.json +0 -0
  310. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/.env +0 -0
  311. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/README.md +0 -0
  312. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  313. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/main.py +0 -0
  314. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  315. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  316. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  317. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding_qdrant/.env +0 -0
  318. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding_qdrant/README.md +0 -0
  319. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding_qdrant/main.py +0 -0
  320. {cocoindex-0.2.7 → cocoindex-0.2.9}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  321. {cocoindex-0.2.7 → cocoindex-0.2.9}/pyproject.toml +0 -0
  322. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/__init__.py +0 -0
  323. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/auth_registry.py +0 -0
  324. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/cli.py +0 -0
  325. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/convert.py +0 -0
  326. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/flow.py +0 -0
  327. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/functions.py +0 -0
  328. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/index.py +0 -0
  329. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/lib.py +0 -0
  330. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/llm.py +0 -0
  331. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/op.py +0 -0
  332. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/py.typed +0 -0
  333. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/runtime.py +0 -0
  334. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/setup.py +0 -0
  335. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/sources.py +0 -0
  336. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/subprocess_exec.py +0 -0
  337. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/targets.py +0 -0
  338. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/__init__.py +0 -0
  339. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/test_convert.py +0 -0
  340. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/test_optional_database.py +0 -0
  341. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/test_transform_flow.py +0 -0
  342. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/test_typing.py +0 -0
  343. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/tests/test_validation.py +0 -0
  344. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/typing.py +0 -0
  345. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/user_app_loader.py +0 -0
  346. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/utils.py +0 -0
  347. {cocoindex-0.2.7 → cocoindex-0.2.9}/python/cocoindex/validation.py +0 -0
  348. {cocoindex-0.2.7 → cocoindex-0.2.9}/ruff.toml +0 -0
  349. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/duration.rs +0 -0
  350. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/field_attrs.rs +0 -0
  351. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/json_schema.rs +0 -0
  352. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/mod.rs +0 -0
  353. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/schema.rs +0 -0
  354. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/base/spec.rs +0 -0
  355. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/exec_ctx.rs +0 -0
  356. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/flow_builder.rs +0 -0
  357. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/mod.rs +0 -0
  358. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/builder/plan.rs +0 -0
  359. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/db_tracking.rs +0 -0
  360. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/db_tracking_setup.rs +0 -0
  361. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/dumper.rs +0 -0
  362. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/evaluator.rs +0 -0
  363. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/indexing_status.rs +0 -0
  364. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/live_updater.rs +0 -0
  365. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/memoization.rs +0 -0
  366. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/mod.rs +0 -0
  367. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/row_indexer.rs +0 -0
  368. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/execution/stats.rs +0 -0
  369. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/lib.rs +0 -0
  370. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/litellm.rs +0 -0
  371. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/mod.rs +0 -0
  372. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/ollama.rs +0 -0
  373. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/openai.rs +0 -0
  374. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/openrouter.rs +0 -0
  375. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/vllm.rs +0 -0
  376. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/llm/voyage.rs +0 -0
  377. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/embed_text.rs +0 -0
  378. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/mod.rs +0 -0
  379. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/split_recursively.rs +0 -0
  380. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/functions/test_utils.rs +0 -0
  381. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/interface.rs +0 -0
  382. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/mod.rs +0 -0
  383. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/py_factory.rs +0 -0
  384. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/registration.rs +0 -0
  385. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/registry.rs +0 -0
  386. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sdk.rs +0 -0
  387. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/shared/mod.rs +0 -0
  388. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/shared/postgres.rs +0 -0
  389. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/azure_blob.rs +0 -0
  390. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/google_drive.rs +0 -0
  391. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/local_file.rs +0 -0
  392. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/mod.rs +0 -0
  393. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/shared/mod.rs +0 -0
  394. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/sources/shared/pattern_matcher.rs +0 -0
  395. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/kuzu.rs +0 -0
  396. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/mod.rs +0 -0
  397. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/postgres.rs +0 -0
  398. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/shared/mod.rs +0 -0
  399. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/shared/property_graph.rs +0 -0
  400. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/ops/targets/shared/table_columns.rs +0 -0
  401. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/prelude.rs +0 -0
  402. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/py/convert.rs +0 -0
  403. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/py/mod.rs +0 -0
  404. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/server.rs +0 -0
  405. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/service/error.rs +0 -0
  406. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/service/mod.rs +0 -0
  407. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/settings.rs +0 -0
  408. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/components.rs +0 -0
  409. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/db_metadata.rs +0 -0
  410. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/flow_features.rs +0 -0
  411. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/mod.rs +0 -0
  412. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/setup/states.rs +0 -0
  413. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/concur_control.rs +0 -0
  414. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/db.rs +0 -0
  415. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/fingerprint.rs +0 -0
  416. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/immutable.rs +0 -0
  417. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/retryable.rs +0 -0
  418. {cocoindex-0.2.7 → cocoindex-0.2.9}/src/utils/str_sanitize.rs +0 -0
  419. {cocoindex-0.2.7 → cocoindex-0.2.9}/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.7"
1286
+ version = "0.2.9"
1287
1287
  dependencies = [
1288
1288
  "anyhow",
1289
1289
  "async-openai",
@@ -1337,6 +1337,7 @@ dependencies = [
1337
1337
  "schemars 0.8.22",
1338
1338
  "serde",
1339
1339
  "serde_json",
1340
+ "serde_path_to_error",
1340
1341
  "serde_with",
1341
1342
  "sqlx",
1342
1343
  "time",
@@ -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.7"
5
+ version = "0.2.9"
6
6
  edition = "2024"
7
7
  rust-version = "1.88"
8
8
  license = "Apache-2.0"
@@ -145,3 +145,4 @@ azure_storage_blobs = { version = "0.21.0", default-features = false, features =
145
145
  "enable_reqwest_rustls",
146
146
  "hmac_rust",
147
147
  ] }
148
+ serde_path_to_error = "0.1.17"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: License :: OSI Approved :: Apache Software License
6
6
  Classifier: Operating System :: OS Independent
@@ -2428,7 +2428,7 @@ Software.
2428
2428
  <h3 id="Apache-2.0">Apache License 2.0</h3>
2429
2429
  <h4>Used by:</h4>
2430
2430
  <ul class="license-used-by">
2431
- <li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.7</a></li>
2431
+ <li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.9</a></li>
2432
2432
  <li><a href=" https://github.com/awesomized/crc-fast-rust ">crc-fast 1.3.0</a></li>
2433
2433
  <li><a href=" https://github.com/qdrant/rust-client ">qdrant-client 1.15.0</a></li>
2434
2434
  </ul>
@@ -1,16 +1,15 @@
1
- name: cocoindex-neo4j
1
+ name: cocoindex-neo4j-community
2
2
  services:
3
3
  neo4j:
4
- image: neo4j:5-enterprise
4
+ image: neo4j:2025.08-community-ubi9
5
5
  volumes:
6
- - /$HOME/neo4j/logs:/logs
7
- - /$HOME/neo4j/config:/config
8
- - /$HOME/neo4j/data:/data
9
- - /$HOME/neo4j/plugins:/plugins
6
+ - /$HOME/neo4j/community/logs:/logs
7
+ - /$HOME/neo4j/community/config:/config
8
+ - /$HOME/neo4j/community/data:/data
9
+ - /$HOME/neo4j/community/plugins:/plugins
10
10
  environment:
11
11
  - NEO4J_AUTH=neo4j/cocoindex
12
12
  - NEO4J_PLUGINS='["graph-data-science"]'
13
- - NEO4J_ACCEPT_LICENSE_AGREEMENT=eval
14
13
 
15
14
  # Uncomment to enable query logging
16
15
  # - NEO4J_db_logs_query_enabled=VERBOSE
@@ -442,15 +442,6 @@ docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoi
442
442
  This will bring up a Neo4j instance, which can be accessed by username `neo4j` and password `cocoindex`.
443
443
  You can access the Neo4j browser at [http://localhost:7474](http://localhost:7474).
444
444
 
445
- :::warning
446
-
447
- The docker compose config above will start a Neo4j Enterprise instance under the [Evaluation License](https://neo4j.com/terms/enterprise_us/),
448
- with 30 days trial period.
449
- Please read and agree the license before starting the instance.
450
-
451
- :::
452
-
453
-
454
445
  ### Kuzu
455
446
 
456
447
  #### Spec
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Amazon S3 files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "psycopg[binary,pool]",
10
10
  ]
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Azure Blob Storage files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "psycopg[binary,pool]",
10
10
  ]
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on source code."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "pgvector>=0.4.1",
10
10
  "psycopg[binary,pool]",
@@ -3,7 +3,7 @@ name = "custom-output-files"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: convert markdown files to HTML files and save them to a local directory."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.2.4", "markdown-it-py[linkify,plugins]"]
6
+ dependencies = ["cocoindex>=0.2.8", "markdown-it-py[linkify,plugins]"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "manuals-to-kg"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: extract triples from files and build knowledge graph."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.2.4"]
6
+ dependencies = ["cocoindex>=0.2.8"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Build index for papers with both metadata and content embeddings"
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex>=0.2.4",
7
+ "cocoindex>=0.2.8",
8
8
  "face-recognition>=1.3.0",
9
9
  "pillow>=10.0.0",
10
10
  "numpy>=1.26.0",
@@ -1,4 +1,4 @@
1
- cocoindex[embeddings]>=0.2.4
1
+ cocoindex[embeddings]>=0.2.8
2
2
  python-dotenv>=1.0.1
3
3
  fastapi==0.115.12
4
4
  fastapi-cli==0.0.7
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Google Drive files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "psycopg[binary,pool]",
10
10
  ]
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Image search examples for cocoindex: CLIP and ColPali-based embedding."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[colpali]>=0.2.4",
7
+ "cocoindex[colpali]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "fastapi>=0.100.0",
10
10
  "torch>=2.0.0",
@@ -3,7 +3,7 @@ name = "live-updates-example"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: perform live updates based on local markdown files."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.2.4", "python-dotenv>=1.1.0"]
6
+ dependencies = ["cocoindex>=0.2.8", "python-dotenv>=1.1.0"]
7
7
 
8
8
  [tools.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "manuals-llm-extraction"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: extract structured information from a Markdown file using LLM."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.2.4", "marker-pdf>=1.8.5"]
6
+ dependencies = ["cocoindex>=0.2.8", "marker-pdf>=1.8.5"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local PDF files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[colpali]>=0.2.4",
7
+ "cocoindex[colpali]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "pdf2image>=1.17.0",
10
10
  "qdrant-client>=1.15.0",
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Build index for papers with both metadata and content embeddings"
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "pypdf>=5.7.0",
9
9
  "marker-pdf>=1.8.5",
10
10
  ]
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Extract structured information from patient intake forms using LLM."
5
5
  requires-python = ">=3.10"
6
6
  dependencies = [
7
- "cocoindex>=0.2.4",
7
+ "cocoindex>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "markitdown>=0.1.2",
10
10
  "openai>=1.68.2",
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local PDF files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "marker-pdf>=1.8.5",
10
10
  "psycopg[binary,pool]",
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Demonstrate how to use Postgres tables as the source for CocoIndex."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "pgvector>=0.4.1",
10
10
  "psycopg[binary,pool]",
@@ -3,7 +3,7 @@ name = "cocoindex-ecommerce-taxonomy"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for CocoIndex: extract taxonomy from e-commerce products and build knowledge graph."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.2.4", "jinja2>=3.1.6"]
6
+ dependencies = ["cocoindex>=0.2.8", "jinja2>=3.1.6"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local text files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "pgvector>=0.4.1",
10
10
  "psycopg[binary,pool]",
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local text files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.2.4",
7
+ "cocoindex[embeddings]>=0.2.8",
8
8
  "python-dotenv>=1.0.1",
9
9
  "qdrant-client>=1.6.0",
10
10
  ]
@@ -94,8 +94,7 @@ class Settings:
94
94
 
95
95
  database_url = os.getenv("COCOINDEX_DATABASE_URL")
96
96
  if database_url is not None:
97
- db_kwargs: dict[str, Any] = dict()
98
- _load_field(db_kwargs, "url", "COCOINDEX_DATABASE_URL", required=True)
97
+ db_kwargs: dict[str, Any] = {"url": database_url}
99
98
  _load_field(db_kwargs, "user", "COCOINDEX_DATABASE_USER")
100
99
  _load_field(db_kwargs, "password", "COCOINDEX_DATABASE_PASSWORD")
101
100
  _load_field(
@@ -1,13 +1,12 @@
1
+ use crate::prelude::*;
2
+
1
3
  use super::schema::*;
2
4
  use crate::base::duration::parse_duration;
3
- use crate::{api_bail, api_error};
4
- use anyhow::Result;
5
5
  use base64::prelude::*;
6
6
  use bytes::Bytes;
7
7
  use chrono::Offset;
8
8
  use log::warn;
9
9
  use serde::{
10
- Deserialize, Serialize,
11
10
  de::{SeqAccess, Visitor},
12
11
  ser::{SerializeMap, SerializeSeq, SerializeTuple},
13
12
  };
@@ -1014,7 +1013,8 @@ where
1014
1013
  Ok(Self {
1015
1014
  fields: fields
1016
1015
  .map(|(s, v)| {
1017
- let value = Value::<VS>::from_json(v, &s.value_type.typ)?;
1016
+ let value = Value::<VS>::from_json(v, &s.value_type.typ)
1017
+ .with_context(|| format!("while deserializing field `{}`", s.name))?;
1018
1018
  if value.is_null() && !s.value_type.nullable {
1019
1019
  api_bail!("expected non-null value for `{}`", s.name);
1020
1020
  }
@@ -1033,9 +1033,10 @@ where
1033
1033
  fields: fields_schema
1034
1034
  .map(|field| {
1035
1035
  let value = match values.get_mut(&field.name) {
1036
- Some(v) => {
1037
- Value::<VS>::from_json(std::mem::take(v), &field.value_type.typ)?
1038
- }
1036
+ Some(v) => Value::<VS>::from_json(std::mem::take(v), &field.value_type.typ)
1037
+ .with_context(|| {
1038
+ format!("while deserializing field `{}`", field.name)
1039
+ })?,
1039
1040
  None => Value::<VS>::default(),
1040
1041
  };
1041
1042
  if value.is_null() && !field.value_type.nullable {
@@ -1137,7 +1138,7 @@ impl BasicValue {
1137
1138
  v.as_f64()
1138
1139
  .ok_or_else(|| anyhow::anyhow!("invalid fp64 value {v}"))?,
1139
1140
  ),
1140
- (v, BasicValueType::Range) => BasicValue::Range(serde_json::from_value(v)?),
1141
+ (v, BasicValueType::Range) => BasicValue::Range(utils::deser::from_json_value(v)?),
1141
1142
  (serde_json::Value::String(v), BasicValueType::Uuid) => BasicValue::Uuid(v.parse()?),
1142
1143
  (serde_json::Value::String(v), BasicValueType::Date) => BasicValue::Date(v.parse()?),
1143
1144
  (serde_json::Value::String(v), BasicValueType::Time) => BasicValue::Time(v.parse()?),
@@ -1170,7 +1171,11 @@ impl BasicValue {
1170
1171
  ) => {
1171
1172
  let vec = v
1172
1173
  .into_iter()
1173
- .map(|v| BasicValue::from_json(v, element_type))
1174
+ .enumerate()
1175
+ .map(|(i, v)| {
1176
+ BasicValue::from_json(v, element_type)
1177
+ .with_context(|| format!("while deserializing Vector element #{i}"))
1178
+ })
1174
1179
  .collect::<Result<Vec<_>>>()?;
1175
1180
  BasicValue::Vector(Arc::from(vec))
1176
1181
  }
@@ -1267,7 +1272,11 @@ where
1267
1272
  TableKind::UTable => {
1268
1273
  let rows = v
1269
1274
  .into_iter()
1270
- .map(|v| Ok(FieldValues::from_json(v, &s.row.fields)?.into()))
1275
+ .map(|v| {
1276
+ Ok(FieldValues::from_json(v, &s.row.fields)
1277
+ .with_context(|| format!("while deserializing UTable row"))?
1278
+ .into())
1279
+ })
1271
1280
  .collect::<Result<Vec<_>>>()?;
1272
1281
  Value::LTable(rows)
1273
1282
  }
@@ -1289,10 +1298,13 @@ where
1289
1298
  let mut field_vals_iter = v.into_iter();
1290
1299
  let keys: Box<[KeyPart]> = (0..num_key_parts)
1291
1300
  .map(|_| {
1301
+ let field_schema = fields_iter.next().unwrap();
1292
1302
  Self::from_json(
1293
1303
  field_vals_iter.next().unwrap(),
1294
- &fields_iter.next().unwrap().value_type.typ,
1295
- )?
1304
+ &field_schema.value_type.typ,
1305
+ ).with_context(|| {
1306
+ format!("while deserializing key part `{}`", field_schema.name)
1307
+ })?
1296
1308
  .into_key()
1297
1309
  })
1298
1310
  .collect::<Result<_>>()?;
@@ -1328,7 +1340,14 @@ where
1328
1340
  TableKind::LTable => {
1329
1341
  let rows = v
1330
1342
  .into_iter()
1331
- .map(|v| Ok(FieldValues::from_json(v, &s.row.fields)?.into()))
1343
+ .enumerate()
1344
+ .map(|(i, v)| {
1345
+ Ok(FieldValues::from_json(v, &s.row.fields)
1346
+ .with_context(|| {
1347
+ format!("while deserializing LTable row #{i}")
1348
+ })?
1349
+ .into())
1350
+ })
1332
1351
  .collect::<Result<Vec<_>>>()?;
1333
1352
  Value::LTable(rows)
1334
1353
  }
@@ -20,7 +20,9 @@ impl AnalyzedFlow {
20
20
  flow_instance_ctx: Arc<FlowInstanceContext>,
21
21
  ) -> Result<Self> {
22
22
  let (data_schema, setup_state, execution_plan_fut) =
23
- analyzer::analyze_flow(&flow_instance, flow_instance_ctx.clone()).await?;
23
+ analyzer::analyze_flow(&flow_instance, flow_instance_ctx.clone())
24
+ .await
25
+ .with_context(|| format!("analyzing flow `{}`", flow_instance.name))?;
24
26
  let execution_plan = async move {
25
27
  shared_ok(Arc::new(
26
28
  execution_plan_fut.await.map_err(SharedError::new)?,
@@ -674,7 +674,9 @@ impl AnalyzerContext {
674
674
  let global_concurrency_controller = self.lib_ctx.global_concurrency_controller.clone();
675
675
  let result_fut = async move {
676
676
  trace!("Start building executor for source op `{op_name}`");
677
- let executor = executor.await?;
677
+ let executor = executor
678
+ .await
679
+ .with_context(|| format!("Preparing for source op: {op_name}"))?;
678
680
  trace!("Finished building executor for source op `{op_name}`");
679
681
  Ok(AnalyzedImportOp {
680
682
  executor,
@@ -700,10 +702,7 @@ impl AnalyzerContext {
700
702
  ReactiveOpSpec::Transform(op) => {
701
703
  let input_field_schemas =
702
704
  analyze_input_fields(&op.inputs, op_scope).with_context(|| {
703
- format!(
704
- "Failed to analyze inputs for transform op: {}",
705
- reactive_op.name
706
- )
705
+ format!("Preparing inputs for transform op: {}", reactive_op.name)
707
706
  })?;
708
707
  let spec = serde_json::Value::Object(op.op.spec.clone());
709
708
 
@@ -725,7 +724,7 @@ impl AnalyzerContext {
725
724
  async move {
726
725
  trace!("Start building executor for transform op `{op_name}`");
727
726
  let executor = executor.await.with_context(|| {
728
- format!("Failed to build executor for transform op: {op_name}")
727
+ format!("Preparing for transform op: {op_name}")
729
728
  })?;
730
729
  let enable_cache = executor.enable_cache();
731
730
  let behavior_version = executor.behavior_version();
@@ -784,7 +783,7 @@ impl AnalyzerContext {
784
783
  local_field_ref,
785
784
  op_scope: analyzed_op_scope_fut
786
785
  .await
787
- .with_context(|| format!("Analyzing foreach op: {op_name}"))?,
786
+ .with_context(|| format!("Preparing for foreach op: {op_name}"))?,
788
787
  name: op_name,
789
788
  concurrency_controller: concur_control::ConcurrencyController::new(
790
789
  &concur_control_options,
@@ -920,7 +919,7 @@ impl AnalyzerContext {
920
919
  let export_context = data_coll_output
921
920
  .export_context
922
921
  .await
923
- .with_context(|| format!("Analyzing export op: {op_name}"))?;
922
+ .with_context(|| format!("Preparing for export op: {op_name}"))?;
924
923
  trace!("Finished building executor for export op `{op_name}`");
925
924
  Ok(AnalyzedExportOp {
926
925
  name: op_name,
@@ -1006,7 +1005,8 @@ pub async fn analyze_flow(
1006
1005
  import_ops_futs.push(
1007
1006
  analyzer_ctx
1008
1007
  .analyze_import_op(&root_op_scope, import_op.clone())
1009
- .await?,
1008
+ .await
1009
+ .with_context(|| format!("Preparing for import op: {}", import_op.name))?,
1010
1010
  );
1011
1011
  }
1012
1012
  let op_scope_fut = analyzer_ctx
@@ -1059,7 +1059,8 @@ pub async fn analyze_flow(
1059
1059
  &mut targets_analyzed_ss,
1060
1060
  &mut declarations_analyzed_ss,
1061
1061
  )
1062
- .await?,
1062
+ .await
1063
+ .with_context(|| format!("Analyzing export ops for target `{target_kind}`"))?,
1063
1064
  );
1064
1065
  analyzed_target_op_groups.push(analyzed_target_op_group);
1065
1066
  }
@@ -382,7 +382,8 @@ impl SourceIndexingContext {
382
382
  error!(
383
383
  "{:?}",
384
384
  e.context(format!(
385
- "Error in processing row from source `{source}` with key: {key}",
385
+ "Error in processing row from flow `{flow}` source `{source}` with key: {key}",
386
+ flow = self.flow.flow_instance.name,
386
387
  source = self.flow.flow_instance.import_ops[self.source_idx].name,
387
388
  key = row_input.key,
388
389
  ))
@@ -250,7 +250,7 @@ impl LibContext {
250
250
  pub fn require_persistence_ctx(&self) -> Result<&PersistenceContext> {
251
251
  self.persistence_ctx
252
252
  .as_ref()
253
- .ok_or_else(|| anyhow!("Database is required for this operation. Please set COCOINDEX_DATABASE_URL environment variable and call cocoindex.init() with database settings."))
253
+ .ok_or_else(|| anyhow!("Database is required for this operation. Please set COCOINDEX_DATABASE_URL environment variable OR call `cocoindex.init()` with database settings."))
254
254
  }
255
255
 
256
256
  pub fn require_builtin_db_pool(&self) -> Result<&PgPool> {
@@ -138,7 +138,7 @@ impl LlmGenerationClient for Client {
138
138
  match &mut resp_json["content"][0]["text"] {
139
139
  serde_json::Value::String(s) => {
140
140
  // Try strict JSON parsing first
141
- match serde_json::from_str::<serde_json::Value>(s) {
141
+ match utils::deser::from_json_str::<serde_json::Value>(s) {
142
142
  Ok(_) => std::mem::take(s),
143
143
  Err(e) => {
144
144
  // Try permissive json5 parsing as fallback
@@ -276,7 +276,7 @@ impl LlmGenerationClient for VertexAiClient {
276
276
  generation_config = Some(
277
277
  GenerationConfig::new()
278
278
  .set_response_mime_type("application/json".to_string())
279
- .set_response_schema(serde_json::from_value::<Schema>(schema_json)?),
279
+ .set_response_schema(utils::deser::from_json_value::<Schema>(schema_json)?),
280
280
  );
281
281
  }
282
282
 
@@ -358,7 +358,7 @@ impl LlmEmbeddingClient for VertexAiClient {
358
358
  .next()
359
359
  .and_then(|mut e| e.get_mut("embeddings").map(|v| v.take()))
360
360
  .ok_or_else(|| anyhow::anyhow!("No embeddings in response"))?;
361
- let embedding: ContentEmbedding = serde_json::from_value(embeddings)?;
361
+ let embedding: ContentEmbedding = utils::deser::from_json_value(embeddings)?;
362
362
  Ok(super::LlmEmbeddingResponse {
363
363
  embedding: embedding.values,
364
364
  })
@@ -245,7 +245,8 @@ impl<T: SourceFactoryBase> SourceFactory for T {
245
245
  EnrichedValueType,
246
246
  BoxFuture<'static, Result<Box<dyn SourceExecutor>>>,
247
247
  )> {
248
- let spec: T::Spec = serde_json::from_value(spec)?;
248
+ let spec: T::Spec = utils::deser::from_json_value(spec)
249
+ .with_context(|| format!("Failed in parsing spec for source `{source_name}`"))?;
249
250
  let output_schema = self.get_output_schema(&spec, &context).await?;
250
251
  let source_name = source_name.to_string();
251
252
  let executor = async move { self.build_executor(&source_name, spec, context).await };
@@ -323,7 +324,8 @@ impl<T: SimpleFunctionFactoryBase> SimpleFunctionFactory for T {
323
324
  EnrichedValueType,
324
325
  BoxFuture<'static, Result<Box<dyn SimpleFunctionExecutor>>>,
325
326
  )> {
326
- let spec: T::Spec = serde_json::from_value(spec)?;
327
+ let spec: T::Spec = utils::deser::from_json_value(spec)
328
+ .with_context(|| format!("Failed in parsing spec for function `{}`", self.name()))?;
327
329
  let mut nonnull_args_idx = vec![];
328
330
  let mut may_nullify_output = false;
329
331
  let mut args_resolver = OpArgsResolver::new(
@@ -397,7 +399,7 @@ pub trait TargetFactoryBase: TargetFactory + Send + Sync + 'static {
397
399
  /// Deserialize the setup key from a JSON value.
398
400
  /// You can override this method to provide a custom deserialization logic, e.g. to perform backward compatible deserialization.
399
401
  fn deserialize_setup_key(key: serde_json::Value) -> Result<Self::SetupKey> {
400
- Ok(serde_json::from_value(key)?)
402
+ Ok(utils::deser::from_json_value(key)?)
401
403
  }
402
404
 
403
405
  /// Will not be called if it's setup by user.
@@ -466,8 +468,10 @@ impl<T: TargetFactoryBase> TargetFactory for T {
466
468
  .into_iter()
467
469
  .map(|d| {
468
470
  anyhow::Ok(TypedExportDataCollectionSpec {
471
+ spec: utils::deser::from_json_value(d.spec).with_context(|| {
472
+ format!("Failed in parsing spec for target `{}`", d.name)
473
+ })?,
469
474
  name: d.name,
470
- spec: serde_json::from_value(d.spec)?,
471
475
  key_fields_schema: d.key_fields_schema,
472
476
  value_fields_schema: d.value_fields_schema,
473
477
  index_options: d.index_options,
@@ -476,7 +480,7 @@ impl<T: TargetFactoryBase> TargetFactory for T {
476
480
  .collect::<Result<Vec<_>>>()?,
477
481
  declarations
478
482
  .into_iter()
479
- .map(|d| anyhow::Ok(serde_json::from_value(d)?))
483
+ .map(|d| anyhow::Ok(utils::deser::from_json_value(d)?))
480
484
  .collect::<Result<Vec<_>>>()?,
481
485
  context,
482
486
  )
@@ -511,7 +515,7 @@ impl<T: TargetFactoryBase> TargetFactory for T {
511
515
  ) -> Result<Box<dyn setup::ResourceSetupChange>> {
512
516
  let key: T::SetupKey = Self::deserialize_setup_key(key.clone())?;
513
517
  let desired_state: Option<T::SetupState> = desired_state
514
- .map(|v| serde_json::from_value(v.clone()))
518
+ .map(|v| utils::deser::from_json_value(v.clone()))
515
519
  .transpose()?;
516
520
  let existing_states = from_json_combined_state(existing_states)?;
517
521
  let setup_change = TargetFactoryBase::diff_setup_states(
@@ -542,8 +546,8 @@ impl<T: TargetFactoryBase> TargetFactory for T {
542
546
  ) -> Result<SetupStateCompatibility> {
543
547
  let result = TargetFactoryBase::check_state_compatibility(
544
548
  self,
545
- &serde_json::from_value(desired_state.clone())?,
546
- &serde_json::from_value(existing_state.clone())?,
549
+ &utils::deser::from_json_value(desired_state.clone())?,
550
+ &utils::deser::from_json_value(existing_state.clone())?,
547
551
  )?;
548
552
  Ok(result)
549
553
  }
@@ -596,7 +600,7 @@ impl<T: TargetFactoryBase> TargetFactory for T {
596
600
  .into_iter()
597
601
  .map(|item| -> anyhow::Result<_> {
598
602
  Ok(TypedResourceSetupChangeItem {
599
- key: serde_json::from_value(item.key.clone())?,
603
+ key: utils::deser::from_json_value(item.key.clone())?,
600
604
  setup_change: (item.setup_change as &dyn Any)
601
605
  .downcast_ref::<T::SetupChange>()
602
606
  .ok_or_else(invariance_violation)?,
@@ -614,7 +618,7 @@ fn from_json_combined_state<T: Debug + Clone + Serialize + DeserializeOwned>(
614
618
  Ok(setup::CombinedState {
615
619
  current: existing_states
616
620
  .current
617
- .map(|v| serde_json::from_value(v))
621
+ .map(|v| utils::deser::from_json_value(v))
618
622
  .transpose()?,
619
623
  staging: existing_states
620
624
  .staging
@@ -622,7 +626,7 @@ fn from_json_combined_state<T: Debug + Clone + Serialize + DeserializeOwned>(
622
626
  .map(|v| {
623
627
  anyhow::Ok(match v {
624
628
  setup::StateChange::Upsert(v) => {
625
- setup::StateChange::Upsert(serde_json::from_value(v)?)
629
+ setup::StateChange::Upsert(utils::deser::from_json_value(v)?)
626
630
  }
627
631
  setup::StateChange::Delete => setup::StateChange::Delete,
628
632
  })