mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
fix: correct Bedrock SSE stream event format to match Claude API spec
- message_start: nest fields inside 'message' object with type: 'message' - content_block_delta: add type field to data - message_delta: add type field to data - message_stop: remove usage field, just return type - Extract usage from message_delta instead of message_stop
This commit is contained in:
@@ -343,8 +343,8 @@ class BedrockRelayService {
|
|||||||
res.write(`event: ${claudeEvent.type}\n`)
|
res.write(`event: ${claudeEvent.type}\n`)
|
||||||
res.write(`data: ${JSON.stringify(claudeEvent.data)}\n\n`)
|
res.write(`data: ${JSON.stringify(claudeEvent.data)}\n\n`)
|
||||||
|
|
||||||
// 提取使用统计
|
// 提取使用统计 (usage is reported in message_delta per Claude API spec)
|
||||||
if (claudeEvent.type === 'message_stop' && claudeEvent.data.usage) {
|
if (claudeEvent.type === 'message_delta' && claudeEvent.data.usage) {
|
||||||
totalUsage = claudeEvent.data.usage
|
totalUsage = claudeEvent.data.usage
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,14 +576,17 @@ class BedrockRelayService {
|
|||||||
return {
|
return {
|
||||||
type: 'message_start',
|
type: 'message_start',
|
||||||
data: {
|
data: {
|
||||||
type: 'message',
|
type: 'message_start',
|
||||||
id: `msg_${Date.now()}_bedrock`,
|
message: {
|
||||||
role: 'assistant',
|
id: `msg_${Date.now()}_bedrock`,
|
||||||
content: [],
|
type: 'message',
|
||||||
model: this.defaultModel,
|
role: 'assistant',
|
||||||
stop_reason: null,
|
content: [],
|
||||||
stop_sequence: null,
|
model: this.defaultModel,
|
||||||
usage: bedrockChunk.message?.usage || { input_tokens: 0, output_tokens: 0 }
|
stop_reason: null,
|
||||||
|
stop_sequence: null,
|
||||||
|
usage: bedrockChunk.message?.usage || { input_tokens: 0, output_tokens: 0 }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -603,6 +606,7 @@ class BedrockRelayService {
|
|||||||
return {
|
return {
|
||||||
type: 'content_block_delta',
|
type: 'content_block_delta',
|
||||||
data: {
|
data: {
|
||||||
|
type: 'content_block_delta',
|
||||||
index: bedrockChunk.index || 0,
|
index: bedrockChunk.index || 0,
|
||||||
delta: bedrockChunk.delta || {}
|
delta: bedrockChunk.delta || {}
|
||||||
}
|
}
|
||||||
@@ -623,6 +627,7 @@ class BedrockRelayService {
|
|||||||
return {
|
return {
|
||||||
type: 'message_delta',
|
type: 'message_delta',
|
||||||
data: {
|
data: {
|
||||||
|
type: 'message_delta',
|
||||||
delta: bedrockChunk.delta || {},
|
delta: bedrockChunk.delta || {},
|
||||||
usage: bedrockChunk.usage || {}
|
usage: bedrockChunk.usage || {}
|
||||||
}
|
}
|
||||||
@@ -633,7 +638,7 @@ class BedrockRelayService {
|
|||||||
return {
|
return {
|
||||||
type: 'message_stop',
|
type: 'message_stop',
|
||||||
data: {
|
data: {
|
||||||
usage: bedrockChunk.usage || {}
|
type: 'message_stop'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user