TalkPipe 0.12.2__tar.gz → 0.12.3a2__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-0.12.2 → talkpipe-0.12.3a2}/.github/copilot-instructions.md +13 -1
- talkpipe-0.12.3a2/.github/prompts/add-segment.prompt.md +57 -0
- talkpipe-0.12.3a2/.github/prompts/changelog.prompt.md +23 -0
- talkpipe-0.12.3a2/.github/prompts/doc-examples.prompt.md +29 -0
- talkpipe-0.12.3a2/.github/prompts/tdd.prompt.md +21 -0
- talkpipe-0.12.3a2/.github/prompts/update-entry-points.prompt.md +26 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.github/workflows/ci-cd.yml +7 -7
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/CHANGELOG.md +10 -0
- {talkpipe-0.12.2/src/talkpipe.egg-info → talkpipe-0.12.3a2}/PKG-INFO +31 -12
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/README.md +29 -11
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/configuration.md +9 -3
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/extending-talkpipe.md +11 -3
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/guides/model-and-source-configuration.md +16 -6
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/quickstart.md +22 -2
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/pyproject.toml +3 -3
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/makevectordatabase.py +20 -7
- talkpipe-0.12.3a2/src/talkpipe/app/static/unit-docs.html +1 -0
- talkpipe-0.12.3a2/src/talkpipe/app/static/unit-docs.txt +1 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/chatterlang/compiler.py +91 -7
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/chatterlang/registry.py +28 -4
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/config.py +3 -2
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapter_base.py +26 -1
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapters.py +2 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapters_anthropic.py +3 -1
- talkpipe-0.12.3a2/src/talkpipe/llm/prompt_adapters_eliza.py +334 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapters_openai.py +3 -1
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/config.py +8 -1
- {talkpipe-0.12.2 → talkpipe-0.12.3a2/src/talkpipe.egg-info}/PKG-INFO +31 -12
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe.egg-info/SOURCES.txt +10 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe.egg-info/requires.txt +1 -0
- talkpipe-0.12.3a2/src/talkpipe.egg-info/scm_file_list.json +265 -0
- talkpipe-0.12.3a2/src/talkpipe.egg-info/scm_version.json +8 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/chatterlang/test_compiler.py +37 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_prompt_adapters_base.py +10 -0
- talkpipe-0.12.3a2/tests/talkpipe/llm/test_prompt_adapters_eliza.py +111 -0
- talkpipe-0.12.3a2/uv.lock +3292 -0
- talkpipe-0.12.2/src/talkpipe/app/static/unit-docs.html +0 -1
- talkpipe-0.12.2/src/talkpipe/app/static/unit-docs.txt +0 -1
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.bandit +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/changelog-update/SKILL.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/test-driven-development/SKILL.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/update-entry-points/SKILL.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.dockerignore +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.github/CICD.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.github/SECURITY.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.github/dependabot.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.gitignore +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.safety-policy.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.safety-project.ini +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.vscode/settings.json +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/.vscode/tasks.json +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/AGENTS.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/COPYRIGHT +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/Dockerfile +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/LICENSE +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/bin/config-analyzer.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/bin/config_bash +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/.gitignore +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/LLMChat.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/LLMEvaluateWebPage.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/TalkPipe.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/TalkPipe.xcf +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/chatterlang-script.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/chatterlang-server.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/chatterlang-workbench.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/lazy-loading.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/api-reference/talkpipe-ref.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/chatterlang.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/documentation-formatting.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/metadata-stream.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/pipe-api.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/protocol.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/architecture/streaming.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/contributing/developer-handbook.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/guides/container-images.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/guides/makevectordatabase-and-serverag.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/guides/model2vec-embeddings.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/make_structure_diagram.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/structure.tex +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/talkpipe_architecture.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/talkpipe_architecture.tex +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/talkpipe_diagram.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/.gitignore +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/step3_extras.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/pytest.ini +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/scripts/extract_documentation_examples.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/setup.cfg +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/setup.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_script.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_serve.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/chatterlang_workbench.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/doc_examples.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/precache_model2vec.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/serverag.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/static/.gitignore +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/static/favicon.ico +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/chatterlang/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/chatterlang/parsers.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/email.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/extraction.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/html.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/image.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/mongo.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/rss.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/text/chunking_units.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/text/englishnormalize.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/data/text/operations.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/chat.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/content.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/embedding.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/embedding_adapters.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/embedding_errors.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/multimodal.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/prompt_adapters_ollama.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/llm/vision.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/operations/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/operations/filtering.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/operations/matrices.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/operations/thread_ops.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/operations/transforms.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/basic.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/core.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/fork.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/io.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/math.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipe/metadata.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipelines/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipelines/basic_rag.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/pipelines/vector_databases.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/search/abstract.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/search/lancedb.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/search/whoosh.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/__init__.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/collections.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/constants.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/data_manipulation.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/doc_extraction.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/iterators.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/os.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe/util/plugin_loader.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe.egg-info/dependency_links.txt +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe.egg-info/entry_points.txt +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/src/talkpipe.egg-info/top_level.txt +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/stories.json +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/test-workflow.yml +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/conftest.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/prompt_adapter_contract_suite.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/chatterlang/test_registry.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/sample_feed.pkl +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test.docx +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_email.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_extraction.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_html.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_html_exceptions.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_image.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_mogomock.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_mongo.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_mongo_integration.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/test_rss.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/data/text/test_operations.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_chat.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_content.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_embedding.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_multimodal.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_prompt_adapters_openai.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_vision.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/operations/test_filtering.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/operations/test_matrices.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/operations/test_threading.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/operations/test_transforms.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_basic.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_core.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_fork.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_io.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_math.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipe/test_metadata.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/search/test_abstract.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/search/test_lancedb.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/search/test_whoosh.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/test_documentation_examples.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_collections.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_config.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_data_manipulation.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_doc_extraction.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_iterators.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_os.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_plugin_loader.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/talkpipe/util/test_util.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/test_doc_examples.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/test_security_vulnerabilities.py +0 -0
- {talkpipe-0.12.2 → talkpipe-0.12.3a2}/tests/testutils.py +0 -0
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
# TalkPipe AI Coding Instructions
|
|
2
2
|
|
|
3
|
-
*Cursor users: See [AGENTS.md](../AGENTS.md) and `.cursor/skills/` for additional workflows
|
|
3
|
+
*Cursor users: See [AGENTS.md](../AGENTS.md) and `.cursor/skills/` for additional workflows.*
|
|
4
|
+
|
|
5
|
+
## Quick Actions (Prompts)
|
|
6
|
+
|
|
7
|
+
Use these slash commands in VS Code chat (type `/` to invoke):
|
|
8
|
+
|
|
9
|
+
| Prompt | When to use |
|
|
10
|
+
|--------|-------------|
|
|
11
|
+
| `/tdd` | Implement a change with write-fail-fix-pass TDD order |
|
|
12
|
+
| `/add-segment` | Add a new segment or source end-to-end (test → impl → entry-point → changelog) |
|
|
13
|
+
| `/changelog` | Update CHANGELOG.md after a feature or fix |
|
|
14
|
+
| `/update-entry-points` | Regenerate pyproject.toml entry points from decorators |
|
|
15
|
+
| `/doc-examples` | Validate and fix documentation code examples |
|
|
4
16
|
|
|
5
17
|
## Project Overview
|
|
6
18
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: agent
|
|
3
|
+
description: Add a new segment or source to TalkPipe. Use when creating new pipe components. Covers decorator pattern, parameter annotations, entry-point registration, and TDD.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Add a new **$input** to TalkPipe following all project conventions:
|
|
7
|
+
|
|
8
|
+
## Step 1 — Write a failing test
|
|
9
|
+
|
|
10
|
+
In the appropriate file under `tests/talkpipe/`, write a test that fails without the new component. Run it to confirm failure:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
source .venv/bin/activate && pytest <test-file> -v
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Step 2 — Implement the component
|
|
17
|
+
|
|
18
|
+
Place it in the appropriate module under `src/talkpipe/`:
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
from typing import Annotated, Iterator, Any
|
|
22
|
+
from talkpipe.pipe.core import segment, field_segment
|
|
23
|
+
from talkpipe import register_segment # or register_source
|
|
24
|
+
|
|
25
|
+
@register_segment("mySegment") # camelCase name used in ChatterLang
|
|
26
|
+
@segment()
|
|
27
|
+
def my_segment(
|
|
28
|
+
items: Iterator[Any],
|
|
29
|
+
param: Annotated[str, "Description of this parameter"] = "default",
|
|
30
|
+
) -> Iterator[Any]:
|
|
31
|
+
for item in items:
|
|
32
|
+
yield item # process and yield
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Rules:
|
|
36
|
+
- Use `@segment()` for iterators; `@field_segment()` for per-field transforms
|
|
37
|
+
- Use `Annotated[type, "description"]` for every parameter (shown in ChatterLang reference)
|
|
38
|
+
- Do NOT add docstrings documenting parameters — use `Annotated` instead
|
|
39
|
+
- For `@field_segment`, the first non-items argument is the `field` parameter by convention
|
|
40
|
+
|
|
41
|
+
## Step 3 — Register entry point
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
.venv/bin/python .cursor/skills/update-entry-points/scripts/update_entry_points.py
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Verify the new entry appears in `pyproject.toml` under `[project.entry-points."talkpipe.segments"]` or `"talkpipe.sources"`.
|
|
48
|
+
|
|
49
|
+
## Step 4 — Verify test passes
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pytest <test-file> -v
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Step 5 — Update CHANGELOG.md
|
|
56
|
+
|
|
57
|
+
Add a bullet under `## Unreleased` describing the new component.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: agent
|
|
3
|
+
description: Update CHANGELOG.md after implementing a feature, fixing a bug, or making any user-facing change. Handles update-vs-add logic correctly.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Update [CHANGELOG.md](../../CHANGELOG.md) under the `## Unreleased` section.
|
|
7
|
+
|
|
8
|
+
**Decision logic:**
|
|
9
|
+
1. Is this a **minor change to an existing feature** already mentioned in Unreleased?
|
|
10
|
+
- Yes → Update that existing bullet; do not add a new one
|
|
11
|
+
- No → Add a new bullet at the top of the Unreleased list
|
|
12
|
+
|
|
13
|
+
2. Is this **purely internal** (refactor, no user impact)?
|
|
14
|
+
- Yes → Changelog update optional
|
|
15
|
+
- No → Always update
|
|
16
|
+
|
|
17
|
+
**Format rules:**
|
|
18
|
+
- Present tense, sentence case
|
|
19
|
+
- Use backticks for segment/command names (e.g. `mySegment`, `run_doc_examples`)
|
|
20
|
+
- Link to docs with `[text](path)` when helpful
|
|
21
|
+
- Multi-line bullets use 2-space indent for continuation lines
|
|
22
|
+
|
|
23
|
+
The change to document: $input
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: agent
|
|
3
|
+
description: Validate and fix documentation code examples. Use after editing docs, before committing doc changes, or when examples may be broken. Runs examples via pytest and fixes formatting issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Validate documentation code examples following TalkPipe conventions. See [docs/architecture/documentation-formatting.md](../../docs/architecture/documentation-formatting.md) for full formatting rules.
|
|
7
|
+
|
|
8
|
+
## Run examples via pytest
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
source .venv/bin/activate
|
|
12
|
+
pytest tests/test_doc_examples.py -v
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Skip Ollama-dependent examples when Ollama is unavailable:
|
|
16
|
+
```bash
|
|
17
|
+
pytest tests/test_doc_examples.py -v -m "not requires_ollama"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Formatting rules (fix any violations found)
|
|
21
|
+
|
|
22
|
+
- Use **unindented** ` ```python ` fences (no leading spaces before the triple backtick)
|
|
23
|
+
- Always include a language tag (` ```python ` or ` ```chatterlang `)
|
|
24
|
+
- Standalone examples must include all imports and be runnable in isolation
|
|
25
|
+
- Add `# skip-extract` as the first line of blocks that are intentionally non-runnable (fragments, setup code, external-service-only)
|
|
26
|
+
|
|
27
|
+
## Scope
|
|
28
|
+
|
|
29
|
+
$input
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: agent
|
|
3
|
+
description: Follow TalkPipe TDD workflow. Use when implementing features, fixing bugs, or adding segments/sources. Enforces write-fail-fix-pass order.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Follow the TalkPipe TDD workflow for this change:
|
|
7
|
+
|
|
8
|
+
1. **Write or update a test** in `tests/` that fails without the change. Prefer updating an existing test file over creating a new one.
|
|
9
|
+
2. **Verify the test fails**: run `source .venv/bin/activate && pytest <test-file> -v`
|
|
10
|
+
3. **Implement the change**
|
|
11
|
+
4. **Verify the test passes**: re-run the same pytest command
|
|
12
|
+
|
|
13
|
+
Constraints:
|
|
14
|
+
- Tests mirror `src/` structure under `tests/talkpipe/`
|
|
15
|
+
- Keep tests as short as possible while covering the functionality completely
|
|
16
|
+
- Use `pytest.fixture` and `pytest-mock` for dependencies
|
|
17
|
+
- Always use the `.venv` environment; abort and alert if it doesn't exist
|
|
18
|
+
|
|
19
|
+
If a unit test is not reasonable (e.g., requires external LLM, is purely cosmetic), notify the user and explain why.
|
|
20
|
+
|
|
21
|
+
The change to implement: $input
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
mode: agent
|
|
3
|
+
description: Regenerate and apply talkpipe.sources and talkpipe.segments entry points from @register_source/@register_segment decorators. Use after adding new sources or segments, or when pyproject.toml entry points are out of sync.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Regenerate entry points from `@register_source` and `@register_segment` decorators and update `pyproject.toml`.
|
|
7
|
+
|
|
8
|
+
Run from the project root:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
source .venv/bin/activate
|
|
12
|
+
python .cursor/skills/update-entry-points/scripts/update_entry_points.py
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The script:
|
|
16
|
+
1. Scans `src/talkpipe/` for `@register_source` and `@register_segment` decorators
|
|
17
|
+
2. Generates updated entry-point TOML
|
|
18
|
+
3. Replaces `[project.entry-points."talkpipe.sources"]` and `[project.entry-points."talkpipe.segments"]` in `pyproject.toml`
|
|
19
|
+
4. Preserves all other `pyproject.toml` content
|
|
20
|
+
|
|
21
|
+
**Dry run** (preview without writing):
|
|
22
|
+
```bash
|
|
23
|
+
python .cursor/skills/update-entry-points/scripts/update_entry_points.py --dry-run
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
After running, verify the expected entry appears in `pyproject.toml`.
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
python-version: ['3.11', '3.12', '3.13']
|
|
21
21
|
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
24
|
with:
|
|
25
25
|
fetch-depth: 0
|
|
26
26
|
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
python-version: ${{ matrix.python-version }}
|
|
31
31
|
|
|
32
32
|
- name: Cache pip dependencies
|
|
33
|
-
uses: actions/cache@
|
|
33
|
+
uses: actions/cache@v6
|
|
34
34
|
with:
|
|
35
35
|
path: ~/.cache/pip
|
|
36
36
|
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
|
|
49
49
|
- name: Upload coverage to Codecov
|
|
50
50
|
if: matrix.python-version == '3.11'
|
|
51
|
-
uses: codecov/codecov-action@
|
|
51
|
+
uses: codecov/codecov-action@v7
|
|
52
52
|
with:
|
|
53
53
|
files: ./coverage.xml
|
|
54
54
|
flags: unittests
|
|
@@ -60,7 +60,7 @@ jobs:
|
|
|
60
60
|
SAFETY_API_KEY: ${{ secrets.SAFETY_API_KEY }}
|
|
61
61
|
|
|
62
62
|
steps:
|
|
63
|
-
- uses: actions/checkout@
|
|
63
|
+
- uses: actions/checkout@v7
|
|
64
64
|
with:
|
|
65
65
|
fetch-depth: 0
|
|
66
66
|
|
|
@@ -104,7 +104,7 @@ jobs:
|
|
|
104
104
|
|
|
105
105
|
steps:
|
|
106
106
|
- name: Checkout repository
|
|
107
|
-
uses: actions/checkout@
|
|
107
|
+
uses: actions/checkout@v7
|
|
108
108
|
|
|
109
109
|
- name: Log in to Container Registry
|
|
110
110
|
uses: docker/login-action@v4
|
|
@@ -177,7 +177,7 @@ jobs:
|
|
|
177
177
|
|
|
178
178
|
steps:
|
|
179
179
|
- name: Checkout repository
|
|
180
|
-
uses: actions/checkout@
|
|
180
|
+
uses: actions/checkout@v7
|
|
181
181
|
|
|
182
182
|
- name: Initialize CodeQL
|
|
183
183
|
uses: github/codeql-action/init@v4
|
|
@@ -196,7 +196,7 @@ jobs:
|
|
|
196
196
|
if: github.event_name == 'release' && github.event.action == 'published'
|
|
197
197
|
|
|
198
198
|
steps:
|
|
199
|
-
- uses: actions/checkout@
|
|
199
|
+
- uses: actions/checkout@v7
|
|
200
200
|
with:
|
|
201
201
|
fetch-depth: 0
|
|
202
202
|
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- Added a local `eliza` prompt-adapter source for `llmPrompt` and guided-generation
|
|
6
|
+
segments. The adapter is deterministic (no external API keys), uses the configured
|
|
7
|
+
model name as ELIZA's self-reference, supports multi-turn memory/fact callbacks,
|
|
8
|
+
and provides generic structured outputs for score/binary/term extraction schemas.
|
|
9
|
+
Added a matching ChatterLang example to model/source configuration docs.
|
|
10
|
+
- Fixed single-turn (`multi_turn=False`) prompt-adapter state handling so `_summary_message`
|
|
11
|
+
is cleared after each response and does not leak conversation memory between calls.
|
|
12
|
+
- Fixed a CI import failure in `talkpipe.chatterlang.registry` by importing `List`
|
|
13
|
+
for the `available_names` return annotation, preventing `NameError` during module import.
|
|
14
|
+
|
|
5
15
|
## v0.12.2
|
|
6
16
|
- Added batch embedding support: embedding adapters expose `execute_one` and `execute_batch`;
|
|
7
17
|
`execute` remains as a deprecated alias for `execute_one` (removed in 1.0). `llmEmbed` extends
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: talkpipe
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.3a2
|
|
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>
|
|
@@ -36,6 +36,7 @@ Requires-Dist: pyyaml
|
|
|
36
36
|
Requires-Dist: greenlet
|
|
37
37
|
Requires-Dist: networkx
|
|
38
38
|
Requires-Dist: starlette>=0.49.1
|
|
39
|
+
Requires-Dist: build>=1.5.0
|
|
39
40
|
Provides-Extra: dev
|
|
40
41
|
Requires-Dist: pytest; extra == "dev"
|
|
41
42
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
@@ -79,7 +80,7 @@ This README is a high-level overview. Use the **[documentation map](#documentati
|
|
|
79
80
|
|
|
80
81
|
## What Can You Do With TalkPipe?
|
|
81
82
|
|
|
82
|
-
- **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just
|
|
83
|
+
- **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just a few lines of code
|
|
83
84
|
- **Process Documents** - Extract text from PDFs, analyze research papers, score content relevance
|
|
84
85
|
- **Build RAG Pipelines** - Create end-to-end Retrieval-Augmented Generation workflows with vector databases
|
|
85
86
|
- **Analyze Web Content** - Download web pages (respecting robots.txt), extract readable text, and summarize
|
|
@@ -128,7 +129,7 @@ These applications are entry points for different usage scenarios, from interact
|
|
|
128
129
|
|
|
129
130
|
## Quick Start
|
|
130
131
|
|
|
131
|
-
**Requirements:** Python 3.11 or newer.
|
|
132
|
+
**Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
|
|
132
133
|
|
|
133
134
|
```bash
|
|
134
135
|
pip install talkpipe
|
|
@@ -144,14 +145,32 @@ pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
|
|
|
144
145
|
# Or: pip install talkpipe[all]
|
|
145
146
|
```
|
|
146
147
|
|
|
147
|
-
Configure API keys and provider URLs via environment variables (for example `
|
|
148
|
+
Configure API keys and provider URLs via environment variables (for example `OPENAI_API_KEY` and `ANTHROPIC_API_KEY`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
|
|
149
|
+
|
|
150
|
+
Quick local syntax check (no LLM server required):
|
|
151
|
+
|
|
152
|
+
> **Note:** `source="eliza"` is **not** an LLM provider. It is a local, deterministic adapter intended for experimenting with TalkPipe/ChatterLang syntax and multi-turn flow when you do not yet have Ollama/OpenAI/Anthropic access.
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from talkpipe.chatterlang import compiler
|
|
156
|
+
|
|
157
|
+
script = '| print | llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True] | print'
|
|
158
|
+
chat = compiler.compile(script).as_function(single_in=True, single_out=True)
|
|
159
|
+
|
|
160
|
+
chat("Hello, my name is Alice.")
|
|
161
|
+
chat("What's my name?")
|
|
162
|
+
```
|
|
148
163
|
|
|
149
164
|
Multi-turn chat in a few lines:
|
|
150
165
|
|
|
166
|
+
> **Prerequisite:** this example uses Ollama, which is a separate application, not just the `talkpipe[ollama]` Python package. Install and start it from https://ollama.com/download, then pull the model with `ollama pull llama3.2`. Cloud users can skip Ollama and substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
|
|
167
|
+
|
|
151
168
|
```python
|
|
152
169
|
from talkpipe.chatterlang import compiler
|
|
153
170
|
|
|
154
171
|
script = '| print | llmPrompt[model="llama3.2", source="ollama", multi_turn=True] | print'
|
|
172
|
+
# Using OpenAI: model="gpt-4o-mini", source="openai" (set OPENAI_API_KEY)
|
|
173
|
+
# Using Anthropic: model="claude-haiku-4-5", source="anthropic" (set ANTHROPIC_API_KEY)
|
|
155
174
|
chat = compiler.compile(script).as_function(single_in=True, single_out=True)
|
|
156
175
|
|
|
157
176
|
response = chat("Hello! My name is Alice.")
|
|
@@ -581,7 +600,7 @@ smtp_port = 587
|
|
|
581
600
|
Environment variables use the `TALKPIPE_` prefix:
|
|
582
601
|
```bash
|
|
583
602
|
export TALKPIPE_email_password="your-password"
|
|
584
|
-
export
|
|
603
|
+
export OPENAI_API_KEY="sk-..."
|
|
585
604
|
```
|
|
586
605
|
|
|
587
606
|
### Performance Optimization
|
|
@@ -638,17 +657,17 @@ def multiplyBy(items, factor=2):
|
|
|
638
657
|
for item in items:
|
|
639
658
|
yield item * factor
|
|
640
659
|
|
|
641
|
-
# Use it to
|
|
660
|
+
# Use it to multiply each value in the range by 3
|
|
642
661
|
pipeline = arange(lower=5, upper=10) | multiplyBy(factor=3) | io.Print()
|
|
643
662
|
result = pipeline.as_function(single_out=False)()
|
|
644
663
|
|
|
645
664
|
# Output:
|
|
646
|
-
#
|
|
647
|
-
#
|
|
648
|
-
#
|
|
649
|
-
#
|
|
650
|
-
#
|
|
651
|
-
# Returns: [
|
|
665
|
+
# 15
|
|
666
|
+
# 18
|
|
667
|
+
# 21
|
|
668
|
+
# 24
|
|
669
|
+
# 27
|
|
670
|
+
# Returns: [15, 18, 21, 24, 27]
|
|
652
671
|
```
|
|
653
672
|
|
|
654
673
|
**Field Segments** provide a convenient way to create 1:1 segments:
|
|
@@ -20,7 +20,7 @@ This README is a high-level overview. Use the **[documentation map](#documentati
|
|
|
20
20
|
|
|
21
21
|
## What Can You Do With TalkPipe?
|
|
22
22
|
|
|
23
|
-
- **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just
|
|
23
|
+
- **Chat with LLMs** - Create multi-turn conversations with OpenAI, Ollama, or Anthropic models in just a few lines of code
|
|
24
24
|
- **Process Documents** - Extract text from PDFs, analyze research papers, score content relevance
|
|
25
25
|
- **Build RAG Pipelines** - Create end-to-end Retrieval-Augmented Generation workflows with vector databases
|
|
26
26
|
- **Analyze Web Content** - Download web pages (respecting robots.txt), extract readable text, and summarize
|
|
@@ -69,7 +69,7 @@ These applications are entry points for different usage scenarios, from interact
|
|
|
69
69
|
|
|
70
70
|
## Quick Start
|
|
71
71
|
|
|
72
|
-
**Requirements:** Python 3.11 or newer.
|
|
72
|
+
**Requirements:** Python 3.11 or newer. Check your version first with `python3 --version` — it must report 3.11 or higher before installing.
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
75
|
pip install talkpipe
|
|
@@ -85,14 +85,32 @@ pip install talkpipe[model2vec] # In-process static embeddings (also in [all])
|
|
|
85
85
|
# Or: pip install talkpipe[all]
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
Configure API keys and provider URLs via environment variables (for example `
|
|
88
|
+
Configure API keys and provider URLs via environment variables (for example `OPENAI_API_KEY` and `ANTHROPIC_API_KEY`) or `~/.talkpipe.toml`. If TalkPipe runs on a different machine than your Ollama server, set `TALKPIPE_OLLAMA_SERVER_URL` to that host. See **[Configuration](docs/architecture/configuration.md)** for details and ChatterLang `$var` substitution.
|
|
89
|
+
|
|
90
|
+
Quick local syntax check (no LLM server required):
|
|
91
|
+
|
|
92
|
+
> **Note:** `source="eliza"` is **not** an LLM provider. It is a local, deterministic adapter intended for experimenting with TalkPipe/ChatterLang syntax and multi-turn flow when you do not yet have Ollama/OpenAI/Anthropic access.
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from talkpipe.chatterlang import compiler
|
|
96
|
+
|
|
97
|
+
script = '| print | llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True] | print'
|
|
98
|
+
chat = compiler.compile(script).as_function(single_in=True, single_out=True)
|
|
99
|
+
|
|
100
|
+
chat("Hello, my name is Alice.")
|
|
101
|
+
chat("What's my name?")
|
|
102
|
+
```
|
|
89
103
|
|
|
90
104
|
Multi-turn chat in a few lines:
|
|
91
105
|
|
|
106
|
+
> **Prerequisite:** this example uses Ollama, which is a separate application, not just the `talkpipe[ollama]` Python package. Install and start it from https://ollama.com/download, then pull the model with `ollama pull llama3.2`. Cloud users can skip Ollama and substitute `source="openai"` or `source="anthropic"` (see the commented variants below).
|
|
107
|
+
|
|
92
108
|
```python
|
|
93
109
|
from talkpipe.chatterlang import compiler
|
|
94
110
|
|
|
95
111
|
script = '| print | llmPrompt[model="llama3.2", source="ollama", multi_turn=True] | print'
|
|
112
|
+
# Using OpenAI: model="gpt-4o-mini", source="openai" (set OPENAI_API_KEY)
|
|
113
|
+
# Using Anthropic: model="claude-haiku-4-5", source="anthropic" (set ANTHROPIC_API_KEY)
|
|
96
114
|
chat = compiler.compile(script).as_function(single_in=True, single_out=True)
|
|
97
115
|
|
|
98
116
|
response = chat("Hello! My name is Alice.")
|
|
@@ -522,7 +540,7 @@ smtp_port = 587
|
|
|
522
540
|
Environment variables use the `TALKPIPE_` prefix:
|
|
523
541
|
```bash
|
|
524
542
|
export TALKPIPE_email_password="your-password"
|
|
525
|
-
export
|
|
543
|
+
export OPENAI_API_KEY="sk-..."
|
|
526
544
|
```
|
|
527
545
|
|
|
528
546
|
### Performance Optimization
|
|
@@ -579,17 +597,17 @@ def multiplyBy(items, factor=2):
|
|
|
579
597
|
for item in items:
|
|
580
598
|
yield item * factor
|
|
581
599
|
|
|
582
|
-
# Use it to
|
|
600
|
+
# Use it to multiply each value in the range by 3
|
|
583
601
|
pipeline = arange(lower=5, upper=10) | multiplyBy(factor=3) | io.Print()
|
|
584
602
|
result = pipeline.as_function(single_out=False)()
|
|
585
603
|
|
|
586
604
|
# Output:
|
|
587
|
-
#
|
|
588
|
-
#
|
|
589
|
-
#
|
|
590
|
-
#
|
|
591
|
-
#
|
|
592
|
-
# Returns: [
|
|
605
|
+
# 15
|
|
606
|
+
# 18
|
|
607
|
+
# 21
|
|
608
|
+
# 24
|
|
609
|
+
# 27
|
|
610
|
+
# Returns: [15, 18, 21, 24, 27]
|
|
593
611
|
```
|
|
594
612
|
|
|
595
613
|
**Field Segments** provide a convenient way to create 1:1 segments:
|
|
@@ -27,7 +27,8 @@ logger_levels = "root:INFO,talkpipe:DEBUG"
|
|
|
27
27
|
logger_files = "talkpipe:/tmp/talkpipe.log,root:/tmp/app.log"
|
|
28
28
|
|
|
29
29
|
# LLM Configuration
|
|
30
|
-
|
|
30
|
+
default_model_name = "llama3.2"
|
|
31
|
+
default_model_source = "ollama"
|
|
31
32
|
ollama_base_url = "http://localhost:11434"
|
|
32
33
|
|
|
33
34
|
# Server Configuration
|
|
@@ -58,6 +59,10 @@ The configuration system loads a single TOML file from:
|
|
|
58
59
|
|
|
59
60
|
All TalkPipe environment variables use the prefix `TALKPIPE_` followed by the configuration key name in uppercase.
|
|
60
61
|
|
|
62
|
+
Provider SDK credentials are separate from TalkPipe config keys:
|
|
63
|
+
- OpenAI SDK reads `OPENAI_API_KEY`
|
|
64
|
+
- Anthropic SDK reads `ANTHROPIC_API_KEY`
|
|
65
|
+
|
|
61
66
|
#### Environment Variable Examples
|
|
62
67
|
|
|
63
68
|
```bash
|
|
@@ -211,7 +216,8 @@ In the script:
|
|
|
211
216
|
**Best Practices:**
|
|
212
217
|
```bash
|
|
213
218
|
# ✅ Use environment variables for secrets
|
|
214
|
-
export
|
|
219
|
+
export OPENAI_API_KEY="sk-your-secret-key"
|
|
220
|
+
export ANTHROPIC_API_KEY="your-anthropic-key"
|
|
215
221
|
|
|
216
222
|
# ❌ Avoid putting secrets in config files
|
|
217
223
|
# ~/.talkpipe.toml
|
|
@@ -281,7 +287,7 @@ config = get_config(reload=True) # Re-reads from sources
|
|
|
281
287
|
```bash
|
|
282
288
|
# Use environment variables for local development
|
|
283
289
|
export TALKPIPE_LOGGER_LEVELS="root:DEBUG,talkpipe:DEBUG"
|
|
284
|
-
export
|
|
290
|
+
export OPENAI_API_KEY="sk-dev-key"
|
|
285
291
|
export TALKPIPE_DEFAULT_PORT="8080"
|
|
286
292
|
|
|
287
293
|
# Use local configuration file for persistent settings
|
|
@@ -6,6 +6,8 @@ This guide explains how to add custom **sources** (pipeline starters) and **segm
|
|
|
6
6
|
|
|
7
7
|
You usually implement a segment as a small function and attach two decorators: `@segment()` turns the function into a segment class factory, and `@register_segment("nameInChatterLang")` adds that class to the global registry under one or more ChatterLang names.
|
|
8
8
|
|
|
9
|
+
> **Import note:** `talkpipe` re-exports `segment`, `register_segment`, `compile`, and friends at the top level as convenience shortcuts. `from talkpipe import segment, register_segment` and `from talkpipe.chatterlang import registry, compiler` (used in the README) are equivalent — pick one style and use it consistently. This guide uses the top-level shortcuts.
|
|
10
|
+
|
|
9
11
|
```python
|
|
10
12
|
from typing import Iterator, Any
|
|
11
13
|
|
|
@@ -285,14 +287,20 @@ INPUT FROM apiData(url="https://api.example.com/data")
|
|
|
285
287
|
|
|
286
288
|
### Entry points for distributable components
|
|
287
289
|
|
|
288
|
-
|
|
290
|
+
Segments and sources are discovered through the **`talkpipe.segments`** and **`talkpipe.sources`** entry point groups. How you keep those aligned with your decorators depends on whether you are writing a third-party package or contributing to the TalkPipe repository itself.
|
|
291
|
+
|
|
292
|
+
#### For third-party plugin authors
|
|
293
|
+
|
|
294
|
+
In your **own** package, declare the same groups in your `pyproject.toml`, pointing each name at `module:ClassName` (the class your decorators attach to). This is all a distributable plugin needs — you do **not** need any TalkPipe repo tooling.
|
|
295
|
+
|
|
296
|
+
#### For TalkPipe repo contributors (this repository only)
|
|
297
|
+
|
|
298
|
+
When working inside the TalkPipe source checkout, after adding or renaming `@register_segment` / `@register_source` classes, regenerate `pyproject.toml` entry points with the repo-internal script (not shipped with the installed package):
|
|
289
299
|
|
|
290
300
|
`python .cursor/skills/update-entry-points/scripts/update_entry_points.py`
|
|
291
301
|
|
|
292
302
|
(from the project root; see [protocol.md](protocol.md)). That keeps **`talkpipe.segments`** and **`talkpipe.sources`** aligned with decorators so installs and lazy loading resolve the right modules.
|
|
293
303
|
|
|
294
|
-
In a **separate** package, declare the same groups in your own `pyproject.toml`, pointing each name at `module:ClassName` (the class your decorators attach to).
|
|
295
|
-
|
|
296
304
|
### `talkpipe.plugins` (optional)
|
|
297
305
|
|
|
298
306
|
The `talkpipe.plugins` entry point group is separate from per-segment registration. Importing `talkpipe` runs `load_plugins()`, which loads each plugin entry point. Prefer pointing the entry point at a **module** so importing it runs your `@register_*` decorators; optionally define a module-level `initialize_plugin()` for extra setup. See [TalkPipe Plugin Manager](../api-reference/talkpipe-plugin-manager.md) for CLI (`talkpipe_plugins`) and configuration details.
|
|
@@ -117,7 +117,7 @@ The first piece of the pattern above is the `source` value itself. Sources are r
|
|
|
117
117
|
|
|
118
118
|
| Segment | Registered sources |
|
|
119
119
|
|---------|-------------------|
|
|
120
|
-
| **`llmPrompt`** (chat) | `ollama`, `openai`, `anthropic` |
|
|
120
|
+
| **`llmPrompt`** (chat) | `ollama`, `openai`, `anthropic`, `eliza` |
|
|
121
121
|
| **`llmVisionPrompt`** (multimodal chat) | `ollama`, `openai`, `anthropic` |
|
|
122
122
|
| **`llmEmbed`** (embeddings) | `ollama`, `openai`, `model2vec` |
|
|
123
123
|
|
|
@@ -344,7 +344,17 @@ INPUT FROM prompt[data="Hello"]
|
|
|
344
344
|
| print
|
|
345
345
|
```
|
|
346
346
|
|
|
347
|
-
### 2.
|
|
347
|
+
### 2. Local Eliza source (no provider API key)
|
|
348
|
+
|
|
349
|
+
`eliza` is a local adapter. Set `model` to the name Eliza should use when referring to itself.
|
|
350
|
+
|
|
351
|
+
```chatterlang
|
|
352
|
+
INPUT FROM prompt[data="I'm feeling stuck on a bug."]
|
|
353
|
+
| llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True]
|
|
354
|
+
| print
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### 3. Global defaults in TOML
|
|
348
358
|
|
|
349
359
|
With `default_model_name` and `default_model_source` set in `~/.talkpipe.toml`:
|
|
350
360
|
|
|
@@ -354,7 +364,7 @@ INPUT FROM prompt[data="Hello"]
|
|
|
354
364
|
| print
|
|
355
365
|
```
|
|
356
366
|
|
|
357
|
-
###
|
|
367
|
+
### 4. Environment-only defaults (containers / CI)
|
|
358
368
|
|
|
359
369
|
```bash
|
|
360
370
|
export TALKPIPE_default_model_name=llama3.2
|
|
@@ -385,7 +395,7 @@ ENV TALKPIPE_default_model_name=gpt-4o \
|
|
|
385
395
|
|
|
386
396
|
`OPENAI_API_KEY` is intentionally left to the runtime (a Docker secret, Kubernetes secret, or `--env` flag) rather than baked into the image.
|
|
387
397
|
|
|
388
|
-
###
|
|
398
|
+
### 5. ChatterLang `$key` and CLI overrides
|
|
389
399
|
|
|
390
400
|
```bash
|
|
391
401
|
chatterlang_script --script 'INPUT FROM prompt[data="Hi"] | llmPrompt[model=$default_model_name, source=$default_model_source] | print' \
|
|
@@ -393,7 +403,7 @@ chatterlang_script --script 'INPUT FROM prompt[data="Hi"] | llmPrompt[model=$def
|
|
|
393
403
|
--default_model_source ollama
|
|
394
404
|
```
|
|
395
405
|
|
|
396
|
-
###
|
|
406
|
+
### 6. Pipe API with config fallback
|
|
397
407
|
|
|
398
408
|
```python
|
|
399
409
|
from talkpipe.llm.chat import LLMPrompt
|
|
@@ -409,7 +419,7 @@ segment = LLMPrompt(system_prompt="You are helpful.")
|
|
|
409
419
|
| Symptom | What to check |
|
|
410
420
|
|---------|----------------|
|
|
411
421
|
| `Model name and source must be provided` | Set `model` and `source` on the segment, or add `default_model_name` and `default_model_source` (or embedding equivalents for `llmEmbed`). |
|
|
412
|
-
| `Unknown source` | Chat / vision: use `ollama`, `openai`, or `
|
|
422
|
+
| `Unknown source` | Chat / vision: use `ollama`, `openai`, `anthropic`, or `eliza` (chat only). Embeddings: use `ollama`, `openai`, or `model2vec` (or register additional adapters). |
|
|
413
423
|
| `llmVisionPrompt` errors at the provider with model-not-found / unsupported-input | `llmVisionPrompt` reads `default_model_name` / `default_model_source` (the chat defaults). Set `model` and `source` explicitly on the segment, or change the chat defaults to a vision-capable model. |
|
|
414
424
|
| Ollama connection refused | Run `ollama serve` or set `OLLAMA_SERVER_URL` / `TALKPIPE_OLLAMA_SERVER_URL`. |
|
|
415
425
|
| OpenAI / Anthropic auth errors | Set `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`; these are not read from `TALKPIPE_*` model keys. |
|
|
@@ -81,6 +81,26 @@ pipeline = compiler.compile(script).as_function(single_out=False)
|
|
|
81
81
|
pipeline() # Skips "hello", prints 1, 2, 3, 4
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
## Local Syntax Sandbox (No LLM Backend Needed)
|
|
85
|
+
|
|
86
|
+
If you do not have Ollama/OpenAI/Anthropic access yet, you can still practice
|
|
87
|
+
TalkPipe and ChatterLang syntax with `source="eliza"`.
|
|
88
|
+
|
|
89
|
+
`eliza` is **not** an LLM provider. It is a local deterministic adapter meant for
|
|
90
|
+
testing pipeline shape, parameter wiring, and multi-turn flow.
|
|
91
|
+
|
|
92
|
+
### ChatterLang
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from talkpipe.chatterlang import compiler
|
|
96
|
+
|
|
97
|
+
script = '| llmPrompt[model="Dr. Eliza", source="eliza", multi_turn=True] | print'
|
|
98
|
+
chat = compiler.compile(script).as_function(single_in=True, single_out=True)
|
|
99
|
+
|
|
100
|
+
chat("Hello, my name is Alice.")
|
|
101
|
+
chat("What's my name?")
|
|
102
|
+
```
|
|
103
|
+
|
|
84
104
|
## Your First Pipeline (With LLM)
|
|
85
105
|
|
|
86
106
|
Requires `talkpipe[ollama]` and Ollama running with a model (e.g. `ollama pull llama3.2`).
|
|
@@ -137,11 +157,11 @@ Open http://localhost:2025/stream to chat with the LLM.
|
|
|
137
157
|
For a minimal document Q&A workflow without writing scripts:
|
|
138
158
|
|
|
139
159
|
```bash
|
|
140
|
-
makevectordatabase "docs/*.md" --path ./mydb
|
|
160
|
+
makevectordatabase "docs/*.md" --path ./mydb --embedding_source ollama --embedding_model nomic-embed-text
|
|
141
161
|
serverag --path ./mydb
|
|
142
162
|
```
|
|
143
163
|
|
|
144
|
-
Then open http://localhost:2026/stream. See [makevectordatabase and serverag](guides/makevectordatabase-and-serverag.md) for full options.
|
|
164
|
+
`--embedding_source` and `--embedding_model` are required unless you set defaults in `~/.talkpipe.toml`; the example above needs Ollama running with the embedding model pulled (`ollama pull nomic-embed-text`). Then open http://localhost:2026/stream. See [makevectordatabase and serverag](guides/makevectordatabase-and-serverag.md) for full options.
|
|
145
165
|
|
|
146
166
|
## Next Steps
|
|
147
167
|
|
|
@@ -43,11 +43,11 @@ dependencies = [
|
|
|
43
43
|
'pyyaml',
|
|
44
44
|
'greenlet',
|
|
45
45
|
'networkx',
|
|
46
|
-
|
|
47
46
|
# Security override: starlette is a transitive dependency, pinned here
|
|
48
|
-
# to fix CVE-2025-62727 (DoS vulnerability). Remove once parent
|
|
47
|
+
# to fix CVE-2025-62727 (DoS vulnerability). Remove once parent
|
|
49
48
|
# dependency (e.g., FastAPI) requires starlette>=0.49.1
|
|
50
|
-
"starlette>=0.49.1"
|
|
49
|
+
"starlette>=0.49.1",
|
|
50
|
+
"build>=1.5.0",
|
|
51
51
|
]
|
|
52
52
|
dynamic = ["version"]
|
|
53
53
|
|