@@ -35,7 +35,7 @@ public actor ClaudeChatCompletionsService: ChatCompletionsStreamAPI, ChatComplet
3535 var type : String
3636
3737 var errorDescription : String ? {
38- error? . message ?? " Unknown Error "
38+ error? . message ?? error ? . type ?? type
3939 }
4040 }
4141
@@ -265,7 +265,13 @@ public actor ClaudeChatCompletionsService: ChatCompletionsStreamAPI, ChatComplet
265265 StreamDataChunk . self,
266266 from: line. data ( using: . utf8) ?? Data ( )
267267 )
268+ if let error = chunk. error {
269+ throw error
270+ }
268271 return . init( chunk: chunk, done: chunk. type == " message_stop " )
272+ } catch let error as APIError {
273+ Logger . service. error ( error. errorDescription ?? " Unknown Error " )
274+ throw error
269275 } catch {
270276 Logger . service. error ( " Error decoding stream data: \( error) " )
271277 return . init( chunk: nil , done: false )
@@ -413,11 +419,22 @@ extension ClaudeChatCompletionsService.RequestBody {
413419 return . joinMessage
414420 }
415421
422+ /// Claude only supports caching at most 4 messages.
423+ var cacheControlMax = 4
424+
425+ func consumeCacheControl( ) -> Bool {
426+ if cacheControlMax > 0 {
427+ cacheControlMax -= 1
428+ return true
429+ }
430+ return false
431+ }
432+
416433 for message in body. messages {
417434 switch message. role {
418435 case . system:
419436 systemPrompts. append ( . init( text: message. content, cache_control: {
420- if message. cacheIfPossible, supportsPromptCache {
437+ if message. cacheIfPossible, supportsPromptCache, consumeCacheControl ( ) {
421438 return . init( )
422439 } else {
423440 return nil
@@ -433,7 +450,7 @@ extension ClaudeChatCompletionsService.RequestBody {
433450 case . padMessageAndAppendToList, . joinMessage:
434451 nonSystemMessages [ nonSystemMessages. endIndex - 1 ] . content. append (
435452 . init( type: . text, text: message. content, cache_control: {
436- if message. cacheIfPossible, supportsPromptCache {
453+ if message. cacheIfPossible, supportsPromptCache, consumeCacheControl ( ) {
437454 return . init( )
438455 } else {
439456 return nil
@@ -451,7 +468,7 @@ extension ClaudeChatCompletionsService.RequestBody {
451468 case . padMessageAndAppendToList, . joinMessage:
452469 nonSystemMessages [ nonSystemMessages. endIndex - 1 ] . content. append (
453470 . init( type: . text, text: message. content, cache_control: {
454- if message. cacheIfPossible, supportsPromptCache {
471+ if message. cacheIfPossible, supportsPromptCache, consumeCacheControl ( ) {
455472 return . init( )
456473 } else {
457474 return nil
0 commit comments