TalkPipe 0.12.2__tar.gz → 0.12.3__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 (276) hide show
  1. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/copilot-instructions.md +13 -1
  2. talkpipe-0.12.3/.github/prompts/add-segment.prompt.md +57 -0
  3. talkpipe-0.12.3/.github/prompts/changelog.prompt.md +23 -0
  4. talkpipe-0.12.3/.github/prompts/doc-examples.prompt.md +29 -0
  5. talkpipe-0.12.3/.github/prompts/tdd.prompt.md +21 -0
  6. talkpipe-0.12.3/.github/prompts/update-entry-points.prompt.md +26 -0
  7. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/workflows/ci-cd.yml +7 -7
  8. {talkpipe-0.12.2 → talkpipe-0.12.3}/.vscode/settings.json +1 -2
  9. {talkpipe-0.12.2 → talkpipe-0.12.3}/CHANGELOG.md +82 -0
  10. {talkpipe-0.12.2/src/talkpipe.egg-info → talkpipe-0.12.3}/PKG-INFO +39 -14
  11. {talkpipe-0.12.2 → talkpipe-0.12.3}/README.md +37 -13
  12. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/talkpipe-plugin-manager.md +10 -0
  13. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/configuration.md +16 -10
  14. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/extending-talkpipe.md +83 -3
  15. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/guides/makevectordatabase-and-serverag.md +14 -5
  16. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/guides/model-and-source-configuration.md +18 -19
  17. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/guides/model2vec-embeddings.md +5 -2
  18. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/quickstart.md +23 -3
  19. {talkpipe-0.12.2 → talkpipe-0.12.3}/pyproject.toml +3 -3
  20. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_script.py +10 -2
  21. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/makevectordatabase.py +27 -9
  22. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/serverag.py +19 -5
  23. talkpipe-0.12.3/src/talkpipe/app/static/unit-docs.html +1 -0
  24. talkpipe-0.12.3/src/talkpipe/app/static/unit-docs.txt +1 -0
  25. talkpipe-0.12.3/src/talkpipe/app/talkpipe_plugin_manager.py +69 -0
  26. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/chatterlang/compiler.py +109 -7
  27. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/chatterlang/registry.py +55 -4
  28. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/html.py +11 -1
  29. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/chat.py +3 -0
  30. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/config.py +3 -2
  31. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapter_base.py +37 -2
  32. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapters.py +2 -0
  33. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapters_anthropic.py +14 -2
  34. talkpipe-0.12.3/src/talkpipe/llm/prompt_adapters_eliza.py +334 -0
  35. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapters_ollama.py +24 -4
  36. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapters_openai.py +3 -1
  37. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/basic.py +12 -3
  38. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipelines/vector_databases.py +1 -1
  39. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/search/abstract.py +7 -2
  40. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/config.py +45 -3
  41. {talkpipe-0.12.2 → talkpipe-0.12.3/src/talkpipe.egg-info}/PKG-INFO +39 -14
  42. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe.egg-info/SOURCES.txt +10 -0
  43. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe.egg-info/requires.txt +1 -0
  44. talkpipe-0.12.3/src/talkpipe.egg-info/scm_file_list.json +265 -0
  45. talkpipe-0.12.3/src/talkpipe.egg-info/scm_version.json +8 -0
  46. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +20 -10
  47. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/chatterlang/test_compiler.py +37 -0
  48. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_html_exceptions.py +6 -5
  49. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_prompt_adapters_base.py +10 -0
  50. talkpipe-0.12.3/tests/talkpipe/llm/test_prompt_adapters_eliza.py +111 -0
  51. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +23 -0
  52. talkpipe-0.12.3/uv.lock +3292 -0
  53. talkpipe-0.12.2/src/talkpipe/app/static/unit-docs.html +0 -1
  54. talkpipe-0.12.2/src/talkpipe/app/static/unit-docs.txt +0 -1
  55. talkpipe-0.12.2/src/talkpipe/app/talkpipe_plugin_manager.py +0 -43
  56. {talkpipe-0.12.2 → talkpipe-0.12.3}/.bandit +0 -0
  57. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/changelog-update/SKILL.md +0 -0
  58. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
  59. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
  60. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
  61. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/test-driven-development/SKILL.md +0 -0
  62. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/update-entry-points/SKILL.md +0 -0
  63. {talkpipe-0.12.2 → talkpipe-0.12.3}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
  64. {talkpipe-0.12.2 → talkpipe-0.12.3}/.dockerignore +0 -0
  65. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/CICD.md +0 -0
  66. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
  67. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/SECURITY.md +0 -0
  68. {talkpipe-0.12.2 → talkpipe-0.12.3}/.github/dependabot.yml +0 -0
  69. {talkpipe-0.12.2 → talkpipe-0.12.3}/.gitignore +0 -0
  70. {talkpipe-0.12.2 → talkpipe-0.12.3}/.safety-policy.yml +0 -0
  71. {talkpipe-0.12.2 → talkpipe-0.12.3}/.safety-project.ini +0 -0
  72. {talkpipe-0.12.2 → talkpipe-0.12.3}/.vscode/tasks.json +0 -0
  73. {talkpipe-0.12.2 → talkpipe-0.12.3}/AGENTS.md +0 -0
  74. {talkpipe-0.12.2 → talkpipe-0.12.3}/COPYRIGHT +0 -0
  75. {talkpipe-0.12.2 → talkpipe-0.12.3}/Dockerfile +0 -0
  76. {talkpipe-0.12.2 → talkpipe-0.12.3}/LICENSE +0 -0
  77. {talkpipe-0.12.2 → talkpipe-0.12.3}/bin/config-analyzer.py +0 -0
  78. {talkpipe-0.12.2 → talkpipe-0.12.3}/bin/config_bash +0 -0
  79. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/.gitignore +0 -0
  80. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/LLMChat.png +0 -0
  81. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/LLMEvaluateWebPage.png +0 -0
  82. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/README.md +0 -0
  83. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/TalkPipe.png +0 -0
  84. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/TalkPipe.xcf +0 -0
  85. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/README.md +0 -0
  86. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/chatterlang-script.md +0 -0
  87. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/chatterlang-server.md +0 -0
  88. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/chatterlang-workbench.md +0 -0
  89. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/lazy-loading.md +0 -0
  90. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/api-reference/talkpipe-ref.md +0 -0
  91. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/README.md +0 -0
  92. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/chatterlang.md +0 -0
  93. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/documentation-formatting.md +0 -0
  94. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/metadata-stream.md +0 -0
  95. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/pipe-api.md +0 -0
  96. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/protocol.md +0 -0
  97. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/architecture/streaming.md +0 -0
  98. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/contributing/developer-handbook.md +0 -0
  99. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/guides/container-images.md +0 -0
  100. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/make_structure_diagram.sh +0 -0
  101. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/structure.tex +0 -0
  102. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/talkpipe_architecture.png +0 -0
  103. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/talkpipe_architecture.tex +0 -0
  104. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/talkpipe_diagram.png +0 -0
  105. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/.gitignore +0 -0
  106. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/README.md +0 -0
  107. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
  108. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
  109. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
  110. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
  111. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
  112. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
  113. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
  114. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
  115. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
  116. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
  117. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
  118. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
  119. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
  120. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
  121. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
  122. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
  123. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
  124. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
  125. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
  126. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
  127. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
  128. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
  129. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
  130. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
  131. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
  132. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
  133. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
  134. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
  135. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
  136. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
  137. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
  138. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
  139. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
  140. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
  141. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
  142. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
  143. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
  144. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/step3_extras.py +0 -0
  145. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
  146. {talkpipe-0.12.2 → talkpipe-0.12.3}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
  147. {talkpipe-0.12.2 → talkpipe-0.12.3}/pytest.ini +0 -0
  148. {talkpipe-0.12.2 → talkpipe-0.12.3}/scripts/extract_documentation_examples.py +0 -0
  149. {talkpipe-0.12.2 → talkpipe-0.12.3}/setup.cfg +0 -0
  150. {talkpipe-0.12.2 → talkpipe-0.12.3}/setup.py +0 -0
  151. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/__init__.py +0 -0
  152. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/__init__.py +0 -0
  153. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
  154. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
  155. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
  156. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_serve.py +0 -0
  157. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/chatterlang_workbench.py +0 -0
  158. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/doc_examples.py +0 -0
  159. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/precache_model2vec.py +0 -0
  160. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/static/.gitignore +0 -0
  161. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/static/favicon.ico +0 -0
  162. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
  163. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/chatterlang/__init__.py +0 -0
  164. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/chatterlang/parsers.py +0 -0
  165. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/__init__.py +0 -0
  166. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/email.py +0 -0
  167. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/extraction.py +0 -0
  168. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/image.py +0 -0
  169. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/mongo.py +0 -0
  170. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/rss.py +0 -0
  171. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/text/chunking_units.py +0 -0
  172. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/text/englishnormalize.py +0 -0
  173. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/data/text/operations.py +0 -0
  174. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/__init__.py +0 -0
  175. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/content.py +0 -0
  176. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/embedding.py +0 -0
  177. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/embedding_adapters.py +0 -0
  178. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
  179. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
  180. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/embedding_errors.py +0 -0
  181. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
  182. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/multimodal.py +0 -0
  183. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
  184. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/llm/vision.py +0 -0
  185. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/operations/__init__.py +0 -0
  186. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/operations/filtering.py +0 -0
  187. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/operations/matrices.py +0 -0
  188. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/operations/thread_ops.py +0 -0
  189. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/operations/transforms.py +0 -0
  190. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/__init__.py +0 -0
  191. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/core.py +0 -0
  192. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/fork.py +0 -0
  193. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/io.py +0 -0
  194. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/math.py +0 -0
  195. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipe/metadata.py +0 -0
  196. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipelines/__init__.py +0 -0
  197. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/pipelines/basic_rag.py +0 -0
  198. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/search/lancedb.py +0 -0
  199. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/search/whoosh.py +0 -0
  200. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/__init__.py +0 -0
  201. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/collections.py +0 -0
  202. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/constants.py +0 -0
  203. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/data_manipulation.py +0 -0
  204. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/doc_extraction.py +0 -0
  205. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/iterators.py +0 -0
  206. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/os.py +0 -0
  207. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe/util/plugin_loader.py +0 -0
  208. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe.egg-info/dependency_links.txt +0 -0
  209. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe.egg-info/entry_points.txt +0 -0
  210. {talkpipe-0.12.2 → talkpipe-0.12.3}/src/talkpipe.egg-info/top_level.txt +0 -0
  211. {talkpipe-0.12.2 → talkpipe-0.12.3}/stories.json +0 -0
  212. {talkpipe-0.12.2 → talkpipe-0.12.3}/test-workflow.yml +0 -0
  213. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/conftest.py +0 -0
  214. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/prompt_adapter_contract_suite.py +0 -0
  215. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
  216. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
  217. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
  218. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
  219. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
  220. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
  221. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
  222. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
  223. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/chatterlang/test_registry.py +0 -0
  224. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/sample_feed.pkl +0 -0
  225. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test.docx +0 -0
  226. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_email.py +0 -0
  227. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_extraction.py +0 -0
  228. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_html.py +0 -0
  229. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_image.py +0 -0
  230. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_mogomock.py +0 -0
  231. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_mongo.py +0 -0
  232. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_mongo_integration.py +0 -0
  233. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/test_rss.py +0 -0
  234. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
  235. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
  236. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/data/text/test_operations.py +0 -0
  237. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_chat.py +0 -0
  238. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_content.py +0 -0
  239. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_embedding.py +0 -0
  240. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
  241. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
  242. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
  243. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_multimodal.py +0 -0
  244. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +0 -0
  245. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
  246. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_prompt_adapters_openai.py +0 -0
  247. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_vision.py +0 -0
  248. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
  249. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/operations/test_filtering.py +0 -0
  250. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/operations/test_matrices.py +0 -0
  251. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/operations/test_threading.py +0 -0
  252. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/operations/test_transforms.py +0 -0
  253. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_basic.py +0 -0
  254. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_core.py +0 -0
  255. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_fork.py +0 -0
  256. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_io.py +0 -0
  257. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_math.py +0 -0
  258. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipe/test_metadata.py +0 -0
  259. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
  260. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
  261. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/search/test_abstract.py +0 -0
  262. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/search/test_lancedb.py +0 -0
  263. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
  264. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/search/test_whoosh.py +0 -0
  265. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/test_documentation_examples.py +0 -0
  266. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_collections.py +0 -0
  267. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_config.py +0 -0
  268. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_data_manipulation.py +0 -0
  269. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_doc_extraction.py +0 -0
  270. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_iterators.py +0 -0
  271. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_os.py +0 -0
  272. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_plugin_loader.py +0 -0
  273. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/talkpipe/util/test_util.py +0 -0
  274. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/test_doc_examples.py +0 -0
  275. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/test_security_vulnerabilities.py +0 -0
  276. {talkpipe-0.12.2 → talkpipe-0.12.3}/tests/testutils.py +0 -0
