Compare commits

..

2 Commits

Author SHA1 Message Date
mmc
4748432501 fix: run bootstrap via module to avoid stdlib http shadowing
Switch container startup from file execution to module execution so
urllib can import stdlib http.client reliably.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:57:44 +08:00
mmc
83d69097c9 fix: enable tool forwarding by default and add config regression tests
Switch TOOL_FORWARD_ENABLED default to true in runtime config and .env.example,
and add regression tests covering default-on and explicit false behavior.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:41:41 +08:00
4 changed files with 16 additions and 4 deletions

View File

@@ -46,8 +46,8 @@ DEFAULT_MODEL=org_auto
# 默认模式chat 或 agent
DEFAULT_ASK_MODE=chat
# 请求侧 tools/tool_choice 透传到 Lingma默认关闭,开启后可支持工具写文件等场景
TOOL_FORWARD_ENABLED=false
# 请求侧 tools/tool_choice 透传到 Lingma默认开启,可显式关闭)
TOOL_FORWARD_ENABLED=true
# 可选:允许透传的工具名白名单,逗号分隔;为空表示不额外限制
TOOL_ALLOWLIST=

View File

@@ -28,4 +28,4 @@ port=os.environ.get('PORT','8317'); \
r=urllib.request.urlopen(f'http://127.0.0.1:{port}/healthz', timeout=3); \
sys.exit(0 if json.load(r).get('ok') else 1)" || exit 1
CMD ["sh", "-c", "python /app/app/bootstrap_lingma.py && uvicorn app.main:app --host ${HOST:-0.0.0.0} --port ${PORT:-8317}"]
CMD ["sh", "-c", "python -m app.bootstrap_lingma && uvicorn app.main:app --host ${HOST:-0.0.0.0} --port ${PORT:-8317}"]

View File

@@ -182,6 +182,6 @@ def load_settings() -> Settings:
session_reuse_enabled=_bool_env("SESSION_REUSE_ENABLED", True),
session_cache_max_entries=int(os.getenv("SESSION_CACHE_MAX_ENTRIES", "256")),
session_cache_ttl_sec=float(os.getenv("SESSION_CACHE_TTL_SEC", "1800")),
tool_forward_enabled=_bool_env("TOOL_FORWARD_ENABLED", False),
tool_forward_enabled=_bool_env("TOOL_FORWARD_ENABLED", True),
tool_allowlist=_csv_env(os.getenv("TOOL_ALLOWLIST", "")),
)

View File

@@ -193,6 +193,18 @@ class ConfigParsingTests(unittest.TestCase):
self.assertEqual(settings.tool_allowlist, ["lookup", "write_file", "search_docs"])
def test_load_settings_defaults_tool_forward_enabled_true(self) -> None:
with patch.dict(os.environ, {}, clear=True):
settings = load_settings()
self.assertTrue(settings.tool_forward_enabled)
def test_load_settings_respects_tool_forward_enabled_false(self) -> None:
with patch.dict(os.environ, {"TOOL_FORWARD_ENABLED": "false"}, clear=True):
settings = load_settings()
self.assertFalse(settings.tool_forward_enabled)
def test_load_settings_empty_tool_allowlist(self) -> None:
with patch.dict(os.environ, {"TOOL_ALLOWLIST": " , , "}, clear=True):
settings = load_settings()