@@ -701,47 +701,45 @@ async def openai_compatible_generator():
701
701
async def chat_completion (request : ChatCompletionRequest ):
702
702
# Convert to LMC
703
703
704
- user_messages = []
705
- for message in reversed (request .messages ):
706
- if message .role == "user" :
707
- user_messages .append (message )
708
- else :
709
- break
710
- user_messages .reverse ()
711
-
712
- for message in user_messages :
713
- if type (message .content ) == str :
714
- async_interpreter .messages .append (
715
- {"role" : "user" , "type" : "message" , "content" : message .content }
716
- )
717
- if type (message .content ) == list :
718
- for content in message .content :
719
- if content ["type" ] == "text" :
720
- async_interpreter .messages .append (
721
- {"role" : "user" , "type" : "message" , "content" : content }
704
+ last_message = request .messages [- 1 ]
705
+
706
+ if last_message .role != "user" :
707
+ raise ValueError ("Last message must be from the user." )
708
+
709
+ if last_message .content == "{STOP}" :
710
+ # Handle special STOP token
711
+ return
712
+
713
+ if type (last_message .content ) == str :
714
+ async_interpreter .messages .append (last_message )
715
+ if type (last_message .content ) == list :
716
+ for content in last_message .content :
717
+ if content ["type" ] == "text" :
718
+ async_interpreter .messages .append (
719
+ {"role" : "user" , "type" : "message" , "content" : content }
720
+ )
721
+ elif content ["type" ] == "image_url" :
722
+ if "url" not in content ["image_url" ]:
723
+ raise Exception ("`url` must be in `image_url`." )
724
+ url = content ["image_url" ]["url" ]
725
+ print (url [:100 ])
726
+ if "base64," not in url :
727
+ raise Exception (
728
+ '''Image must be in the format: "data:image/jpeg;base64,{base64_image}"'''
722
729
)
723
- elif content ["type" ] == "image_url" :
724
- if "url" not in content ["image_url" ]:
725
- raise Exception ("`url` must be in `image_url`." )
726
- url = content ["image_url" ]["url" ]
727
- print (url [:100 ])
728
- if "base64," not in url :
729
- raise Exception (
730
- '''Image must be in the format: "data:image/jpeg;base64,{base64_image}"'''
731
- )
732
730
733
- # data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6oA...
731
+ # data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6oA...
734
732
735
- data = url .split ("base64," )[1 ]
736
- format = "base64." + url .split (";" )[0 ].split ("/" )[1 ]
737
- async_interpreter .messages .append (
738
- {
739
- "role" : "user" ,
740
- "type" : "image" ,
741
- "format" : format ,
742
- "content" : data ,
743
- }
744
- )
733
+ data = url .split ("base64," )[1 ]
734
+ format = "base64." + url .split (";" )[0 ].split ("/" )[1 ]
735
+ async_interpreter .messages .append (
736
+ {
737
+ "role" : "user" ,
738
+ "type" : "image" ,
739
+ "format" : format ,
740
+ "content" : data ,
741
+ }
742
+ )
745
743
746
744
if request .stream :
747
745
return StreamingResponse (
0 commit comments