TalkPipe 1.0.1__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/workflows/ci-cd.yml +6 -3
  2. {talkpipe-1.0.1 → talkpipe-1.0.2}/AGENTS.md +1 -1
  3. {talkpipe-1.0.1 → talkpipe-1.0.2}/CHANGELOG.md +133 -1
  4. {talkpipe-1.0.1 → talkpipe-1.0.2}/PKG-INFO +47 -24
  5. {talkpipe-1.0.1 → talkpipe-1.0.2}/README.md +45 -22
  6. {talkpipe-1.0.1 → talkpipe-1.0.2}/RELEASING.md +11 -2
  7. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/README.md +5 -1
  8. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/chatterlang-script.md +5 -2
  9. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/chatterlang-server.md +30 -7
  10. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/chatterlang-workbench.md +8 -8
  11. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/talkpipe-plugin-manager.md +5 -3
  12. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/talkpipe-ref.md +43 -38
  13. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/chatterlang.md +57 -9
  14. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/configuration.md +2 -4
  15. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/metadata-stream.md +4 -5
  16. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/pipe-api.md +4 -4
  17. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/protocol.md +2 -2
  18. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/streaming.md +4 -4
  19. talkpipe-1.0.2/docs/chatterlang_workbench_screenshot.png +0 -0
  20. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/contributing/developer-handbook.md +15 -9
  21. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/guides/makevectordatabase-and-serverag.md +22 -9
  22. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/guides/model-and-source-configuration.md +70 -45
  23. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/guides/model2vec-embeddings.md +27 -11
  24. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/quickstart.md +43 -16
  25. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/README.md +3 -3
  26. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +2 -2
  27. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +7 -3
  28. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/README.md +7 -3
  29. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +4 -6
  30. {talkpipe-1.0.1 → talkpipe-1.0.2}/pyproject.toml +1 -1
  31. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_generate_entry_points.py +23 -31
  32. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_reference_browser.py +11 -17
  33. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_reference_generator.py +53 -62
  34. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_workbench.py +118 -60
  35. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/makevectordatabase.py +1 -1
  36. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/serverag.py +20 -9
  37. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/reference_api.py +51 -54
  38. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/workspace.py +11 -12
  39. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/chatterlang/compiler.py +94 -0
  40. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/chatterlang/parsers.py +67 -27
  41. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/chatterlang/registry.py +30 -34
  42. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/extraction.py +28 -48
  43. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/mongo.py +0 -1
  44. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/text/englishnormalize.py +1 -3
  45. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/text/operations.py +17 -18
  46. talkpipe-1.0.2/src/talkpipe/llm/_ollama_common.py +37 -0
  47. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/chat.py +51 -5
  48. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/embedding.py +14 -14
  49. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/embedding_adapters.py +6 -14
  50. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapter_base.py +29 -1
  51. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapters_anthropic.py +14 -36
  52. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapters_ollama.py +18 -44
  53. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapters_openai.py +17 -32
  54. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/vision.py +4 -1
  55. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/operations/transforms.py +2 -5
  56. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipelines/basic_rag.py +22 -8
  57. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipelines/vector_databases.py +6 -2
  58. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/search/lancedb.py +1 -1
  59. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/search/whoosh.py +8 -11
  60. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/data_manipulation.py +41 -45
  61. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/doc_extraction.py +53 -79
  62. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/PKG-INFO +47 -24
  63. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/SOURCES.txt +2 -0
  64. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/requires.txt +1 -1
  65. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/scm_file_list.json +2 -0
  66. talkpipe-1.0.2/src/talkpipe.egg-info/scm_version.json +8 -0
  67. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_serverag.py +32 -2
  68. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_reference_api.py +23 -0
  69. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +185 -0
  70. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_compiler.py +99 -0
  71. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_parsers.py +64 -0
  72. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_chat.py +86 -0
  73. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +19 -0
  74. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +18 -0
  75. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +36 -0
  76. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_openai.py +36 -0
  77. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/test_documentation_examples.py +3 -3
  78. {talkpipe-1.0.1 → talkpipe-1.0.2}/uv.lock +49 -13
  79. talkpipe-1.0.1/src/talkpipe.egg-info/scm_version.json +0 -8
  80. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/changelog-update/SKILL.md +0 -0
  81. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
  82. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
  83. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
  84. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/test-driven-development/SKILL.md +0 -0
  85. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/update-entry-points/SKILL.md +0 -0
  86. {talkpipe-1.0.1 → talkpipe-1.0.2}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
  87. {talkpipe-1.0.1 → talkpipe-1.0.2}/.dockerignore +0 -0
  88. {talkpipe-1.0.1 → talkpipe-1.0.2}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
  89. {talkpipe-1.0.1 → talkpipe-1.0.2}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
  90. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/CICD.md +0 -0
  91. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
  92. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/SECURITY.md +0 -0
  93. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/copilot-instructions.md +0 -0
  94. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/dependabot.yml +0 -0
  95. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/prompts/add-segment.prompt.md +0 -0
  96. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/prompts/changelog.prompt.md +0 -0
  97. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/prompts/doc-examples.prompt.md +0 -0
  98. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/prompts/tdd.prompt.md +0 -0
  99. {talkpipe-1.0.1 → talkpipe-1.0.2}/.github/prompts/update-entry-points.prompt.md +0 -0
  100. {talkpipe-1.0.1 → talkpipe-1.0.2}/.gitignore +0 -0
  101. {talkpipe-1.0.1 → talkpipe-1.0.2}/.pre-commit-config.yaml +0 -0
  102. {talkpipe-1.0.1 → talkpipe-1.0.2}/.safety-policy.yml +0 -0
  103. {talkpipe-1.0.1 → talkpipe-1.0.2}/.safety-project.ini +0 -0
  104. {talkpipe-1.0.1 → talkpipe-1.0.2}/.vscode/settings.json +0 -0
  105. {talkpipe-1.0.1 → talkpipe-1.0.2}/.vscode/tasks.json +0 -0
  106. {talkpipe-1.0.1 → talkpipe-1.0.2}/COPYRIGHT +0 -0
  107. {talkpipe-1.0.1 → talkpipe-1.0.2}/Dockerfile +0 -0
  108. {talkpipe-1.0.1 → talkpipe-1.0.2}/LICENSE +0 -0
  109. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/.gitignore +0 -0
  110. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/LLMChat.png +0 -0
  111. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/LLMEvaluateWebPage.png +0 -0
  112. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/TalkPipe.png +0 -0
  113. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/TalkPipe.xcf +0 -0
  114. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/README.md +0 -0
  115. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/api-reference/lazy-loading.md +0 -0
  116. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/README.md +0 -0
  117. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/documentation-formatting.md +0 -0
  118. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/extending-talkpipe.md +0 -0
  119. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/architecture/security.md +0 -0
  120. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/guides/container-images.md +0 -0
  121. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/make_structure_diagram.sh +0 -0
  122. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/structure.tex +0 -0
  123. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/talkpipe_architecture.png +0 -0
  124. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/talkpipe_architecture.tex +0 -0
  125. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/talkpipe_diagram.png +0 -0
  126. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/.gitignore +0 -0
  127. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
  128. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
  129. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
  130. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
  131. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
  132. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
  133. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
  134. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
  135. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
  136. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
  137. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
  138. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
  139. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
  140. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
  141. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
  142. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
  143. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
  144. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
  145. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
  146. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
  147. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
  148. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
  149. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
  150. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
  151. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
  152. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
  153. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
  154. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
  155. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
  156. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
  157. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
  158. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
  159. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
  160. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
  161. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
  162. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
  163. {talkpipe-1.0.1 → talkpipe-1.0.2}/docs/workbench_demo.mp4 +0 -0
  164. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/.gitignore +0 -0
  165. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/README.md +0 -0
  166. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/build.mjs +0 -0
  167. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/package-lock.json +0 -0
  168. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/package.json +0 -0
  169. {talkpipe-1.0.1 → talkpipe-1.0.2}/frontend/src/cm.js +0 -0
  170. {talkpipe-1.0.1 → talkpipe-1.0.2}/pytest.ini +0 -0
  171. {talkpipe-1.0.1 → talkpipe-1.0.2}/scripts/extract_documentation_examples.py +0 -0
  172. {talkpipe-1.0.1 → talkpipe-1.0.2}/setup.cfg +0 -0
  173. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/__init__.py +0 -0
  174. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/__init__.py +0 -0
  175. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_script.py +0 -0
  176. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/chatterlang_serve.py +0 -0
  177. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/doc_examples.py +0 -0
  178. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/precache_model2vec.py +0 -0
  179. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/server_common.py +0 -0
  180. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/favicon.ico +0 -0
  181. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/common.js +0 -0
  182. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/index.css +0 -0
  183. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/index.js +0 -0
  184. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/stream.css +0 -0
  185. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/stream.js +0 -0
  186. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
  187. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
  188. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
  189. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
  190. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/app.js +0 -0
  191. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/editor.js +0 -0
  192. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/index.html +0 -0
  193. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/styles.css +0 -0
  194. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/suggest.js +0 -0
  195. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
  196. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
  197. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/static/workbench/workspace.js +0 -0
  198. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
  199. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
  200. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
  201. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/__init__.py +0 -0
  202. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/corpus.py +0 -0
  203. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/suggest.py +0 -0
  204. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/suggest_api.py +0 -0
  205. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench/workspace_api.py +0 -0
  206. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
  207. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_1_createsyntheticdata.script +0 -0
  208. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_2_indexstories.script +0 -0
  209. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_3_searchstories.script +0 -0
  210. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_1_createvectordatabase.script +0 -0
  211. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_2_searchbyexample.script +0 -0
  212. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_3_specializedrag.script +0 -0
  213. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_1_executivesummarygeneration.script +0 -0
  214. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_2_detailedanalysisreportgeneration.script +0 -0
  215. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_3_multiformatreportgeneration.script +0 -0
  216. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/chatterlang/__init__.py +0 -0
  217. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/__init__.py +0 -0
  218. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/email.py +0 -0
  219. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/html.py +0 -0
  220. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/image.py +0 -0
  221. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/rss.py +0 -0
  222. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/text/__init__.py +0 -0
  223. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/text/chunking_units.py +0 -0
  224. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/data/text/cleaning.py +0 -0
  225. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/__init__.py +0 -0
  226. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/config.py +0 -0
  227. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/content.py +0 -0
  228. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
  229. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
  230. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/embedding_errors.py +0 -0
  231. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
  232. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/multimodal.py +0 -0
  233. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
  234. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapters.py +0 -0
  235. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
  236. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/operations/__init__.py +0 -0
  237. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/operations/filtering.py +0 -0
  238. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/operations/matrices.py +0 -0
  239. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/operations/thread_ops.py +0 -0
  240. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/__init__.py +0 -0
  241. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/basic.py +0 -0
  242. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/collect.py +0 -0
  243. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/core.py +0 -0
  244. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/debug.py +0 -0
  245. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/fields.py +0 -0
  246. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/filters.py +0 -0
  247. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/flow.py +0 -0
  248. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/fork.py +0 -0
  249. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/hashing.py +0 -0
  250. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/io.py +0 -0
  251. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/math.py +0 -0
  252. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/metadata.py +0 -0
  253. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipe/shell.py +0 -0
  254. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/pipelines/__init__.py +0 -0
  255. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/py.typed +0 -0
  256. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/search/__init__.py +0 -0
  257. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/search/abstract.py +0 -0
  258. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/__init__.py +0 -0
  259. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/collections.py +0 -0
  260. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/config.py +0 -0
  261. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/constants.py +0 -0
  262. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/iterators.py +0 -0
  263. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/os.py +0 -0
  264. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe/util/plugin_loader.py +0 -0
  265. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/dependency_links.txt +0 -0
  266. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/entry_points.txt +0 -0
  267. {talkpipe-1.0.1 → talkpipe-1.0.2}/src/talkpipe.egg-info/top_level.txt +0 -0
  268. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/conftest.py +0 -0
  269. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/embedding_adapter_contract_suite.py +0 -0
  270. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/prompt_adapter_contract_suite.py +0 -0
  271. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
  272. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
  273. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
  274. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
  275. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
  276. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
  277. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
  278. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_serve_static.py +0 -0
  279. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_server_common.py +0 -0
  280. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_server_hardening.py +0 -0
  281. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
  282. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
  283. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
  284. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_static.py +0 -0
  285. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
  286. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
  287. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
  288. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
  289. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/chatterlang/test_registry.py +0 -0
  290. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/sample_feed.pkl +0 -0
  291. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test.docx +0 -0
  292. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_email.py +0 -0
  293. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_extraction.py +0 -0
  294. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_html.py +0 -0
  295. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_html_exceptions.py +0 -0
  296. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_image.py +0 -0
  297. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_mogomock.py +0 -0
  298. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_mongo.py +0 -0
  299. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_mongo_integration.py +0 -0
  300. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
  301. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/test_rss.py +0 -0
  302. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
  303. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/text/test_cleaning.py +0 -0
  304. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
  305. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/data/text/test_operations.py +0 -0
  306. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_content.py +0 -0
  307. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_embedding.py +0 -0
  308. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
  309. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
  310. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
  311. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
  312. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_multimodal.py +0 -0
  313. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
  314. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
  315. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_timeouts.py +0 -0
  316. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_vision.py +0 -0
  317. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
  318. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/operations/test_filtering.py +0 -0
  319. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/operations/test_matrices.py +0 -0
  320. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/operations/test_threading.py +0 -0
  321. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/operations/test_transforms.py +0 -0
  322. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_basic.py +0 -0
  323. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_basic_split.py +0 -0
  324. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_core.py +0 -0
  325. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_fork.py +0 -0
  326. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_io.py +0 -0
  327. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_math.py +0 -0
  328. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipe/test_metadata.py +0 -0
  329. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
  330. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
  331. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/search/test_abstract.py +0 -0
  332. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/search/test_lancedb.py +0 -0
  333. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
  334. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/search/test_whoosh.py +0 -0
  335. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
  336. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/test_py_typed.py +0 -0
  337. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/test_version.py +0 -0
  338. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_collections.py +0 -0
  339. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_config.py +0 -0
  340. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_data_manipulation.py +0 -0
  341. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_doc_extraction.py +0 -0
  342. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_iterators.py +0 -0
  343. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_os.py +0 -0
  344. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_plugin_loader.py +0 -0
  345. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/talkpipe/util/test_util.py +0 -0
  346. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/test_config_keys_documented.py +0 -0
  347. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/test_doc_examples.py +0 -0
  348. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/test_security_vulnerabilities.py +0 -0
  349. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/test_tutorial_scripts.py +0 -0
  350. {talkpipe-1.0.1 → talkpipe-1.0.2}/tests/testutils.py +0 -0
