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:
1 parent
4d4e78fa41
commit
de24d420a4
1 file changed
+5
-14
@@ -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
|
||||
|
||||
Reference in new issue
Block a user