cocoindex 0.2.18__tar.gz → 0.2.19__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 (454) hide show
  1. {cocoindex-0.2.18 → cocoindex-0.2.19}/Cargo.lock +1 -1
  2. {cocoindex-0.2.18 → cocoindex-0.2.19}/Cargo.toml +1 -1
  3. {cocoindex-0.2.18 → cocoindex-0.2.19}/PKG-INFO +1 -1
  4. {cocoindex-0.2.18 → cocoindex-0.2.19}/THIRD_PARTY_NOTICES.html +1 -1
  5. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/flow_methods.mdx +1 -1
  6. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/image_search.md +1 -1
  7. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/multi_format_index.md +1 -1
  8. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/photo_search.md +2 -2
  9. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/postgres_source.md +1 -1
  10. cocoindex-0.2.19/docs/docs/sources/amazons3.md +121 -0
  11. cocoindex-0.2.19/docs/docs/sources/azureblob.md +80 -0
  12. cocoindex-0.2.19/docs/docs/sources/googledrive.md +56 -0
  13. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/sources/index.md +5 -5
  14. cocoindex-0.2.19/docs/docs/sources/localfile.md +30 -0
  15. cocoindex-0.2.19/docs/docs/sources/postgres.md +104 -0
  16. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/sidebars.ts +5 -0
  17. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/amazon_s3_embedding/README.md +1 -1
  18. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/azure_blob_embedding/README.md +1 -1
  19. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/code_embedding/main.py +4 -9
  20. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/docs_to_knowledge_graph/README.md +1 -1
  21. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/docs_to_knowledge_graph/main.py +14 -4
  22. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/gdrive_text_embedding/README.md +1 -1
  23. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/sources/_engine_builtin_specs.py +3 -0
  24. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/spec.rs +1 -1
  25. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/postgres.rs +34 -18
  26. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/neo4j.rs +29 -6
  27. {cocoindex-0.2.18 → cocoindex-0.2.19}/.cargo/config.toml +0 -0
  28. {cocoindex-0.2.18 → cocoindex-0.2.19}/.env.lib_debug +0 -0
  29. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  30. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  31. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/SECURITY.md +0 -0
  32. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/scripts/update_version.sh +0 -0
  33. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/CI.yml +0 -0
  34. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/_docs_release.yml +0 -0
  35. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/_test.yml +0 -0
  36. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/docs_release.yml +0 -0
  37. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/docs_test.yml +0 -0
  38. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/format.yml +0 -0
  39. {cocoindex-0.2.18 → cocoindex-0.2.19}/.github/workflows/release.yml +0 -0
  40. {cocoindex-0.2.18 → cocoindex-0.2.19}/.gitignore +0 -0
  41. {cocoindex-0.2.18 → cocoindex-0.2.19}/.pre-commit-config.yaml +0 -0
  42. {cocoindex-0.2.18 → cocoindex-0.2.19}/CODE_OF_CONDUCT.md +0 -0
  43. {cocoindex-0.2.18 → cocoindex-0.2.19}/CONTRIBUTING.md +0 -0
  44. {cocoindex-0.2.18 → cocoindex-0.2.19}/LICENSE +0 -0
  45. {cocoindex-0.2.18 → cocoindex-0.2.19}/README.md +0 -0
  46. {cocoindex-0.2.18 → cocoindex-0.2.19}/about.hbs +0 -0
  47. {cocoindex-0.2.18 → cocoindex-0.2.19}/about.toml +0 -0
  48. {cocoindex-0.2.18 → cocoindex-0.2.19}/dev/README.md +0 -0
  49. {cocoindex-0.2.18 → cocoindex-0.2.19}/dev/generate_cli_docs.py +0 -0
  50. {cocoindex-0.2.18 → cocoindex-0.2.19}/dev/neo4j.yaml +0 -0
  51. {cocoindex-0.2.18 → cocoindex-0.2.19}/dev/postgres.yaml +0 -0
  52. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/.gitignore +0 -0
  53. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/README.md +0 -0
  54. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/about/community.md +0 -0
  55. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/ai/llm.mdx +0 -0
  56. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/contributing/guide.md +0 -0
  57. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/contributing/new_built_in_target.mdx +0 -0
  58. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/contributing/setup_dev_environment.md +0 -0
  59. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/basics.md +0 -0
  60. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/cli-commands.md +0 -0
  61. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/cli.mdx +0 -0
  62. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/data_example.svg +0 -0
  63. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/data_types.mdx +0 -0
  64. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/flow_def.mdx +0 -0
  65. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/flow_example.svg +0 -0
  66. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/core/settings.mdx +0 -0
  67. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/custom_ops/custom_functions.mdx +0 -0
  68. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/custom_ops/custom_targets.mdx +0 -0
  69. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/academic_papers_index.md +0 -0
  70. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/codebase_index.md +0 -0
  71. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/custom_targets.md +0 -0
  72. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/docs_to_knowledge_graph.md +0 -0
  73. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/document_ai.md +0 -0
  74. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/manual_extraction.md +0 -0
  75. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/patient_form_extraction.md +0 -0
  76. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/product_recommendation.md +0 -0
  77. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/examples/simple_vector_index.md +0 -0
  78. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/examples/index.md +0 -0
  79. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/getting_started/installation.md +0 -0
  80. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/getting_started/markdown_files.zip +0 -0
  81. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/getting_started/overview.md +0 -0
  82. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/getting_started/quickstart.md +0 -0
  83. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/ops/functions.md +0 -0
  84. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/query.mdx +0 -0
  85. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/index.md +0 -0
  86. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/kuzu.md +0 -0
  87. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/lancedb.md +0 -0
  88. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/neo4j.md +0 -0
  89. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/postgres.md +0 -0
  90. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/targets/qdrant.md +0 -0
  91. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/tutorials/live_updates.md +0 -0
  92. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
  93. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/docusaurus.config.ts +0 -0
  94. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/package.json +0 -0
  95. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/components/GitHubButton/index.tsx +0 -0
  96. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/css/custom.css +0 -0
  97. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/theme/DocCard/index.tsx +0 -0
  98. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/theme/DocCard/styles.module.css +0 -0
  99. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/theme/DocCardList/index.tsx +0 -0
  100. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/theme/DocCardList/styles.module.css +0 -0
  101. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/src/theme/Root.js +0 -0
  102. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/.nojekyll +0 -0
  103. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/docusaurus.png +0 -0
  104. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/abstract_chunks.png +0 -0
  105. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/basic_info.png +0 -0
  106. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/chunk_embedding.png +0 -0
  107. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/cover.png +0 -0
  108. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/first_page.png +0 -0
  109. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/flow.png +0 -0
  110. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/academic_papers_index/metadata.png +0 -0
  111. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/codebase_index/chunk.png +0 -0
  112. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/codebase_index/cover.png +0 -0
  113. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/codebase_index/flow.png +0 -0
  114. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/custom_targets/convert.png +0 -0
  115. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/custom_targets/cover.png +0 -0
  116. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/cover.png +0 -0
  117. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/dedupe.png +0 -0
  118. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/export_document.png +0 -0
  119. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/export_relationship.png +0 -0
  120. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/extract_relationship.png +0 -0
  121. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/flow.png +0 -0
  122. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/relationship.png +0 -0
  123. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/docs_to_knowledge_graph/summary.png +0 -0
  124. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/document_ai/cover.png +0 -0
  125. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/document_ai/document_ai.png +0 -0
  126. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/document_ai/processor.png +0 -0
  127. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/image_search/cover.png +0 -0
  128. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/image_search/embedding.png +0 -0
  129. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/image_search/flow.png +0 -0
  130. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/image_search/multi_modal_architecture.png +0 -0
  131. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/image_search/result.png +0 -0
  132. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/manual_extraction/cover.png +0 -0
  133. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/manual_extraction/extraction.png +0 -0
  134. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/manual_extraction/flow.png +0 -0
  135. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/manual_extraction/summary.png +0 -0
  136. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/multi_format_index/colpali_architecture.png +0 -0
  137. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/multi_format_index/cover.png +0 -0
  138. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/multi_format_index/embed.png +0 -0
  139. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/multi_format_index/flow.png +0 -0
  140. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/multi_format_index/pages.png +0 -0
  141. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/patient_form_extraction/cover.png +0 -0
  142. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/patient_form_extraction/extraction.png +0 -0
  143. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/patient_form_extraction/fields.png +0 -0
  144. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/patient_form_extraction/flow.png +0 -0
  145. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/patient_form_extraction/tomarkdown.png +0 -0
  146. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/photo_search/cover.png +0 -0
  147. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/photo_search/extraction.png +0 -0
  148. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/photo_search/flow.png +0 -0
  149. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/collector.png +0 -0
  150. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/cover.png +0 -0
  151. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/description.png +0 -0
  152. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/embed.png +0 -0
  153. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/flow.png +0 -0
  154. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/lineage.png +0 -0
  155. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/price.png +0 -0
  156. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/postgres_source/source.png +0 -0
  157. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/cover.png +0 -0
  158. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/dedupe.png +0 -0
  159. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/export_all.png +0 -0
  160. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/export_product.png +0 -0
  161. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/export_taxonomy.png +0 -0
  162. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/extract_product.png +0 -0
  163. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/extract_taxonomy.png +0 -0
  164. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/neo4j.png +0 -0
  165. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/parse_json.png +0 -0
  166. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/product_recommendation/taxonomy.png +0 -0
  167. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/simple_vector_index/chunk.png +0 -0
  168. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/simple_vector_index/cover.png +0 -0
  169. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/simple_vector_index/embed.png +0 -0
  170. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/examples/simple_vector_index/flow.png +0 -0
  171. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/favicon.ico +0 -0
  172. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/icon.svg +0 -0
  173. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/img/incremental-etl.gif +0 -0
  174. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/static/robots.txt +0 -0
  175. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/tsconfig.json +0 -0
  176. {cocoindex-0.2.18 → cocoindex-0.2.19}/docs/yarn.lock +0 -0
  177. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/amazon_s3_embedding/.env.example +0 -0
  178. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/amazon_s3_embedding/.gitignore +0 -0
  179. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/amazon_s3_embedding/main.py +0 -0
  180. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/amazon_s3_embedding/pyproject.toml +0 -0
  181. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/azure_blob_embedding/.env.example +0 -0
  182. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/azure_blob_embedding/.gitignore +0 -0
  183. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/azure_blob_embedding/main.py +0 -0
  184. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/azure_blob_embedding/pyproject.toml +0 -0
  185. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/code_embedding/.env +0 -0
  186. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/code_embedding/README.md +0 -0
  187. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/code_embedding/pyproject.toml +0 -0
  188. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/.env +0 -0
  189. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/.gitignore +0 -0
  190. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/README.md +0 -0
  191. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/data/bizarre_animals.md +0 -0
  192. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/data/chunk_norris.md +0 -0
  193. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/main.py +0 -0
  194. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/custom_output_files/pyproject.toml +0 -0
  195. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/docs_to_knowledge_graph/.env +0 -0
  196. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
  197. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/.env +0 -0
  198. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/README.md +0 -0
  199. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
  200. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
  201. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
  202. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/images/einplanck3.jpg +0 -0
  203. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/main.py +0 -0
  204. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/face_recognition/pyproject.toml +0 -0
  205. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/.dockerignore +0 -0
  206. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/.env +0 -0
  207. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/README.md +0 -0
  208. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/compose.yaml +0 -0
  209. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/dockerfile +0 -0
  210. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  211. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/main.py +0 -0
  212. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/fastapi_server_docker/requirements.txt +0 -0
  213. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/gdrive_text_embedding/.env.example +0 -0
  214. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/gdrive_text_embedding/.gitignore +0 -0
  215. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/gdrive_text_embedding/main.py +0 -0
  216. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/gdrive_text_embedding/pyproject.toml +0 -0
  217. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/.env +0 -0
  218. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/README.md +0 -0
  219. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/colpali_main.py +0 -0
  220. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/.gitignore +0 -0
  221. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/index.html +0 -0
  222. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/package-lock.json +0 -0
  223. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/package.json +0 -0
  224. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/src/App.jsx +0 -0
  225. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/src/main.jsx +0 -0
  226. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/src/style.css +0 -0
  227. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/frontend/vite.config.js +0 -0
  228. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/img/cat1.jpeg +0 -0
  229. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/img/dog1.jpeg +0 -0
  230. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/img/elephant1.jpg +0 -0
  231. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/img/giraffe.jpg +0 -0
  232. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/main.py +0 -0
  233. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/image_search/pyproject.toml +0 -0
  234. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/.env +0 -0
  235. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/README.md +0 -0
  236. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/data/bizarre_animals.md +0 -0
  237. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/data/chunk_norris.md +0 -0
  238. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/main.py +0 -0
  239. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/live_updates/pyproject.toml +0 -0
  240. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/.env +0 -0
  241. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/README.md +0 -0
  242. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/main.py +0 -0
  243. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  244. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  245. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  246. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  247. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/manuals_llm_extraction/pyproject.toml +0 -0
  248. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/.env +0 -0
  249. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/README.md +0 -0
  250. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/main.py +0 -0
  251. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/pyproject.toml +0 -0
  252. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
  253. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
  254. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
  255. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
  256. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
  257. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
  258. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
  259. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
  260. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/.env.example +0 -0
  261. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/.gitignore +0 -0
  262. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/README.md +0 -0
  263. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/main.py +0 -0
  264. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
  265. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
  266. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
  267. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
  268. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/paper_metadata/pyproject.toml +0 -0
  269. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/.env.example +0 -0
  270. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/README.md +0 -0
  271. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/data/README.md +0 -0
  272. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  273. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  274. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  275. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  276. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/main.py +0 -0
  277. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/patient_intake_extraction/pyproject.toml +0 -0
  278. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/.env +0 -0
  279. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/README.md +0 -0
  280. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/main.py +0 -0
  281. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  282. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  283. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  284. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/pdf_embedding/pyproject.toml +0 -0
  285. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/postgres_source/.env +0 -0
  286. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/postgres_source/README.md +0 -0
  287. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/postgres_source/main.py +0 -0
  288. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/postgres_source/prepare_source_data.sql +0 -0
  289. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/postgres_source/pyproject.toml +0 -0
  290. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/.env.example +0 -0
  291. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/.gitignore +0 -0
  292. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/README.md +0 -0
  293. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/img/cocoinsight.png +0 -0
  294. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/img/neo4j.png +0 -0
  295. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/main.py +0 -0
  296. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p1.json +0 -0
  297. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p2.json +0 -0
  298. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p3.json +0 -0
  299. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p4.json +0 -0
  300. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p5.json +0 -0
  301. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p6.json +0 -0
  302. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p7.json +0 -0
  303. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p8.json +0 -0
  304. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/products/p9.json +0 -0
  305. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/product_recommendation/pyproject.toml +0 -0
  306. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/.env +0 -0
  307. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/README.md +0 -0
  308. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  309. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/main.py +0 -0
  310. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  311. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  312. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  313. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding/pyproject.toml +0 -0
  314. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/.env +0 -0
  315. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/.gitignore +0 -0
  316. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/README.md +0 -0
  317. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/main.py +0 -0
  318. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/markdown_files/rfc8259.md +0 -0
  319. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_lancedb/pyproject.toml +0 -0
  320. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_qdrant/.env +0 -0
  321. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_qdrant/README.md +0 -0
  322. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_qdrant/main.py +0 -0
  323. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  324. {cocoindex-0.2.18 → cocoindex-0.2.19}/examples/text_embedding_qdrant/pyproject.toml +0 -0
  325. {cocoindex-0.2.18 → cocoindex-0.2.19}/pyproject.toml +0 -0
  326. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/__init__.py +0 -0
  327. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/auth_registry.py +0 -0
  328. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/cli.py +0 -0
  329. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/engine_object.py +0 -0
  330. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/engine_value.py +0 -0
  331. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/flow.py +0 -0
  332. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/functions/__init__.py +0 -0
  333. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/functions/_engine_builtin_specs.py +0 -0
  334. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/functions/colpali.py +0 -0
  335. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/functions/sbert.py +0 -0
  336. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/functions.py +0 -0
  337. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/index.py +0 -0
  338. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/lib.py +0 -0
  339. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/llm.py +0 -0
  340. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/op.py +0 -0
  341. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/py.typed +0 -0
  342. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/query_handler.py +0 -0
  343. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/runtime.py +0 -0
  344. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/setting.py +0 -0
  345. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/setup.py +0 -0
  346. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/sources/__init__.py +0 -0
  347. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/subprocess_exec.py +0 -0
  348. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/targets/__init__.py +0 -0
  349. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/targets/_engine_builtin_specs.py +0 -0
  350. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/targets/lancedb.py +0 -0
  351. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/__init__.py +0 -0
  352. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_engine_object.py +0 -0
  353. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_engine_value.py +0 -0
  354. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_optional_database.py +0 -0
  355. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_transform_flow.py +0 -0
  356. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_typing.py +0 -0
  357. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/tests/test_validation.py +0 -0
  358. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/typing.py +0 -0
  359. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/user_app_loader.py +0 -0
  360. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/utils.py +0 -0
  361. {cocoindex-0.2.18 → cocoindex-0.2.19}/python/cocoindex/validation.py +0 -0
  362. {cocoindex-0.2.18 → cocoindex-0.2.19}/ruff.toml +0 -0
  363. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/duration.rs +0 -0
  364. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/field_attrs.rs +0 -0
  365. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/json_schema.rs +0 -0
  366. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/mod.rs +0 -0
  367. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/schema.rs +0 -0
  368. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/base/value.rs +0 -0
  369. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/analyzed_flow.rs +0 -0
  370. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/analyzer.rs +0 -0
  371. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/exec_ctx.rs +0 -0
  372. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/flow_builder.rs +0 -0
  373. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/mod.rs +0 -0
  374. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/builder/plan.rs +0 -0
  375. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/db_tracking.rs +0 -0
  376. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/db_tracking_setup.rs +0 -0
  377. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/dumper.rs +0 -0
  378. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/evaluator.rs +0 -0
  379. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/indexing_status.rs +0 -0
  380. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/live_updater.rs +0 -0
  381. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/memoization.rs +0 -0
  382. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/mod.rs +0 -0
  383. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/row_indexer.rs +0 -0
  384. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/source_indexer.rs +0 -0
  385. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/execution/stats.rs +0 -0
  386. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/lib.rs +0 -0
  387. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/lib_context.rs +0 -0
  388. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/anthropic.rs +0 -0
  389. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/gemini.rs +0 -0
  390. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/litellm.rs +0 -0
  391. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/mod.rs +0 -0
  392. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/ollama.rs +0 -0
  393. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/openai.rs +0 -0
  394. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/openrouter.rs +0 -0
  395. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/vllm.rs +0 -0
  396. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/llm/voyage.rs +0 -0
  397. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/factory_bases.rs +0 -0
  398. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/detect_program_lang.rs +0 -0
  399. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/embed_text.rs +0 -0
  400. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/extract_by_llm.rs +0 -0
  401. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/mod.rs +0 -0
  402. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/parse_json.rs +0 -0
  403. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/split_by_separators.rs +0 -0
  404. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/split_recursively.rs +0 -0
  405. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/functions/test_utils.rs +0 -0
  406. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/interface.rs +0 -0
  407. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/mod.rs +0 -0
  408. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/py_factory.rs +0 -0
  409. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/registration.rs +0 -0
  410. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/registry.rs +0 -0
  411. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sdk.rs +0 -0
  412. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/shared/mod.rs +0 -0
  413. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/shared/postgres.rs +0 -0
  414. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/shared/program_langs.rs +0 -0
  415. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/shared/split.rs +0 -0
  416. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/amazon_s3.rs +0 -0
  417. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/azure_blob.rs +0 -0
  418. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/google_drive.rs +0 -0
  419. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/local_file.rs +0 -0
  420. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/mod.rs +0 -0
  421. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/shared/mod.rs +0 -0
  422. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/sources/shared/pattern_matcher.rs +0 -0
  423. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/kuzu.rs +0 -0
  424. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/mod.rs +0 -0
  425. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/postgres.rs +0 -0
  426. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/qdrant.rs +0 -0
  427. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/shared/mod.rs +0 -0
  428. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/shared/property_graph.rs +0 -0
  429. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/ops/targets/shared/table_columns.rs +0 -0
  430. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/prelude.rs +0 -0
  431. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/py/convert.rs +0 -0
  432. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/py/mod.rs +0 -0
  433. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/server.rs +0 -0
  434. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/service/error.rs +0 -0
  435. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/service/flows.rs +0 -0
  436. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/service/mod.rs +0 -0
  437. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/service/query_handler.rs +0 -0
  438. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/settings.rs +0 -0
  439. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/auth_registry.rs +0 -0
  440. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/components.rs +0 -0
  441. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/db_metadata.rs +0 -0
  442. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/driver.rs +0 -0
  443. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/flow_features.rs +0 -0
  444. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/mod.rs +0 -0
  445. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/setup/states.rs +0 -0
  446. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/concur_control.rs +0 -0
  447. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/db.rs +0 -0
  448. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/deser.rs +0 -0
  449. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/fingerprint.rs +0 -0
  450. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/immutable.rs +0 -0
  451. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/mod.rs +0 -0
  452. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/retryable.rs +0 -0
  453. {cocoindex-0.2.18 → cocoindex-0.2.19}/src/utils/str_sanitize.rs +0 -0
  454. {cocoindex-0.2.18 → cocoindex-0.2.19}/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.18"
