TalkPipe 1.0.2b2__tar.gz → 1.1.0__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 (367) hide show
  1. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/CICD.md +6 -3
  2. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/ISSUE_TEMPLATE/release-checklist.md +2 -1
  3. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/dependabot.yml +3 -0
  4. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/workflows/ci-cd.yml +51 -102
  5. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/AGENTS.md +0 -7
  6. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/CHANGELOG.md +69 -156
  7. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/Dockerfile +6 -1
  8. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/PKG-INFO +15 -32
  9. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/README.md +11 -26
  10. talkpipe-1.1.0/RELEASING.md +73 -0
  11. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/chatterlang.md +22 -0
  12. talkpipe-1.1.0/docs/chatterlang_workbench_screenshot.png +0 -0
  13. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/contributing/developer-handbook.md +4 -2
  14. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/model-and-source-configuration.md +1 -1
  15. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/pyproject.toml +7 -18
  16. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/pytest.ini +0 -5
  17. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/chat.py +44 -13
  18. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/config.py +26 -0
  19. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapter_base.py +14 -1
  20. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_anthropic.py +5 -1
  21. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_ollama.py +6 -1
  22. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_openai.py +4 -0
  23. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/vision.py +2 -12
  24. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/PKG-INFO +15 -32
  25. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/SOURCES.txt +1 -16
  26. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/requires.txt +3 -5
  27. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/scm_file_list.json +1 -16
  28. talkpipe-1.1.0/src/talkpipe.egg-info/scm_version.json +8 -0
  29. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_chat.py +136 -0
  30. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +19 -0
  31. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +18 -0
  32. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +36 -0
  33. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_openai.py +36 -0
  34. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_config_keys_documented.py +1 -15
  35. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/testutils.py +3 -1
  36. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/uv.lock +138 -161
  37. talkpipe-1.0.2b2/RELEASING.md +0 -83
  38. talkpipe-1.0.2b2/appcenter/README.md +0 -388
  39. talkpipe-1.0.2b2/appcenter/install.ps1 +0 -69
  40. talkpipe-1.0.2b2/appcenter/install.sh +0 -96
  41. talkpipe-1.0.2b2/appcenter/talkpipe.toml +0 -81
  42. talkpipe-1.0.2b2/appcenter/talkpipe_appcenter.py +0 -3225
  43. talkpipe-1.0.2b2/appcenter/tests/conftest.py +0 -350
  44. talkpipe-1.0.2b2/appcenter/tests/test_actions.py +0 -601
  45. talkpipe-1.0.2b2/appcenter/tests/test_bootstrap.py +0 -129
  46. talkpipe-1.0.2b2/appcenter/tests/test_catalog.py +0 -355
  47. talkpipe-1.0.2b2/appcenter/tests/test_channel.py +0 -368
  48. talkpipe-1.0.2b2/appcenter/tests/test_cli.py +0 -332
  49. talkpipe-1.0.2b2/appcenter/tests/test_packaging.py +0 -62
  50. talkpipe-1.0.2b2/appcenter/tests/test_shortcut.py +0 -341
  51. talkpipe-1.0.2b2/appcenter/tests/test_status.py +0 -287
  52. talkpipe-1.0.2b2/appcenter/tests/test_tui.py +0 -545
  53. talkpipe-1.0.2b2/appcenter/tests/test_uv.py +0 -156
  54. talkpipe-1.0.2b2/src/talkpipe.egg-info/scm_version.json +0 -8
  55. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/changelog-update/SKILL.md +0 -0
  56. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
  57. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
  58. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
  59. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/test-driven-development/SKILL.md +0 -0
  60. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/update-entry-points/SKILL.md +0 -0
  61. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
  62. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.dockerignore +0 -0
  63. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
  64. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
  65. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/SECURITY.md +0 -0
  66. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/copilot-instructions.md +0 -0
  67. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/add-segment.prompt.md +0 -0
  68. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/changelog.prompt.md +0 -0
  69. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/doc-examples.prompt.md +0 -0
  70. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/tdd.prompt.md +0 -0
  71. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/update-entry-points.prompt.md +0 -0
  72. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitignore +0 -0
  73. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.pre-commit-config.yaml +0 -0
  74. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.safety-policy.yml +0 -0
  75. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.safety-project.ini +0 -0
  76. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.vscode/settings.json +0 -0
  77. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.vscode/tasks.json +0 -0
  78. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/COPYRIGHT +0 -0
  79. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/LICENSE +0 -0
  80. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/.gitignore +0 -0
  81. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/LLMChat.png +0 -0
  82. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/LLMEvaluateWebPage.png +0 -0
  83. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/README.md +0 -0
  84. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/TalkPipe.png +0 -0
  85. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/TalkPipe.xcf +0 -0
  86. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/README.md +0 -0
  87. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-script.md +0 -0
  88. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-server.md +0 -0
  89. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-workbench.md +0 -0
  90. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/lazy-loading.md +0 -0
  91. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
  92. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/talkpipe-ref.md +0 -0
  93. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/README.md +0 -0
  94. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/configuration.md +0 -0
  95. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/documentation-formatting.md +0 -0
  96. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/extending-talkpipe.md +0 -0
  97. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/metadata-stream.md +0 -0
  98. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/pipe-api.md +0 -0
  99. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/protocol.md +0 -0
  100. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/security.md +0 -0
  101. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/streaming.md +0 -0
  102. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/container-images.md +0 -0
  103. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/makevectordatabase-and-serverag.md +0 -0
  104. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/model2vec-embeddings.md +0 -0
  105. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/make_structure_diagram.sh +0 -0
  106. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/quickstart.md +0 -0
  107. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/structure.tex +0 -0
  108. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_architecture.png +0 -0
  109. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_architecture.tex +0 -0
  110. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_diagram.png +0 -0
  111. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/.gitignore +0 -0
  112. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/README.md +0 -0
  113. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
  114. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
  115. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
  116. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
  117. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
  118. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
  119. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
  120. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
  121. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
  122. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
  123. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
  124. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
  125. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
  126. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
  127. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
  128. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
  129. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
  130. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
  131. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
  132. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
  133. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
  134. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
  135. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
  136. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
  137. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
  138. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
  139. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
  140. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
  141. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
  142. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
  143. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
  144. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
  145. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
  146. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
  147. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
  148. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
  149. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
  150. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
  151. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
  152. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
  153. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/workbench_demo.mp4 +0 -0
  154. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/.gitignore +0 -0
  155. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/README.md +0 -0
  156. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/build.mjs +0 -0
  157. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/package-lock.json +0 -0
  158. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/package.json +0 -0
  159. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/src/cm.js +0 -0
  160. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/scripts/extract_documentation_examples.py +0 -0
  161. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/setup.cfg +0 -0
  162. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/__init__.py +0 -0
  163. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/__init__.py +0 -0
  164. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
  165. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
  166. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
  167. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_script.py +0 -0
  168. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_serve.py +0 -0
  169. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_workbench.py +0 -0
  170. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/doc_examples.py +0 -0
  171. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/makevectordatabase.py +0 -0
  172. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/precache_model2vec.py +0 -0
  173. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/server_common.py +0 -0
  174. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/serverag.py +0 -0
  175. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/favicon.ico +0 -0
  176. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/common.js +0 -0
  177. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/index.css +0 -0
  178. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/index.js +0 -0
  179. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/stream.css +0 -0
  180. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/stream.js +0 -0
  181. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
  182. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
  183. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
  184. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
  185. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/app.js +0 -0
  186. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/editor.js +0 -0
  187. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/index.html +0 -0
  188. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/styles.css +0 -0
  189. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/suggest.js +0 -0
  190. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
  191. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
  192. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/workspace.js +0 -0
  193. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
  194. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
  195. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
  196. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/__init__.py +0 -0
  197. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/corpus.py +0 -0
  198. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/reference_api.py +0 -0
  199. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/suggest.py +0 -0
  200. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/suggest_api.py +0 -0
  201. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/workspace.py +0 -0
  202. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/workspace_api.py +0 -0
  203. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
  204. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_1_createsyntheticdata.script +0 -0
  205. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_2_indexstories.script +0 -0
  206. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_3_searchstories.script +0 -0
  207. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_1_createvectordatabase.script +0 -0
  208. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_2_searchbyexample.script +0 -0
  209. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_3_specializedrag.script +0 -0
  210. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_1_executivesummarygeneration.script +0 -0
  211. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_2_detailedanalysisreportgeneration.script +0 -0
  212. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_3_multiformatreportgeneration.script +0 -0
  213. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/__init__.py +0 -0
  214. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/compiler.py +0 -0
  215. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/parsers.py +0 -0
  216. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/registry.py +0 -0
  217. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/__init__.py +0 -0
  218. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/email.py +0 -0
  219. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/extraction.py +0 -0
  220. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/html.py +0 -0
  221. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/image.py +0 -0
  222. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/mongo.py +0 -0
  223. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/rss.py +0 -0
  224. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/__init__.py +0 -0
  225. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/chunking_units.py +0 -0
  226. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/cleaning.py +0 -0
  227. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/englishnormalize.py +0 -0
  228. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/operations.py +0 -0
  229. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/__init__.py +0 -0
  230. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/_ollama_common.py +0 -0
  231. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/content.py +0 -0
  232. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding.py +0 -0
  233. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters.py +0 -0
  234. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
  235. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
  236. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_errors.py +0 -0
  237. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
  238. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/multimodal.py +0 -0
  239. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
  240. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters.py +0 -0
  241. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
  242. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/__init__.py +0 -0
  243. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/filtering.py +0 -0
  244. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/matrices.py +0 -0
  245. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/thread_ops.py +0 -0
  246. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/transforms.py +0 -0
  247. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/__init__.py +0 -0
  248. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/basic.py +0 -0
  249. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/collect.py +0 -0
  250. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/core.py +0 -0
  251. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/debug.py +0 -0
  252. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/fields.py +0 -0
  253. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/filters.py +0 -0
  254. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/flow.py +0 -0
  255. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/fork.py +0 -0
  256. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/hashing.py +0 -0
  257. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/io.py +0 -0
  258. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/math.py +0 -0
  259. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/metadata.py +0 -0
  260. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/shell.py +0 -0
  261. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/__init__.py +0 -0
  262. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/basic_rag.py +0 -0
  263. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/vector_databases.py +0 -0
  264. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/py.typed +0 -0
  265. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/__init__.py +0 -0
  266. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/abstract.py +0 -0
  267. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/lancedb.py +0 -0
  268. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/whoosh.py +0 -0
  269. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/__init__.py +0 -0
  270. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/collections.py +0 -0
  271. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/config.py +0 -0
  272. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/constants.py +0 -0
  273. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/data_manipulation.py +0 -0
  274. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/doc_extraction.py +0 -0
  275. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/iterators.py +0 -0
  276. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/os.py +0 -0
  277. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/plugin_loader.py +0 -0
  278. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/dependency_links.txt +0 -0
  279. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/entry_points.txt +0 -0
  280. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/top_level.txt +0 -0
  281. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/conftest.py +0 -0
  282. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/embedding_adapter_contract_suite.py +0 -0
  283. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/prompt_adapter_contract_suite.py +0 -0
  284. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
  285. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
  286. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
  287. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
  288. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
  289. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
  290. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
  291. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_serve_static.py +0 -0
  292. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_server_common.py +0 -0
  293. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_server_hardening.py +0 -0
  294. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_serverag.py +0 -0
  295. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
  296. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
  297. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
  298. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_reference_api.py +0 -0
  299. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_static.py +0 -0
  300. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
  301. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
  302. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
  303. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_compiler.py +0 -0
  304. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
  305. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
  306. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
  307. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_registry.py +0 -0
  308. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/sample_feed.pkl +0 -0
  309. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test.docx +0 -0
  310. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_email.py +0 -0
  311. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_extraction.py +0 -0
  312. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_html.py +0 -0
  313. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_html_exceptions.py +0 -0
  314. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_image.py +0 -0
  315. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mogomock.py +0 -0
  316. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo.py +0 -0
  317. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo_integration.py +0 -0
  318. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
  319. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_rss.py +0 -0
  320. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
  321. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_cleaning.py +0 -0
  322. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
  323. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_operations.py +0 -0
  324. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_content.py +0 -0
  325. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding.py +0 -0
  326. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
  327. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
  328. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
  329. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
  330. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_multimodal.py +0 -0
  331. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
  332. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
  333. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_timeouts.py +0 -0
  334. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_vision.py +0 -0
  335. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
  336. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_filtering.py +0 -0
  337. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_matrices.py +0 -0
  338. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_threading.py +0 -0
  339. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_transforms.py +0 -0
  340. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_basic.py +0 -0
  341. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_basic_split.py +0 -0
  342. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_core.py +0 -0
  343. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_fork.py +0 -0
  344. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_io.py +0 -0
  345. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_math.py +0 -0
  346. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_metadata.py +0 -0
  347. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
  348. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
  349. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_abstract.py +0 -0
  350. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_lancedb.py +0 -0
  351. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
  352. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_whoosh.py +0 -0
  353. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_documentation_examples.py +0 -0
  354. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
  355. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_py_typed.py +0 -0
  356. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_version.py +0 -0
  357. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_collections.py +0 -0
  358. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_config.py +0 -0
  359. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_data_manipulation.py +0 -0
  360. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_doc_extraction.py +0 -0
  361. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_iterators.py +0 -0
  362. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_os.py +0 -0
  363. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_plugin_loader.py +0 -0
  364. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_util.py +0 -0
  365. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_doc_examples.py +0 -0
  366. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_security_vulnerabilities.py +0 -0
  367. {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_tutorial_scripts.py +0 -0
@@ -27,7 +27,7 @@ Actions-compatible runner; jobs that need github.com are guarded with
27
27
  | `security-scan` | everywhere; needs `test`, `lint` | Bandit (`-c pyproject.toml`, the `[tool.bandit]` table) and Safety. Uses the commercial database when `SAFETY_API_KEY` is set and falls back to the free `safety check` database when it is not (secrets are not passed to pull-request runs); both fail the build on a known vulnerability. |
28
28
  | `build-container` | github.com only | Docker image build and Trivy scan on every run; pushes to ghcr.io **on releases only** (`latest` for stable releases, `experimental` for pre-releases); multi-architecture (linux/amd64, linux/arm64) on release only. |
29
29
  | `codeql-analysis` | github.com only | GitHub's semantic code analysis. |
30
- | `publish-package` | on a published release; needs `test`, `lint`, `package`, `security-scan` | `python -m build`, `twine check`, upload to PyPI. Does not depend on the container job, so publishing is not blocked where that job is skipped. |
30
+ | `publish-package` | github.com only, on a published release; needs `test`, `lint`, `package`, `security-scan`, `build-container` | `python -m build`, `twine check`, upload to PyPI. Depends on the container job so the package is never published without its images; off github.com that job is skipped and so is this one. |
31
31
 
32
32
  ### Configuration Files
33
33
 
@@ -117,8 +117,11 @@ bandit -c pyproject.toml -r src/
117
117
  export SAFETY_API_KEY=your-key # optional; links results to Safety Platform
118
118
  safety scan
119
119
 
120
- # Build container (matches CI)
121
- docker build -t talkpipe:local .
120
+ # Build container (matches CI). `.dockerignore` excludes `.git`, so the
121
+ # version cannot be derived inside the build; CI computes it with
122
+ # setuptools_scm and passes it as a build argument. Without the argument
123
+ # the image reports version 0.1.0.
124
+ docker build --build-arg TALKPIPE_VERSION=X.Y.Z -t talkpipe:local .
122
125
 
123
126
  # Run container security scan
124
127
  docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
@@ -13,7 +13,8 @@ assignees: ''
13
13
  - [ ] Merge into master
14
14
  - [ ] Run bandit and safety
15
15
  - [ ] Build docker images and make sure runnable unit tests pass
16
- - podman build . -t talkpipe:experimental
16
+ - podman build --build-arg TALKPIPE_VERSION=X.Y.Z . -t talkpipe:experimental
17
+ (without the build argument the image reports version 0.1.0)
17
18
  - [ ] Tag repository
18
19
  - [ ] Build whl files
19
20
  - [ ] Install whl file in new environment and test a script in chatterlang_workbench
@@ -3,6 +3,7 @@ updates:
3
3
  # Enable version updates for Python dependencies
4
4
  - package-ecosystem: "pip"
5
5
  directory: "/"
6
+ target-branch: "main"
6
7
  schedule:
7
8
  interval: "weekly"
8
9
  day: "monday"
@@ -18,6 +19,7 @@ updates:
18
19
  # Enable version updates for GitHub Actions
19
20
  - package-ecosystem: "github-actions"
20
21
  directory: "/"
22
+ target-branch: "main"
21
23
  schedule:
22
24
  interval: "weekly"
23
25
  day: "monday"
@@ -33,6 +35,7 @@ updates:
33
35
  # Enable version updates for Docker
34
36
  - package-ecosystem: "docker"
35
37
  directory: "/"
38
+ target-branch: "main"
36
39
  schedule:
37
40
  interval: "weekly"
38
41
  day: "monday"
@@ -52,10 +52,12 @@ jobs:
52
52
  # --cov-report=term makes the [tool.coverage.report] fail_under floor
53
53
  # in pyproject.toml fail this step; xml/html are for Codecov and
54
54
  # local inspection.
55
- pytest --cov=src --cov=appcenter --cov-report=term --cov-report=xml --cov-report=html
55
+ pytest --cov=src --cov-report=term --cov-report=xml --cov-report=html
56
56
 
57
57
  - name: Upload coverage to Codecov
58
- if: matrix.python-version == '3.11'
58
+ # the action uploads to codecov.io on behalf of a GitHub repo; there is
59
+ # no equivalent when this runs on Gitea
60
+ if: matrix.python-version == '3.11' && github.server_url == 'https://github.com'
59
61
  uses: codecov/codecov-action@v7
60
62
  with:
61
63
  files: ./coverage.xml
@@ -152,17 +154,6 @@ jobs:
152
154
  print("all entry points resolve")
153
155
  PY
154
156
 
155
- - name: Run the TalkPipe App Center the way users do
156
- run: |
157
- # appcenter/talkpipe_appcenter.py is a single file users run with `uv run`; it
158
- # must work from a plain interpreter that has only its one declared
159
- # dependency, from any directory, without the talkpipe package.
160
- python -m venv .appcenter
161
- .appcenter/bin/pip install "textual>=8,<9"
162
- cp appcenter/talkpipe_appcenter.py /tmp/talkpipe_appcenter.py
163
- (cd /tmp && TALKPIPE_APPCENTER_OFFLINE=1 UV=/bin/true "$GITHUB_WORKSPACE/.appcenter/bin/python" talkpipe_appcenter.py list)
164
- .appcenter/bin/python /tmp/talkpipe_appcenter.py --version
165
-
166
157
  lockfile-check:
167
158
  # uv.lock is a development convenience only -- CI installs with pip on
168
159
  # purpose (see README, "Development environment"). This job installs
@@ -207,20 +198,23 @@ jobs:
207
198
  # unrelated to anything this project declares or installs.
208
199
  .venv/bin/python -m pip install --upgrade pip setuptools
209
200
  .venv/bin/pip install -e ".[dev,all]"
210
- # safety shares this venv with the project, and the project's `all`
211
- # extra pulls in httpx2 (openai 3.x and anthropic 1.x depend on it).
212
- # authlib 1.8.0 (safety's OAuth client) switches its httpx integration
213
- # to httpx2 whenever httpx2 is importable, but safety 3.8.1 still
214
- # builds httpx-0.28 Timeout objects for it, so every `safety` command
215
- # crashes during auth setup with "'Timeout' object cannot be
216
- # interpreted as an integer". Hold authlib below 1.8 until a safety
217
- # release supports it. This is a CI tool pin, not a project floor.
218
- .venv/bin/pip install bandit safety "authlib<1.8"
201
+ # The scanners get a venv of their own, outside the workspace, so the
202
+ # scan covers what the project installs and not the scanners' own
203
+ # dependencies (safety brings in nltk, which nothing here depends on).
204
+ # It also keeps safety away from the httpx2 that the `all` extra
205
+ # installs (openai 3.x and anthropic 1.x depend on it): with httpx2
206
+ # importable, authlib 1.8 hands it to safety 3.8.1, which then crashes
207
+ # during auth setup with "'Timeout' object cannot be interpreted as an
208
+ # integer".
209
+ python -m venv "$RUNNER_TEMP/scan-tools"
210
+ echo "$RUNNER_TEMP/scan-tools/bin" >> "$GITHUB_PATH"
211
+ "$RUNNER_TEMP/scan-tools/bin/python" -m pip install --upgrade pip
212
+ "$RUNNER_TEMP/scan-tools/bin/pip" install bandit safety
219
213
 
220
214
  - name: Run Bandit security scan
221
215
  run: |
222
- bandit -c pyproject.toml -r src/ appcenter/talkpipe_appcenter.py -f json -o bandit-report.json
223
- bandit -c pyproject.toml -r src/ appcenter/talkpipe_appcenter.py -f txt
216
+ bandit -c pyproject.toml -r src/ -f json -o bandit-report.json
217
+ bandit -c pyproject.toml -r src/ -f txt
224
218
 
225
219
  - name: Run Safety dependency scan
226
220
  run: |
@@ -239,10 +233,12 @@ jobs:
239
233
  # `check` is the legacy command and the only one that runs without an
240
234
  # account. It rejects .safety-policy.yml because that file is v3.0 and
241
235
  # only `scan` parses v3, so run it from a directory holding no policy
242
- # file; it scans the installed environment either way.
236
+ # file. Left to itself it scans the venv it runs from, so hand it
237
+ # the project venv's packages instead.
243
238
  report="$PWD/safety-report.json"
244
239
  workdir="$(mktemp -d)"
245
- (cd "$workdir" && safety check --save-json "$report")
240
+ .venv/bin/python -m pip freeze --exclude-editable > "$workdir/installed.txt"
241
+ (cd "$workdir" && safety check --stdin --save-json "$report" < installed.txt)
246
242
  fi
247
243
 
248
244
  - name: Upload security scan results
@@ -268,7 +264,22 @@ jobs:
268
264
  steps:
269
265
  - name: Checkout repository
270
266
  uses: actions/checkout@v7
271
-
267
+ with:
268
+ fetch-depth: 0 # setuptools_scm derives the version from tags
269
+
270
+ # .dockerignore excludes .git, so the Dockerfile cannot derive the version
271
+ # itself; compute it here exactly as the sdist/wheel build does and pass
272
+ # it in. Not docker/metadata-action's `version` output: that is a branch
273
+ # or PR name on non-release events, not a PEP 440 version.
274
+ - name: Determine package version
275
+ id: version
276
+ run: |
277
+ python3 -m venv "$RUNNER_TEMP/scm"
278
+ "$RUNNER_TEMP/scm/bin/pip" install --quiet setuptools_scm
279
+ version=$("$RUNNER_TEMP/scm/bin/python" -m setuptools_scm)
280
+ test -n "$version"
281
+ echo "version=$version" >> "$GITHUB_OUTPUT"
282
+
272
283
  - name: Log in to Container Registry
273
284
  uses: docker/login-action@v4
274
285
  with:
@@ -308,6 +319,8 @@ jobs:
308
319
  load: ${{ github.event_name != 'release' }}
309
320
  tags: ${{ steps.meta.outputs.tags }}
310
321
  labels: ${{ steps.meta.outputs.labels }}
322
+ build-args: |
323
+ TALKPIPE_VERSION=${{ steps.version.outputs.version }}
311
324
  cache-from: type=gha
312
325
  cache-to: type=gha,mode=max
313
326
 
@@ -360,14 +373,17 @@ jobs:
360
373
 
361
374
  publish-package:
362
375
  runs-on: ubuntu-latest
363
- # build-container is GitHub-only; listing it here would leave publishing
364
- # blocked behind a skipped job everywhere else. The container image is
365
- # published independently by that job on github.com.
366
- needs: [test, lint, package, security-scan]
367
- # Version tags only. The rolling `experimental` release is a container for
368
- # assets, not a version: publishing from it would upload a distribution
369
- # whose setuptools_scm version came from a tag that is not one.
370
- if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'v')
376
+ # build-container is GitHub-only and skipped elsewhere, which skips this
377
+ # job too, by design: PyPI is published only from github.com, and only
378
+ # when both release images (linux/amd64, linux/arm64) were built and
379
+ # pushed to ghcr.io, so a PyPI release never lacks its container image.
380
+ needs: [test, lint, package, security-scan, build-container]
381
+ # Version tags only: publishing a release under any other tag would upload
382
+ # a distribution whose setuptools_scm version came from a tag that is not
383
+ # one.
384
+ # publishes to PyPI with a token that only exists on GitHub; a release
385
+ # cut on Gitea must not try to upload
386
+ if: github.server_url == 'https://github.com' && github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'v')
371
387
 
