1
1
from __future__ import annotations
2
2
3
+ import sys
3
4
from functools import singledispatch
4
5
5
6
from htmltools import HTML , Tagifiable
@@ -180,25 +181,6 @@ def _(chunk: ChatCompletionChunk) -> ChatMessage:
180
181
181
182
try :
182
183
from anthropic .types import Message as AnthropicMessage
183
- from anthropic .types import (
184
- RawContentBlockDeltaEvent ,
185
- RawContentBlockStartEvent ,
186
- RawContentBlockStopEvent ,
187
- RawMessageDeltaEvent ,
188
- RawMessageStartEvent ,
189
- RawMessageStopEvent ,
190
- )
191
-
192
- # Create a non-annotated type alias for RawMessageStreamEvent
193
- # (so it works with singledispatch)
194
- RawMessageStreamEvent = (
195
- RawMessageStartEvent
196
- | RawMessageDeltaEvent
197
- | RawMessageStopEvent
198
- | RawContentBlockStartEvent
199
- | RawContentBlockDeltaEvent
200
- | RawContentBlockStopEvent
201
- )
202
184
203
185
@get_message_content .register
204
186
def _ (message : AnthropicMessage ) -> ChatMessage :
@@ -210,18 +192,22 @@ def _(message: AnthropicMessage) -> ChatMessage:
210
192
)
211
193
return ChatMessage (content = content .text , role = "assistant" )
212
194
213
- @get_message_chunk_content .register
214
- def _ (chunk : RawMessageStreamEvent ) -> ChatMessage :
215
- content = ""
216
- if chunk .type == "content_block_delta" :
217
- if chunk .delta .type != "text_delta" :
218
- raise ValueError (
219
- f"Anthropic message delta type { chunk .delta .type } not supported. "
220
- "Only 'text_delta' type is supported"
221
- )
222
- content = chunk .delta .text
223
-
224
- return ChatMessage (content = content , role = "assistant" )
195
+ # Old versions of singledispatch doesn't seem to support union types
196
+ if sys .version_info >= (3 , 11 ):
197
+ from anthropic .types import RawMessageStreamEvent
198
+
199
+ @get_message_chunk_content .register
200
+ def _ (chunk : RawMessageStreamEvent ) -> ChatMessage :
201
+ content = ""
202
+ if chunk .type == "content_block_delta" :
203
+ if chunk .delta .type != "text_delta" :
204
+ raise ValueError (
205
+ f"Anthropic message delta type { chunk .delta .type } not supported. "
206
+ "Only 'text_delta' type is supported"
207
+ )
208
+ content = chunk .delta .text
209
+
210
+ return ChatMessage (content = content , role = "assistant" )
225
211
except ImportError :
226
212
pass
227
213
0 commit comments