1286
+ version = "0.2.19"
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.18"
5
+ version = "0.2.19"
6
6
  edition = "2024"
7
7
  rust-version = "1.89"
8
8
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.2.18
3
+ Version: 0.2.19
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.18</a></li>
2431
+ <li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.19</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>
@@ -210,7 +210,7 @@ A data source may enable one or multiple *change capture mechanisms*:
210
210
  * Configured with a [refresh interval](flow_def#refresh-interval), which is generally applicable to all data sources.
211
211
 
212
212
  * Specific data sources also provide their specific change capture mechanisms.
213
- For example, [`Postgres` source](../sources/#postgres) listens to PostgreSQL's change notifications, [`AmazonS3` source](../sources/#amazons3) watches S3 bucket's change events, and [`GoogleDrive` source](../sources#googledrive) allows polling recent modified files.
213
+ For example, [`Postgres` source](../sources/postgres) listens to PostgreSQL's change notifications, [`AmazonS3` source](../sources/amazons3) watches S3 bucket's change events, and [`GoogleDrive` source](../sources/googledrive) allows polling recent modified files.
214
214
  See documentations for specific data sources.
215
215
 
216
216
  Change capture mechanisms enable CocoIndex to continuously capture changes from the source data and update the target data accordingly, under live update mode.
@@ -66,7 +66,7 @@ def image_object_embedding_flow(flow_builder, data_scope):
66
66
 
67
67
  The `add_source` function sets up a table with fields like `filename` and `content`. Images are automatically re-scanned every minute.
68
68
 
69
- <DocumentationButton url="https://cocoindex.io/docs/ops/sources#localfile" text="LocalFile" />
69
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources/localfile" text="LocalFile" />
70
70
 
71
71
 
72
72
  ## Process Each Image and Collect the Embedding
@@ -52,7 +52,7 @@ data_scope["documents"] = flow_builder.add_source(
52
52
  cocoindex.sources.LocalFile(path="source_files", binary=True)
53
53
  )
54
54
  ```
55
- <DocumentationButton url="https://cocoindex.io/docs/ops/sources#localfile" text="LocalFile" margin="0 0 16px 0" />
55
+ <DocumentationButton url="https://cocoindex.io/docs/ops/sources/localfile" text="LocalFile" margin="0 0 16px 0" />
56
56
 
57
57
 
58
58
  ## Convert Files to Pages
@@ -65,8 +65,8 @@ def face_recognition_flow(flow_builder, data_scope):
65
65
  This creates a table with `filename` and `content` fields. 📂
66
66
 
67
67
 
68
- You can connect it to your [S3 Buckets](https://cocoindex.io/docs/ops/sources#amazons3) (with SQS integration, [example](https://cocoindex.io/blogs/s3-incremental-etl))
69
- or [Azure Blob store](https://cocoindex.io/docs/ops/sources#azureblob).
68
+ You can connect it to your [S3 Buckets](https://cocoindex.io/docs/ops/sources/amazons3) (with SQS integration, [example](https://cocoindex.io/blogs/s3-incremental-etl))
69
+ or [Azure Blob store](https://cocoindex.io/docs/ops/sources/azureblob).
70
70
 
71
71
  ## Detect and Extract Faces
72
72
 
@@ -59,7 +59,7 @@ CocoIndex incrementally sync data from Postgres. When new or updated rows are fo
59
59
  - `notification` enables change capture based on Postgres LISTEN/NOTIFY. Each change triggers an incremental processing on the specific row immediately.
60
60
  - Regardless if `notification` is provided or not, CocoIndex still needs to scan the full table to detect changes in some scenarios (e.g. between two `update` invocation), and the `ordinal_column` provides a field that CocoIndex can use to quickly detect which row has changed without reading value columns.
61
61
 
62
- Check [Postgres source](https://cocoindex.io/docs/ops/sources#postgres) for more details.
62
+ Check [Postgres source](https://cocoindex.io/docs/ops/sources/postgres) for more details.
63
63
 
64
64
  If you use the Postgres database hosted by Supabase, please click Connect on your project dashboard and find the URL there. Check [DatabaseConnectionSpec](https://cocoindex.io/docs/core/settings#databaseconnectionspec)
65
65
  for more details.
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: AmazonS3
3
+ toc_max_heading_level: 4
4
+ description: CocoIndex AmazonS3 Built-in Sources
5
+ ---
6
+
7
+ ### Setup for Amazon S3
8
+
9
+ #### Setup AWS accounts
10
+
11
+ You need to setup AWS accounts to own and access Amazon S3. In particular,
12
+
13
+ * Setup an AWS account from [AWS homepage](https://aws.amazon.com/) or login with an existing account.
14
+ * AWS recommends all programming access to AWS should be done using [IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) instead of root account. You can create an IAM user at [AWS IAM Console](https://console.aws.amazon.com/iam/home).
15
+ * Make sure your IAM user at least have the following permissions in the IAM console:
16
+ * Attach permission policy `AmazonS3ReadOnlyAccess` for read-only access to Amazon S3.
17
+ * (optional) Attach permission policy `AmazonSQSFullAccess` to receive notifications from Amazon SQS, if you want to enable change event notifications.
18
+ Note that `AmazonSQSReadOnlyAccess` is not enough, as we need to be able to delete messages from the queue after they're processed.
19
+
20
+
21
+ #### Setup Credentials for AWS SDK
22
+
23
+ AWS SDK needs to access credentials to access Amazon S3.
24
+ The easiest way to setup credentials is to run:
25
+
26
+ ```sh
27
+ aws configure
28
+ ```
29
+
30
+ It will create a credentials file at `~/.aws/credentials` and config at `~/.aws/config`.
31
+
32
+ See the following documents if you need more control:
33
+
34
+ * [`aws configure`](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html)
35
+ * [Globally configuring AWS SDKs and tools](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)
36
+
37
+
38
+ #### Create Amazon S3 buckets
39
+
40
+ You can create a Amazon S3 bucket in the [Amazon S3 Console](https://s3.console.aws.amazon.com/s3/home), and upload your files to it.
41
+
42
+ It's also doable by using the AWS CLI `aws s3 mb` (to create buckets) and `aws s3 cp` (to upload files).
43
+ When doing so, make sure your current user also has permission policy `AmazonS3FullAccess`.
44
+
45
+ #### (Optional) Setup SQS queue for event notifications
46
+
47
+ You can setup an Amazon Simple Queue Service (Amazon SQS) queue to receive change event notifications from Amazon S3.
48
+ It provides a change capture mechanism for your AmazonS3 data source, to trigger reprocessing of your AWS S3 files on any creation, update or deletion. Please use a dedicated SQS queue for each of your S3 data source.
49
+
50
+ This is how to setup:
51
+
52
+ * Create a SQS queue with proper access policy.
53
+ * In the [Amazon SQS Console](https://console.aws.amazon.com/sqs/home), create a queue.
54
+ * Add access policy statements, to make sure Amazon S3 can send messages to the queue.
55
+ ```json
56
+ {
57
+ ...
58
+ "Statement": [
59
+ ...
60
+ {
61
+ "Sid": "__publish_statement",
62
+ "Effect": "Allow",
63
+ "Principal": {
64
+ "Service": "s3.amazonaws.com"
65
+ },
66
+ "Resource": "${SQS_QUEUE_ARN}",
67
+ "Action": "SQS:SendMessage",
68
+ "Condition": {
69
+ "ArnLike": {
70
+ "aws:SourceArn": "${S3_BUCKET_ARN}"
71
+ }
72
+ }
73
+ }
74
+ ]
75
+ }
76
+ ```
77
+
78
+ Here, you need to replace `${SQS_QUEUE_ARN}` and `${S3_BUCKET_ARN}` with the actual ARN of your SQS queue and S3 bucket.
79
+ You can find the ARN of your SQS queue in the existing policy statement (it starts with `arn:aws:sqs:`), and the ARN of your S3 bucket in the S3 console (it starts with `arn:aws:s3:`).
80
+
81
+ * In the [Amazon S3 Console](https://s3.console.aws.amazon.com/s3/home), open your S3 bucket. Under *Properties* tab, click *Create event notification*.
82
+ * Fill in an arbitrary event name, e.g. `S3ChangeNotifications`.
83
+ * If you want your AmazonS3 data source to expose a subset of files sharing a prefix, set the same prefix here. Otherwise, leave it empty.
84
+ * Select the following event types: *All object create events*, *All object removal events*.
85
+ * Select *SQS queue* as the destination, and specify the SQS queue you created above.
86
+
87
+ AWS's [Guide of Configuring a Bucket for Notifications](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html#step1-create-sqs-queue-for-notification) provides more details.
88
+
89
+ ### Spec
90
+
91
+ The spec takes the following fields:
92
+ * `bucket_name` (`str`): Amazon S3 bucket name.
93
+ * `prefix` (`str`, optional): if provided, only files with path starting with this prefix will be imported.
94
+ * `binary` (`bool`, optional): whether reading files as binary (instead of text).
95
+ * `included_patterns` (`list[str]`, optional): a list of glob patterns to include files, e.g. `["*.txt", "docs/**/*.md"]`.
96
+ If not specified, all files will be included.
97
+ * `excluded_patterns` (`list[str]`, optional): a list of glob patterns to exclude files, e.g. `["*.tmp", "**/*.log"]`.
98
+ Any file or directory matching these patterns will be excluded even if they match `included_patterns`.
99
+ If not specified, no files will be excluded.
100
+
101
+ :::info
102
+
103
+ `included_patterns` and `excluded_patterns` are using Unix-style glob syntax. See [globset syntax](https://docs.rs/globset/latest/globset/index.html#syntax) for the details.
104
+
105
+ :::
106
+
107
+ * `sqs_queue_url` (`str`, optional): if provided, the source will receive change event notifications from Amazon S3 via this SQS queue.
108
+
109
+ :::info
110
+
111
+ We will delete messages from the queue after they're processed.
112
+ If there are unrelated messages in the queue (e.g. test messages that SQS will send automatically on queue creation, messages for a different bucket, for non-included files, etc.), we will delete the message upon receiving it, to avoid repeatedly receiving irrelevant messages after they're redelivered.
113
+
114
+ :::
115
+
116
+ ### Schema
117
+
118
+ The output is a [*KTable*](/docs/core/data_types#ktable) with the following sub fields:
119
+
120
+ * `filename` (*Str*, key): the filename of the file, including the path, relative to the root directory, e.g. `"dir1/file1.md"`.
121
+ * `content` (*Str* if `binary` is `False`, otherwise *Bytes*): the content of the file.
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: AzureBlob
3
+ toc_max_heading_level: 4
4
+ description: CocoIndex AzureBlob Built-in Sources
5
+ ---
6
+
7
+ The `AzureBlob` source imports files from Azure Blob Storage.
8
+
9
+ ### Setup for Azure Blob Storage
10
+
11
+ #### Get Started
12
+
13
+ If you didn't have experience with Azure Blob Storage, you can refer to the [quickstart](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
14
+ These are actions you need to take:
15
+
16
+ * Create a storage account in the [Azure Portal](https://portal.azure.com/).
17
+ * Create a container in the storage account.
18
+ * Upload your files to the container.
19
+ * Grant the user / identity / service principal (depends on your authentication method, see below) access to the storage account. At minimum, a **Storage Blob Data Reader** role is needed. See [this doc](https://learn.microsoft.com/en-us/azure/storage/blobs/authorize-data-operations-portal) for reference.
20
+
21
+ #### Authentication
22
+
23
+ We support the following authentication methods:
24
+
25
+ * Shared access signature (SAS) tokens.
26
+ You can generate it from the Azure Portal in the settings for a specific container.
27
+ You need to provide at least *List* and *Read* permissions when generating the SAS token.
28
+ It's a query string in the form of
29
+ `sp=rl&st=2025-07-20T09:33:00Z&se=2025-07-19T09:48:53Z&sv=2024-11-04&sr=c&sig=i3FDjsadfklj3%23adsfkk`.
30
+
31
+ * Storage account access key. You can find it in the Azure Portal in the settings for a specific storage account.
32
+
33
+ * Default credential. When none of the above is provided, it will use the default credential.
34
+
35
+ This allows you to connect to Azure services without putting any secrets in the code or flow spec.
36
+ It automatically chooses the best authentication method based on your environment:
37
+
38
+ * On your local machine: uses your Azure CLI login (`az login`) or environment variables.
39
+
40
+ ```sh
41
+ az login
42
+ # Optional: Set a default subscription if you have more than one
43
+ az account set --subscription "<YOUR_SUBSCRIPTION_NAME_OR_ID>"
44
+ ```
45
+ * In Azure (VM, App Service, AKS, etc.): uses the resource’s Managed Identity.
46
+ * In automated environments: supports Service Principals via environment variables
47
+ * `AZURE_CLIENT_ID`
48
+ * `AZURE_TENANT_ID`
49
+ * `AZURE_CLIENT_SECRET`
50
+
51
+ You can refer to [this doc](https://learn.microsoft.com/en-us/azure/developer/python/sdk/authentication/overview) for more details.
52
+
53
+ ### Spec
54
+
55
+ The spec takes the following fields:
56
+
57
+ * `account_name` (`str`): the name of the storage account.
58
+ * `container_name` (`str`): the name of the container.
59
+ * `prefix` (`str`, optional): if provided, only files with path starting with this prefix will be imported.
60
+ * `binary` (`bool`, optional): whether reading files as binary (instead of text).
61
+ * `included_patterns` (`list[str]`, optional): a list of glob patterns to include files, e.g. `["*.txt", "docs/**/*.md"]`.
62
+ If not specified, all files will be included.
63
+ * `excluded_patterns` (`list[str]`, optional): a list of glob patterns to exclude files, e.g. `["*.tmp", "**/*.log"]`.
64
+ Any file or directory matching these patterns will be excluded even if they match `included_patterns`.
65
+ If not specified, no files will be excluded.
66
+ * `sas_token` (`cocoindex.TransientAuthEntryReference[str]`, optional): a SAS token for authentication.
67
+ * `account_access_key` (`cocoindex.TransientAuthEntryReference[str]`, optional): an account access key for authentication.
68
+
69
+ :::info
70
+
71
+ `included_patterns` and `excluded_patterns` are using Unix-style glob syntax. See [globset syntax](https://docs.rs/globset/latest/globset/index.html#syntax) for the details.
72
+
73
+ :::
74
+
75
+ ### Schema
76
+
77
+ The output is a [*KTable*](/docs/core/data_types#ktable) with the following sub fields:
78
+
79
+ * `filename` (*Str*, key): the filename of the file, including the path, relative to the root directory, e.g. `"dir1/file1.md"`.
80
+ * `content` (*Str* if `binary` is `False`, otherwise *Bytes*): the content of the file.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: GoogleDrive
3
+ toc_max_heading_level: 4
4
+ description: CocoIndex GoogleDrive Built-in Sources
5
+ ---
6
+
7
+ The `GoogleDrive` source imports files from Google Drive.
8
+
9
+ ### Setup for Google Drive
10
+
11
+ To access files in Google Drive, the `GoogleDrive` source will need to authenticate by service accounts.
12
+
13
+ 1. Register / login in **Google Cloud**.
14
+ 2. In [**Google Cloud Console**](https://console.cloud.google.com/), search for *Service Accounts*, to enter the *IAM & Admin / Service Accounts* page.
15
+ - **Create a new service account**: Click *+ Create Service Account*. Follow the instructions to finish service account creation.
16
+ - **Add a key and download the credential**: Under "Actions" for this new service account, click *Manage keys* → *Add key* → *Create new key* → *JSON*.
17
+ Download the key file to a safe place.
18
+ 3. In **Google Cloud Console**, search for *Google Drive API*. Enable this API.
19
+ 4. In **Google Drive**, share the folders containing files that need to be imported through your source with the service account's email address.
20
+ **Viewer permission** is sufficient.
21
+ - The email address can be found under the *IAM & Admin / Service Accounts* page (in Step 2), in the format of `{service-account-id}@{gcp-project-id}.iam.gserviceaccount.com`.
22
+ - Copy the folder ID. Folder ID can be found from the last part of the folder's URL, e.g. `https://drive.google.com/drive/u/0/folders/{folder-id}` or `https://drive.google.com/drive/folders/{folder-id}?usp=drive_link`.
23
+
24
+
25
+ ### Spec
26
+
27
+ The spec takes the following fields:
28
+
29
+ * `service_account_credential_path` (`str`): full path to the service account credential file in JSON format.
30
+ * `root_folder_ids` (`list[str]`): a list of Google Drive folder IDs to import files from.
31
+ * `binary` (`bool`, optional): whether reading files as binary (instead of text).
32
+ * `recent_changes_poll_interval` (`datetime.timedelta`, optional): when set, this source provides a change capture mechanism by polling Google Drive for recent modified files periodically.
33
+
34
+ :::info
35
+
36
+ Since it only retrieves metadata for recent modified files (up to the previous poll) during polling,
37
+ it's typically cheaper than a full refresh by setting the [refresh interval](/docs/core/flow_def#refresh-interval) especially when the folder contains a large number of files.
38
+ So you can usually set it with a smaller value compared to the `refresh_interval`.
39
+
40
+ On the other hand, this only detects changes for files that still exist.
41
+ If the file is deleted (or the current account no longer has access to it), this change will not be detected by this change stream.
42
+
43
+ So when a `GoogleDrive` source has `recent_changes_poll_interval` enabled, it's still recommended to set a `refresh_interval`, with a larger value.
44
+ So that most changes can be covered by polling recent changes (with low latency, like 10 seconds), and remaining changes (files no longer exist or accessible) will still be covered (with a higher latency, like 5 minutes, and should be larger if you have a huge number of files like 1M).
45
+ In reality, configure them based on your requirement: how fresh do you need the target index to be?
46
+
47
+ :::
48
+
49
+ ### Schema
50
+
51
+ The output is a [*KTable*](/docs/core/data_types#ktable) with the following sub fields:
52
+
53
+ * `file_id` (*Str*, key): the ID of the file in Google Drive.
54
+ * `filename` (*Str*): the filename of the file, without the path, e.g. `"file1.md"`
55
+ * `mime_type` (*Str*): the MIME type of the file.
56
+ * `content` (*Str* if `binary` is `False`, otherwise *Bytes*): the content of the file.
@@ -10,11 +10,11 @@ In CocoIndex, a source is the data origin you import from (e.g., files, database
10
10
 
11
11
  | Source Type | Description |
12
12
  |----------------|------------------------------------|
13
- | [LocalFile](/docs/sources#localfile) | Local file system |
14
- | [AmazonS3](/docs/sources#amazons3) | Object store (Amazon S3 bucket) |
15
- | [AzureBlob](/docs/sources#azureblob) | Object store (Azure Blob Storage) |
16
- | [GoogleDrive](/docs/sources#googledrive) | Cloud file system (Google Drive) |
17
- | [Postgres](/docs/sources#postgres) | Relational database (Postgres) |
13
+ | [LocalFile](/docs/sources/localfile) | Local file system |
14
+ | [AmazonS3](/docs/sources/amazons3) | Object store (Amazon S3 bucket) |
15
+ | [AzureBlob](/docs/sources/azureblob) | Object store (Azure Blob Storage) |
16
+ | [GoogleDrive](/docs/sources/googledrive) | Cloud file system (Google Drive) |
17
+ | [Postgres](/docs/sources/postgres) | Relational database (Postgres) |
18
18
 
19
19
  Related:
20
20
  - [Life cycle of a indexing flow](/docs/core/basics#life-cycle-of-an-indexing-flow)
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: LocalFile
3
+ toc_max_heading_level: 4
4
+ description: CocoIndex LocalFile Built-in Sources
5
+ ---
6
+
7
+ The `LocalFile` source imports files from a local file system.
8
+
9
+ ### Spec
10
+
11
+ The spec takes the following fields:
12
+ * `path` (`str`): full path of the root directory to import files from
13
+ * `binary` (`bool`, optional): whether reading files as binary (instead of text)
14
+ * `included_patterns` (`list[str]`, optional): a list of glob patterns to include files, e.g. `["*.txt", "docs/**/*.md"]`.
15
+ If not specified, all files will be included.
16
+ * `excluded_patterns` (`list[str]`, optional): a list of glob patterns to exclude files, e.g. `["tmp", "**/node_modules"]`.
17
+ Any file or directory matching these patterns will be excluded even if they match `included_patterns`.
18
+ If not specified, no files will be excluded.
19
+
20
+ :::info
21
+
22
+ `included_patterns` and `excluded_patterns` are using Unix-style glob syntax. See [globset syntax](https://docs.rs/globset/latest/globset/index.html#syntax) for the details.
23
+
24
+ :::
25
+
26
+ ### Schema
27
+
28
+ The output is a [*KTable*](/docs/core/data_types#ktable) with the following sub fields:
29
+ * `filename` (*Str*, key): the filename of the file, including the path, relative to the root directory, e.g. `"dir1/file1.md"`
30
+ * `content` (*Str* if `binary` is `False`, *Bytes* otherwise): the content of the file
@@ -0,0 +1,104 @@
1
+ ---
2
+ title: Postgres
3
+ toc_max_heading_level: 4
4
+ description: CocoIndex Postgres Built-in Sources
5
+ ---
6
+
7
+ The `Postgres` source imports rows from a PostgreSQL table.
8
+
9
+ ### Setup for PostgreSQL
10
+
11
+ * Ensure the table exists and has a primary key. Tables without a primary key are not supported.
12
+ * Grant the connecting user read permissions on the target table (e.g. `SELECT`).
13
+ * Provide a database connection. You can:
14
+ * Use CocoIndex's default database connection, or
15
+ * Provide an explicit connection via a transient auth entry referencing a `DatabaseConnectionSpec` with a `url`, for example:
16
+
17
+ ```python
18
+ cocoindex.add_transient_auth_entry(
19
+ cocoindex.sources.DatabaseConnectionSpec(
20
+ url="postgres://user:password@host:5432/dbname?sslmode=require",
21
+ )
22
+ )
23
+ ```
24
+
25
+ ### Spec
26
+
27
+ The spec takes the following fields:
28
+
29
+ * `table_name` (`str`): the PostgreSQL table to read from.
30
+ * `database` (`cocoindex.TransientAuthEntryReference[DatabaseConnectionSpec]`, optional): database connection reference. If not provided, the default CocoIndex database is used.
31
+ * `included_columns` (`list[str]`, optional): non-primary-key columns to include. If not specified, all non-PK columns are included.
32
+ * `ordinal_column` (`str`, optional): to specify a non-primary-key column used for change tracking and ordering, e.g. can be a modified timestamp or a monotonic version number. Supported types are integer-like (`bigint`/`integer`) and timestamps (`timestamp`, `timestamptz`).
33
+ `ordinal_column` must not be a primary key column.
34
+
35
+ * `filter` (`str`, optional): arbitrary SQL boolean expression to filter rows. Only rows satisfying this condition will be included. For example: `"age > 18"`, `"status = 'active'"`, or `"created_at > '2023-01-01'"`. The expression is added as a WHERE clause to the SQL queries.
36
+
37
+ :::info
38
+
39
+ The `filter` expression is inserted directly into SQL queries. Ensure that:
40
+ * The expression uses valid PostgreSQL syntax
41
+ * Column names and values are properly quoted if needed
42
+ * The expression evaluates to a boolean result
43
+ * You trust the source of the filter expression to avoid SQL injection
44
+
45
+ :::
46
+
47
+ * `notification` (`cocoindex.sources.PostgresNotification`, optional): when present, enable change capture based on Postgres LISTEN/NOTIFY. It has the following fields:
48
+ * `channel_name` (`str`, optional): the Postgres notification channel to listen on. CocoIndex will automatically create the channel with the given name. If omitted, CocoIndex uses `{flow_name}__{source_name}__cocoindex`.
49
+
50
+ :::info
51
+
52
+ If `notification` is provided, CocoIndex listens for row changes using Postgres LISTEN/NOTIFY and creates the required database objects on demand when the flow starts listening:
53
+
54
+ * Function to create notification message: `{channel_name}_n`.
55
+ * Trigger to react to table changes: `{channel_name}_t` on the specified `table_name`.
56
+
57
+ Creation is automatic when listening begins.
58
+
59
+ :::info
60
+
61
+ Currently CocoIndex doesn't automatically clean up these objects when the flow is dropped (unlike targets)
62
+ It's usually OK to leave them as they are, but if you want to clean them up, you can run the following SQL statements to manually drop them:
63
+
64
+ ```sql
65
+ DROP TRIGGER IF EXISTS {channel_name}_t ON "{table_name}";
66
+ DROP FUNCTION IF EXISTS {channel_name}_n();
67
+ ```
68
+
69
+ :::
70
+
71
+ ### Schema
72
+
73
+ The output is a [*KTable*](/docs/core/data_types#ktable) with straightforward 1 to 1 mapping from Postgres table columns to CocoIndex table fields:
74
+
75
+ * Key fields: All primary key columns in the Postgres table will be included automatically as key fields.
76
+ * Value fields: All non-primary-key columns in the Postgres table (included by `included_columns` or all when not specified) appear as value fields.
77
+
78
+ ### Example
79
+
80
+ An example of using `filter` to filter rows:
81
+
82
+ ```python
83
+ data_scope["products"] = flow_builder.add_source(
84
+ cocoindex.sources.Postgres(
85
+ table_name="source_products",
86
+ # Optional. Use the default CocoIndex database if not specified.
87
+ database=cocoindex.add_transient_auth_entry(
88
+ cocoindex.DatabaseConnectionSpec(
89
+ url=os.environ["SOURCE_DATABASE_URL"],
90
+ )
91
+ ),
92
+ # Optional
93
+ ordinal_column="modified_time",
94
+ # Optional
95
+ filter="amount > 0",
96
+ # Optional
97
+ notification=cocoindex.sources.PostgresNotification(),
98
+ ),
99
+ )
100
+ ```
101
+
102
+ You can find end-to-end example using Postgres source at:
103
+
104
+ * [examples/postgres_source](https://github.com/cocoindex-io/cocoindex/tree/main/examples/postgres_source)
@@ -40,6 +40,11 @@ const sidebars: SidebarsConfig = {
40
40
  link: { type: 'doc', id: 'sources/index' },
41
41
  collapsed: true,
42
42
  items: [
43
+ 'sources/amazons3',
44
+ 'sources/azureblob',
45
+ 'sources/googledrive',
46
+ 'sources/localfile',
47
+ 'sources/postgres',
43
48
  ],
44
49
  },
45
50
  {
@@ -9,7 +9,7 @@ Before running the example, you need to:
9
9
  1. [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
10
10
 
11
11
  2. Prepare for Amazon S3.
12
- See [Setup for AWS S3](https://cocoindex.io/docs/ops/sources#setup-for-amazon-s3) for more details.
12
+ See [Setup for AWS S3](https://cocoindex.io/docs/sources/amazons3#setup-for-amazon-s3) for more details.
13
13
 
14
14
  3. Create a `.env` file with your Amazon S3 bucket name and (optionally) prefix.
15
15
  Start from copying the `.env.example`, and then edit it to fill in your bucket name and prefix.
@@ -9,7 +9,7 @@ Before running the example, you need to:
9
9
  1. [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
10
10
 
11
11
  2. Prepare for Azure Blob Storage.
12
- See [Setup for Azure Blob Storage](https://cocoindex.io/docs/ops/sources#setup-for-azure-blob-storage) for more details.
12
+ See [Setup for Azure Blob Storage](https://cocoindex.io/docs/sources/azureblob#setup-for-azure-blob-storage) for more details.
13
13
 
14
14
  3. Create a `.env` file with your Azure Blob Storage container name and (optionally) prefix.
15
15
  Start from copying the `.env.example`, and then edit it to fill in your bucket name and prefix.
@@ -1,7 +1,6 @@
1
1
  from dotenv import load_dotenv
2
2
  from psycopg_pool import ConnectionPool
3
3
  from pgvector.psycopg import register_vector
4
- from typing import Any
5
4
  import functools
6
5
  import cocoindex
7
6
  import os
@@ -9,12 +8,6 @@ from numpy.typing import NDArray
9
8
  import numpy as np
10
9
 
11
10
 
12
- @cocoindex.op.function()
13
- def extract_extension(filename: str) -> str:
14
- """Extract the extension of a filename."""
15
- return os.path.splitext(filename)[1]
16
-
17
-
18
11
  @cocoindex.transform_flow()
19
12
  def code_to_embedding(
20
13
  text: cocoindex.DataSlice[str],
@@ -53,10 +46,12 @@ def code_embedding_flow(
53
46
  code_embeddings = data_scope.add_collector()
54
47
 
55
48
  with data_scope["files"].row() as file:
56
- file["extension"] = file["filename"].transform(extract_extension)
49
+ file["language"] = file["filename"].transform(
50
+ cocoindex.functions.DetectProgrammingLanguage()
51
+ )
57
52
  file["chunks"] = file["content"].transform(
58
53
  cocoindex.functions.SplitRecursively(),
59
- language=file["extension"],
54
+ language=file["language"],
60
55
  chunk_size=1000,
61
56
  min_chunk_size=300,
62
57
  chunk_overlap=300,
@@ -16,7 +16,7 @@ Please drop [Cocoindex on Github](https://github.com/cocoindex-io/cocoindex) a s
16
16
  * [Install Postgres](https://cocoindex.io/docs/getting_started/installation#-install-postgres) if you don't have one.
17
17
  * Install [Neo4j](https://cocoindex.io/docs/ops/targets#neo4j-dev-instance) or [Kuzu](https://cocoindex.io/docs/ops/targets#kuzu-dev-instance) if you don't have one.
18
18
  * The example uses Neo4j by default for now. If you want to use Kuzu, find out the "SELECT ONE GRAPH DATABASE TO USE" section and switch the active branch.
19
- * [Configure your OpenAI API key](https://cocoindex.io/docs/ai/llm#openai).
19
+ * Install / configure LLM API. In this example we use Ollama, which runs LLM model locally. You need to get it ready following [this guide](https://cocoindex.io/docs/ai/llm#ollama). Alternatively, you can also follow the comments in source code to switch to OpenAI, and [configure OpenAI API key](https://cocoindex.io/docs/ai/llm#openai) before running the example.
20
20
 
21
21
  ## Documentation
22
22
  You can read the official CocoIndex Documentation for Property Graph Targets [here](https://cocoindex.io/docs/ops/targets#property-graph-targets).
@@ -82,9 +82,14 @@ def docs_to_kg_flow(
82
82
  cocoindex.functions.ExtractByLlm(
83
83
  llm_spec=cocoindex.LlmSpec(
84
84
  # Supported LLM: https://cocoindex.io/docs/ai/llm
85
- api_type=cocoindex.LlmApiType.OPENAI,
86
- model="gpt-4o",
85
+ api_type=cocoindex.LlmApiType.OLLAMA,
86
+ model="llama3.2",
87
87
  ),
88
+ # Alternative: Use OpenAI API model instead of Ollama
89
+ # llm_spec=cocoindex.LlmSpec(
90
+ # api_type=cocoindex.LlmApiType.OPENAI,
91
+ # model="gpt-4o",
92
+ # ),
88
93
  output_type=DocumentSummary,
89
94
  instruction="Please summarize the content of the document.",
90
95
  )
@@ -100,9 +105,14 @@ def docs_to_kg_flow(
100
105
  cocoindex.functions.ExtractByLlm(
101
106
  llm_spec=cocoindex.LlmSpec(
102
107
  # Supported LLM: https://cocoindex.io/docs/ai/llm
103
- api_type=cocoindex.LlmApiType.OPENAI,
104
- model="gpt-4o",
108
+ api_type=cocoindex.LlmApiType.OLLAMA,
109
+ model="llama3.2",
105
110
  ),
111
+ # Alternative: Use OpenAI API model instead of Ollama
112
+ # llm_spec=cocoindex.LlmSpec(
113
+ # api_type=cocoindex.LlmApiType.OPENAI,
114
+ # model="gpt-4o",
115
+ # ),
106
116
  output_type=list[Relationship],
107
117
  instruction=(
108
118
  "Please extract relationships from CocoIndex documents. "
@@ -30,7 +30,7 @@ Before running the example, you need to:
30
30
  - Setup a service account in Google Cloud, and download the credential file.
31
31
  - Share folders containing files you want to import with the service account's email address.
32
32
 
33
- See [Setup for Google Drive](https://cocoindex.io/docs/ops/sources#setup-for-google-drive) for more details.
33
+ See [Setup for Google Drive](https://cocoindex.io/docs/sources/googledrive#setup-for-google-drive) for more details.
34
34
 
35
35
  3. Create `.env` file with your credential file and folder IDs.
36
36
  Starting from copying the `.env.example`, and then edit it to fill in your credential file path and folder IDs.
@@ -100,3 +100,6 @@ class Postgres(op.SourceSpec):
100
100
 
101
101
  # Optional: when set, supports change capture from PostgreSQL notification.
102
102
  notification: PostgresNotification | None = None
103
+
104
+ # Optional: SQL expression filter for rows (arbitrary SQL boolean expression)
105
+ filter: str | None = None