From dbbecea5a9b37dd95c829eb0034da81cf2d0b57f Mon Sep 17 00:00:00 2001 From: anvztor <15998375+anvztor@users.noreply.github.com> Date: Wed, 25 Feb 2026 18:17:51 +0800 Subject: [PATCH 1/3] feat: add responses mode flag --- README.md | 2 ++ env.example | 3 +++ src/bub/config/settings.py | 1 + src/bub/integrations/republic_client.py | 1 + 4 files changed, 7 insertions(+) diff --git a/README.md b/README.md index 67a31ed..da71d8d 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ Minimal `.env`: ```bash BUB_MODEL=openrouter:qwen/qwen3-coder-next OPENROUTER_API_KEY=your_key_here +# Optional: use OpenAI Responses API instead of Chat Completions +# BUB_USE_RESPONSES=true ``` Start interactive CLI: diff --git a/env.example b/env.example index a45b158..552c40b 100644 --- a/env.example +++ b/env.example @@ -28,6 +28,9 @@ LLM_API_KEY=sk-... # Optional custom API base # BUB_API_BASE=https://openrouter.ai/api/v1 +# Use OpenAI Responses API (opt-in; keeps completions as default) +# BUB_USE_RESPONSES=true + # --------------------------------------------------------------------------- # Optional Ollama web tools override # --------------------------------------------------------------------------- diff --git a/src/bub/config/settings.py b/src/bub/config/settings.py index 504b885..a82a0f1 100644 --- a/src/bub/config/settings.py +++ b/src/bub/config/settings.py @@ -24,6 +24,7 @@ class Settings(BaseSettings): model: str = "openrouter:qwen/qwen3-coder-next" api_key: str | None = None api_base: str | None = None + use_responses: bool = False ollama_api_key: str | None = None ollama_api_base: str | None = None llm_api_key: str | None = Field(default=None, validation_alias="LLM_API_KEY") diff --git a/src/bub/integrations/republic_client.py b/src/bub/integrations/republic_client.py index 7d4efc9..1fda733 100644 --- a/src/bub/integrations/republic_client.py +++ b/src/bub/integrations/republic_client.py @@ -30,6 +30,7 @@ def build_llm(settings: Settings, store: FileTapeStore) -> LLM: settings.model, api_key=settings.resolved_api_key, api_base=settings.api_base, + use_responses=settings.use_responses, tape_store=store, context=default_tape_context(), client_args=client_args, From f71eb5779dbceb4e98586bf55ca3bf8a844df29b Mon Sep 17 00:00:00 2001 From: anvztor <15998375+anvztor@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:56:23 +0800 Subject: [PATCH 2/3] docs: document Responses mode usage --- README.md | 2 -- pyproject.toml | 3 +++ uv.lock | 26 +++++++++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index da71d8d..67a31ed 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,6 @@ Minimal `.env`: ```bash BUB_MODEL=openrouter:qwen/qwen3-coder-next OPENROUTER_API_KEY=your_key_here -# Optional: use OpenAI Responses API instead of Chat Completions -# BUB_USE_RESPONSES=true ``` Start interactive CLI: diff --git a/pyproject.toml b/pyproject.toml index 0ac0ce1..d6cd2b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -143,3 +143,6 @@ ignore = [ [tool.ruff.format] preview = true + +[tool.uv.sources] +republic = { path = "../republic", editable = true } diff --git a/uv.lock b/uv.lock index dd63861..4b0ccb6 100644 --- a/uv.lock +++ b/uv.lock @@ -322,7 +322,7 @@ requires-dist = [ { name = "python-telegram-bot", specifier = ">=21.0" }, { name = "pyyaml", specifier = ">=6.0.0" }, { name = "rapidfuzz", specifier = ">=3.14.1" }, - { name = "republic", specifier = ">=0.3.0" }, + { name = "republic", editable = "../republic" }, { name = "requests", specifier = ">=2.32.5" }, { name = "rich", specifier = ">=13.0.0" }, { name = "telegramify-markdown", specifier = ">=0.5.4" }, @@ -1684,14 +1684,30 @@ wheels = [ [[package]] name = "republic" version = "0.4.0" -source = { registry = "https://pypi.org/simple" } +source = { editable = "../republic" } dependencies = [ { name = "any-llm-sdk" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0c/e9/884bf8fe6fb496489f0bd396c968e337d131cfc3d11ea9083b6f61df27e7/republic-0.4.0.tar.gz", hash = "sha256:d5d04063465916614c645f2bdbc8b0a166e82312293762238e493c733b046f18", size = 96613, upload-time = "2026-02-12T09:09:03.96Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/b1/e4b2151c359f70a72240df71125d12e5308f213105afcfa120480973b623/republic-0.4.0-py3-none-any.whl", hash = "sha256:ba0bc8adb31afa6690cc008444565de2aa5bd32427d8cffb28a271b66bd4c1c8", size = 37532, upload-time = "2026-02-12T09:09:05.124Z" }, + +[package.metadata] +requires-dist = [ + { name = "any-llm-sdk", specifier = ">=1.7.0" }, + { name = "pydantic", specifier = ">=2.7.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-terminal", specifier = ">=4.8.0" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.0" }, + { name = "prek", specifier = ">=0.3.2" }, + { name = "pymdown-extensions", specifier = ">=10.12" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-asyncio", specifier = ">=1.3.0" }, + { name = "ruff", specifier = ">=0.14.10" }, + { name = "tox-uv", specifier = ">=1.29.0" }, + { name = "ty", specifier = ">=0.0.8" }, ] [[package]] From f8ef0d5b4b38077b6a17c08e79344383bbc1c880 Mon Sep 17 00:00:00 2001 From: anvztor <15998375+anvztor@users.noreply.github.com> Date: Thu, 26 Feb 2026 13:13:31 +0800 Subject: [PATCH 3/3] chore: drop local republic override --- pyproject.toml | 3 --- uv.lock | 26 +++++--------------------- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d6cd2b6..0ac0ce1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -143,6 +143,3 @@ ignore = [ [tool.ruff.format] preview = true - -[tool.uv.sources] -republic = { path = "../republic", editable = true } diff --git a/uv.lock b/uv.lock index 4b0ccb6..dd63861 100644 --- a/uv.lock +++ b/uv.lock @@ -322,7 +322,7 @@ requires-dist = [ { name = "python-telegram-bot", specifier = ">=21.0" }, { name = "pyyaml", specifier = ">=6.0.0" }, { name = "rapidfuzz", specifier = ">=3.14.1" }, - { name = "republic", editable = "../republic" }, + { name = "republic", specifier = ">=0.3.0" }, { name = "requests", specifier = ">=2.32.5" }, { name = "rich", specifier = ">=13.0.0" }, { name = "telegramify-markdown", specifier = ">=0.5.4" }, @@ -1684,30 +1684,14 @@ wheels = [ [[package]] name = "republic" version = "0.4.0" -source = { editable = "../republic" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "any-llm-sdk" }, { name = "pydantic" }, ] - -[package.metadata] -requires-dist = [ - { name = "any-llm-sdk", specifier = ">=1.7.0" }, - { name = "pydantic", specifier = ">=2.7.0" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-terminal", specifier = ">=4.8.0" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.0" }, - { name = "prek", specifier = ">=0.3.2" }, - { name = "pymdown-extensions", specifier = ">=10.12" }, - { name = "pytest", specifier = ">=9.0.2" }, - { name = "pytest-asyncio", specifier = ">=1.3.0" }, - { name = "ruff", specifier = ">=0.14.10" }, - { name = "tox-uv", specifier = ">=1.29.0" }, - { name = "ty", specifier = ">=0.0.8" }, +sdist = { url = "https://files.pythonhosted.org/packages/0c/e9/884bf8fe6fb496489f0bd396c968e337d131cfc3d11ea9083b6f61df27e7/republic-0.4.0.tar.gz", hash = "sha256:d5d04063465916614c645f2bdbc8b0a166e82312293762238e493c733b046f18", size = 96613, upload-time = "2026-02-12T09:09:03.96Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/b1/e4b2151c359f70a72240df71125d12e5308f213105afcfa120480973b623/republic-0.4.0-py3-none-any.whl", hash = "sha256:ba0bc8adb31afa6690cc008444565de2aa5bd32427d8cffb28a271b66bd4c1c8", size = 37532, upload-time = "2026-02-12T09:09:05.124Z" }, ] [[package]]