refactor: 优化 Claude proxy 代码结构和 header 处理

- 简化 stream 条件判断(去掉冗余的 || reqJson.stream)
- 移除不必要的 else(stream 分支已有 return)
- 删除客户端的 x-api-key header 避免冲突
- 精简 header 处理逻辑

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dreamhunter2333andClaude Sonnet 4.5 committed 2025-12-17 19:04:02 +08:00
1 parent 4d4e78fa41
commit de24d420a4
1 file changed
+5 -14
+5 -14
View File
@@ -24,7 +24,7 @@ type ClaudeMessageResponse = {
type ClaudeStreamEvent = {
type: "message_start" | "content_block_start" | "content_block_delta" |
"content_block_stop" | "message_delta" | "message_stop" | "message_complete" | "ping" | "error";
"content_block_stop" | "message_delta" | "message_stop" | "message_complete" | "ping" | "error";
message?: {
usage: {
input_tokens: number;
@@ -63,16 +63,11 @@ const buildProxyRequest = (
// Remove Authorization header (client may send OpenAI format: "Authorization: Bearer sk-xxx")
targetHeaders.delete("Authorization")
targetHeaders.delete("x-api-key")
// Claude uses x-api-key header instead of Authorization
targetHeaders.set("x-api-key", config.api_key)
// Required API version header
targetHeaders.set("anthropic-version", config.api_version || "2023-06-01")
// Ensure content-type is set
targetHeaders.set("Content-Type", "application/json")
return new Request(targetUrl, {
method: request.method,
headers: targetHeaders,
@@ -261,19 +256,15 @@ export default {
// Map model name
reqJson.model = deploymentName
// Force streaming for usage tracking
// Unlike OpenAI, Claude doesn't need stream_options - usage is always included
if (!stream) {
// Even for non-streaming, we might want to force stream for consistency
// But Claude's non-streaming response already includes usage, so we keep it as-is
}
// Note: Unlike OpenAI, Claude's non-streaming response already includes usage data,
// so we don't need to force stream=true for usage tracking
// Build and send proxy request
const proxyRequest = buildProxyRequest(c.req.raw, reqJson, config)
const response = await fetch(proxyRequest)
// Handle streaming response
if (stream || reqJson.stream) {
if (stream) {
const [streamForClient, streamForServer] = response.body?.tee() || []
// Process stream in background to extract usage