Files
wehub-resource-sync 5296d0e97c
CI / Ban suppressions and legacy annotations (push) Has been cancelled
CI / pytest (push) Has been cancelled
CI / ruff-check (push) Has been cancelled
CI / ruff-format (push) Has been cancelled
CI / ty (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:44 +08:00

68 lines
1.9 KiB
Python

import json
from unittest.mock import MagicMock
import pytest
from free_claude_code.config.nim import NimSettings
from free_claude_code.config.provider_catalog import NVIDIA_NIM_DEFAULT_BASE
from free_claude_code.core.anthropic import StreamBlockLedger
from free_claude_code.providers.base import ProviderConfig
from free_claude_code.providers.nvidia_nim import NvidiaNimProvider
from free_claude_code.providers.openai_chat.tool_calls import (
OpenAIToolCallAssembler,
)
from tests.providers.support import passthrough_rate_limiter
@pytest.mark.asyncio
async def test_task_tool_interception():
# Setup provider
config = ProviderConfig(api_key="test", base_url=NVIDIA_NIM_DEFAULT_BASE)
provider = NvidiaNimProvider(
config,
nim_settings=NimSettings(),
rate_limiter=passthrough_rate_limiter(),
)
# Mock request and stream ledger with real StreamBlockLedger
request = MagicMock()
request.model = "test-model"
sse = MagicMock()
sse.blocks = StreamBlockLedger()
# Tool call data (Task tool)
tc = {
"index": 0,
"id": "tool_123",
"function": {
"name": "Task",
"arguments": json.dumps(
{
"description": "test task",
"prompt": "do something",
"run_in_background": True,
}
),
},
}
tool_calls = OpenAIToolCallAssembler(
record_extra_content=provider._record_tool_call_extra_content
)
# Call the assembler (consume generator to trigger side effects)
list(tool_calls.process_tool_call(tc, sse))
# Find the emit_tool_delta call and check args
calls = sse.emit_tool_delta.call_args_list
assert len(calls) > 0
args_passed = json.loads(calls[0][0][1])
assert args_passed["run_in_background"] is False
if __name__ == "__main__":
import asyncio
asyncio.run(test_task_tool_interception())