TalkPipe 1.0.2__tar.gz → 1.0.2b2__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.2 → talkpipe-1.0.2b2}/.github/workflows/ci-cd.yml +84 -6
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/AGENTS.md +7 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/CHANGELOG.md +156 -26
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/PKG-INFO +29 -12
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/README.md +26 -11
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/RELEASING.md +23 -4
- talkpipe-1.0.2b2/appcenter/README.md +388 -0
- talkpipe-1.0.2b2/appcenter/install.ps1 +69 -0
- talkpipe-1.0.2b2/appcenter/install.sh +96 -0
- talkpipe-1.0.2b2/appcenter/talkpipe.toml +81 -0
- talkpipe-1.0.2b2/appcenter/talkpipe_appcenter.py +3225 -0
- talkpipe-1.0.2b2/appcenter/tests/conftest.py +350 -0
- talkpipe-1.0.2b2/appcenter/tests/test_actions.py +601 -0
- talkpipe-1.0.2b2/appcenter/tests/test_bootstrap.py +129 -0
- talkpipe-1.0.2b2/appcenter/tests/test_catalog.py +355 -0
- talkpipe-1.0.2b2/appcenter/tests/test_channel.py +368 -0
- talkpipe-1.0.2b2/appcenter/tests/test_cli.py +332 -0
- talkpipe-1.0.2b2/appcenter/tests/test_packaging.py +62 -0
- talkpipe-1.0.2b2/appcenter/tests/test_shortcut.py +341 -0
- talkpipe-1.0.2b2/appcenter/tests/test_status.py +287 -0
- talkpipe-1.0.2b2/appcenter/tests/test_tui.py +545 -0
- talkpipe-1.0.2b2/appcenter/tests/test_uv.py +156 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/chatterlang.md +0 -22
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/pyproject.toml +15 -4
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/pytest.ini +5 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/chat.py +0 -40
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapter_base.py +1 -14
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_anthropic.py +1 -5
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_ollama.py +1 -6
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_openai.py +0 -4
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/PKG-INFO +29 -12
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/SOURCES.txt +16 -1
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/requires.txt +2 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/scm_file_list.json +16 -1
- talkpipe-1.0.2b2/src/talkpipe.egg-info/scm_version.json +8 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_chat.py +0 -68
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +0 -19
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +0 -18
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +0 -36
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_openai.py +0 -36
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/test_config_keys_documented.py +15 -1
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/uv.lock +72 -48
- talkpipe-1.0.2/docs/chatterlang_workbench_screenshot.png +0 -0
- talkpipe-1.0.2/src/talkpipe.egg-info/scm_version.json +0 -8
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/changelog-update/SKILL.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/test-driven-development/SKILL.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/update-entry-points/SKILL.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.dockerignore +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/CICD.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/SECURITY.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/copilot-instructions.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/dependabot.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/prompts/add-segment.prompt.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/prompts/changelog.prompt.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/prompts/doc-examples.prompt.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/prompts/tdd.prompt.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.github/prompts/update-entry-points.prompt.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.gitignore +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.pre-commit-config.yaml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.safety-policy.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.safety-project.ini +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.vscode/settings.json +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/.vscode/tasks.json +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/COPYRIGHT +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/Dockerfile +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/LICENSE +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/.gitignore +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/LLMChat.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/LLMEvaluateWebPage.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/TalkPipe.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/TalkPipe.xcf +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-script.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-server.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-workbench.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/lazy-loading.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/api-reference/talkpipe-ref.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/configuration.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/documentation-formatting.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/extending-talkpipe.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/metadata-stream.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/pipe-api.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/protocol.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/security.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/architecture/streaming.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/contributing/developer-handbook.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/guides/container-images.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/guides/makevectordatabase-and-serverag.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/guides/model-and-source-configuration.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/guides/model2vec-embeddings.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/make_structure_diagram.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/quickstart.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/structure.tex +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/talkpipe_architecture.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/talkpipe_architecture.tex +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/talkpipe_diagram.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/.gitignore +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/docs/workbench_demo.mp4 +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/.gitignore +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/build.mjs +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/package-lock.json +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/package.json +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/frontend/src/cm.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/scripts/extract_documentation_examples.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/setup.cfg +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_script.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_serve.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_workbench.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/doc_examples.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/makevectordatabase.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/precache_model2vec.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/server_common.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/serverag.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/favicon.ico +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/common.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/index.css +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/index.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/stream.css +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/stream.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/app.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/editor.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/index.html +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/styles.css +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/suggest.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/workspace.js +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/corpus.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/reference_api.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/suggest.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/suggest_api.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/workspace.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/workspace_api.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_1_createsyntheticdata.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_2_indexstories.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_3_searchstories.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_1_createvectordatabase.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_2_searchbyexample.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_3_specializedrag.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_1_executivesummarygeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_2_detailedanalysisreportgeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_3_multiformatreportgeneration.script +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/compiler.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/parsers.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/registry.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/email.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/extraction.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/html.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/image.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/mongo.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/rss.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/text/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/text/chunking_units.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/text/cleaning.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/text/englishnormalize.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/data/text/operations.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/_ollama_common.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/config.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/content.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_errors.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/multimodal.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/llm/vision.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/operations/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/operations/filtering.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/operations/matrices.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/operations/thread_ops.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/operations/transforms.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/basic.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/collect.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/core.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/debug.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/fields.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/filters.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/flow.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/fork.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/hashing.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/io.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/math.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/metadata.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipe/shell.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/basic_rag.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/vector_databases.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/py.typed +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/search/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/search/abstract.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/search/lancedb.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/search/whoosh.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/__init__.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/collections.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/config.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/constants.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/data_manipulation.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/doc_extraction.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/iterators.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/os.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe/util/plugin_loader.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/dependency_links.txt +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/entry_points.txt +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/top_level.txt +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/conftest.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/embedding_adapter_contract_suite.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/prompt_adapter_contract_suite.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_serve_static.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_server_common.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_server_hardening.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_serverag.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_reference_api.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_static.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_compiler.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_registry.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/sample_feed.pkl +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test.docx +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_email.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_extraction.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_html.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_html_exceptions.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_image.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mogomock.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo_integration.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_rss.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_cleaning.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_operations.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_content.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_multimodal.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_timeouts.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_vision.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_filtering.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_matrices.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_threading.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_transforms.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_basic.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_basic_split.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_core.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_fork.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_io.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_math.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_metadata.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_abstract.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_lancedb.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_whoosh.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/test_documentation_examples.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/test_py_typed.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/test_version.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_collections.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_config.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_data_manipulation.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_doc_extraction.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_iterators.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_os.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_plugin_loader.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_util.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/test_doc_examples.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/test_security_vulnerabilities.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/test_tutorial_scripts.py +0 -0
- {talkpipe-1.0.2 → talkpipe-1.0.2b2}/tests/testutils.py +0 -0
|
@@ -52,7 +52,7 @@ 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-report=term --cov-report=xml --cov-report=html
|
|
55
|
+
pytest --cov=src --cov=appcenter --cov-report=term --cov-report=xml --cov-report=html
|
|
56
56
|
|
|
57
57
|
- name: Upload coverage to Codecov
|
|
58
58
|
if: matrix.python-version == '3.11'
|
|
@@ -152,6 +152,17 @@ jobs:
|
|
|
152
152
|
print("all entry points resolve")
|
|
153
153
|
PY
|
|
154
154
|
|
|
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
|
+
|
|
155
166
|
lockfile-check:
|
|
156
167
|
# uv.lock is a development convenience only -- CI installs with pip on
|
|
157
168
|
# purpose (see README, "Development environment"). This job installs
|
|
@@ -208,8 +219,8 @@ jobs:
|
|
|
208
219
|
|
|
209
220
|
- name: Run Bandit security scan
|
|
210
221
|
run: |
|
|
211
|
-
bandit -c pyproject.toml -r src/ -f json -o bandit-report.json
|
|
212
|
-
bandit -c pyproject.toml -r src/ -f txt
|
|
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
|
|
213
224
|
|
|
214
225
|
- name: Run Safety dependency scan
|
|
215
226
|
run: |
|
|
@@ -353,9 +364,9 @@ jobs:
|
|
|
353
364
|
# blocked behind a skipped job everywhere else. The container image is
|
|
354
365
|
# published independently by that job on github.com.
|
|
355
366
|
needs: [test, lint, package, security-scan]
|
|
356
|
-
# Version tags only
|
|
357
|
-
#
|
|
358
|
-
# one.
|
|
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.
|
|
359
370
|
if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'v')
|
|
360
371
|
|
|
361
372
|
steps:
|
|
@@ -384,3 +395,70 @@ jobs:
|
|
|
384
395
|
TWINE_USERNAME: __token__
|
|
385
396
|
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
386
397
|
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,3 +52,10 @@ 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,32 +2,62 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
on
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
the
|
|
26
|
-
|
|
27
|
-
a
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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.
|
|
31
61
|
- **Deprecated: omitting the `|` between an input source and the first
|
|
32
62
|
segment.** `INPUT FROM echo[data="1,2"] print` has always parsed as though
|
|
33
63
|
the pipe were there — an accident of the grammar, and an inconsistent one,
|
|
@@ -41,6 +71,76 @@
|
|
|
41
71
|
input source of its own — a fork branch, a fork consumer
|
|
42
72
|
(`fork_name -> print`), or a fragment such as `| print` — still begins with
|
|
43
73
|
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
|
+
|
|
44
144
|
- **Documentation: TalkPipe is provider-neutral, and the docs now say so.**
|
|
45
145
|
Several places read as though Ollama were required — prerequisite lists that
|
|
46
146
|
named only Ollama, a quickstart whose LLM section began "requires
|
|
@@ -58,6 +158,29 @@
|
|
|
58
158
|
`makevectordatabase` / `chatterlang_workbench` help text, and the workbench's
|
|
59
159
|
example scripts name the alternatives too.
|
|
60
160
|
|
|
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
|
+
|
|
61
184
|
- **`serverag` no longer fails silently.** With no embedding or completion
|
|
62
185
|
model configured — the state a first-time user is in — it exited 1 with
|
|
63
186
|
nothing on stdout or stderr, in both web and `--interactive` mode. The
|
|
@@ -101,6 +224,10 @@
|
|
|
101
224
|
the snippet actually passes, the Python-API example passes the model it
|
|
102
225
|
precaches, and the offline section warns that a model missing from the
|
|
103
226
|
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`.
|
|
104
231
|
- The reference-browser walkthrough showed invented transcripts —
|
|
105
232
|
`filterEmails`, `extractAttachments`, `mongoConnect`, `mongoQuery`,
|
|
106
233
|
`parseEmailHeaders`, and a `readEmail` parameter list the source never
|
|
@@ -120,6 +247,8 @@
|
|
|
120
247
|
`pip install "talkpipe[...]"` extras so they work in zsh, and pointed the
|
|
121
248
|
Python prerequisite at the versions CI actually tests.
|
|
122
249
|
|
|
250
|
+
## 1.0.2
|
|
251
|
+
|
|
123
252
|
- `chatterlang_workbench` now exits within a couple of seconds of Ctrl-C even
|
|
124
253
|
while a request is still running. It used to wait for that request to
|
|
125
254
|
finish — a script started from the editor, or the suggestions sidebar's LLM
|
|
@@ -133,6 +262,7 @@
|
|
|
133
262
|
`TreeObject.insert_child`; the floor is a security minimum, and every
|
|
134
263
|
fresh install already resolved above it.
|
|
135
264
|
|
|
265
|
+
|
|
136
266
|
## 1.0.1
|
|
137
267
|
|
|
138
268
|
- The Anthropic adapter no longer sends the `temperature` parameter. The
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: talkpipe
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2b2
|
|
4
4
|
Summary: Python internal and external DSL for writing generative AI analytics
|
|
5
5
|
Author-email: Travis Bauer <tlbauer@sandia.gov>
|
|
6
6
|
Maintainer-email: Travis Bauer <tlbauer@sandia.gov>
|
|
@@ -46,6 +46,8 @@ Requires-Dist: pytest>=9.0.3; extra == "dev"
|
|
|
46
46
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
47
47
|
Requires-Dist: pytest-cov>=2.0.0; extra == "dev"
|
|
48
48
|
Requires-Dist: mongomock; extra == "dev"
|
|
49
|
+
Requires-Dist: textual<9,>=8; extra == "dev"
|
|
50
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
49
51
|
Requires-Dist: ruff<0.17,>=0.16.3; extra == "dev"
|
|
50
52
|
Requires-Dist: mypy<3,>=2.3; extra == "dev"
|
|
51
53
|
Requires-Dist: pre-commit>=4.0; extra == "dev"
|
|
@@ -111,7 +113,12 @@ Entry points for different usage scenarios, from interactive development to prod
|
|
|
111
113
|
- **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
|
|
112
114
|
A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
|
|
113
115
|
|
|
114
|
-
<
|
|
116
|
+
<video width="640" height="360" controls>
|
|
117
|
+
<source src="docs/workbench_demo.mp4" type="video/mp4">
|
|
118
|
+
Your browser does not support the video tag.
|
|
119
|
+
</video>
|
|
120
|
+
|
|
121
|
+
([workbench demo video](docs/workbench_demo.mp4) — direct link, for renderers that strip the embed above.)
|
|
115
122
|
|
|
116
123
|
- **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
|
|
117
124
|
Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
|
|
@@ -131,16 +138,26 @@ Entry points for different usage scenarios, from interactive development to prod
|
|
|
131
138
|
- **[Container images](docs/guides/container-images.md)**
|
|
132
139
|
Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
|
|
133
140
|
|
|
134
|
-
- **
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
- **[TalkPipe App Center](appcenter/README.md)**
|
|
142
|
+
The part of TalkPipe that installs applications: an app-store-like terminal screen that installs, upgrades, launches, and uninstalls them with [uv](https://docs.astral.sh/uv/), each into its own environment, with desktop launchers. It ships with a catalog of the TalkPipe-based applications (the vault, the writing assistant, the workbench), and works just as well for any pip-installable Python application with a command of its own, listed in a catalog of your own. One file, nothing to install first but uv:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Each release attaches the version-stamped file, so the URL above needs a full
|
|
149
|
+
release that post-dates the App Center — against an older one, or where the
|
|
150
|
+
only such release so far is a pre-release, it returns "Not Found" and uv
|
|
151
|
+
reports that as a `SyntaxError`. Pre-releases *of the App Center itself* are
|
|
152
|
+
served by the experimental channel instead
|
|
153
|
+
(`releases/download/experimental/talkpipe_appcenter.py`). Either copy
|
|
154
|
+
installs the release or the pre-release of each application — press `e` on
|
|
155
|
+
its row to choose the channel and `i` to install, or pass
|
|
156
|
+
`--experimental` — so you never need a particular copy to
|
|
157
|
+
get a beta of an application (see
|
|
158
|
+
[Channels](appcenter/README.md#channels-stable-and-experimental)). From a
|
|
159
|
+
checkout of this branch, run the file directly:
|
|
160
|
+
`uv run appcenter/talkpipe_appcenter.py`.
|
|
144
161
|
|
|
145
162
|
## Quick Start
|
|
146
163
|
|
|
@@ -44,7 +44,12 @@ Entry points for different usage scenarios, from interactive development to prod
|
|
|
44
44
|
- **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
|
|
45
45
|
A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
|
|
46
46
|
|
|
47
|
-
<
|
|
47
|
+
<video width="640" height="360" controls>
|
|
48
|
+
<source src="docs/workbench_demo.mp4" type="video/mp4">
|
|
49
|
+
Your browser does not support the video tag.
|
|
50
|
+
</video>
|
|
51
|
+
|
|
52
|
+
([workbench demo video](docs/workbench_demo.mp4) — direct link, for renderers that strip the embed above.)
|
|
48
53
|
|
|
49
54
|
- **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
|
|
50
55
|
Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
|
|
@@ -64,16 +69,26 @@ Entry points for different usage scenarios, from interactive development to prod
|
|
|
64
69
|
- **[Container images](docs/guides/container-images.md)**
|
|
65
70
|
Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
|
|
66
71
|
|
|
67
|
-
- **
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
- **[TalkPipe App Center](appcenter/README.md)**
|
|
73
|
+
The part of TalkPipe that installs applications: an app-store-like terminal screen that installs, upgrades, launches, and uninstalls them with [uv](https://docs.astral.sh/uv/), each into its own environment, with desktop launchers. It ships with a catalog of the TalkPipe-based applications (the vault, the writing assistant, the workbench), and works just as well for any pip-installable Python application with a command of its own, listed in a catalog of your own. One file, nothing to install first but uv:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Each release attaches the version-stamped file, so the URL above needs a full
|
|
80
|
+
release that post-dates the App Center — against an older one, or where the
|
|
81
|
+
only such release so far is a pre-release, it returns "Not Found" and uv
|
|
82
|
+
reports that as a `SyntaxError`. Pre-releases *of the App Center itself* are
|
|
83
|
+
served by the experimental channel instead
|
|
84
|
+
(`releases/download/experimental/talkpipe_appcenter.py`). Either copy
|
|
85
|
+
installs the release or the pre-release of each application — press `e` on
|
|
86
|
+
its row to choose the channel and `i` to install, or pass
|
|
87
|
+
`--experimental` — so you never need a particular copy to
|
|
88
|
+
get a beta of an application (see
|
|
89
|
+
[Channels](appcenter/README.md#channels-stable-and-experimental)). From a
|
|
90
|
+
checkout of this branch, run the file directly:
|
|
91
|
+
`uv run appcenter/talkpipe_appcenter.py`.
|
|
77
92
|
|
|
78
93
|
## Quick Start
|
|
79
94
|
|
|
@@ -48,10 +48,29 @@ history and only made version sorting harder. Semantic versioning rules
|
|
|
48
48
|
sdist and wheel, `twine check`s them, and uploads to PyPI with the
|
|
49
49
|
`PYPI_API_TOKEN` repository secret. Mark betas and release candidates as
|
|
50
50
|
pre-releases. Watch the run finish; the package job and the container build
|
|
51
|
-
(GitHub only) run in the same workflow
|
|
52
|
-
|
|
51
|
+
(GitHub only) run in the same workflow, and so does `release-assets`
|
|
52
|
+
(GitHub only), which stamps the tag into `appcenter/talkpipe_appcenter.py` and
|
|
53
|
+
attaches it with `appcenter/install.sh` and `appcenter/install.ps1` to the
|
|
54
|
+
release. Those per-tag assets are what
|
|
55
|
+
`releases/download/vX.Y.Z/` serves, and for a full release they are what
|
|
56
|
+
`releases/latest/download/` serves too — but **`latest` skips pre-releases**,
|
|
57
|
+
so a beta is reachable only by its own tag or through the rolling
|
|
58
|
+
`experimental` release, which the same job refreshes on every release.
|
|
59
|
+
`experimental` is a fixed anchor tag managed only by CI: its assets move,
|
|
60
|
+
its commit does not, and it is never hand-published (the release jobs ignore
|
|
61
|
+
any tag that does not start with `v`, so a stray publish cannot upload to
|
|
62
|
+
PyPI).
|
|
53
63
|
5. **Verify** with a fresh environment: `pip install talkpipe==X.Y.Z`,
|
|
54
|
-
`python -c "import talkpipe; print(talkpipe.__version__)"
|
|
64
|
+
`python -c "import talkpipe; print(talkpipe.__version__)"`, and
|
|
65
|
+
`uv run https://github.com/sandialabs/talkpipe/releases/download/vX.Y.Z/talkpipe_appcenter.py --version`,
|
|
66
|
+
which must print `talkpipe-appcenter X.Y.Z`. Check the same of the rolling
|
|
67
|
+
channel, which should now report this release either way:
|
|
68
|
+
`uv run https://github.com/sandialabs/talkpipe/releases/download/experimental/talkpipe_appcenter.py --version`.
|
|
69
|
+
For a pre-release, also confirm that `releases/latest/download/` still
|
|
70
|
+
serves the previous full release. Before a *final* release, also
|
|
71
|
+
try the App Center by hand (`appcenter/README.md`, "Development") on a Linux
|
|
72
|
+
desktop; its macOS and Windows launcher code paths are unit-tested only,
|
|
73
|
+
so try those there when a machine is at hand.
|
|
55
74
|
|
|
56
75
|
Nothing is bumped afterwards; the next commit on `main` reports itself as
|
|
57
76
|
`X.Y.(Z+1).devN` automatically.
|
|
@@ -59,6 +78,6 @@ Nothing is bumped afterwards; the next commit on `main` reports itself as
|
|
|
59
78
|
## Downstream
|
|
60
79
|
|
|
61
80
|
The consumers in this suite pin a floor on talkpipe (`talkpipe_vault`,
|
|
62
|
-
`talkpipe-agents`, `talkpipe-writing-assistant`, `local-m2v`).
|
|
81
|
+
`talkpipe-agents`, `talkpipe-writing-assistant`, `privateer`, `local-m2v`).
|
|
63
82
|
When a release adds API they rely on, or when the major version changes,
|
|
64
83
|
raise their floors in a follow-up merge request in each repo.
|