ai-protocol-adapters 1.0.0-alpha.3 → 1.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +34 -26
- package/dist/index.d.ts +34 -26
- package/dist/index.js +105 -9
- package/dist/index.mjs +105 -9
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -61,9 +61,17 @@ declare class StreamingProtocolAdapter {
|
|
|
61
61
|
*/
|
|
62
62
|
private processStreamChunk;
|
|
63
63
|
/**
|
|
64
|
-
* 处理工具调用
|
|
64
|
+
* 处理工具调用 - 支持OpenAI流式分块累积
|
|
65
|
+
* OpenAI流式API会将tool_calls分多个chunk发送:
|
|
66
|
+
* - Chunk 1: {index:0, id:"call_xxx", type:"function", function:{name:"web_search"}}
|
|
67
|
+
* - Chunk 2: {index:0, function:{arguments:"{\"query\":\"xxx\"}"}}
|
|
68
|
+
* - Chunk N: 继续累积arguments
|
|
65
69
|
*/
|
|
66
70
|
private processToolCalls;
|
|
71
|
+
/**
|
|
72
|
+
* 在流结束时关闭所有未关闭的工具调用块
|
|
73
|
+
*/
|
|
74
|
+
private closeAllToolCallBlocks;
|
|
67
75
|
/**
|
|
68
76
|
* 添加最终事件 - 支持thinking+content双模式
|
|
69
77
|
*/
|
|
@@ -2646,9 +2654,9 @@ declare const AnthropicImageSourceSchema: z.ZodObject<{
|
|
|
2646
2654
|
declare const AnthropicContentBlockBaseSchema: z.ZodObject<{
|
|
2647
2655
|
type: z.ZodEnum<["text", "image", "tool_use", "tool_result"]>;
|
|
2648
2656
|
}, "strip", z.ZodTypeAny, {
|
|
2649
|
-
type?: "text" | "
|
|
2657
|
+
type?: "text" | "tool_use" | "image" | "tool_result";
|
|
2650
2658
|
}, {
|
|
2651
|
-
type?: "text" | "
|
|
2659
|
+
type?: "text" | "tool_use" | "image" | "tool_result";
|
|
2652
2660
|
}>;
|
|
2653
2661
|
declare const AnthropicTextContentBlockSchema: z.ZodObject<{} & {
|
|
2654
2662
|
type: z.ZodLiteral<"text">;
|
|
@@ -3784,7 +3792,7 @@ declare const AnthropicResponseSchema: z.ZodObject<{
|
|
|
3784
3792
|
cache_read_input_tokens?: number;
|
|
3785
3793
|
};
|
|
3786
3794
|
stop_sequence?: string;
|
|
3787
|
-
stop_reason?: "end_turn" | "
|
|
3795
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
3788
3796
|
}, {
|
|
3789
3797
|
role?: "assistant";
|
|
3790
3798
|
content?: ({
|
|
@@ -3828,7 +3836,7 @@ declare const AnthropicResponseSchema: z.ZodObject<{
|
|
|
3828
3836
|
cache_read_input_tokens?: number;
|
|
3829
3837
|
};
|
|
3830
3838
|
stop_sequence?: string;
|
|
3831
|
-
stop_reason?: "end_turn" | "
|
|
3839
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
3832
3840
|
}>;
|
|
3833
3841
|
declare const AnthropicStreamEventBaseSchema: z.ZodObject<{
|
|
3834
3842
|
type: z.ZodString;
|
|
@@ -4160,7 +4168,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4160
4168
|
cache_read_input_tokens?: number;
|
|
4161
4169
|
};
|
|
4162
4170
|
stop_sequence?: string;
|
|
4163
|
-
stop_reason?: "end_turn" | "
|
|
4171
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4164
4172
|
}, {
|
|
4165
4173
|
role?: "assistant";
|
|
4166
4174
|
content?: ({
|
|
@@ -4204,7 +4212,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4204
4212
|
cache_read_input_tokens?: number;
|
|
4205
4213
|
};
|
|
4206
4214
|
stop_sequence?: string;
|
|
4207
|
-
stop_reason?: "end_turn" | "
|
|
4215
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4208
4216
|
}>;
|
|
4209
4217
|
}, "strip", z.ZodTypeAny, {
|
|
4210
4218
|
message?: {
|
|
@@ -4250,7 +4258,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4250
4258
|
cache_read_input_tokens?: number;
|
|
4251
4259
|
};
|
|
4252
4260
|
stop_sequence?: string;
|
|
4253
|
-
stop_reason?: "end_turn" | "
|
|
4261
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4254
4262
|
};
|
|
4255
4263
|
type?: "message_start";
|
|
4256
4264
|
}, {
|
|
@@ -4297,7 +4305,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4297
4305
|
cache_read_input_tokens?: number;
|
|
4298
4306
|
};
|
|
4299
4307
|
stop_sequence?: string;
|
|
4300
|
-
stop_reason?: "end_turn" | "
|
|
4308
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4301
4309
|
};
|
|
4302
4310
|
type?: "message_start";
|
|
4303
4311
|
}>;
|
|
@@ -4560,10 +4568,10 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4560
4568
|
stop_sequence: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
4561
4569
|
}, "strip", z.ZodTypeAny, {
|
|
4562
4570
|
stop_sequence?: string;
|
|
4563
|
-
stop_reason?: "end_turn" | "
|
|
4571
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4564
4572
|
}, {
|
|
4565
4573
|
stop_sequence?: string;
|
|
4566
|
-
stop_reason?: "end_turn" | "
|
|
4574
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4567
4575
|
}>;
|
|
4568
4576
|
usage: z.ZodObject<{
|
|
4569
4577
|
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
@@ -4585,7 +4593,7 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4585
4593
|
type?: "message_delta";
|
|
4586
4594
|
delta?: {
|
|
4587
4595
|
stop_sequence?: string;
|
|
4588
|
-
stop_reason?: "end_turn" | "
|
|
4596
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4589
4597
|
};
|
|
4590
4598
|
usage?: {
|
|
4591
4599
|
input_tokens?: number;
|
|
@@ -4597,7 +4605,7 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4597
4605
|
type?: "message_delta";
|
|
4598
4606
|
delta?: {
|
|
4599
4607
|
stop_sequence?: string;
|
|
4600
|
-
stop_reason?: "end_turn" | "
|
|
4608
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4601
4609
|
};
|
|
4602
4610
|
usage?: {
|
|
4603
4611
|
input_tokens?: number;
|
|
@@ -4968,7 +4976,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
4968
4976
|
cache_read_input_tokens?: number;
|
|
4969
4977
|
};
|
|
4970
4978
|
stop_sequence?: string;
|
|
4971
|
-
stop_reason?: "end_turn" | "
|
|
4979
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4972
4980
|
}, {
|
|
4973
4981
|
role?: "assistant";
|
|
4974
4982
|
content?: ({
|
|
@@ -5012,7 +5020,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5012
5020
|
cache_read_input_tokens?: number;
|
|
5013
5021
|
};
|
|
5014
5022
|
stop_sequence?: string;
|
|
5015
|
-
stop_reason?: "end_turn" | "
|
|
5023
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5016
5024
|
}>;
|
|
5017
5025
|
}, "strip", z.ZodTypeAny, {
|
|
5018
5026
|
message?: {
|
|
@@ -5058,7 +5066,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5058
5066
|
cache_read_input_tokens?: number;
|
|
5059
5067
|
};
|
|
5060
5068
|
stop_sequence?: string;
|
|
5061
|
-
stop_reason?: "end_turn" | "
|
|
5069
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5062
5070
|
};
|
|
5063
5071
|
type?: "message_start";
|
|
5064
5072
|
}, {
|
|
@@ -5105,7 +5113,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5105
5113
|
cache_read_input_tokens?: number;
|
|
5106
5114
|
};
|
|
5107
5115
|
stop_sequence?: string;
|
|
5108
|
-
stop_reason?: "end_turn" | "
|
|
5116
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5109
5117
|
};
|
|
5110
5118
|
type?: "message_start";
|
|
5111
5119
|
}>, z.ZodObject<{} & {
|
|
@@ -5364,10 +5372,10 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5364
5372
|
stop_sequence: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
5365
5373
|
}, "strip", z.ZodTypeAny, {
|
|
5366
5374
|
stop_sequence?: string;
|
|
5367
|
-
stop_reason?: "end_turn" | "
|
|
5375
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5368
5376
|
}, {
|
|
5369
5377
|
stop_sequence?: string;
|
|
5370
|
-
stop_reason?: "end_turn" | "
|
|
5378
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5371
5379
|
}>;
|
|
5372
5380
|
usage: z.ZodObject<{
|
|
5373
5381
|
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
@@ -5389,7 +5397,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5389
5397
|
type?: "message_delta";
|
|
5390
5398
|
delta?: {
|
|
5391
5399
|
stop_sequence?: string;
|
|
5392
|
-
stop_reason?: "end_turn" | "
|
|
5400
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5393
5401
|
};
|
|
5394
5402
|
usage?: {
|
|
5395
5403
|
input_tokens?: number;
|
|
@@ -5401,7 +5409,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5401
5409
|
type?: "message_delta";
|
|
5402
5410
|
delta?: {
|
|
5403
5411
|
stop_sequence?: string;
|
|
5404
|
-
stop_reason?: "end_turn" | "
|
|
5412
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5405
5413
|
};
|
|
5406
5414
|
usage?: {
|
|
5407
5415
|
input_tokens?: number;
|
|
@@ -5572,7 +5580,7 @@ declare const validateAnthropicResponse: (data: unknown) => {
|
|
|
5572
5580
|
cache_read_input_tokens?: number;
|
|
5573
5581
|
};
|
|
5574
5582
|
stop_sequence?: string;
|
|
5575
|
-
stop_reason?: "end_turn" | "
|
|
5583
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5576
5584
|
};
|
|
5577
5585
|
declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
5578
5586
|
message?: {
|
|
@@ -5618,7 +5626,7 @@ declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
|
5618
5626
|
cache_read_input_tokens?: number;
|
|
5619
5627
|
};
|
|
5620
5628
|
stop_sequence?: string;
|
|
5621
|
-
stop_reason?: "end_turn" | "
|
|
5629
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5622
5630
|
};
|
|
5623
5631
|
type?: "message_start";
|
|
5624
5632
|
} | {
|
|
@@ -5672,7 +5680,7 @@ declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
|
5672
5680
|
type?: "message_delta";
|
|
5673
5681
|
delta?: {
|
|
5674
5682
|
stop_sequence?: string;
|
|
5675
|
-
stop_reason?: "end_turn" | "
|
|
5683
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5676
5684
|
};
|
|
5677
5685
|
usage?: {
|
|
5678
5686
|
input_tokens?: number;
|
|
@@ -6475,7 +6483,7 @@ declare const validateO2AConversion: (openaiData: unknown, convertedData: unknow
|
|
|
6475
6483
|
cache_read_input_tokens?: number;
|
|
6476
6484
|
};
|
|
6477
6485
|
stop_sequence?: string;
|
|
6478
|
-
stop_reason?: "end_turn" | "
|
|
6486
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
6479
6487
|
}>;
|
|
6480
6488
|
declare const validateStreamConversion: (inputChunks: unknown[], outputEvents: unknown[], direction: "openai-to-anthropic" | "anthropic-to-openai", useHealing?: boolean) => ConversionResult<unknown[]>;
|
|
6481
6489
|
|
|
@@ -6736,7 +6744,7 @@ declare const healO2AResponse: (data: unknown, maxAttempts?: number) => Promise<
|
|
|
6736
6744
|
cache_read_input_tokens?: number;
|
|
6737
6745
|
};
|
|
6738
6746
|
stop_sequence?: string;
|
|
6739
|
-
stop_reason?: "end_turn" | "
|
|
6747
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
6740
6748
|
}>>;
|
|
6741
6749
|
|
|
6742
6750
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -61,9 +61,17 @@ declare class StreamingProtocolAdapter {
|
|
|
61
61
|
*/
|
|
62
62
|
private processStreamChunk;
|
|
63
63
|
/**
|
|
64
|
-
* 处理工具调用
|
|
64
|
+
* 处理工具调用 - 支持OpenAI流式分块累积
|
|
65
|
+
* OpenAI流式API会将tool_calls分多个chunk发送:
|
|
66
|
+
* - Chunk 1: {index:0, id:"call_xxx", type:"function", function:{name:"web_search"}}
|
|
67
|
+
* - Chunk 2: {index:0, function:{arguments:"{\"query\":\"xxx\"}"}}
|
|
68
|
+
* - Chunk N: 继续累积arguments
|
|
65
69
|
*/
|
|
66
70
|
private processToolCalls;
|
|
71
|
+
/**
|
|
72
|
+
* 在流结束时关闭所有未关闭的工具调用块
|
|
73
|
+
*/
|
|
74
|
+
private closeAllToolCallBlocks;
|
|
67
75
|
/**
|
|
68
76
|
* 添加最终事件 - 支持thinking+content双模式
|
|
69
77
|
*/
|
|
@@ -2646,9 +2654,9 @@ declare const AnthropicImageSourceSchema: z.ZodObject<{
|
|
|
2646
2654
|
declare const AnthropicContentBlockBaseSchema: z.ZodObject<{
|
|
2647
2655
|
type: z.ZodEnum<["text", "image", "tool_use", "tool_result"]>;
|
|
2648
2656
|
}, "strip", z.ZodTypeAny, {
|
|
2649
|
-
type?: "text" | "
|
|
2657
|
+
type?: "text" | "tool_use" | "image" | "tool_result";
|
|
2650
2658
|
}, {
|
|
2651
|
-
type?: "text" | "
|
|
2659
|
+
type?: "text" | "tool_use" | "image" | "tool_result";
|
|
2652
2660
|
}>;
|
|
2653
2661
|
declare const AnthropicTextContentBlockSchema: z.ZodObject<{} & {
|
|
2654
2662
|
type: z.ZodLiteral<"text">;
|
|
@@ -3784,7 +3792,7 @@ declare const AnthropicResponseSchema: z.ZodObject<{
|
|
|
3784
3792
|
cache_read_input_tokens?: number;
|
|
3785
3793
|
};
|
|
3786
3794
|
stop_sequence?: string;
|
|
3787
|
-
stop_reason?: "end_turn" | "
|
|
3795
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
3788
3796
|
}, {
|
|
3789
3797
|
role?: "assistant";
|
|
3790
3798
|
content?: ({
|
|
@@ -3828,7 +3836,7 @@ declare const AnthropicResponseSchema: z.ZodObject<{
|
|
|
3828
3836
|
cache_read_input_tokens?: number;
|
|
3829
3837
|
};
|
|
3830
3838
|
stop_sequence?: string;
|
|
3831
|
-
stop_reason?: "end_turn" | "
|
|
3839
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
3832
3840
|
}>;
|
|
3833
3841
|
declare const AnthropicStreamEventBaseSchema: z.ZodObject<{
|
|
3834
3842
|
type: z.ZodString;
|
|
@@ -4160,7 +4168,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4160
4168
|
cache_read_input_tokens?: number;
|
|
4161
4169
|
};
|
|
4162
4170
|
stop_sequence?: string;
|
|
4163
|
-
stop_reason?: "end_turn" | "
|
|
4171
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4164
4172
|
}, {
|
|
4165
4173
|
role?: "assistant";
|
|
4166
4174
|
content?: ({
|
|
@@ -4204,7 +4212,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4204
4212
|
cache_read_input_tokens?: number;
|
|
4205
4213
|
};
|
|
4206
4214
|
stop_sequence?: string;
|
|
4207
|
-
stop_reason?: "end_turn" | "
|
|
4215
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4208
4216
|
}>;
|
|
4209
4217
|
}, "strip", z.ZodTypeAny, {
|
|
4210
4218
|
message?: {
|
|
@@ -4250,7 +4258,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4250
4258
|
cache_read_input_tokens?: number;
|
|
4251
4259
|
};
|
|
4252
4260
|
stop_sequence?: string;
|
|
4253
|
-
stop_reason?: "end_turn" | "
|
|
4261
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4254
4262
|
};
|
|
4255
4263
|
type?: "message_start";
|
|
4256
4264
|
}, {
|
|
@@ -4297,7 +4305,7 @@ declare const AnthropicMessageStartEventSchema: z.ZodObject<{} & {
|
|
|
4297
4305
|
cache_read_input_tokens?: number;
|
|
4298
4306
|
};
|
|
4299
4307
|
stop_sequence?: string;
|
|
4300
|
-
stop_reason?: "end_turn" | "
|
|
4308
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4301
4309
|
};
|
|
4302
4310
|
type?: "message_start";
|
|
4303
4311
|
}>;
|
|
@@ -4560,10 +4568,10 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4560
4568
|
stop_sequence: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
4561
4569
|
}, "strip", z.ZodTypeAny, {
|
|
4562
4570
|
stop_sequence?: string;
|
|
4563
|
-
stop_reason?: "end_turn" | "
|
|
4571
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4564
4572
|
}, {
|
|
4565
4573
|
stop_sequence?: string;
|
|
4566
|
-
stop_reason?: "end_turn" | "
|
|
4574
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4567
4575
|
}>;
|
|
4568
4576
|
usage: z.ZodObject<{
|
|
4569
4577
|
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
@@ -4585,7 +4593,7 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4585
4593
|
type?: "message_delta";
|
|
4586
4594
|
delta?: {
|
|
4587
4595
|
stop_sequence?: string;
|
|
4588
|
-
stop_reason?: "end_turn" | "
|
|
4596
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4589
4597
|
};
|
|
4590
4598
|
usage?: {
|
|
4591
4599
|
input_tokens?: number;
|
|
@@ -4597,7 +4605,7 @@ declare const AnthropicMessageDeltaEventSchema: z.ZodObject<{} & {
|
|
|
4597
4605
|
type?: "message_delta";
|
|
4598
4606
|
delta?: {
|
|
4599
4607
|
stop_sequence?: string;
|
|
4600
|
-
stop_reason?: "end_turn" | "
|
|
4608
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4601
4609
|
};
|
|
4602
4610
|
usage?: {
|
|
4603
4611
|
input_tokens?: number;
|
|
@@ -4968,7 +4976,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
4968
4976
|
cache_read_input_tokens?: number;
|
|
4969
4977
|
};
|
|
4970
4978
|
stop_sequence?: string;
|
|
4971
|
-
stop_reason?: "end_turn" | "
|
|
4979
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
4972
4980
|
}, {
|
|
4973
4981
|
role?: "assistant";
|
|
4974
4982
|
content?: ({
|
|
@@ -5012,7 +5020,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5012
5020
|
cache_read_input_tokens?: number;
|
|
5013
5021
|
};
|
|
5014
5022
|
stop_sequence?: string;
|
|
5015
|
-
stop_reason?: "end_turn" | "
|
|
5023
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5016
5024
|
}>;
|
|
5017
5025
|
}, "strip", z.ZodTypeAny, {
|
|
5018
5026
|
message?: {
|
|
@@ -5058,7 +5066,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5058
5066
|
cache_read_input_tokens?: number;
|
|
5059
5067
|
};
|
|
5060
5068
|
stop_sequence?: string;
|
|
5061
|
-
stop_reason?: "end_turn" | "
|
|
5069
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5062
5070
|
};
|
|
5063
5071
|
type?: "message_start";
|
|
5064
5072
|
}, {
|
|
@@ -5105,7 +5113,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5105
5113
|
cache_read_input_tokens?: number;
|
|
5106
5114
|
};
|
|
5107
5115
|
stop_sequence?: string;
|
|
5108
|
-
stop_reason?: "end_turn" | "
|
|
5116
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5109
5117
|
};
|
|
5110
5118
|
type?: "message_start";
|
|
5111
5119
|
}>, z.ZodObject<{} & {
|
|
@@ -5364,10 +5372,10 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5364
5372
|
stop_sequence: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
5365
5373
|
}, "strip", z.ZodTypeAny, {
|
|
5366
5374
|
stop_sequence?: string;
|
|
5367
|
-
stop_reason?: "end_turn" | "
|
|
5375
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5368
5376
|
}, {
|
|
5369
5377
|
stop_sequence?: string;
|
|
5370
|
-
stop_reason?: "end_turn" | "
|
|
5378
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5371
5379
|
}>;
|
|
5372
5380
|
usage: z.ZodObject<{
|
|
5373
5381
|
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
@@ -5389,7 +5397,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5389
5397
|
type?: "message_delta";
|
|
5390
5398
|
delta?: {
|
|
5391
5399
|
stop_sequence?: string;
|
|
5392
|
-
stop_reason?: "end_turn" | "
|
|
5400
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5393
5401
|
};
|
|
5394
5402
|
usage?: {
|
|
5395
5403
|
input_tokens?: number;
|
|
@@ -5401,7 +5409,7 @@ declare const AnthropicStreamEventSchema: z.ZodUnion<[z.ZodObject<{} & {
|
|
|
5401
5409
|
type?: "message_delta";
|
|
5402
5410
|
delta?: {
|
|
5403
5411
|
stop_sequence?: string;
|
|
5404
|
-
stop_reason?: "end_turn" | "
|
|
5412
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5405
5413
|
};
|
|
5406
5414
|
usage?: {
|
|
5407
5415
|
input_tokens?: number;
|
|
@@ -5572,7 +5580,7 @@ declare const validateAnthropicResponse: (data: unknown) => {
|
|
|
5572
5580
|
cache_read_input_tokens?: number;
|
|
5573
5581
|
};
|
|
5574
5582
|
stop_sequence?: string;
|
|
5575
|
-
stop_reason?: "end_turn" | "
|
|
5583
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5576
5584
|
};
|
|
5577
5585
|
declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
5578
5586
|
message?: {
|
|
@@ -5618,7 +5626,7 @@ declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
|
5618
5626
|
cache_read_input_tokens?: number;
|
|
5619
5627
|
};
|
|
5620
5628
|
stop_sequence?: string;
|
|
5621
|
-
stop_reason?: "end_turn" | "
|
|
5629
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5622
5630
|
};
|
|
5623
5631
|
type?: "message_start";
|
|
5624
5632
|
} | {
|
|
@@ -5672,7 +5680,7 @@ declare const validateAnthropicStreamEvent: (data: unknown) => {
|
|
|
5672
5680
|
type?: "message_delta";
|
|
5673
5681
|
delta?: {
|
|
5674
5682
|
stop_sequence?: string;
|
|
5675
|
-
stop_reason?: "end_turn" | "
|
|
5683
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
5676
5684
|
};
|
|
5677
5685
|
usage?: {
|
|
5678
5686
|
input_tokens?: number;
|
|
@@ -6475,7 +6483,7 @@ declare const validateO2AConversion: (openaiData: unknown, convertedData: unknow
|
|
|
6475
6483
|
cache_read_input_tokens?: number;
|
|
6476
6484
|
};
|
|
6477
6485
|
stop_sequence?: string;
|
|
6478
|
-
stop_reason?: "end_turn" | "
|
|
6486
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
6479
6487
|
}>;
|
|
6480
6488
|
declare const validateStreamConversion: (inputChunks: unknown[], outputEvents: unknown[], direction: "openai-to-anthropic" | "anthropic-to-openai", useHealing?: boolean) => ConversionResult<unknown[]>;
|
|
6481
6489
|
|
|
@@ -6736,7 +6744,7 @@ declare const healO2AResponse: (data: unknown, maxAttempts?: number) => Promise<
|
|
|
6736
6744
|
cache_read_input_tokens?: number;
|
|
6737
6745
|
};
|
|
6738
6746
|
stop_sequence?: string;
|
|
6739
|
-
stop_reason?: "end_turn" | "
|
|
6747
|
+
stop_reason?: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
|
|
6740
6748
|
}>>;
|
|
6741
6749
|
|
|
6742
6750
|
/**
|
package/dist/index.js
CHANGED
|
@@ -626,6 +626,14 @@ var StreamingProtocolAdapter = class {
|
|
|
626
626
|
*/
|
|
627
627
|
processStreamChunk(chunk, state, sseLines) {
|
|
628
628
|
const choice = chunk.choices?.[0];
|
|
629
|
+
if (choice) {
|
|
630
|
+
const hasToolCalls = choice.delta?.tool_calls;
|
|
631
|
+
const hasFinishReason = choice.finish_reason;
|
|
632
|
+
const isNonText = !choice.delta?.content;
|
|
633
|
+
if (hasToolCalls || hasFinishReason || isNonText && choice.delta) {
|
|
634
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [StreamingProtocolAdapter] CHUNK:", JSON.stringify(chunk, null, 2));
|
|
635
|
+
}
|
|
636
|
+
}
|
|
629
637
|
if (!choice) return;
|
|
630
638
|
const delta = choice.delta;
|
|
631
639
|
if (delta.reasoning_content) {
|
|
@@ -683,22 +691,82 @@ var StreamingProtocolAdapter = class {
|
|
|
683
691
|
}
|
|
684
692
|
}
|
|
685
693
|
/**
|
|
686
|
-
* 处理工具调用
|
|
694
|
+
* 处理工具调用 - 支持OpenAI流式分块累积
|
|
695
|
+
* OpenAI流式API会将tool_calls分多个chunk发送:
|
|
696
|
+
* - Chunk 1: {index:0, id:"call_xxx", type:"function", function:{name:"web_search"}}
|
|
697
|
+
* - Chunk 2: {index:0, function:{arguments:"{\"query\":\"xxx\"}"}}
|
|
698
|
+
* - Chunk N: 继续累积arguments
|
|
687
699
|
*/
|
|
688
700
|
processToolCalls(toolCalls, state, sseLines) {
|
|
701
|
+
console.log("\u{1F50D} [StreamingProtocolAdapter] processToolCalls called:", JSON.stringify(toolCalls, null, 2));
|
|
689
702
|
for (const toolCall of toolCalls) {
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
703
|
+
const index = toolCall.index ?? 0;
|
|
704
|
+
const toolId = toolCall.id;
|
|
705
|
+
const toolName = toolCall.function?.name;
|
|
706
|
+
const toolArgs = toolCall.function?.arguments;
|
|
707
|
+
console.log(`\u{1F50D} [StreamingProtocolAdapter] Processing chunk for index ${index}:`, {
|
|
708
|
+
hasId: !!toolId,
|
|
709
|
+
hasName: !!toolName,
|
|
710
|
+
hasArgs: !!toolArgs,
|
|
711
|
+
argsLength: toolArgs?.length
|
|
712
|
+
});
|
|
713
|
+
const stateKey = `tool_${index}`;
|
|
714
|
+
let toolData = state.toolCallsMap.get(stateKey);
|
|
715
|
+
if (!toolData) {
|
|
716
|
+
toolData = {
|
|
717
|
+
id: toolId || "",
|
|
718
|
+
name: toolName || "",
|
|
719
|
+
input: "",
|
|
720
|
+
blockStartSent: false,
|
|
721
|
+
blockStopSent: false
|
|
695
722
|
};
|
|
696
|
-
state.toolCallsMap.set(
|
|
723
|
+
state.toolCallsMap.set(stateKey, toolData);
|
|
724
|
+
} else {
|
|
725
|
+
if (toolId) toolData.id = toolId;
|
|
726
|
+
if (toolName) toolData.name = toolName;
|
|
727
|
+
}
|
|
728
|
+
if (toolArgs) {
|
|
729
|
+
toolData.input += toolArgs;
|
|
730
|
+
console.log(`\u{1F50D} [StreamingProtocolAdapter] Accumulated arguments for index ${index}:`, {
|
|
731
|
+
currentLength: toolData.input.length,
|
|
732
|
+
totalArgs: toolData.input
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
if (toolData.id && toolData.name && !toolData.blockStartSent) {
|
|
736
|
+
const blockIndex = state.completedToolCalls.length + 1;
|
|
737
|
+
toolData.blockIndex = blockIndex;
|
|
697
738
|
sseLines.push(
|
|
698
739
|
"event: content_block_start",
|
|
699
|
-
`data: {"type":"content_block_start","index":${
|
|
740
|
+
`data: {"type":"content_block_start","index":${blockIndex},"content_block":{"type":"tool_use","id":"${toolData.id}","name":"${toolData.name}","input":{}}}`,
|
|
700
741
|
""
|
|
701
742
|
);
|
|
743
|
+
toolData.blockStartSent = true;
|
|
744
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent content_block_start for ${toolData.name} at index ${blockIndex}`);
|
|
745
|
+
}
|
|
746
|
+
if (toolArgs && toolData.blockStartSent && toolData.blockIndex !== void 0) {
|
|
747
|
+
sseLines.push(
|
|
748
|
+
"event: content_block_delta",
|
|
749
|
+
`data: {"type":"content_block_delta","index":${toolData.blockIndex},"delta":{"type":"input_json_delta","partial_json":${JSON.stringify(toolArgs)}}}`,
|
|
750
|
+
""
|
|
751
|
+
);
|
|
752
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent input_json_delta for index ${toolData.blockIndex}`);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* 在流结束时关闭所有未关闭的工具调用块
|
|
758
|
+
*/
|
|
759
|
+
closeAllToolCallBlocks(state, sseLines) {
|
|
760
|
+
for (const [key, toolData] of state.toolCallsMap.entries()) {
|
|
761
|
+
if (toolData.blockStartSent && !toolData.blockStopSent && toolData.blockIndex !== void 0) {
|
|
762
|
+
sseLines.push(
|
|
763
|
+
"event: content_block_stop",
|
|
764
|
+
`data: {"type":"content_block_stop","index":${toolData.blockIndex}}`,
|
|
765
|
+
""
|
|
766
|
+
);
|
|
767
|
+
toolData.blockStopSent = true;
|
|
768
|
+
state.completedToolCalls.push(toolData.id);
|
|
769
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent content_block_stop for ${toolData.name} at index ${toolData.blockIndex}`);
|
|
702
770
|
}
|
|
703
771
|
}
|
|
704
772
|
}
|
|
@@ -706,6 +774,7 @@ var StreamingProtocolAdapter = class {
|
|
|
706
774
|
* 添加最终事件 - 支持thinking+content双模式
|
|
707
775
|
*/
|
|
708
776
|
addFinalEvents(state, sseLines) {
|
|
777
|
+
this.closeAllToolCallBlocks(state, sseLines);
|
|
709
778
|
if (state.contentBlockStarted) {
|
|
710
779
|
const blockIndex = state.thinkingBlockStarted ? 1 : 0;
|
|
711
780
|
sseLines.push(
|
|
@@ -723,9 +792,10 @@ var StreamingProtocolAdapter = class {
|
|
|
723
792
|
""
|
|
724
793
|
);
|
|
725
794
|
}
|
|
795
|
+
const stopReason = state.completedToolCalls.length > 0 ? "tool_use" : "end_turn";
|
|
726
796
|
sseLines.push(
|
|
727
797
|
"event: message_delta",
|
|
728
|
-
`data: {"type":"message_delta","delta":{"stop_reason":"
|
|
798
|
+
`data: {"type":"message_delta","delta":{"stop_reason":"${stopReason}","stop_sequence":null},"usage":{"output_tokens":${state.usage.output_tokens}}}`,
|
|
729
799
|
"",
|
|
730
800
|
"event: message_stop",
|
|
731
801
|
'data: {"type":"message_stop"}',
|
|
@@ -4258,15 +4328,28 @@ var ToolCallProcessor = class _ToolCallProcessor {
|
|
|
4258
4328
|
* 处理增量工具调用
|
|
4259
4329
|
*/
|
|
4260
4330
|
static processIncrementalToolCalls(toolCalls, state, sseLines) {
|
|
4331
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [ToolProcessor] processIncrementalToolCalls called with:", JSON.stringify(toolCalls, null, 2));
|
|
4261
4332
|
for (const toolCall of toolCalls) {
|
|
4262
4333
|
const toolId = toolCall.id;
|
|
4263
4334
|
const toolName = toolCall.function?.name;
|
|
4264
4335
|
const toolArgs = toolCall.function?.arguments;
|
|
4336
|
+
console.log("\u{1F50D} [ToolProcessor] Processing tool call:", {
|
|
4337
|
+
toolId,
|
|
4338
|
+
toolName,
|
|
4339
|
+
toolArgs: toolArgs || "UNDEFINED",
|
|
4340
|
+
toolArgsType: typeof toolArgs,
|
|
4341
|
+
toolArgsLength: toolArgs?.length || 0,
|
|
4342
|
+
hasArgs: !!toolArgs
|
|
4343
|
+
});
|
|
4265
4344
|
if (toolName && toolId && !state.toolCallsMap.has(toolId)) {
|
|
4345
|
+
console.log("\u2705 [ToolProcessor] Starting new tool call:", toolName);
|
|
4266
4346
|
_ToolCallProcessor.processToolCallStart(toolId, toolName, state, sseLines);
|
|
4267
4347
|
}
|
|
4268
4348
|
if (toolArgs) {
|
|
4349
|
+
console.log("\u2705 [ToolProcessor] Processing tool args, calling processToolArgs");
|
|
4269
4350
|
_ToolCallProcessor.processToolArgs(toolId, toolArgs, state, sseLines);
|
|
4351
|
+
} else {
|
|
4352
|
+
console.warn("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F [ToolProcessor] No tool args to process! This will result in empty input!");
|
|
4270
4353
|
}
|
|
4271
4354
|
}
|
|
4272
4355
|
}
|
|
@@ -4274,15 +4357,28 @@ var ToolCallProcessor = class _ToolCallProcessor {
|
|
|
4274
4357
|
* 处理工具调用
|
|
4275
4358
|
*/
|
|
4276
4359
|
static processBatchToolCalls(toolCalls, state, sseLines) {
|
|
4360
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [ToolProcessor] processBatchToolCalls called with:", JSON.stringify(toolCalls, null, 2));
|
|
4277
4361
|
for (const toolCall of toolCalls) {
|
|
4278
4362
|
const toolId = toolCall.id;
|
|
4279
4363
|
const toolName = toolCall.function?.name;
|
|
4280
4364
|
const toolArgs = toolCall.function?.arguments;
|
|
4365
|
+
console.log("\u{1F50D} [ToolProcessor] Processing batch tool call:", {
|
|
4366
|
+
toolId,
|
|
4367
|
+
toolName,
|
|
4368
|
+
toolArgs: toolArgs || "UNDEFINED",
|
|
4369
|
+
toolArgsType: typeof toolArgs,
|
|
4370
|
+
toolArgsLength: toolArgs?.length || 0,
|
|
4371
|
+
hasArgs: !!toolArgs
|
|
4372
|
+
});
|
|
4281
4373
|
if (toolName && toolId && !state.toolCallsMap.has(toolId)) {
|
|
4374
|
+
console.log("\u2705 [ToolProcessor] Starting new batch tool call:", toolName);
|
|
4282
4375
|
_ToolCallProcessor.processToolCallStart(toolId, toolName, state, sseLines);
|
|
4283
4376
|
}
|
|
4284
4377
|
if (toolArgs) {
|
|
4378
|
+
console.log("\u2705 [ToolProcessor] Processing batch tool args, calling processToolArgs");
|
|
4285
4379
|
_ToolCallProcessor.processToolArgs(toolId, toolArgs, state, sseLines);
|
|
4380
|
+
} else {
|
|
4381
|
+
console.warn("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F [ToolProcessor] No batch tool args to process! This will result in empty input!");
|
|
4286
4382
|
}
|
|
4287
4383
|
}
|
|
4288
4384
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -519,6 +519,14 @@ var StreamingProtocolAdapter = class {
|
|
|
519
519
|
*/
|
|
520
520
|
processStreamChunk(chunk, state, sseLines) {
|
|
521
521
|
const choice = chunk.choices?.[0];
|
|
522
|
+
if (choice) {
|
|
523
|
+
const hasToolCalls = choice.delta?.tool_calls;
|
|
524
|
+
const hasFinishReason = choice.finish_reason;
|
|
525
|
+
const isNonText = !choice.delta?.content;
|
|
526
|
+
if (hasToolCalls || hasFinishReason || isNonText && choice.delta) {
|
|
527
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [StreamingProtocolAdapter] CHUNK:", JSON.stringify(chunk, null, 2));
|
|
528
|
+
}
|
|
529
|
+
}
|
|
522
530
|
if (!choice) return;
|
|
523
531
|
const delta = choice.delta;
|
|
524
532
|
if (delta.reasoning_content) {
|
|
@@ -576,22 +584,82 @@ var StreamingProtocolAdapter = class {
|
|
|
576
584
|
}
|
|
577
585
|
}
|
|
578
586
|
/**
|
|
579
|
-
* 处理工具调用
|
|
587
|
+
* 处理工具调用 - 支持OpenAI流式分块累积
|
|
588
|
+
* OpenAI流式API会将tool_calls分多个chunk发送:
|
|
589
|
+
* - Chunk 1: {index:0, id:"call_xxx", type:"function", function:{name:"web_search"}}
|
|
590
|
+
* - Chunk 2: {index:0, function:{arguments:"{\"query\":\"xxx\"}"}}
|
|
591
|
+
* - Chunk N: 继续累积arguments
|
|
580
592
|
*/
|
|
581
593
|
processToolCalls(toolCalls, state, sseLines) {
|
|
594
|
+
console.log("\u{1F50D} [StreamingProtocolAdapter] processToolCalls called:", JSON.stringify(toolCalls, null, 2));
|
|
582
595
|
for (const toolCall of toolCalls) {
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
596
|
+
const index = toolCall.index ?? 0;
|
|
597
|
+
const toolId = toolCall.id;
|
|
598
|
+
const toolName = toolCall.function?.name;
|
|
599
|
+
const toolArgs = toolCall.function?.arguments;
|
|
600
|
+
console.log(`\u{1F50D} [StreamingProtocolAdapter] Processing chunk for index ${index}:`, {
|
|
601
|
+
hasId: !!toolId,
|
|
602
|
+
hasName: !!toolName,
|
|
603
|
+
hasArgs: !!toolArgs,
|
|
604
|
+
argsLength: toolArgs?.length
|
|
605
|
+
});
|
|
606
|
+
const stateKey = `tool_${index}`;
|
|
607
|
+
let toolData = state.toolCallsMap.get(stateKey);
|
|
608
|
+
if (!toolData) {
|
|
609
|
+
toolData = {
|
|
610
|
+
id: toolId || "",
|
|
611
|
+
name: toolName || "",
|
|
612
|
+
input: "",
|
|
613
|
+
blockStartSent: false,
|
|
614
|
+
blockStopSent: false
|
|
588
615
|
};
|
|
589
|
-
state.toolCallsMap.set(
|
|
616
|
+
state.toolCallsMap.set(stateKey, toolData);
|
|
617
|
+
} else {
|
|
618
|
+
if (toolId) toolData.id = toolId;
|
|
619
|
+
if (toolName) toolData.name = toolName;
|
|
620
|
+
}
|
|
621
|
+
if (toolArgs) {
|
|
622
|
+
toolData.input += toolArgs;
|
|
623
|
+
console.log(`\u{1F50D} [StreamingProtocolAdapter] Accumulated arguments for index ${index}:`, {
|
|
624
|
+
currentLength: toolData.input.length,
|
|
625
|
+
totalArgs: toolData.input
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
if (toolData.id && toolData.name && !toolData.blockStartSent) {
|
|
629
|
+
const blockIndex = state.completedToolCalls.length + 1;
|
|
630
|
+
toolData.blockIndex = blockIndex;
|
|
590
631
|
sseLines.push(
|
|
591
632
|
"event: content_block_start",
|
|
592
|
-
`data: {"type":"content_block_start","index":${
|
|
633
|
+
`data: {"type":"content_block_start","index":${blockIndex},"content_block":{"type":"tool_use","id":"${toolData.id}","name":"${toolData.name}","input":{}}}`,
|
|
593
634
|
""
|
|
594
635
|
);
|
|
636
|
+
toolData.blockStartSent = true;
|
|
637
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent content_block_start for ${toolData.name} at index ${blockIndex}`);
|
|
638
|
+
}
|
|
639
|
+
if (toolArgs && toolData.blockStartSent && toolData.blockIndex !== void 0) {
|
|
640
|
+
sseLines.push(
|
|
641
|
+
"event: content_block_delta",
|
|
642
|
+
`data: {"type":"content_block_delta","index":${toolData.blockIndex},"delta":{"type":"input_json_delta","partial_json":${JSON.stringify(toolArgs)}}}`,
|
|
643
|
+
""
|
|
644
|
+
);
|
|
645
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent input_json_delta for index ${toolData.blockIndex}`);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* 在流结束时关闭所有未关闭的工具调用块
|
|
651
|
+
*/
|
|
652
|
+
closeAllToolCallBlocks(state, sseLines) {
|
|
653
|
+
for (const [key, toolData] of state.toolCallsMap.entries()) {
|
|
654
|
+
if (toolData.blockStartSent && !toolData.blockStopSent && toolData.blockIndex !== void 0) {
|
|
655
|
+
sseLines.push(
|
|
656
|
+
"event: content_block_stop",
|
|
657
|
+
`data: {"type":"content_block_stop","index":${toolData.blockIndex}}`,
|
|
658
|
+
""
|
|
659
|
+
);
|
|
660
|
+
toolData.blockStopSent = true;
|
|
661
|
+
state.completedToolCalls.push(toolData.id);
|
|
662
|
+
console.log(`\u2705 [StreamingProtocolAdapter] Sent content_block_stop for ${toolData.name} at index ${toolData.blockIndex}`);
|
|
595
663
|
}
|
|
596
664
|
}
|
|
597
665
|
}
|
|
@@ -599,6 +667,7 @@ var StreamingProtocolAdapter = class {
|
|
|
599
667
|
* 添加最终事件 - 支持thinking+content双模式
|
|
600
668
|
*/
|
|
601
669
|
addFinalEvents(state, sseLines) {
|
|
670
|
+
this.closeAllToolCallBlocks(state, sseLines);
|
|
602
671
|
if (state.contentBlockStarted) {
|
|
603
672
|
const blockIndex = state.thinkingBlockStarted ? 1 : 0;
|
|
604
673
|
sseLines.push(
|
|
@@ -616,9 +685,10 @@ var StreamingProtocolAdapter = class {
|
|
|
616
685
|
""
|
|
617
686
|
);
|
|
618
687
|
}
|
|
688
|
+
const stopReason = state.completedToolCalls.length > 0 ? "tool_use" : "end_turn";
|
|
619
689
|
sseLines.push(
|
|
620
690
|
"event: message_delta",
|
|
621
|
-
`data: {"type":"message_delta","delta":{"stop_reason":"
|
|
691
|
+
`data: {"type":"message_delta","delta":{"stop_reason":"${stopReason}","stop_sequence":null},"usage":{"output_tokens":${state.usage.output_tokens}}}`,
|
|
622
692
|
"",
|
|
623
693
|
"event: message_stop",
|
|
624
694
|
'data: {"type":"message_stop"}',
|
|
@@ -4151,15 +4221,28 @@ var ToolCallProcessor = class _ToolCallProcessor {
|
|
|
4151
4221
|
* 处理增量工具调用
|
|
4152
4222
|
*/
|
|
4153
4223
|
static processIncrementalToolCalls(toolCalls, state, sseLines) {
|
|
4224
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [ToolProcessor] processIncrementalToolCalls called with:", JSON.stringify(toolCalls, null, 2));
|
|
4154
4225
|
for (const toolCall of toolCalls) {
|
|
4155
4226
|
const toolId = toolCall.id;
|
|
4156
4227
|
const toolName = toolCall.function?.name;
|
|
4157
4228
|
const toolArgs = toolCall.function?.arguments;
|
|
4229
|
+
console.log("\u{1F50D} [ToolProcessor] Processing tool call:", {
|
|
4230
|
+
toolId,
|
|
4231
|
+
toolName,
|
|
4232
|
+
toolArgs: toolArgs || "UNDEFINED",
|
|
4233
|
+
toolArgsType: typeof toolArgs,
|
|
4234
|
+
toolArgsLength: toolArgs?.length || 0,
|
|
4235
|
+
hasArgs: !!toolArgs
|
|
4236
|
+
});
|
|
4158
4237
|
if (toolName && toolId && !state.toolCallsMap.has(toolId)) {
|
|
4238
|
+
console.log("\u2705 [ToolProcessor] Starting new tool call:", toolName);
|
|
4159
4239
|
_ToolCallProcessor.processToolCallStart(toolId, toolName, state, sseLines);
|
|
4160
4240
|
}
|
|
4161
4241
|
if (toolArgs) {
|
|
4242
|
+
console.log("\u2705 [ToolProcessor] Processing tool args, calling processToolArgs");
|
|
4162
4243
|
_ToolCallProcessor.processToolArgs(toolId, toolArgs, state, sseLines);
|
|
4244
|
+
} else {
|
|
4245
|
+
console.warn("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F [ToolProcessor] No tool args to process! This will result in empty input!");
|
|
4163
4246
|
}
|
|
4164
4247
|
}
|
|
4165
4248
|
}
|
|
@@ -4167,15 +4250,28 @@ var ToolCallProcessor = class _ToolCallProcessor {
|
|
|
4167
4250
|
* 处理工具调用
|
|
4168
4251
|
*/
|
|
4169
4252
|
static processBatchToolCalls(toolCalls, state, sseLines) {
|
|
4253
|
+
console.log("\u{1F50D}\u{1F50D}\u{1F50D} [ToolProcessor] processBatchToolCalls called with:", JSON.stringify(toolCalls, null, 2));
|
|
4170
4254
|
for (const toolCall of toolCalls) {
|
|
4171
4255
|
const toolId = toolCall.id;
|
|
4172
4256
|
const toolName = toolCall.function?.name;
|
|
4173
4257
|
const toolArgs = toolCall.function?.arguments;
|
|
4258
|
+
console.log("\u{1F50D} [ToolProcessor] Processing batch tool call:", {
|
|
4259
|
+
toolId,
|
|
4260
|
+
toolName,
|
|
4261
|
+
toolArgs: toolArgs || "UNDEFINED",
|
|
4262
|
+
toolArgsType: typeof toolArgs,
|
|
4263
|
+
toolArgsLength: toolArgs?.length || 0,
|
|
4264
|
+
hasArgs: !!toolArgs
|
|
4265
|
+
});
|
|
4174
4266
|
if (toolName && toolId && !state.toolCallsMap.has(toolId)) {
|
|
4267
|
+
console.log("\u2705 [ToolProcessor] Starting new batch tool call:", toolName);
|
|
4175
4268
|
_ToolCallProcessor.processToolCallStart(toolId, toolName, state, sseLines);
|
|
4176
4269
|
}
|
|
4177
4270
|
if (toolArgs) {
|
|
4271
|
+
console.log("\u2705 [ToolProcessor] Processing batch tool args, calling processToolArgs");
|
|
4178
4272
|
_ToolCallProcessor.processToolArgs(toolId, toolArgs, state, sseLines);
|
|
4273
|
+
} else {
|
|
4274
|
+
console.warn("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F [ToolProcessor] No batch tool args to process! This will result in empty input!");
|
|
4179
4275
|
}
|
|
4180
4276
|
}
|
|
4181
4277
|
}
|
package/package.json
CHANGED