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