@@ -1,6 +1,18 @@
1
1
  # TalkPipe AI Coding Instructions
2
2
 
3
- *Cursor users: See [AGENTS.md](../AGENTS.md) and `.cursor/skills/` for additional workflows (TDD, changelog, doc examples, entry points).*
3
+ *Cursor users: See [AGENTS.md](../AGENTS.md) and `.cursor/skills/` for additional workflows.*
4
+
5
+ ## Quick Actions (Prompts)
6
+
7
+ Use these slash commands in VS Code chat (type `/` to invoke):
8
+
9
+ | Prompt | When to use |
10
+ |--------|-------------|
11
+ | `/tdd` | Implement a change with write-fail-fix-pass TDD order |
12
+ | `/add-segment` | Add a new segment or source end-to-end (test → impl → entry-point → changelog) |
13
+ | `/changelog` | Update CHANGELOG.md after a feature or fix |
14
+ | `/update-entry-points` | Regenerate pyproject.toml entry points from decorators |
15
+ | `/doc-examples` | Validate and fix documentation code examples |
4
16
 
5
17
  ## Project Overview
6
18
 
@@ -0,0 +1,57 @@
1
+ ---
2
+ mode: agent
3
+ description: Add a new segment or source to TalkPipe. Use when creating new pipe components. Covers decorator pattern, parameter annotations, entry-point registration, and TDD.
4
+ ---
5
+
6
+ Add a new **$input** to TalkPipe following all project conventions:
7
+
8
+ ## Step 1 — Write a failing test
9
+
10
+ In the appropriate file under `tests/talkpipe/`, write a test that fails without the new component. Run it to confirm failure:
11
+
12
+ ```bash
13
+ source .venv/bin/activate && pytest <test-file> -v
14
+ ```
15
+
16
+ ## Step 2 — Implement the component
17
+
18
+ Place it in the appropriate module under `src/talkpipe/`:
19
+
20
+ ```python
21
+ from typing import Annotated, Iterator, Any
22
+ from talkpipe.pipe.core import segment, field_segment
23
+ from talkpipe import register_segment # or register_source
24
+
25
+ @register_segment("mySegment") # camelCase name used in ChatterLang
26
+ @segment()
27
+ def my_segment(
28
+ items: Iterator[Any],
29
+ param: Annotated[str, "Description of this parameter"] = "default",
30
+ ) -> Iterator[Any]:
31
+ for item in items:
32
+ yield item # process and yield
33
+ ```
34
+
35
+ Rules:
36
+ - Use `@segment()` for iterators; `@field_segment()` for per-field transforms
37
+ - Use `Annotated[type, "description"]` for every parameter (shown in ChatterLang reference)
38
+ - Do NOT add docstrings documenting parameters — use `Annotated` instead
39
+ - For `@field_segment`, the first non-items argument is the `field` parameter by convention
40
+
41
+ ## Step 3 — Register entry point
42
+
43
+ ```bash
44
+ .venv/bin/python .cursor/skills/update-entry-points/scripts/update_entry_points.py
45
+ ```
46
+
47
+ Verify the new entry appears in `pyproject.toml` under `[project.entry-points."talkpipe.segments"]` or `"talkpipe.sources"`.
48
+
49
+ ## Step 4 — Verify test passes
50
+
51
+ ```bash
52
+ pytest <test-file> -v
53
+ ```
54
+
55
+ ## Step 5 — Update CHANGELOG.md
56
+
57
+ Add a bullet under `## Unreleased` describing the new component.
@@ -0,0 +1,23 @@
1
+ ---
2
+ mode: agent
3
+ description: Update CHANGELOG.md after implementing a feature, fixing a bug, or making any user-facing change. Handles update-vs-add logic correctly.
4
+ ---
5
+
6
+ Update [CHANGELOG.md](../../CHANGELOG.md) under the `## Unreleased` section.
7
+
8
+ **Decision logic:**
9
+ 1. Is this a **minor change to an existing feature** already mentioned in Unreleased?
10
+ - Yes → Update that existing bullet; do not add a new one
11
+ - No → Add a new bullet at the top of the Unreleased list
12
+
13
+ 2. Is this **purely internal** (refactor, no user impact)?
14
+ - Yes → Changelog update optional
15
+ - No → Always update
16
+
17
+ **Format rules:**
18
+ - Present tense, sentence case
19
+ - Use backticks for segment/command names (e.g. `mySegment`, `run_doc_examples`)
20
+ - Link to docs with `[text](path)` when helpful
21
+ - Multi-line bullets use 2-space indent for continuation lines
22
+
23
+ The change to document: $input
@@ -0,0 +1,29 @@
1
+ ---
2
+ mode: agent
3
+ description: Validate and fix documentation code examples. Use after editing docs, before committing doc changes, or when examples may be broken. Runs examples via pytest and fixes formatting issues.
4
+ ---
5
+
6
+ Validate documentation code examples following TalkPipe conventions. See [docs/architecture/documentation-formatting.md](../../docs/architecture/documentation-formatting.md) for full formatting rules.
7
+
8
+ ## Run examples via pytest
9
+
10
+ ```bash
11
+ source .venv/bin/activate
12
+ pytest tests/test_doc_examples.py -v
13
+ ```
14
+
15
+ Skip Ollama-dependent examples when Ollama is unavailable:
16
+ ```bash
17
+ pytest tests/test_doc_examples.py -v -m "not requires_ollama"
18
+ ```
19
+
20
+ ## Formatting rules (fix any violations found)
21
+
22
+ - Use **unindented** ` ```python ` fences (no leading spaces before the triple backtick)
23
+ - Always include a language tag (` ```python ` or ` ```chatterlang `)
24
+ - Standalone examples must include all imports and be runnable in isolation
25
+ - Add `# skip-extract` as the first line of blocks that are intentionally non-runnable (fragments, setup code, external-service-only)
26
+
27
+ ## Scope
28
+
29
+ $input
@@ -0,0 +1,21 @@
1
+ ---
2
+ mode: agent
3
+ description: Follow TalkPipe TDD workflow. Use when implementing features, fixing bugs, or adding segments/sources. Enforces write-fail-fix-pass order.
4
+ ---
5
+
6
+ Follow the TalkPipe TDD workflow for this change:
7
+
8
+ 1. **Write or update a test** in `tests/` that fails without the change. Prefer updating an existing test file over creating a new one.
9
+ 2. **Verify the test fails**: run `source .venv/bin/activate && pytest <test-file> -v`
10
+ 3. **Implement the change**
11
+ 4. **Verify the test passes**: re-run the same pytest command
12
+
13
+ Constraints:
14
+ - Tests mirror `src/` structure under `tests/talkpipe/`
15
+ - Keep tests as short as possible while covering the functionality completely
16
+ - Use `pytest.fixture` and `pytest-mock` for dependencies
17
+ - Always use the `.venv` environment; abort and alert if it doesn't exist
18
+
19
+ If a unit test is not reasonable (e.g., requires external LLM, is purely cosmetic), notify the user and explain why.
20
+
21
+ The change to implement: $input
@@ -0,0 +1,26 @@
1
+ ---
2
+ mode: agent
3
+ description: Regenerate and apply talkpipe.sources and talkpipe.segments entry points from @register_source/@register_segment decorators. Use after adding new sources or segments, or when pyproject.toml entry points are out of sync.
4
+ ---
5
+
6
+ Regenerate entry points from `@register_source` and `@register_segment` decorators and update `pyproject.toml`.
7
+
8
+ Run from the project root:
9
+
10
+ ```bash
11
+ source .venv/bin/activate
12
+ python .cursor/skills/update-entry-points/scripts/update_entry_points.py
13
+ ```
14
+
15
+ The script:
16
+ 1. Scans `src/talkpipe/` for `@register_source` and `@register_segment` decorators
17
+ 2. Generates updated entry-point TOML
18
+ 3. Replaces `[project.entry-points."talkpipe.sources"]` and `[project.entry-points."talkpipe.segments"]` in `pyproject.toml`
19
+ 4. Preserves all other `pyproject.toml` content
20
+
21
+ **Dry run** (preview without writing):
22
+ ```bash
23
+ python .cursor/skills/update-entry-points/scripts/update_entry_points.py --dry-run
24
+ ```
25
+
26
+ After running, verify the expected entry appears in `pyproject.toml`.
@@ -20,7 +20,7 @@ jobs:
20
20
  python-version: ['3.11', '3.12', '3.13']
