feat(composer): replicate WorkBuddy branch label and context usage (TODO 21)
This commit is contained in:
1 parent
cb8a7e6466
commit
bde041c12d
21 files changed
+1350
-12
No files matched your search
@@ -10,7 +10,7 @@
|
||||
* 模型路由、上下文裁剪、工具编排由上层(agent/loop.ts)负责。
|
||||
*/
|
||||
|
||||
import type { GatewayConfig, ToolSpec } from '@shared/types'
|
||||
import type { GatewayConfig, TokenUsage, ToolSpec } from '@shared/types'
|
||||
import { resolveOpenAIEndpoint } from '@shared/openai-endpoint'
|
||||
import { parseSse } from './sse'
|
||||
import { buildResponsesRequest, parseResponsesStream } from './responses'
|
||||
@@ -34,6 +34,7 @@ export type GatewayDelta =
|
||||
| { type: 'text'; text: string }
|
||||
| { type: 'reasoning'; text: string }
|
||||
| { type: 'tool_calls'; calls: WireToolCall[] }
|
||||
| { type: 'usage'; usage: TokenUsage }
|
||||
| { type: 'finish'; reason: string | null }
|
||||
|
||||
export interface GatewayStreamRequest {
|
||||
|
||||
@@ -149,6 +149,22 @@ export async function* parseResponsesStream(stream: ReadableStream<Uint8Array>,
|
||||
const response = object(payload.response)
|
||||
if (response.error || response.status !== 'completed' || !Array.isArray(response.output)) throw error('Responses 上游未返回合法成功终态')
|
||||
for (let i = 0; i < response.output.length; i++) yield* output({ output_index: i }, object(response.output[i]), true)
|
||||
const usage = object(response.usage)
|
||||
const inputTokens = usage.input_tokens
|
||||
const outputTokens = usage.output_tokens
|
||||
const totalTokens = usage.total_tokens
|
||||
if (typeof inputTokens === 'number' && typeof outputTokens === 'number' && typeof totalTokens === 'number') {
|
||||
const cachedTokens = object(usage.input_tokens_details).cached_tokens
|
||||
yield {
|
||||
type: 'usage',
|
||||
usage: {
|
||||
inputTokens,
|
||||
outputTokens,
|
||||
totalTokens,
|
||||
...(typeof cachedTokens === 'number' ? { cachedTokens } : {})
|
||||
}
|
||||
}
|
||||
}
|
||||
completed = true
|
||||
break
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user