feat: add thinking mode support with configurable output formats

This commit is contained in:
Quorinex
2026-02-04 17:42:30 +08:00
parent c9891b60fd
commit 01e9d0577c
9 changed files with 877 additions and 113 deletions

View File

@@ -120,6 +120,9 @@ func CallKiroAPI(account *config.Account, payload *KiroPayload, callback *KiroSt
return err
}
// 预估输入 token约 3 字符 = 1 token
estimatedInputTokens := max(1, len(body)/3)
req, err := http.NewRequest("POST", KiroEndpoint, bytes.NewReader(body))
if err != nil {
return err
@@ -160,13 +163,13 @@ func CallKiroAPI(account *config.Account, payload *KiroPayload, callback *KiroSt
return fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(body))
}
return parseEventStream(resp.Body, callback)
return parseEventStream(resp.Body, callback, estimatedInputTokens)
}
// ==================== Event Stream 解析 ====================
// parseEventStream 解析 AWS Event Stream 二进制格式
func parseEventStream(body io.Reader, callback *KiroStreamCallback) error {
func parseEventStream(body io.Reader, callback *KiroStreamCallback, estimatedInputTokens int) error {
// 不使用 bufio直接读取避免缓冲延迟
var inputTokens, outputTokens int
var totalOutputChars int
@@ -249,6 +252,10 @@ func parseEventStream(body io.Reader, callback *KiroStreamCallback) error {
if outputTokens == 0 && totalOutputChars > 0 {
outputTokens = max(1, totalOutputChars/3)
}
// 如果 Kiro 没返回 inputTokens使用预估值
if inputTokens == 0 {
inputTokens = estimatedInputTokens
}
if callback.OnCredits != nil && totalCredits > 0 {
callback.OnCredits(totalCredits)