21
21
 
22
22
  steps:
23
- - uses: actions/checkout@v6
23
+ - uses: actions/checkout@v7
24
24
  with:
25
25
  fetch-depth: 0
26
26
 
@@ -30,7 +30,7 @@ jobs:
30
30
  python-version: ${{ matrix.python-version }}
31
31
 
32
32
  - name: Cache pip dependencies
33
- uses: actions/cache@v5
33
+ uses: actions/cache@v6
34
34
  with:
35
35
  path: ~/.cache/pip
36
36
  key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
@@ -48,7 +48,7 @@ jobs:
48
48
 
49
49
  - name: Upload coverage to Codecov
50
50
  if: matrix.python-version == '3.11'
51
- uses: codecov/codecov-action@v6
51
+ uses: codecov/codecov-action@v7
52
52
  with:
53
53
  files: ./coverage.xml
54
54
  flags: unittests
@@ -60,7 +60,7 @@ jobs:
60
60
  SAFETY_API_KEY: ${{ secrets.SAFETY_API_KEY }}
61
61
 
62
62
  steps:
63
- - uses: actions/checkout@v6
63
+ - uses: actions/checkout@v7
64
64
  with:
65
65
  fetch-depth: 0
66
66
 
@@ -104,7 +104,7 @@ jobs:
104
104
 