@@ -353,8 +353,11 @@ jobs:
353
353
  # blocked behind a skipped job everywhere else. The container image is
354
354
  # published independently by that job on github.com.
355
355
  needs: [test, lint, package, security-scan]
356
- if: github.event_name == 'release' && github.event.action == 'published'
357
-
356
+ # Version tags only: publishing a release under any other tag would upload
357
+ # a distribution whose setuptools_scm version came from a tag that is not
358
+ # one.
359
+ if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'v')
360
+
358
361
  steps:
359
362
  - uses: actions/checkout@v7
360
363
  with:
@@ -380,4 +383,4 @@ jobs:
380
383
  env:
381
384
  TWINE_USERNAME: __token__
382
385
  TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
383
- run: twine upload dist/*
386
+ run: twine upload dist/*
@@ -12,7 +12,7 @@
12
12
  - `run_doc_examples` — extract and run all doc examples (alternative to pytest; requires full_network for LLM examples)
13
13
 
14
14
  ## Project Overview
15
- TalkPipe is a Python toolkit that makes it easy to create, test, and deploy workflows that integrate Generative AI with your existing tools and data sources. TalkPipe treats LLMs as one tool in your arsenal - letting you build practical solutions that combine AI with data processing, file handling, and more.
15
+ TalkPipe is a Python toolkit for creating, testing, and deploying workflows that integrate Generative AI with your existing tools and data sources. It treats LLMs as one tool among many, so solutions combine AI with data processing, file handling, and more.
16
16
 
17
17
  - **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just 2 lines of code
18
18
  - **Process Documents** - Extract text from PDFs, analyze research papers, score content relevance
@@ -1,5 +1,138 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 1.0.2 (2026-09-25)
6
+
7
+ - **`max_tokens` caps the length of an LLM response.** `llmPrompt` and the
8
+ guided-generation segments built on it (`llmScore`, `llmExtractTerms`,
9
+ `llmBinaryAnswer`) accept `max_tokens`, as do the Ollama/OpenAI/Anthropic
10
+ prompt adapters: the most tokens the model may generate per response
11
+ (output only; prompt tokens do not count). The Ollama adapter's chat path
12
+ sent only `temperature`, so a model that never emitted a stop token
13
+ generated until its context window filled; `timeout` fails the pipeline
14
+ in that case, while `max_tokens` bounds the item. It maps to `num_predict`
15
+ on Ollama, `max_output_tokens` on the OpenAI Responses API, and
16
+ `max_tokens` on Anthropic, where it replaces the adapter's 4096 (still the
17
+ value when unset). The default is `None`, which leaves every request
18
+ exactly as it was; there is no global config key, the option is
19
+ per-segment. On reasoning/thinking models the thinking tokens count
20
+ against the cap, and a truncated response from a guided-generation segment
21
+ fails schema validation rather than returning a partial result. Prompt
22
+ adapters that take no `max_tokens` (such as `eliza`, or third-party
23
+ adapters that predate it) keep working and ignore it.
24
+ - **Removed: the TalkPipe App Center.** The single-file installer previewed in
25
+ the 1.0.2 betas (`appcenter/`, its release assets, and the rolling
26
+ `experimental` GitHub release that served them) is gone; it never shipped in
27
+ a full release. The TalkPipe applications install directly with
28
+ `uv tool install` — the README lists them with the commands. Textual and
29
+ pytest-asyncio left the `dev` extra. The `experimental` *container* image
30
+ tag for pre-releases is unaffected.
31
+ - **Deprecated: omitting the `|` between an input source and the first
32
+ segment.** `INPUT FROM echo[data="1,2"] print` has always parsed as though
33
+ the pipe were there — an accident of the grammar, and an inconsistent one,
34
+ since every *later* pipe was required and `INPUT FROM echo[data="1,2"] print
35
+ print` was a syntax error. Such scripts still compile and run unchanged, but
36
+ compiling one now emits a `DeprecationWarning` naming the line and column of
37
+ the segment that needs the pipe, logs the same message (so it is visible to
38
+ anyone running `chatterlang_script`, where Python hides deprecation warnings
39
+ by default), and marks the spot in the workbench editor. The spelling will
40
+ be a syntax error in TalkPipe 2.0. Nothing else changed: a pipeline with no
41
+ input source of its own — a fork branch, a fork consumer
42
+ (`fork_name -> print`), or a fragment such as `| print` — still begins with
43
+ a bare segment, and spellings that were errors before are still errors.
44
+ - **Documentation: TalkPipe is provider-neutral, and the docs now say so.**
45
+ Several places read as though Ollama were required — prerequisite lists that
46
+ named only Ollama, a quickstart whose LLM section began "requires
47
+ `talkpipe[ollama]` and Ollama running", RAG prerequisites that asked for an
48
+ Ollama completion model, and an installation note that suggested provider
49
+ API keys could live in `~/.talkpipe.toml`. The model and source guide gained
50
+ an authoritative **LLM providers** section — the four built-in providers
51
+ (Ollama, OpenAI, and Anthropic for chat and vision; Ollama, OpenAI, and
52
+ in-process model2vec for embeddings, plus the scripted eliza fallback), what
53
+ each one needs, how to select it per segment or by default, and how to
54
+ register an adapter of your own — and the README, quickstart, docs index,
55
+ RAG guide, tutorials, and command references link to it instead of repeating
56
+ it. Existing examples still use Ollama; they now say so and show the
57
+ one-parameter switch. Segment docstrings, `serverag` /
58
+ `makevectordatabase` / `chatterlang_workbench` help text, and the workbench's
59
+ example scripts name the alternatives too.
60
+
61
+ - **`serverag` no longer fails silently.** With no embedding or completion
62
+ model configured — the state a first-time user is in — it exited 1 with
63
+ nothing on stdout or stderr, in both web and `--interactive` mode. The
64
+ validation message existed but went only to `logger.error`, and the library
65
+ attaches a `NullHandler` to its own logger, so `logging.lastResort` never
66
+ fired and the message was discarded unless the user happened to pass
67
+ `--logger_levels`. The startup failure now goes straight to stderr
68
+ (`Error: Failed to initialize RAG pipeline: ... Check
69
+ --embedding_model/--embedding_source ...`), the traceback stays on the debug
70
+ log, and logging is configured on every run as `makevectordatabase` and
71
+ `chatterlang_script` already did.
72
+
73
+ - **A component that rejects its options is now a `CompileError`, not a
74
+ traceback.** ChatterLang compilation wrapped only `TypeError` from a
75
+ segment's or source's constructor, so the most common newcomer mistakes —
76
+ `llmPrompt[source="llamacpp"]`, or `llmPrompt` with no model configured —
77
+ escaped as raw `ValueError`s: `chatterlang_script` printed a full Python
78
+ traceback, and `--verbose` made no difference because the friendly handler
79
+ never saw them. Such failures now read
80
+ `Error: Segment 'llmPrompt' could not be created: <why>`, with the traceback
81
+ behind `--verbose`, and the workbench's lint endpoint reports them like any
82
+ other compile error.
83
+
84
+ - **Unsupported LLM sources say what is supported.** `llmPrompt` and
85
+ `llmVisionPrompt` reported only `Unknown source: <name>`; they now match
86
+ `llmEmbed`: `Source 'llamacpp' is not supported. Supported sources are:
87
+ ['anthropic', 'eliza', 'ollama', 'openai']`. The chat and embedding segments
88
+ also no longer log these messages in addition to raising them, which printed
89
+ them twice.
90
+
91
+ - **Documentation corrections**, mostly found by walking the docs as a
92
+ first-time reader:
93
+ - The README's RAG-at-a-glance intro said questions were asked "against the
94
+ App Center" — a find/replace slip; it is the vector store. The `tmp://`
95
+ scheme it uses is now explained (in-process, discarded at exit) there and
96
+ in the model2vec guide, where splitting the example across two processes
97
+ silently returned "No relevant information found."
98
+ - The model2vec guide named `potion-base-8M` as the default model with 256
99
+ dimensions; the default is `potion-retrieval-32M` with 512. The model
100
+ table gained a dimensions column, the "256" comment now names the model
101
+ the snippet actually passes, the Python-API example passes the model it
102
+ precaches, and the offline section warns that a model missing from the
103
+ cache fails under `HF_HUB_OFFLINE=1` with an error that does not name it.
104
+ - The reference-browser walkthrough showed invented transcripts —
105
+ `filterEmails`, `extractAttachments`, `mongoConnect`, `mongoQuery`,
106
+ `parseEmailHeaders`, and a `readEmail` parameter list the source never
107
+ had. Replaced with real output.
108
+ - `chatterlang_serve`'s reference now says that `/history` and the SSE
109
+ stream are scoped to the `talkpipe_session_id` cookie (its own `curl`
110
+ example returned an empty history), that results come back in the
111
+ `/process` response rather than over `/output-stream`, that `--script` is
112
+ optional, and that `/docs` exists.
113
+ - Fixed two dead anchors (the model/source guide's own table of contents,
114
+ and the plugin manager's link into the extension guide), removed a
115
+ troubleshooting row that told readers to check `DEFAULT_*` keys the same
116
+ page says do not exist, documented `chatterlang_script --verbose`, noted
117
+ that the ChatterLang architecture page's Ollama examples work with any
118
+ provider, added the model2vec and lazy-loading pages to the docs index,
119
+ showed `makevectordatabase`'s expected output, quoted the
120
+ `pip install "talkpipe[...]"` extras so they work in zsh, and pointed the
121
+ Python prerequisite at the versions CI actually tests.
122
+
123
+ - `chatterlang_workbench` now exits within a couple of seconds of Ctrl-C even
124
+ while a request is still running. It used to wait for that request to
125
+ finish — a script started from the editor, or the suggestions sidebar's LLM
126
+ call, could hold the process for a minute or more — because uvicorn's
127
+ graceful shutdown had no time limit, and a second Ctrl-C did not help
128
+ because Python then waited for the worker thread the request ran on before
129
+ exiting. Running requests now get a two-second grace period, after which
130
+ the workbench exits without waiting for them.
131
+ - The `pypdf` extra now requires pypdf 6.16.1 or later. Earlier releases can
132
+ be driven into an infinite loop by a crafted PDF through
133
+ `TreeObject.insert_child`; the floor is a security minimum, and every
134
+ fresh install already resolved above it.
135
+
3
136
  ## 1.0.1
4
137
 
5
138
  - The Anthropic adapter no longer sends the `temperature` parameter. The
@@ -9,7 +142,6 @@
9
142
  probes and LLM summarization — failed with
10
143
  `Messages.create() got an unexpected keyword argument 'temperature'`).
11
144
  A requested temperature is now dropped with a warning in the log instead.
12
-
13
145
  ## 1.0.0
14
146
 
15
147
  - `ShingleText` and `AbstractFieldSegment` no longer call the item's `.copy()`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: talkpipe
3
- Version: 1.0.1
3
+ Version: 1.0.2
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>
@@ -56,7 +56,7 @@ Requires-Dist: openai; extra == "openai"
56
56
  Provides-Extra: anthropic
57
57
  Requires-Dist: anthropic>=0.87.0; extra == "anthropic"
58
58
  Provides-Extra: pypdf
59
- Requires-Dist: pypdf>=6.15.0; extra == "pypdf"
59
+ Requires-Dist: pypdf>=6.16.1; extra == "pypdf"
60
60
  Provides-Extra: pillow
61
61
  Requires-Dist: Pillow>=12.2.0; extra == "pillow"
62
62
  Provides-Extra: model2vec
@@ -106,15 +106,12 @@ For the full story, see **[Architecture](docs/architecture/)**.
106
106
 
107
107
  ### Key Applications
108
108
 
109
- These are the entry points for different usage scenarios, from interactive development to production deployment:
109
+ Entry points for different usage scenarios, from interactive development to production deployment:
110
110
 
111
111
  - **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
112
112
  A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
113
113
 
114
- <video width="640" height="360" controls>
115
- <source src="docs/workbench_demo.mp4" type="video/mp4">
116
- Your browser does not support the video tag.
117
- </video>
114
+ <center><img src="docs/chatterlang_workbench_screenshot.png" width=700 alt="ChatterLang Workbench: pipeline editor with autocomplete, next-component suggestions, and pipeline output"></center>
118
115
 
119
116
  - **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
120
117
  Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
@@ -134,27 +131,42 @@ These are the entry points for different usage scenarios, from interactive devel
134
131
  - **[Container images](docs/guides/container-images.md)**
135
132
  Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
136
133
 
134
+ - **Applications built on TalkPipe**
135
+ Install them as standalone commands with [uv](https://docs.astral.sh/uv/getting-started/installation/), each into its own environment:
136
+
137
+ | Application | Install | Run |
138
+ |---|---|---|
139
+ | [TalkPipe Vault](https://github.com/sandialabs/talkpipe-vault) — chat with your own documents | `uv tool install talkpipe-vault` | `vault-server` |
140
+ | [TalkPipe Writing Assistant](https://github.com/sandialabs/talkpipe-writing-assistant) — multi-user writing assistant | `uv tool install talkpipe-writing-assistant` | `writing-assistant` |
141
+ | ChatterLang Workbench and the other TalkPipe commands | `uv tool install "talkpipe[all]"` | `chatterlang_workbench` |
142
+
143
+ `uv tool upgrade <package>` upgrades one, `uv tool uninstall <package>` removes it, and `uv tool update-shell` puts the commands on your `PATH` if they are not found. For a pre-release, add `--prerelease allow` to the install; to go back to the latest release afterwards, reinstall with `--reinstall` (`uv tool install --upgrade` never moves a package backwards).
144
+
137
145
  ## Quick Start
138
146
 
139
- **Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
147
+ **Requirements:** Python 3.11 or newer (3.11, 3.12, and 3.13 are the versions tested in CI). Check yours with `python3 --version` before installing.
140
148
 
141
149
  ```bash
142
150
  pip install talkpipe
143
151
  ```
144
152
 
145
- For LLM support, install the provider(s) you need:
153
+ TalkPipe is provider-neutral: it works with Ollama (local or remote), OpenAI, and Anthropic for chat, and with Ollama, OpenAI, and model2vec (in-process, no server) for embeddings. None of them is required; install the provider(s) you need:
146
154
 
147
155
  ```bash
148
- pip install talkpipe[openai] # OpenAI
149
- pip install talkpipe[ollama] # Ollama
150
- pip install talkpipe[anthropic] # Anthropic Claude
151
- pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
152
- # Or: pip install talkpipe[all]
156
+ pip install "talkpipe[openai]" # OpenAI
157
+ pip install "talkpipe[ollama]" # Ollama
158
+ pip install "talkpipe[anthropic]" # Anthropic Claude
159
+ pip install "talkpipe[model2vec]" # In-process static embeddings (also in [all])
160
+ # Or: pip install "talkpipe[all]"
153
161
  ```
154
162
 
163
+ (The quotes matter in zsh, where an unquoted `[...]` is a glob.)
164
+
165
+ See **[LLM providers](docs/guides/model-and-source-configuration.md#llm-providers)** for what each provider needs and how to select it.
166
+
155
167
  > **Any provider works in any example.** The examples in this README mostly show `source="ollama"`, but that is just a per-segment parameter: swap in `source="openai"` or `source="anthropic"` (with a matching `model`) on any LLM segment — the RAG helpers take the same choice as `embedding_source`/`completion_source`. Different segments in one pipeline can even use different providers. Installing `talkpipe[all]` includes all provider integrations, so switching or mixing needs no further installs.
156
168
 
157
- 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://<ollama host ip>:11434"` (a bare host/IP with no scheme or port, like `"myollamahost"`, also works). Note that the model must already be pulled **on that server** — run `ollama pull llama3.2` there, or `OLLAMA_HOST=http://<ollama host ip>:11434 ollama pull llama3.2` from your machine. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
169
+ Provider API keys are read from the environment by the providers' own SDKs (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`), not from `~/.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://<ollama host ip>:11434"` (a bare host/IP with no scheme or port, like `"myollamahost"`, also works). The model must already be pulled **on that server** — run `ollama pull llama3.2` there, or `OLLAMA_HOST=http://<ollama host ip>:11434 ollama pull llama3.2` from your machine. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
158
170
 
159
171
  Hello world (no LLM server required):
160
172
 
@@ -172,9 +184,9 @@ chat("What's my name?")
172
184
 
173
185
  > **Tip:** `from talkpipe.chatterlang import compile` is equivalent to the `compiler.compile(...)` style above — both styles work throughout the docs.
174
186
 
175
- Multi-turn chat (requires a local model server):
187
+ Multi-turn chat (requires an LLM provider):
176
188
 
177
- > **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).
189
+ > **Prerequisite:** as written, 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`. Ollama is not required: to use OpenAI or Anthropic instead, substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
178
190
 
179
191
  <!-- doc-example: requires-ollama -->
180
192
  ```python
@@ -191,7 +203,7 @@ response = chat("What's my name?") # Will remember context
191
203
 
192
204
  ### RAG at a glance
193
205
 
194
- Index a list of strings, then ask questions against the store (expand with options in [Example 5](#example-5-rag-pipeline-with-vector-database)):
206
+ Index a list of strings, then ask questions against that vector store (expand with options in [Example 5](#example-5-rag-pipeline-with-vector-database)). `tmp://my_kb` is an in-process store that lives only as long as the interpreter — both halves below must run in the same process; use a directory path (as [Example 5](#example-5-rag-pipeline-with-vector-database) does) to keep the index:
195
207
 
196
208
  <!-- doc-example: requires-ollama -->
197
209
  ```python
@@ -209,7 +221,7 @@ rag = compiler.compile(
209
221
  rag("What is TalkPipe?")
210
222
  ```
211
223
 
212
- > **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).
224
+ > **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 that model from Hugging Face (a few files, tens of 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. The `ragToText` completion step still needs a chat provider: set `completion_source="openai"` or `completion_source="anthropic"` with a matching `completion_model`. (OpenAI embeddings work too: `embedding_source="openai"`, `embedding_model="text-embedding-3-small"`.) See the [model2vec guide](docs/guides/model2vec-embeddings.md).
213
225
 
214
226
  > **Indexing large collections inside a container?** Building a vector
215
227
  > database over thousands of documents (`makevectordatabase`,
@@ -299,7 +311,7 @@ result = pipeline()
299
311
  # Returns: ['HELLO', 'WORLD']
300
312
  ```
301
313
 
302
- The `@registry.register_segment()` decorator makes your component discoverable by ChatterLang's compiler, allowing you to use it in scripts alongside built-in segments.
314
+ The `@registry.register_segment()` decorator makes your component discoverable by ChatterLang's compiler, so scripts can use it alongside built-in segments.
303
315
 
304
316
  ### Key ChatterLang Features
305
317
 
@@ -574,7 +586,7 @@ talkpipe/
574
586
  ├── app/ # Runnable applications (servers, CLIs)
575
587
  ├── chatterlang/ # ChatterLang parser, compiler, and components
576
588
  ├── data/ # Data manipulation and I/O components
577
- ├── llm/ # LLM integrations (OpenAI, Ollama, Anthropic)
589
+ ├── llm/ # LLM and embedding integrations (Ollama, OpenAI, Anthropic, model2vec)
578
590
  ├── operations/ # Algorithms and data processing
579
591
  ├── pipe/ # Core pipeline infrastructure
580
592
  ├── pipelines/ # High-level pipeline components (RAG, vector DB)
@@ -584,7 +596,7 @@ talkpipe/
584
596
 
585
597
  ## Configuration
586
598
 
587
- TalkPipe uses a flexible configuration system via `~/.talkpipe.toml` or environment variables. For LLM and embedding `model` / `source` defaults, see [Model and source configuration](docs/guides/model-and-source-configuration.md).
599
+ TalkPipe uses a flexible configuration system via `~/.talkpipe.toml` or environment variables. For LLM and embedding `model` / `source` defaults, see [Model and source configuration](docs/guides/model-and-source-configuration.md). The example below makes Ollama the default chat provider; `default_model_source = "openai"` or `"anthropic"` (with a matching `default_model_name`) works the same way.
588
600
 
589
601
  ```toml
590
602
  # ~/.talkpipe.toml
@@ -692,6 +704,17 @@ We welcome contributions! Whether it's new components, bug fixes, documentation,
692
704
 
693
705
  ### Development environment
694
706
 
707
+ The default branch, `stable`, is release-only: it points at the latest
708
+ release, so what you see on the repository's front page describes that
709
+ release. Development happens on `main`, which is where merge requests go and
710
+ where unreleased changes and their documentation accumulate — check it out
711
+ first:
712
+
713
+ ```bash
714
+ git clone https://github.com/sandialabs/talkpipe.git
715
+ cd talkpipe && git checkout main
716
+ ```
717
+
695
718
  Local development uses [uv](https://docs.astral.sh/uv/) against the committed
696
719
  `uv.lock`, so contributors share one reproducible set of versions:
697
720
 
@@ -702,8 +725,8 @@ uv sync --all-extras
702
725
  **CI does not use the lockfile.** It installs with pip (`pip install -e
703
726
  ".[dev,all]"`) and resolves dependencies fresh, on purpose: that is what
704
727
  someone running `pip install talkpipe` gets, so the build breaks when *they*
705
- would break. A dependency problem that only the lockfile hides is a problem
706
- we want CI to see.
728
+ would break — a dependency problem the lockfile would hide is exactly what we
729
+ want CI to see.
707
730
 
708
731
  Two consequences worth remembering:
709
732
 
@@ -39,15 +39,12 @@ For the full story, see **[Architecture](docs/architecture/)**.
39
39
 
40
40
  ### Key Applications
41
41
 
42
- These are the entry points for different usage scenarios, from interactive development to production deployment:
42
+ Entry points for different usage scenarios, from interactive development to production deployment:
43
43
 
44
44
  - **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
45
45
  A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
46
46
 
47
- <video width="640" height="360" controls>
48
- <source src="docs/workbench_demo.mp4" type="video/mp4">
49
- Your browser does not support the video tag.
50
- </video>
47
+ <center><img src="docs/chatterlang_workbench_screenshot.png" width=700 alt="ChatterLang Workbench: pipeline editor with autocomplete, next-component suggestions, and pipeline output"></center>
51
48
 
52
49
  - **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
53
50
  Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
@@ -67,27 +64,42 @@ These are the entry points for different usage scenarios, from interactive devel
67
64
  - **[Container images](docs/guides/container-images.md)**
68
65
  Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
69
66
 
67
+ - **Applications built on TalkPipe**
68
+ Install them as standalone commands with [uv](https://docs.astral.sh/uv/getting-started/installation/), each into its own environment:
69
+
70
+ | Application | Install | Run |
71
+ |---|---|---|
72
+ | [TalkPipe Vault](https://github.com/sandialabs/talkpipe-vault) — chat with your own documents | `uv tool install talkpipe-vault` | `vault-server` |
73
+ | [TalkPipe Writing Assistant](https://github.com/sandialabs/talkpipe-writing-assistant) — multi-user writing assistant | `uv tool install talkpipe-writing-assistant` | `writing-assistant` |
74
+ | ChatterLang Workbench and the other TalkPipe commands | `uv tool install "talkpipe[all]"` | `chatterlang_workbench` |
75
+
76
+ `uv tool upgrade <package>` upgrades one, `uv tool uninstall <package>` removes it, and `uv tool update-shell` puts the commands on your `PATH` if they are not found. For a pre-release, add `--prerelease allow` to the install; to go back to the latest release afterwards, reinstall with `--reinstall` (`uv tool install --upgrade` never moves a package backwards).
77
+
70
78
  ## Quick Start
71
79
 
72
- **Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
80
+ **Requirements:** Python 3.11 or newer (3.11, 3.12, and 3.13 are the versions tested in CI). Check yours with `python3 --version` before installing.
73
81
 
74
82
  ```bash
75
83
  pip install talkpipe
76
84
  ```
77
85
 
78
- For LLM support, install the provider(s) you need:
86
+ TalkPipe is provider-neutral: it works with Ollama (local or remote), OpenAI, and Anthropic for chat, and with Ollama, OpenAI, and model2vec (in-process, no server) for embeddings. None of them is required; install the provider(s) you need:
79
87
 
80
88
  ```bash
81
- pip install talkpipe[openai] # OpenAI
82
- pip install talkpipe[ollama] # Ollama
83
- pip install talkpipe[anthropic] # Anthropic Claude
84
- pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
85
- # Or: pip install talkpipe[all]
89
+ pip install "talkpipe[openai]" # OpenAI
90
+ pip install "talkpipe[ollama]" # Ollama
91
+ pip install "talkpipe[anthropic]" # Anthropic Claude
92
+ pip install "talkpipe[model2vec]" # In-process static embeddings (also in [all])
93
+ # Or: pip install "talkpipe[all]"
86
94
  ```
87
95
 
96
+ (The quotes matter in zsh, where an unquoted `[...]` is a glob.)
97
+
98
+ See **[LLM providers](docs/guides/model-and-source-configuration.md#llm-providers)** for what each provider needs and how to select it.
99
+
88
100
  > **Any provider works in any example.** The examples in this README mostly show `source="ollama"`, but that is just a per-segment parameter: swap in `source="openai"` or `source="anthropic"` (with a matching `model`) on any LLM segment — the RAG helpers take the same choice as `embedding_source`/`completion_source`. Different segments in one pipeline can even use different providers. Installing `talkpipe[all]` includes all provider integrations, so switching or mixing needs no further installs.
89
101
 
90
- 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://<ollama host ip>:11434"` (a bare host/IP with no scheme or port, like `"myollamahost"`, also works). Note that the model must already be pulled **on that server** — run `ollama pull llama3.2` there, or `OLLAMA_HOST=http://<ollama host ip>:11434 ollama pull llama3.2` from your machine. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
102
+ Provider API keys are read from the environment by the providers' own SDKs (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`), not from `~/.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://<ollama host ip>:11434"` (a bare host/IP with no scheme or port, like `"myollamahost"`, also works). The model must already be pulled **on that server** — run `ollama pull llama3.2` there, or `OLLAMA_HOST=http://<ollama host ip>:11434 ollama pull llama3.2` from your machine. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
91
103
 
92
104
  Hello world (no LLM server required):
93
105
 
@@ -105,9 +117,9 @@ chat("What's my name?")
105
117
 
106
118
  > **Tip:** `from talkpipe.chatterlang import compile` is equivalent to the `compiler.compile(...)` style above — both styles work throughout the docs.
107
119
 
108
- Multi-turn chat (requires a local model server):
120
+ Multi-turn chat (requires an LLM provider):
109
121
 
110
- > **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).
122
+ > **Prerequisite:** as written, 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`. Ollama is not required: to use OpenAI or Anthropic instead, substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
111
123
 
112
124
  <!-- doc-example: requires-ollama -->
113
125
  ```python
@@ -124,7 +136,7 @@ response = chat("What's my name?") # Will remember context
124
136
 
125
137
  ### RAG at a glance
126
138
 
127
- Index a list of strings, then ask questions against the store (expand with options in [Example 5](#example-5-rag-pipeline-with-vector-database)):
139
+ Index a list of strings, then ask questions against that vector store (expand with options in [Example 5](#example-5-rag-pipeline-with-vector-database)). `tmp://my_kb` is an in-process store that lives only as long as the interpreter — both halves below must run in the same process; use a directory path (as [Example 5](#example-5-rag-pipeline-with-vector-database) does) to keep the index:
128
140
 
129
141
  <!-- doc-example: requires-ollama -->
130
142
  ```python
@@ -142,7 +154,7 @@ rag = compiler.compile(
142
154
  rag("What is TalkPipe?")
143
155
  ```
144
156
 
145
- > **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).
157
+ > **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 that model from Hugging Face (a few files, tens of 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. The `ragToText` completion step still needs a chat provider: set `completion_source="openai"` or `completion_source="anthropic"` with a matching `completion_model`. (OpenAI embeddings work too: `embedding_source="openai"`, `embedding_model="text-embedding-3-small"`.) See the [model2vec guide](docs/guides/model2vec-embeddings.md).
146
158
 
147
159
  > **Indexing large collections inside a container?** Building a vector
148
160
  > database over thousands of documents (`makevectordatabase`,
@@ -232,7 +244,7 @@ result = pipeline()
232
244
  # Returns: ['HELLO', 'WORLD']
233
245
  ```
234
246
 
235
- The `@registry.register_segment()` decorator makes your component discoverable by ChatterLang's compiler, allowing you to use it in scripts alongside built-in segments.
247
+ The `@registry.register_segment()` decorator makes your component discoverable by ChatterLang's compiler, so scripts can use it alongside built-in segments.
236
248
 
237
249
  ### Key ChatterLang Features
238
250
 
@@ -507,7 +519,7 @@ talkpipe/
507
519
  ├── app/ # Runnable applications (servers, CLIs)
508
520
  ├── chatterlang/ # ChatterLang parser, compiler, and components
509
521
  ├── data/ # Data manipulation and I/O components
510
- ├── llm/ # LLM integrations (OpenAI, Ollama, Anthropic)
522
+ ├── llm/ # LLM and embedding integrations (Ollama, OpenAI, Anthropic, model2vec)
511
523
  ├── operations/ # Algorithms and data processing
512
524
  ├── pipe/ # Core pipeline infrastructure
513
525
  ├── pipelines/ # High-level pipeline components (RAG, vector DB)
@@ -517,7 +529,7 @@ talkpipe/
517
529
 
518
530
  ## Configuration
519
531
 
520
- TalkPipe uses a flexible configuration system via `~/.talkpipe.toml` or environment variables. For LLM and embedding `model` / `source` defaults, see [Model and source configuration](docs/guides/model-and-source-configuration.md).
532
+ TalkPipe uses a flexible configuration system via `~/.talkpipe.toml` or environment variables. For LLM and embedding `model` / `source` defaults, see [Model and source configuration](docs/guides/model-and-source-configuration.md). The example below makes Ollama the default chat provider; `default_model_source = "openai"` or `"anthropic"` (with a matching `default_model_name`) works the same way.
521
533
 
522
534
  ```toml
523
535
  # ~/.talkpipe.toml
@@ -625,6 +637,17 @@ We welcome contributions! Whether it's new components, bug fixes, documentation,
625
637
 
626
638
  ### Development environment
627
639
 
640
+ The default branch, `stable`, is release-only: it points at the latest
641
+ release, so what you see on the repository's front page describes that
642
+ release. Development happens on `main`, which is where merge requests go and
643
+ where unreleased changes and their documentation accumulate — check it out
644
+ first:
645
+
646
+ ```bash
647
+ git clone https://github.com/sandialabs/talkpipe.git
648
+ cd talkpipe && git checkout main
649
+ ```
650
+
628
651
  Local development uses [uv](https://docs.astral.sh/uv/) against the committed
629
652
  `uv.lock`, so contributors share one reproducible set of versions:
630
653
 
@@ -635,8 +658,8 @@ uv sync --all-extras
635
658
  **CI does not use the lockfile.** It installs with pip (`pip install -e
636
659
  ".[dev,all]"`) and resolves dependencies fresh, on purpose: that is what
637
660
  someone running `pip install talkpipe` gets, so the build breaks when *they*
638
- would break. A dependency problem that only the lockfile hides is a problem
639
- we want CI to see.
661
+ would break — a dependency problem the lockfile would hide is exactly what we
662
+ want CI to see.
640
663
 
641
664
  Two consequences worth remembering:
642
665
 
@@ -34,13 +34,22 @@ history and only made version sorting harder. Semantic versioning rules
34
34
  git push origin vX.Y.Z
35
35
  ```
36
36
 
37
+ Then advance `stable`, the repository's default branch, to the release.
38
+ `stable` only ever points at a full release, so skip this for betas and
39
+ release candidates:
40
+
41
+ ```bash
42
+ git push origin vX.Y.Z^{commit}:stable
43
+ ```
44
+
37
45
  4. **Publish a release** for the tag (Gitea: *Releases → New Release*;
38
46
  GitHub mirror: *Releases → Draft a new release*). The CI workflow's
39
47
  `release: published` trigger runs `publish-package`, which builds the
40
48
  sdist and wheel, `twine check`s them, and uploads to PyPI with the
41
49
  `PYPI_API_TOKEN` repository secret. Mark betas and release candidates as
42
50
  pre-releases. Watch the run finish; the package job and the container build
43
- (GitHub only) run in the same workflow.
51
+ (GitHub only) run in the same workflow. `publish-package` ignores any tag
52
+ that does not start with `v`, so a stray publish cannot upload to PyPI.
44
53
  5. **Verify** with a fresh environment: `pip install talkpipe==X.Y.Z`,
45
54
  `python -c "import talkpipe; print(talkpipe.__version__)"`.
46
55
 
@@ -50,6 +59,6 @@ Nothing is bumped afterwards; the next commit on `main` reports itself as
50
59
  ## Downstream
51
60
 
52
61
  The consumers in this suite pin a floor on talkpipe (`talkpipe_vault`,
53
- `talkpipe-agents`, `talkpipe-writing-assistant`, `privateer`, `local-m2v`).
62
+ `talkpipe-agents`, `talkpipe-writing-assistant`, `local-m2v`).
54
63
  When a release adds API they rely on, or when the major version changes,
55
64
  raise their floors in a follow-up merge request in each repo.
@@ -11,7 +11,10 @@ New to TalkPipe? Start here for installation, basic concepts, and your first pip
11
11
  Create vector databases and run RAG servers in two commands: `makevectordatabase` and `serverag`.
12
12
 
13
13
  ### ⚙️ [Model and source configuration](guides/model-and-source-configuration.md)
14
- Set default LLM and embedding providers via segment parameters, `~/.talkpipe.toml`, or environment variables.
14
+ The supported LLM providers — Ollama, OpenAI, and Anthropic for chat; Ollama, OpenAI, and in-process model2vec for embeddings — what each needs, and how to select one per segment, in `~/.talkpipe.toml`, or with environment variables.
15
+
16
+ ### 🧮 [Model2vec embeddings](guides/model2vec-embeddings.md)
17
+ In-process static embeddings: no server, no API key, and no network once the model is cached — including how to precache for air-gapped environments.
15
18
 
16
19
  ### 🐳 [Container images](guides/container-images.md)
17
20
  Pull multi-platform release images from GitHub Container Registry (`ghcr.io`), tags, and Docker/Podman usage.
@@ -30,6 +33,7 @@ Complete documentation for all TalkPipe commands and components:
30
33
  - [ChatterLang Script Runner](api-reference/chatterlang-script.md) - Run a script from the command line
31
34
  - [Documentation Generator](api-reference/talkpipe-ref.md) - Generate reference documentation for Segments and Sources
32
35
  - [Plugin Manager](api-reference/talkpipe-plugin-manager.md) - Manage and inspect TalkPipe plugins
36
+ - [Lazy loading](api-reference/lazy-loading.md) - How the registry imports a component's module only when it is named
33
37
 
34
38
  ### 🏗️ [Architecture](architecture/)
35
39
  Deep technical documentation:
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Overview
6
6
 
7
- ChatterLang Script is a command-line interface for running ChatterLang pipeline scripts. It compiles and executes scripts written in TalkPipe's external DSL. This tool is useful for automation, batch data processing, and integration into shell scripts or CI/CD pipelines. It supports inline scripts, file-based scripts, configuration-based scripts, and custom module loading.
7
+ `chatterlang_script` compiles and executes scripts written in TalkPipe's external DSL, which makes it useful for automation, batch data processing, and integration into shell scripts or CI/CD pipelines. A script can come from a file, a configuration key, or inline text, and custom modules can be loaded alongside it.
8
8
 
9
9
  ## Usage
10
10
 
@@ -22,6 +22,7 @@ chatterlang_script --script "script_content" [options]
22
22
  | `--load-module` | string | Path to custom module file to import before execution (can be specified multiple times) |
23
23
  | `--logger_levels` | string | Logger level configuration in format 'logger:level,logger:level,...' |
24
24
  | `--logger_files` | string | Logger file output configuration in format 'logger:file,logger:file,...' |
25
+ | `--verbose` | flag | Show the full Python traceback on compile and runtime errors instead of just the one-line `Error: ...` message |
25
26
  | `--<key>` | any | Any additional argument becomes a configuration value accessible via `$key` syntax in the script |
26
27
 
27
28
  ## Script Sources
@@ -86,6 +87,8 @@ This feature is useful for parameterizing scripts without editing configuration
86
87
  - Check input data format matches expected types
87
88
  - Verify external service connectivity (APIs, URLs)
88
89
  - Review ChatterLang syntax for typos
90
+ - Errors are reported as a single `Error: ...` line; add `--verbose` for the full
91
+ Python traceback
89
92
 
90
93
  **Performance issues:**
91
94
  - Monitor memory usage with large datasets
@@ -94,7 +97,7 @@ This feature is useful for parameterizing scripts without editing configuration
94
97
 
95
98
  ### Debug Mode
96
99
 
97
- Enable comprehensive logging:
100
+ Enable detailed logging:
98
101
 
99
102
  ```bash
100
103
  chatterlang_script \