Tool Calls Fail with Empty Arguments in OpenAI-Compatible Provider

### Description
Tool calls fail to execute when certain models (particularly Claude models via OpenAI-compatible providers) return empty string `""` for tool arguments instead of valid JSON `"{}"`. This causes the tool call to be detected but never executed, resulting in premature stream termination.

### Expected Behavior
- Tool calls with no parameters should work correctly
- The AI SDK should handle both `"arguments": "{}"` and `"arguments": ""` formats
- Tool execution should proceed normally for parameterless tools

### Actual Behavior
- Tool calls are detected (finishReason shows 'tool-calls')
- No actual tool execution occurs (tool function never called)
- Stream terminates prematurely without calling the tool
- Tool call count remains 0 despite indication of tool usage

### Root Cause
The issue occurs in the stream parsing logic where `isParsableJson("")` returns `false`, causing the tool call to be considered "incomplete" and never triggering the tool execution.

**Location**: `packages/openai-compatible/src/openai-compatible-chat-language-model.ts` around line 600
```typescript
if (isParsableJson(toolCall.function.arguments)) {
  // This condition fails for empty string ""
  controller.enqueue({
    type: 'tool-call',
    // ...
  });
}
```

### Impact
- Affects compatibility with Claude and potentially other models
- Breaks tool calling functionality for parameterless tools
- Silent failure - no error thrown, just premature termination

### Minimal Reproduction Example
```typescript
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { streamText, tool } from 'ai';
import { z } from 'zod';

async function reproduceIssue() {
  const provider = createOpenAICompatible({
    baseURL: 'https://your-provider-url/v1',
    apiKey: 'your-api-key',
    name: 'your-provider',
  });

  const model = provider.chatModel('claude-sonnet-4-0'); // or any model that returns empty arguments

  const result = streamText({
    model,
    prompt: 'List files in my knowledge base',
    toolChoice: 'auto',
    tools: {
      list_files: tool({
        description: 'List all files in the knowledge base',
        parameters: z.object({}), // No parameters required
        execute: async () => {
          console.log('Tool executed!'); // This will never be called
          return { files: ['file1.txt', 'file2.txt'] };
        },
      }),
    },
    maxSteps: 10,
  });

  let toolCallCount = 0;
  for await (const chunk of result.fullStream) {
    if (chunk.type === 'tool-call') {
      toolCallCount++;
      console.log('Tool call detected:', chunk);
    }
  }

  console.log('Tool calls executed:', toolCallCount); // Will be 0
  console.log('Finish reason:', await result.finishReason); // Will be 'tool-calls'
}
```

### Raw Response Analysis 
The problematic response chunk from Claude models:
```json
{
  "choices": [{
    "delta": {
      "tool_calls": [{
        "id": "toolu_xxx",
        "type": "function", 
        "function": {
          "name": "list_files",
          "arguments": ""  // <- Empty string instead of "{}"
        },
        "index": 0
      }]
    }
  }]
}
```

### AI SDK Version

ai: 4.3.1
@ai-sdk/openai-compatible: 0.2.14

Labels: bug, ai/provider, provider/openai-compatible
State: closed