105
105
  steps:
106
106
  - name: Checkout repository
107
- uses: actions/checkout@v6
107
+ uses: actions/checkout@v7
108
108
 
109
109
  - name: Log in to Container Registry
110
110
  uses: docker/login-action@v4
@@ -177,7 +177,7 @@ jobs:
177
177
 
178
178
  steps:
179
179
  - name: Checkout repository
180
- uses: actions/checkout@v6
180
+ uses: actions/checkout@v7
181
181
 
182
182
  - name: Initialize CodeQL
183
183
  uses: github/codeql-action/init@v4
@@ -196,7 +196,7 @@ jobs:
196
196
  if: github.event_name == 'release' && github.event.action == 'published'
197
197
 
198
198
  steps:
199
- - uses: actions/checkout@v6
199
+ - uses: actions/checkout@v7
200
200
  with:
201
201
  fetch-depth: 0
202
202
 
@@ -22,7 +22,6 @@
22
22
  "talkpipe"
23
23
  ],
24
24
  "python.testing.pytestArgs": [
25
- "tests",
26
- "--rootdir", "${workspaceFolder}"
25
+ "tests"
27
26
  ]
28
27
  }
@@ -2,6 +2,88 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.12.3
6
+
7
+ - Fixed several doc-accuracy and rough-edge issues found during usability testing:
8
+ - `docs/architecture/configuration.md`'s example TOML named a dead `ollama_base_url` key;
9
+ it now shows the real `OLLAMA_SERVER_URL` key used by the README and code.
10
+ - `OllamaPromptAdapter` now catches connection failures and re-raises with the server URL
11
+ it tried and a pointer to `TALKPIPE_OLLAMA_SERVER_URL`, instead of a generic SDK error.
12
+ - `serverag` resolved `--embedding_*`/`--completion_*` defaults from the wrong config keys
13
+ (silently always falling through) and only validated provider config on the first query.
14
+ It now resolves the correct keys and builds the pipeline once at startup so a bad or
15
+ missing embedding/completion model or source fails immediately with an actionable error;
16
+ `quickstart.md`'s RAG example now includes the required completion flags.
17
+ - `extending-talkpipe.md`'s third-party plugin snippet registered a source under the
18
+ `talkpipe.segments` entry-point group instead of `talkpipe.sources`; fixed, and added a
19
+ complete end-to-end plugin example (package layout, `components.py`, `pyproject.toml`,
20
+ usage).
21
+ - `talkpipe_plugins --list` only reported the `talkpipe.plugins` entry-point group, so
22
+ components registered via `talkpipe.segments` / `talkpipe.sources` (the pattern most
23
+ third-party plugins use) were invisible even when working correctly. It now lists those
24
+ too.
25
+ - `makevectordatabase` now prints a completion summary (chunk count, output path, table,
26
+ embedding model/source) instead of exiting silently.
27
+ - `SearchResult.prompt_worthy_string` no longer surfaces internal underscore-prefixed
28
+ fields (e.g. the auto-generated `_doc_id`) to the LLM, so RAG answers over string-indexed
29
+ documents (no `title`/`source` field) don't cite a bare UUID.
30
+ - The misspelled segment aliases `addToLancDB` / `searchLancDB` remain functional for
31
+ backward compatibility but are now hidden from `available_names` (compiler error
32
+ suggestions) and `talkpipe_plugins --list` via a new `DEPRECATED_ALIASES` set in the
33
+ registry, so newcomers aren't shown two spellings with no indication which is canonical.
34
+ - Documented that `embedding_source="model2vec"` downloads the model from Hugging Face on
35
+ first use (cached after that); README tip and the model2vec guide now call this out.
36
+ - Fixed a data-corruption bug in `makevectordatabase`'s document pipeline: `ProcessDocumentsSegment`
37
+ shingled chunks across file boundaries (no per-document grouping), so two small input files could
38
+ be merged into a single indexed row with the content of both but the source/title of only the last
39
+ one, and RAG citations would then point at the wrong file. `ShingleText` is now grouped by `source`
40
+ so shingles never cross a file boundary.
41
+ - Fixed config key lookups being case-sensitive despite mixed casing conventions across the codebase
42
+ (`OLLAMA_SERVER_URL` vs. `default_model_name`, etc.): `TALKPIPE_*` environment variables now match
43
+ TOML config keys case-insensitively, so `TALKPIPE_default_model_name` and
44
+ `TALKPIPE_DEFAULT_MODEL_NAME` both work. Corrected config key names that had drifted from the
45
+ code in `configuration.md`, `model-and-source-configuration.md` (removed a fictional `DEFAULT_*`
46
+ key layer for `serverag`/`makevectordatabase` that doesn't exist), and
47
+ `makevectordatabase-and-serverag.md`.
48
+ - Fixed a self-contradictory compiler error: a segment/source declared via a `talkpipe.segments` /
49
+ `talkpipe.sources` entry point that failed to import was reported as simply "not found," with a
50
+ "did you mean" suggestion pointing at the very name that just failed. `HybridRegistry` now
51
+ captures the underlying import error and the compiler reports it directly (e.g. "was declared by
52
+ a plugin but failed to load: `<error>`") instead of suggesting the broken name as its own fix.
53
+ Also invalidate import caches before entry-point discovery to reduce staleness right after an
54
+ editable install.
55
+ - `chatterlang_script` now catches `CompileError` and prints just the error message instead of a
56
+ full Python traceback; pass `--verbose` to see the traceback for debugging.
57
+ - Ollama "model not found" (404) responses are now wrapped with an actionable message suggesting
58
+ `ollama pull <model>`, matching the existing treatment of connection errors.
59
+ - `talkpipe_plugins` with no arguments now defaults to `--list` instead of silently printing
60
+ nothing.
61
+ - Missing `robots.txt` (404) now logs at debug/info instead of warning, since it's a normal,
62
+ expected condition, not an error.
63
+ - `LlmBinaryAnswer.Answer` (used by `ragToBinaryAnswer` / `llmBinaryAnswer`) now has a friendly
64
+ `__str__` ("Yes: ..." / "No: ...") instead of printing as a raw Pydantic repr.
65
+ - README: added a concrete example value for `TALKPIPE_OLLAMA_SERVER_URL`, and labeled Example 4's
66
+ sample scored output as illustrative/model-dependent (LLM scores vary by model and run).
67
+ - Fixed `OllamaPromptAdapter.is_available()` checking the wrong server: it called the `ollama`
68
+ package's module-level `ollama.chat()`, which always targets a `Client` instance created once at
69
+ `import ollama` time (defaulting to `http://127.0.0.1:11434` unless `OLLAMA_HOST` happened to be
70
+ set at that moment) and never re-reads any env var afterward. This ignored TalkPipe's own
71
+ `server_url` / `OLLAMA_SERVER_URL` config entirely, so on machines running a local Ollama without
72
+ the configured model (but with a working remote Ollama server configured), `is_available()` — and
73
+ therefore the `requires_ollama` test fixture and any code checking availability — would report the
74
+ model unavailable even though it was reachable and correctly used everywhere else. It now routes
75
+ through the same `_chat_completion()` helper `execute()` uses, which builds an `ollama.Client`
76
+ pointed at the configured server.
77
+ - Added a local `eliza` prompt-adapter source for `llmPrompt` and guided-generation
78
+ segments. The adapter is deterministic (no external API keys), uses the configured
79
+ model name as ELIZA's self-reference, supports multi-turn memory/fact callbacks,
80
+ and provides generic structured outputs for score/binary/term extraction schemas.
81
+ Added a matching ChatterLang example to model/source configuration docs.
82
+ - Fixed single-turn (`multi_turn=False`) prompt-adapter state handling so `_summary_message`
83
+ is cleared after each response and does not leak conversation memory between calls.
84
+ - Fixed a CI import failure in `talkpipe.chatterlang.registry` by importing `List`
85
+ for the `available_names` return annotation, preventing `NameError` during module import.
86
+
5
87
  ## v0.12.2
6
88
  - Added batch embedding support: embedding adapters expose `execute_one` and `execute_batch`;
7
89
  `execute` remains as a deprecated alias for `execute_one` (removed in 1.0). `llmEmbed` extends
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: talkpipe
3
- Version: 0.12.2
3
+ Version: 0.12.3
4
4
  Summary: Python internal and external DSL for writing generative AI analytics
5
5
  Author-email: Travis Bauer <tlbauer@sandia.gov>
6
6
  Maintainer-email: Travis Bauer <tlbauer@sandia.gov>
@@ -36,6 +36,7 @@ Requires-Dist: pyyaml
36
36
  Requires-Dist: greenlet
37
37
  Requires-Dist: networkx
38
38
  Requires-Dist: starlette>=0.49.1
39
+ Requires-Dist: build>=1.5.0
39
40
  Provides-Extra: dev
40
41
  Requires-Dist: pytest; extra == "dev"
41
42
  Requires-Dist: pytest-mock; extra == "dev"
@@ -79,7 +80,7 @@ This README is a high-level overview. Use the **[documentation map](#documentati
79
80
 
80
81
  ## What Can You Do With TalkPipe?
81
82
 
82
- - **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just 2 lines of code
83
+ - **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just a few lines of code
83
84
  - **Process Documents** - Extract text from PDFs, analyze research papers, score content relevance
84
85
  - **Build RAG Pipelines** - Create end-to-end Retrieval-Augmented Generation workflows with vector databases
85
86
  - **Analyze Web Content** - Download web pages (respecting robots.txt), extract readable text, and summarize
@@ -128,7 +129,7 @@ These applications are entry points for different usage scenarios, from interact
128
129
 
129
130
  ## Quick Start
130
131
 
131
- **Requirements:** Python 3.11 or newer.
132
+ **Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
132
133
 
133
134
  ```bash
134
135
  pip install talkpipe
@@ -144,14 +145,34 @@ pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
144
145
  # Or: pip install talkpipe[all]
145
146
  ```
146
147
 
147
- Configure API keys and provider URLs via environment variables (for example `TALKPIPE_openai_api_key`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
148
+ Configure API keys and provider URLs via environment variables (for example `OPENAI_API_KEY` and `ANTHROPIC_API_KEY`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host, e.g. `export TALKPIPE_OLLAMA_SERVER_URL="http://192.168.1.50:11434"` (a bare host/IP with no scheme or port, like `"192.168.1.50"`, also works). See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
148
149
 
149
- Multi-turn chat in a few lines:
150
+ Hello world (no LLM server required):
151
+
152
+ > **Note:** `source="eliza"` is **not** an LLM provider. It is a local, deterministic adapter for experimenting with TalkPipe/ChatterLang syntax and multi-turn flow when you do not yet have Ollama/OpenAI/Anthropic access.
153
+
154
+ ```python
155
+ from talkpipe.chatterlang import compiler
156
+
157
+ script = '| print | llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True] | print'
158
+ chat = compiler.compile(script).as_function(single_in=True, single_out=True)
159
+
160
+ chat("Hello, my name is Alice.")
161
+ chat("What's my name?")
162
+ ```
163
+
164
+ > **Tip:** `from talkpipe.chatterlang import compile` is equivalent to the `compiler.compile(...)` style above — both styles work throughout the docs.
165
+
166
+ Multi-turn chat (requires a local model server):
167
+
168
+ > **Prerequisite:** this example uses Ollama, a separate application (not just the `talkpipe[ollama]` Python package). Install and start it from https://ollama.com/download, then pull the model with `ollama pull llama3.2`. Cloud users can skip Ollama and substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
150
169
 
151
170
  ```python
152
171
  from talkpipe.chatterlang import compiler
153
172
 
154
173
  script = '| print | llmPrompt[model="llama3.2", source="ollama", multi_turn=True] | print'
174
+ # Using OpenAI: model="gpt-4o-mini", source="openai" (set OPENAI_API_KEY)
175
+ # Using Anthropic: model="claude-haiku-4-5", source="anthropic" (set ANTHROPIC_API_KEY)
155
176
  chat = compiler.compile(script).as_function(single_in=True, single_out=True)
156
177
 
157
178
  response = chat("Hello! My name is Alice.")
@@ -177,6 +198,8 @@ rag = compiler.compile(
177
198
  rag("What is TalkPipe?")
178
199
  ```
179
200
 
201
+ > **No Ollama server?** Swap `embedding_source="model2vec"` and `embedding_model="minishlab/potion-base-8M"` for offline embeddings (included in `talkpipe[all]`). The first run downloads the model from Hugging Face (a few files, ~30 MB); after that it's cached and needs no network — see [Precache for offline use](docs/guides/model2vec-embeddings.md#precache-for-offline-use) to pre-download for air-gapped environments. Note: the `ragToText` completion step still requires an LLM provider. See the [model2vec guide](docs/guides/model2vec-embeddings.md).
202
+
180
203
  # Core Components
181
204
 
182
205
  ## 1. The Pipe API (Internal DSL)
@@ -410,7 +433,9 @@ CONST iot_prompt = "Rate 0-10 how relevant this is to IoT researchers. Consider
410
433
  evaluator = compiler.compile(script).as_function(single_in=False, single_out=False)
411
434
  results = evaluator(articles)
412
435
 
413
- # Output shows only relevant articles with their scores:
436
+ # Output shows only relevant articles with their scores. Scores are assigned by the
437
+ # LLM, so they (and which rows survive the >6 filter) vary by model and run; with
438
+ # some models only one or two of the four articles may pass. Illustrative example:
414
439
  # {'title': 'New LLM Model Released', 'ai_score': 9, 'iot_score': 2, 'max_score': 9}
415
440
  # {'title': 'Smart Home IoT Devices', 'ai_score': 3, 'iot_score': 9, 'max_score': 9}
416
441
  # {'title': 'RAG Systems in Production', 'ai_score': 8, 'iot_score': 2, 'max_score': 8}
@@ -581,7 +606,7 @@ smtp_port = 587
581
606
  Environment variables use the `TALKPIPE_` prefix:
582
607
  ```bash
583
608
  export TALKPIPE_email_password="your-password"
584
- export TALKPIPE_openai_api_key="sk-..."
609
+ export OPENAI_API_KEY="sk-..."
585
610
  ```
586
611
 
587
612
  ### Performance Optimization
@@ -638,17 +663,17 @@ def multiplyBy(items, factor=2):
638
663
  for item in items:
639
664
  yield item * factor
640
665
 
641
- # Use it to double the Fibonacci numbers
666
+ # Use it to multiply each value in the range by 3
642
667
  pipeline = arange(lower=5, upper=10) | multiplyBy(factor=3) | io.Print()
643
668
  result = pipeline.as_function(single_out=False)()
644
669
 
645
670
  # Output:
646
- # 0
647
- # 3
648
- # 3
649
- # 6
650
- # 9
651
- # Returns: [0, 3, 3, 6, 9]
671
+ # 15
672
+ # 18
673
+ # 21
674
+ # 24
675
+ # 27
676
+ # Returns: [15, 18, 21, 24, 27]
652
677
  ```
653
678
 
654
679
  **Field Segments** provide a convenient way to create 1:1 segments:
@@ -20,7 +20,7 @@ This README is a high-level overview. Use the **[documentation map](#documentati
20
20
 
21
21
  ## What Can You Do With TalkPipe?
22
22
 
23
- - **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just 2 lines of code
23
+ - **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just a few lines of code
24
24
  - **Process Documents** - Extract text from PDFs, analyze research papers, score content relevance
25
25
  - **Build RAG Pipelines** - Create end-to-end Retrieval-Augmented Generation workflows with vector databases
26
26
  - **Analyze Web Content** - Download web pages (respecting robots.txt), extract readable text, and summarize
@@ -69,7 +69,7 @@ These applications are entry points for different usage scenarios, from interact
69
69
 
70
70
  ## Quick Start
71
71
 
72
- **Requirements:** Python 3.11 or newer.
72
+ **Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
73
73
 
74
74
  ```bash
75
75
  pip install talkpipe
@@ -85,14 +85,34 @@ pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
85
85
  # Or: pip install talkpipe[all]
86
86
  ```
87
87
 
88
- Configure API keys and provider URLs via environment variables (for example `TALKPIPE_openai_api_key`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
88
+ Configure API keys and provider URLs via environment variables (for example `OPENAI_API_KEY` and `ANTHROPIC_API_KEY`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host, e.g. `export TALKPIPE_OLLAMA_SERVER_URL="http://192.168.1.50:11434"` (a bare host/IP with no scheme or port, like `"192.168.1.50"`, also works). See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
89
89
 
90
- Multi-turn chat in a few lines:
90
+ Hello world (no LLM server required):
91
+
92
+ > **Note:** `source="eliza"` is **not** an LLM provider. It is a local, deterministic adapter for experimenting with TalkPipe/ChatterLang syntax and multi-turn flow when you do not yet have Ollama/OpenAI/Anthropic access.
93
+
94
+ ```python
95
+ from talkpipe.chatterlang import compiler
96
+
97
+ script = '| print | llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True] | print'
98
+ chat = compiler.compile(script).as_function(single_in=True, single_out=True)
99
+
100
+ chat("Hello, my name is Alice.")
101
+ chat("What's my name?")
102
+ ```
103
+
104
+ > **Tip:** `from talkpipe.chatterlang import compile` is equivalent to the `compiler.compile(...)` style above — both styles work throughout the docs.
105
+
106
+ Multi-turn chat (requires a local model server):
107
+
108
+ > **Prerequisite:** this example uses Ollama, a separate application (not just the `talkpipe[ollama]` Python package). Install and start it from https://ollama.com/download, then pull the model with `ollama pull llama3.2`. Cloud users can skip Ollama and substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
91
109
 
92
110
  ```python
93
111
  from talkpipe.chatterlang import compiler
94
112
 
95
113
  script = '| print | llmPrompt[model="llama3.2", source="ollama", multi_turn=True] | print'
114
+ # Using OpenAI: model="gpt-4o-mini", source="openai" (set OPENAI_API_KEY)
115
+ # Using Anthropic: model="claude-haiku-4-5", source="anthropic" (set ANTHROPIC_API_KEY)
96
116
  chat = compiler.compile(script).as_function(single_in=True, single_out=True)
97
117
 
98
118
  response = chat("Hello! My name is Alice.")
@@ -118,6 +138,8 @@ rag = compiler.compile(
118
138
  rag("What is TalkPipe?")
119
139
  ```
120
140
 
141
+ > **No Ollama server?** Swap `embedding_source="model2vec"` and `embedding_model="minishlab/potion-base-8M"` for offline embeddings (included in `talkpipe[all]`). The first run downloads the model from Hugging Face (a few files, ~30 MB); after that it's cached and needs no network — see [Precache for offline use](docs/guides/model2vec-embeddings.md#precache-for-offline-use) to pre-download for air-gapped environments. Note: the `ragToText` completion step still requires an LLM provider. See the [model2vec guide](docs/guides/model2vec-embeddings.md).
142
+
121
143
  # Core Components
122
144
 
123
145
  ## 1. The Pipe API (Internal DSL)
@@ -351,7 +373,9 @@ CONST iot_prompt = "Rate 0-10 how relevant this is to IoT researchers. Consider
351
373
  evaluator = compiler.compile(script).as_function(single_in=False, single_out=False)
352
374
  results = evaluator(articles)
353
375
 
354
- # Output shows only relevant articles with their scores:
376
+ # Output shows only relevant articles with their scores. Scores are assigned by the
377
+ # LLM, so they (and which rows survive the >6 filter) vary by model and run; with
378
+ # some models only one or two of the four articles may pass. Illustrative example:
355
379
  # {'title': 'New LLM Model Released', 'ai_score': 9, 'iot_score': 2, 'max_score': 9}
356
380
  # {'title': 'Smart Home IoT Devices', 'ai_score': 3, 'iot_score': 9, 'max_score': 9}
357
381
  # {'title': 'RAG Systems in Production', 'ai_score': 8, 'iot_score': 2, 'max_score': 8}
@@ -522,7 +546,7 @@ smtp_port = 587
522
546
  Environment variables use the `TALKPIPE_` prefix:
523
547
  ```bash
524
548
  export TALKPIPE_email_password="your-password"
525
- export TALKPIPE_openai_api_key="sk-..."
549
+ export OPENAI_API_KEY="sk-..."
526
550
  ```
527
551
 
528
552
  ### Performance Optimization
@@ -579,17 +603,17 @@ def multiplyBy(items, factor=2):
579
603
  for item in items:
580
604
  yield item * factor
581
605
 
582
- # Use it to double the Fibonacci numbers
606
+ # Use it to multiply each value in the range by 3
583
607
  pipeline = arange(lower=5, upper=10) | multiplyBy(factor=3) | io.Print()
584
608
  result = pipeline.as_function(single_out=False)()
585
609
 
586
610
  # Output:
587
- # 0
588
- # 3
589
- # 3
590
- # 6
591
- # 9
592
- # Returns: [0, 3, 3, 6, 9]
611
+ # 15
612
+ # 18
613
+ # 21
614
+ # 24
615
+ # 27
616
+ # Returns: [15, 18, 21, 24, 27]
593
617
  ```
594
618
 
595
619
  **Field Segments** provide a convenient way to create 1:1 segments:
@@ -33,8 +33,18 @@ Loaded plugins (2):
33
33
 
34
34
  Failed plugins (1):
35
35
  ✗ broken-plugin
36
+
37
+ Segments registered via 'talkpipe.segments' entry points (98):
38
+ addToLanceDB -> talkpipe.search.lancedb:add_to_lancedb
39
+ ...
40
+
41
+ Sources registered via 'talkpipe.sources' entry points (9):
42
+ greetings -> mytp.components:greetings
43
+ ...
36
44
  ```
37
45
 
46
+ "Loaded plugins" only covers the whole-module `talkpipe.plugins` entry point group (see [Plugin Discovery](#plugin-discovery) below). If you registered components directly via the `talkpipe.segments` / `talkpipe.sources` entry point groups instead (the pattern most third-party plugins use — see [Extending TalkPipe](../architecture/extending-talkpipe.md#entry-points-for-distributable-components)), they show up here rather than under "Loaded plugins". This is the way to confirm your installed component is discoverable without having to run a pipeline that uses it.
47
+
38
48
  ### Reload a Plugin
39
49
 
40
50
  Reload a specific plugin by name (useful during development):