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.
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/CICD.md +6 -3
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/ISSUE_TEMPLATE/release-checklist.md +2 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/dependabot.yml +3 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/workflows/ci-cd.yml +51 -102
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/AGENTS.md +0 -7
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/CHANGELOG.md +69 -156
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/Dockerfile +6 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/PKG-INFO +15 -32
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/README.md +11 -26
- talkpipe-1.1.0/RELEASING.md +73 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/chatterlang.md +22 -0
- talkpipe-1.1.0/docs/chatterlang_workbench_screenshot.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/contributing/developer-handbook.md +4 -2
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/model-and-source-configuration.md +1 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/pyproject.toml +7 -18
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/pytest.ini +0 -5
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/chat.py +44 -13
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/config.py +26 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapter_base.py +14 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_anthropic.py +5 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_ollama.py +6 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_openai.py +4 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/vision.py +2 -12
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/PKG-INFO +15 -32
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/SOURCES.txt +1 -16
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/requires.txt +3 -5
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/scm_file_list.json +1 -16
- talkpipe-1.1.0/src/talkpipe.egg-info/scm_version.json +8 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_chat.py +136 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +19 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +18 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +36 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_openai.py +36 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_config_keys_documented.py +1 -15
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/testutils.py +3 -1
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/uv.lock +138 -161
- talkpipe-1.0.2b2/RELEASING.md +0 -83
- talkpipe-1.0.2b2/appcenter/README.md +0 -388
- talkpipe-1.0.2b2/appcenter/install.ps1 +0 -69
- talkpipe-1.0.2b2/appcenter/install.sh +0 -96
- talkpipe-1.0.2b2/appcenter/talkpipe.toml +0 -81
- talkpipe-1.0.2b2/appcenter/talkpipe_appcenter.py +0 -3225
- talkpipe-1.0.2b2/appcenter/tests/conftest.py +0 -350
- talkpipe-1.0.2b2/appcenter/tests/test_actions.py +0 -601
- talkpipe-1.0.2b2/appcenter/tests/test_bootstrap.py +0 -129
- talkpipe-1.0.2b2/appcenter/tests/test_catalog.py +0 -355
- talkpipe-1.0.2b2/appcenter/tests/test_channel.py +0 -368
- talkpipe-1.0.2b2/appcenter/tests/test_cli.py +0 -332
- talkpipe-1.0.2b2/appcenter/tests/test_packaging.py +0 -62
- talkpipe-1.0.2b2/appcenter/tests/test_shortcut.py +0 -341
- talkpipe-1.0.2b2/appcenter/tests/test_status.py +0 -287
- talkpipe-1.0.2b2/appcenter/tests/test_tui.py +0 -545
- talkpipe-1.0.2b2/appcenter/tests/test_uv.py +0 -156
- talkpipe-1.0.2b2/src/talkpipe.egg-info/scm_version.json +0 -8
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/changelog-update/SKILL.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/test-driven-development/SKILL.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/update-entry-points/SKILL.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.dockerignore +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/SECURITY.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/copilot-instructions.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/add-segment.prompt.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/changelog.prompt.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/doc-examples.prompt.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/tdd.prompt.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.github/prompts/update-entry-points.prompt.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.gitignore +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.pre-commit-config.yaml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.safety-policy.yml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.safety-project.ini +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.vscode/settings.json +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/.vscode/tasks.json +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/COPYRIGHT +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/LICENSE +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/.gitignore +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/LLMChat.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/LLMEvaluateWebPage.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/TalkPipe.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/TalkPipe.xcf +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-script.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-server.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/chatterlang-workbench.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/lazy-loading.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/api-reference/talkpipe-ref.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/configuration.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/documentation-formatting.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/extending-talkpipe.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/metadata-stream.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/pipe-api.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/protocol.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/security.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/architecture/streaming.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/container-images.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/makevectordatabase-and-serverag.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/guides/model2vec-embeddings.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/make_structure_diagram.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/quickstart.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/structure.tex +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_architecture.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_architecture.tex +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/talkpipe_diagram.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/.gitignore +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/docs/workbench_demo.mp4 +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/.gitignore +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/README.md +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/build.mjs +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/package-lock.json +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/package.json +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/frontend/src/cm.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/scripts/extract_documentation_examples.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/setup.cfg +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_script.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_serve.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/chatterlang_workbench.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/doc_examples.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/makevectordatabase.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/precache_model2vec.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/server_common.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/serverag.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/favicon.ico +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/common.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/index.css +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/index.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/stream.css +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/stream.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/app.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/editor.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/index.html +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/styles.css +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/suggest.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/static/workbench/workspace.js +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/corpus.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/reference_api.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/suggest.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/suggest_api.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/workspace.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench/workspace_api.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/compiler.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/parsers.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/chatterlang/registry.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/email.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/extraction.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/html.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/image.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/mongo.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/rss.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/chunking_units.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/cleaning.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/englishnormalize.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/data/text/operations.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/_ollama_common.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/content.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/embedding_errors.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/multimodal.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/filtering.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/matrices.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/thread_ops.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/operations/transforms.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/basic.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/collect.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/core.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/debug.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/fields.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/filters.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/flow.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/fork.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/hashing.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/io.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/math.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/metadata.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipe/shell.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/basic_rag.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/pipelines/vector_databases.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/py.typed +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/abstract.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/lancedb.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/search/whoosh.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/__init__.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/collections.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/config.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/constants.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/data_manipulation.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/doc_extraction.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/iterators.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/os.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe/util/plugin_loader.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/dependency_links.txt +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/entry_points.txt +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/src/talkpipe.egg-info/top_level.txt +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/conftest.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/embedding_adapter_contract_suite.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/prompt_adapter_contract_suite.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_serve_static.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_server_common.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_server_hardening.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_serverag.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_reference_api.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_static.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_compiler.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/chatterlang/test_registry.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/sample_feed.pkl +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test.docx +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_email.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_extraction.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_html.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_html_exceptions.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_image.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mogomock.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo_integration.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/test_rss.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_cleaning.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/data/text/test_operations.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_content.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_multimodal.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_timeouts.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_vision.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_filtering.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_matrices.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_threading.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/operations/test_transforms.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_basic.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_basic_split.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_core.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_fork.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_io.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_math.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipe/test_metadata.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_abstract.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_lancedb.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/search/test_whoosh.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_documentation_examples.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_py_typed.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/test_version.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_collections.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_config.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_data_manipulation.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_doc_extraction.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_iterators.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_os.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_plugin_loader.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/talkpipe/util/test_util.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_doc_examples.py +0 -0
- {talkpipe-1.0.2b2 → talkpipe-1.1.0}/tests/test_security_vulnerabilities.py +0 -0
- {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.
|
|
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
|
-
|
|
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
|
|
55
|
+
pytest --cov=src --cov-report=term --cov-report=xml --cov-report=html
|
|
56
56
|
|
|
57
57
|
- name: Upload coverage to Codecov
|
|
58
|
-
|
|
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
|
-
#
|
|
211
|
-
#
|
|
212
|
-
#
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
#
|
|
216
|
-
#
|
|
217
|
-
#
|
|
218
|
-
|
|
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/
|
|
223
|
-
bandit -c pyproject.toml -r src/
|
|
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
|
|
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
|
-
|
|
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
|
|
364
|
-
#
|
|
365
|
-
#
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
#
|
|
369
|
-
# whose setuptools_scm version came from a tag that is not
|
|
370
|
-
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
the
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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
|