372
388
  steps:
373
389
  - uses: actions/checkout@v7
@@ -395,70 +411,3 @@ jobs:
395
411
  TWINE_USERNAME: __token__
396
412
  TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
397
413
  run: twine upload dist/*
398
-
399
- release-assets:
400
- # The TalkPipe App Center is one file users run with `uv run <url>`; each
401
- # release attaches it, stamped with the tag so a copy can report which
402
- # release it came from, plus the two bootstrap scripts. GitHub only: the
403
- # upload uses the GitHub token and the releases/latest/download URL.
404
- runs-on: ubuntu-latest
405
- needs: [test, lint, package, security-scan]
406
- # Version tags only, so a re-publish of the rolling `experimental` release
407
- # cannot stamp its own tag name into the file it then re-attaches.
408
- if: github.event_name == 'release' && github.event.action == 'published' && github.server_url == 'https://github.com' && startsWith(github.event.release.tag_name, 'v')
409
- permissions:
410
- contents: write
411
-
412
- steps:
413
- - uses: actions/checkout@v7
414
-
415
- - name: Set up Python
416
- uses: actions/setup-python@v7
417
- with:
418
- python-version: '3.11'
419
-
420
- - name: Stamp the release version into the App Center file
421
- run: |
422
- tag="${{ github.event.release.tag_name }}"
423
- version="${tag#v}"
424
- sed -i "s/^STAMPED_VERSION = \"0.0.0+unknown\"$/STAMPED_VERSION = \"${version}\"/" appcenter/talkpipe_appcenter.py
425
- grep -q "^STAMPED_VERSION = \"${version}\"$" appcenter/talkpipe_appcenter.py
426
- python -m venv .appcenter
427
- .appcenter/bin/pip install "textual>=8,<9"
428
- reported="$(.appcenter/bin/python appcenter/talkpipe_appcenter.py --version)"
429
- test "$reported" = "talkpipe-appcenter ${version}"
430
-
431
- - name: Attach the App Center and its bootstrap scripts to the release
432
- env:
433
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
434
- run: |
435
- gh release upload "${{ github.event.release.tag_name }}" \
436
- appcenter/talkpipe_appcenter.py appcenter/install.sh appcenter/install.ps1 --clobber
437
-
438
- - name: Refresh the rolling experimental channel
439
- # `releases/latest/download/` resolves to the newest release GitHub does
440
- # not consider a pre-release, so it cannot serve a beta at all. The
441
- # `experimental` release is a fixed anchor that always holds the assets of
442
- # the newest release of either kind -- deliberately unlike the container
443
- # `experimental` tag above, which pre-releases only, so that a beta is not
444
- # served forever after a full release supersedes it.
445
- #
446
- # Assets move; the tag does not. `upload --clobber` replaces the files
447
- # without touching the commit the release points at, so nobody's fetched
448
- # tags are ever rewritten. That commit is therefore meaningless, which is
449
- # what the notes below exist to say.
450
- env:
451
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
452
- run: |
453
- tag="${{ github.event.release.tag_name }}"
454
- notes="Rolling channel: these assets are from ${tag}."
455
- notes="${notes} The \`experimental\` tag itself is a fixed anchor and does not track that release's commit."
456
- notes="${notes} See RELEASING.md."
457
- gh release view experimental >/dev/null 2>&1 || \
458
- gh release create experimental --prerelease \
459
- --title "Experimental (rolling)" --notes "${notes}"
460
- gh release upload experimental \
461
- appcenter/talkpipe_appcenter.py appcenter/install.sh appcenter/install.ps1 --clobber
462
- gh release edit experimental --prerelease --notes "${notes}"
463
- reported="$(.appcenter/bin/python appcenter/talkpipe_appcenter.py --version)"
464
- echo "experimental channel now serves ${reported}"
@@ -52,10 +52,3 @@ TalkPipe is a Python toolkit for creating, testing, and deploying workflows that
52
52
  - When creating a new source or segment, add it to the talkpipe.sources or talkpipe.segments entry points in [pyproject.toml](pyproject.toml). Use the update-entry-points skill to generate and apply entry points automatically: `.venv/bin/python .cursor/skills/update-entry-points/scripts/update_entry_points.py`. See [docs/architecture/protocol.md](docs/architecture/protocol.md) for protocol conventions.
53
53
  - When writing documentation for segments or sources, do not document the parameters.
54
54
  - When writing new sources or segments, use Annotated in the parameter lists to explain the type and purpose of each parameter.
55
-
56
- ## The TalkPipe App Center (appcenter/)
57
- - `appcenter/talkpipe_appcenter.py` is a single file users run with `uv run <url>`; it is **not** part of the `talkpipe` package and has one dependency, Textual (dev extra only, capped at its major). Do not split it into a package, add a dependency, or import talkpipe from it.
58
- - Every external touchpoint (uv, HTTP, the launcher's helper commands, home directory, platform) is injectable; `appcenter/tests/` never runs the real uv or touches the network (see the fake uv in `appcenter/tests/conftest.py`).
59
- - Applications need no awareness of the App Center; never ask an app to change for the App Center's sake. The catalog (`appcenter/talkpipe.toml`, embedded in the file, a test checks they match) carries only what PyPI cannot supply: launch command, port, health path, icon, data dirs, external services.
60
- - The file reports the talkpipe release it shipped with: CI stamps the tag into `STAMPED_VERSION` on release; never edit that line by hand. `appcenter/README.md` is its user documentation.
61
- - Two delivery channels, because `releases/latest` skips pre-releases: the stable assets, and a rolling `experimental` release CI refreshes on every release (a fixed anchor tag — its assets move, its commit does not, and the release jobs ignore any tag not starting with `v`). Which copy you run and which versions it installs are **independent**: the channel for installs comes from `--experimental` / `TALKPIPE_APPCENTER_CHANNEL`, never from this file's own version, and is recorded per application so a later `uv tool install --upgrade` cannot replace a pre-release with the newest release.
@@ -2,62 +2,75 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- - **App Center: a launch opens the page of a released application that does
6
- not open its own.** A second newcomer run against the PyPI releases. The
7
- catalog's `opens_browser` describes the newest version of an application,
8
- and the released writing assistant 1.1.0 has no browser-opening at all, so
9
- a launch reported "is running at ..." and nothing appeared. `opens_browser`
10
- now also takes a version (`"1.1.1"`): the first one that opens its own tab,
11
- with the App Center opening the page for older installed versions; the
12
- writing assistant's entry says `"1.1.1"`. Also: an action that fails ends
13
- on a `==> Failed:` line, the counterpart of `==> Done:`, and its toast is
14
- titled Failed rather than Finished; when all the App Center knows is that
15
- something answers on an application's port (no 200 from the health path,
16
- and not a process it started), `launch` and `stop` say "something answers
17
- on port 8002" instead of stating that the application is running; `l` and
18
- `o` on an application that is not installed both say to install it (`o`
19
- used to say "launch it first", and `l` then "not installed"); `list` sizes
20
- its columns from their content, so `installed (pre-release)` no longer
21
- pushes its row out of line; the screen moves the detail pane under the
22
- table below 140 columns, where a fixed side pane cut the Running and
23
- Launcher columns off at the widths most terminals have; and a Linux
24
- launcher for a package that ships no icon names a standard generic one,
25
- which the README already promised.
26
- - **App Center: the release channel launches, and the way back to it
27
- works.** Found by a newcomer run against the released applications rather
28
- than the checkouts. A catalog `health` path that answers 404 no longer
29
- counts as "down": the catalog describes the newest version, and the
30
- released vault 1.0.0 and writing assistant 1.1.0 serve their ports without
31
- the routes their catalog entries name, so on the default channel every
32
- launch was reported as a failure while the app sat open in the browser —
33
- and from there `open` refused, a second launch treated the app as "another
34
- program" on its port, started a second copy on the next one, overwrote the
35
- pid record, and `stop` killed the wrong one. Any HTTP answer on the port
36
- now counts as running, and a launch never starts a second copy while the
37
- pid file names a live process of the App Center's own. Leaving the
38
- experimental channel (`e` again, `--no-experimental`) passes
39
- `--reinstall`: `uv tool install --upgrade` never moves a package backwards,
40
- so the switch silently kept the beta, reported "already the newest version",
41
- forgot the channel record, and left the row offering the release as an
42
- "upgrade" that the next `i` could not perform. If a fresh resolution still
43
- lands on a pre-release, the App Center says so and keeps the record. A
44
- pre-release with no record (installed by hand, or by an earlier copy) now
45
- counts as being on the experimental channel, and `(pre-release)` describes
46
- the installed version rather than the run's flag. Also: uninstall stops an
47
- instance the App Center started before removing its environment; PyPI
48
- lookups are no longer capped at 1 MiB, which blanked the latest version and
49
- summary of any long-lived package (ruff's record is over 6 MB); `latest`
50
- reads `?` rather than `None (<date>)` on the experimental channel; the
51
- table's columns grow to fit `installed (pre-release)` instead of clipping
52
- it; `c Stop` appears in the footer while the row's app is one the App
53
- Center started; the uninstall question wraps; `i`, `l`, `x`, and `o` on the
54
- App Center's own row say to move to an application's row instead of doing
55
- nothing; the `list` hint no longer names a `talkpipe-appcenter` command
56
- that the documented `uv run <url>` never creates; the language-model note
57
- mentions an Ollama server on another computer; and the documented uv floor
58
- (0.7) is checked, with the version named in the error — only when the
59
- version parses, so a stand-in whose `--version` answers with words is not
60
- mistaken for an old uv.
5
+ ## 1.1.0 (2026-10-12)
6
+
7
+ - Added `talkpipe.llm.config.resolve_source_and_model(source, model)`: applies
8
+ the configured default model source and name (`default_model_source` /
9
+ `default_model_name`, from `TALKPIPE_*` environment variables or
10
+ `~/.talkpipe.toml`) to a caller's `source` / `model` arguments, using each
11
+ as passed when given, and raises the usual "Model name and source must be
12
+ provided" `ValueError` when either is still missing. `llmPrompt` and
13
+ `llmVisionPrompt` now call it instead of carrying their own copy of the
14
+ fallback; their behaviour and error messages are unchanged. Code built on
15
+ TalkPipe that takes its own `model` / `source` arguments can call it rather
16
+ than re-implementing the rule. The helper does not check that the source
17
+ is registered; callers keep their own `getPromptSources()` check.
18
+ - **Container images report the released version.** The `Dockerfile` pinned
19
+ the package version to `0.1.0` for setuptools_scm because `.dockerignore`
20
+ excludes `.git`, so every published image, `v1.0.1` and `v1.0.2`
21
+ included, reported `talkpipe.__version__` as `0.1.0`. The pin is now a
22
+ build argument with that default (`--build-arg TALKPIPE_VERSION=X.Y.Z`),
23
+ and the CI container job computes the version with setuptools_scm from
24
+ the checked-out tag and passes it in. A plain `podman build .` still
25
+ succeeds and still reports `0.1.0`.
26
+ - CI: the security scanners run from a virtual environment of their own, and
27
+ the dependency scan is given the packages installed in the project's
28
+ environment. The scan used to cover the environment that also held the
29
+ scanners, so an advisory against one of their dependencies (`nltk`, which
30
+ `safety` requires and talkpipe does not) failed the build with nothing in
31
+ the project to fix. The scan still fails on any finding in what the project
32
+ installs.
33
+ - CI: `publish-package` depends on `build-container` again, so a release
34
+ reaches PyPI only after both container images (`linux/amd64`,
35
+ `linux/arm64`) were built and pushed. A failed container build used to
36
+ leave a PyPI release with no matching image. Publishing to PyPI happens
37
+ only from a GitHub release; a release created elsewhere does not upload.
38
+ - **Security: raised dependency floors.** `pymongo>=4.18.2` (GridFS delete
39
+ file-ID matching, connection-string host injection, client-side field
40
+ level encryption KMS endpoint, BSON encoding overflow) and, in the `pypdf`
41
+ extra, `pypdf>=6.19.0` (runtime and memory exhaustion on crafted PDFs).
42
+ `uv.lock` also moves `urllib3` to 2.8.0 and `virtualenv` (dev only) to
43
+ 21.14.5 to clear their advisories.
44
+ - CI: Dependabot version-update PRs target `main` instead of the default
45
+ branch `stable`, which only ever points at a release. Security alerts
46
+ still come from `stable`, so they reflect what is released.
47
+
48
+ ## 1.0.2 (2026-09-25)
49
+
50
+ - **`max_tokens` caps the length of an LLM response.** `llmPrompt` and the
51
+ guided-generation segments built on it (`llmScore`, `llmExtractTerms`,
52
+ `llmBinaryAnswer`) accept `max_tokens`, as do the Ollama/OpenAI/Anthropic
53
+ prompt adapters: the most tokens the model may generate per response
54
+ (output only; prompt tokens do not count). The Ollama adapter's chat path
55
+ sent only `temperature`, so a model that never emitted a stop token
56
+ generated until its context window filled; `timeout` fails the pipeline
57
+ in that case, while `max_tokens` bounds the item. It maps to `num_predict`
58
+ on Ollama, `max_output_tokens` on the OpenAI Responses API, and
59
+ `max_tokens` on Anthropic, where it replaces the adapter's 4096 (still the
60
+ value when unset). The default is `None`, which leaves every request
61
+ exactly as it was; there is no global config key, the option is
62
+ per-segment. On reasoning/thinking models the thinking tokens count
63
+ against the cap, and a truncated response from a guided-generation segment
64
+ fails schema validation rather than returning a partial result. Prompt
65
+ adapters that take no `max_tokens` (such as `eliza`, or third-party
66
+ adapters that predate it) keep working and ignore it.
67
+ - **Removed: the TalkPipe App Center.** The single-file installer previewed in
68
+ the 1.0.2 betas (`appcenter/`, its release assets, and the rolling
69
+ `experimental` GitHub release that served them) is gone; it never shipped in
70
+ a full release. The TalkPipe applications install directly with
71
+ `uv tool install` — the README lists them with the commands. Textual and
72
+ pytest-asyncio left the `dev` extra. The `experimental` *container* image
73
+ tag for pre-releases is unaffected.
61
74
  - **Deprecated: omitting the `|` between an input source and the first
62
75
  segment.** `INPUT FROM echo[data="1,2"] print` has always parsed as though
63
76
  the pipe were there — an accident of the grammar, and an inconsistent one,
@@ -71,76 +84,6 @@
71
84
  input source of its own — a fork branch, a fork consumer
72
85
  (`fork_name -> print`), or a fragment such as `| print` — still begins with
73
86
  a bare segment, and spellings that were errors before are still errors.
74
- - **An experimental channel for the App Center, so pre-releases are reachable
75
- at all.** `releases/latest/download/` resolves to the newest release GitHub
76
- does not consider a pre-release, so a beta was not merely hard to get — the
77
- documented one-liner returned "Not Found", which uv then ran as Python and
78
- reported as `SyntaxError`. Release assets are now also attached to a rolling
79
- `experimental` release, refreshed on every release, giving a stable URL that
80
- serves the newest one of either kind:
81
- `releases/download/experimental/talkpipe_appcenter.py`. The bootstrap scripts
82
- take the channel by name — `install.sh --experimental`, or
83
- `TALKPIPE_APPCENTER_CHANNEL=experimental` for both scripts, the only
84
- mechanism Windows has since a piped `irm | iex` cannot receive arguments.
85
- That variable chooses only which copy of the App Center runs; the App
86
- Center itself does not read it.
87
-
88
- **Any one copy of the App Center installs either the release or the
89
- pre-release of each application**, so a released App Center can install
90
- betas and a beta one installs releases unless told otherwise. On the
91
- screen the choice is a `Channel` column and two keys: `e` on an
92
- application's row toggles its channel between `stable` and `pre-release`
93
- and installs nothing, and `i` installs (or switches, or upgrades) from
94
- whichever channel the row shows — choosing and acting are separate keys,
95
- because one key that changed what you were looking at and installed it in
96
- the same stroke proved confusing. The Status column says where the two
97
- disagree (`installed (pre-release)`, `release available`), and the detail
98
- pane repeats the channel. On the command line, `--experimental` (or
99
- `--pre`), before or after the subcommand, chooses and installs in one.
100
- Both pass `--prerelease allow` to uv — which covers the application and
101
- its dependencies, since a pre-release application may require a
102
- pre-release library. The choice is recorded per application beside the
103
- saved catalogs, because uv replays its own recorded settings for `uv tool
104
- upgrade` but not for the `uv tool install --upgrade` the App Center runs;
105
- without the record, a later upgrade would quietly reinstall the newest
106
- release over a pre-release. Installing the release again (`e` then `i`, or
107
- `--no-experimental`) forgets the record. On the pre-release channel the
108
- App Center no longer claims to know the latest version, since PyPI's is
109
- the newest *release* and not an upgrade target for a pre-release: the row
110
- reads `installed (pre-release)`.
111
-
112
- - **Fixed: the App Center never said an install had finished.** uv's output
113
- scrolled through the log for minutes and then simply stopped, and its own
114
- last lines start with "Installed", so the App Center's summary of what had
115
- happened was one indistinguishable line in the middle of it — leaving
116
- "is it still working?" unanswered. Every action now ends with a line marked
117
- `==> Done:` that says what it did (`==> Done: Installed talkpipe-vault
118
- 1.0.0.`), placed last, after any notes about what the application still
119
- needs. On the screen a notification carries the same news over the top of
120
- the log, so an install walked away from still reports itself — including
121
- when it failed, which the screen also never used to say out loud.
122
-
123
- - **Fixed: the App Center left a launch that hit a busy port to time out.** An
124
- application whose port is already held by another program — a second copy of
125
- it, or an unrelated server — either failed to bind or quietly relocated to a
126
- port the App Center was not watching; both ended the same way, in a
127
- thirty-second wait and "did not answer on port 8001". A web app's port is now
128
- checked before it is started: when something else holds it, the App Center
129
- finds the next free port above it and starts the app there, announcing the
130
- move, and records that port so status, the browser, and `open` all follow the
131
- app to where it actually runs. Doing so needs the new catalog key
132
- `port_option` — the option the app takes a port on, `--port` for all three
133
- bundled applications; without it the conflict is reported immediately rather
134
- than launched into. A server that dies at startup for any other reason is
135
- also reported as soon as it exits, with the last lines of its log, instead of
136
- being waited out.
137
-
138
- - **Fixed: `appcenter/install.sh` exited with status 2 instead of starting the
139
- App Center** whenever the process had no controlling terminal — a CI runner, a
140
- cron job, a detached session. `/dev/tty` exists and passes a readability test
141
- in those cases, so the redirect that reattaches the keyboard for `curl | sh`
142
- has to be guarded by actually opening it.
143
-
144
87
  - **Documentation: TalkPipe is provider-neutral, and the docs now say so.**
145
88
  Several places read as though Ollama were required — prerequisite lists that
146
89
  named only Ollama, a quickstart whose LLM section began "requires
@@ -158,29 +101,6 @@
158
101
  `makevectordatabase` / `chatterlang_workbench` help text, and the workbench's
159
102
  example scripts name the alternatives too.
160
103
 
161
- - **The TalkPipe App Center** (`appcenter/talkpipe_appcenter.py`), the part
162
- of TalkPipe that installs applications: one file, run with
163
- `uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py`,
164
- that installs, upgrades, launches, and uninstalls applications with
165
- `uv tool install`, each into its own environment, and adds desktop
166
- launchers on Linux, macOS, and Windows. It is designed to make the
167
- TalkPipe-based applications (TalkPipe Vault, the TalkPipe Writing
168
- Assistant, the ChatterLang Workbench) easy to install and ships with a
169
- catalog of them, but any pip-installable Python application with a
170
- console script can be listed in a catalog of one's own: `--catalog`
171
- (before or after the subcommand) uses one for a run, `--remember` or
172
- `catalog add` saves it so every later run loads it (`catalog list`,
173
- `catalog remove`). An app-store-like terminal screen
174
- plus equivalent subcommands (`list`, `info`, `install`, `upgrade`,
175
- `uninstall`, `launch`, `stop`, `open`, `shortcut`). Driven by a TOML
176
- catalog (`appcenter/talkpipe.toml`, embedded; `--catalog` overlays or
177
- replaces it) whose entries name only what PyPI cannot supply; summaries,
178
- publishers, homepages, and latest versions come from PyPI at run time.
179
- `appcenter/install.sh` and `appcenter/install.ps1` install uv when it is missing
180
- and hand over to the App Center. Each GitHub release attaches the file, stamped
181
- with the release version, and the two scripts. The library gained no
182
- runtime dependency; Textual and pytest-asyncio joined the `dev` extra.
183
-
184
104
  - **`serverag` no longer fails silently.** With no embedding or completion
185
105
  model configured — the state a first-time user is in — it exited 1 with
186
106
  nothing on stdout or stderr, in both web and `--interactive` mode. The
@@ -224,10 +144,6 @@
224
144
  the snippet actually passes, the Python-API example passes the model it
225
145
  precaches, and the offline section warns that a model missing from the
226
146
  cache fails under `HF_HUB_OFFLINE=1` with an error that does not name it.
227
- - The App Center's `uv run <release asset>` commands are documented as
228
- needing a release that post-dates the App Center, with the checkout
229
- invocation as the alternative; against an older release the URL 404s and
230
- uv reports it as a `SyntaxError`.
231
147
  - The reference-browser walkthrough showed invented transcripts —
232
148
  `filterEmails`, `extractAttachments`, `mongoConnect`, `mongoQuery`,
233
149
  `parseEmailHeaders`, and a `readEmail` parameter list the source never
@@ -247,8 +163,6 @@
247
163
  `pip install "talkpipe[...]"` extras so they work in zsh, and pointed the
248
164
  Python prerequisite at the versions CI actually tests.
249
165
 
250
- ## 1.0.2
251
-
252
166
  - `chatterlang_workbench` now exits within a couple of seconds of Ctrl-C even
253
167
  while a request is still running. It used to wait for that request to
254
168
  finish — a script started from the editor, or the suggestions sidebar's LLM
@@ -262,7 +176,6 @@
262
176
  `TreeObject.insert_child`; the floor is a security minimum, and every
263
177
  fresh install already resolved above it.
264
178
 
265
-
266
179
  ## 1.0.1
267
180
 
268
181
  - The Anthropic adapter no longer sends the `temperature` parameter. The
@@ -36,7 +36,12 @@ COPY --chown=builder:builder tests/ tests/
36
36
  # Install Python dependencies and build the package
37
37
  RUN python3 -m pip install --upgrade pip setuptools wheel build
38
38
  RUN python3 -m pip install numpy pandas matplotlib scikit-learn scipy
39
- ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_TALKPIPE=0.1.0
39
+ # .dockerignore excludes .git, so setuptools_scm cannot read the version from
40
+ # the tag inside the build. CI passes the real version as a build argument
41
+ # (`--build-arg TALKPIPE_VERSION=X.Y.Z`); a plain `podman build .` falls back
42
+ # to the placeholder below.
43
+ ARG TALKPIPE_VERSION=0.1.0
44
+ ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_TALKPIPE=${TALKPIPE_VERSION}
40
45
  RUN python3 -m pip install --user -e .[dev,all]
41
46
  RUN python3 -m pytest --log-cli-level=DEBUG
42
47
  RUN python3 -m build --wheel