1- from typing import List , Union
1+ from typing import List , Union , Iterable
22from urllib .parse import urlparse , urlunparse
33
44from openai import OpenAI
@@ -84,7 +84,15 @@ def add_datasource(self, datasource: Datasource):
8484 def del_datasource (self , datasource : Union [Datasource , str ]):
8585 raise NotImplementedError
8686
87- def completion (self , message ):
87+ def completion (self , message : str , stream : bool = False ) -> Union [str , Iterable [object ]]:
88+ """
89+ Call mind completion
90+
91+ :param message: input question
92+ :param stream: to enable stream mode
93+
94+ :return: string if stream mode is off or iterator of ChoiceDelta objects (by openai)
95+ """
8896 parsed = urlparse (self .api .base_url )
8997
9098 netloc = parsed .netloc
@@ -101,14 +109,18 @@ def completion(self, message):
101109 base_url = base_url
102110 )
103111
104- completion = openai_client .chat .completions .create (
112+ response = openai_client .chat .completions .create (
105113 model = self .name ,
106114 messages = [
107115 {'role' : 'user' , 'content' : message }
108116 ],
109- stream = False
117+ stream = stream
110118 )
111- return completion .choices [0 ].message .content
119+ if stream :
120+ for chunk in response :
121+ yield chunk .choices [0 ].delta
122+ else :
123+ return response .choices [0 ].message .content
112124
113125
114126class Minds :
0 commit comments