1- from typing import List , Union
1+ from typing import List , Union , Iterable
22from urllib .parse import urlparse , urlunparse
33
44from openai import OpenAI
@@ -90,7 +90,15 @@ def add_datasource(self, datasource: Datasource):
9090 def del_datasource (self , datasource : Union [Datasource , str ]):
9191 raise NotImplementedError
9292
93- def completion (self , message ):
93+ def completion (self , message : str , stream : bool = False ) -> Union [str , Iterable [object ]]:
94+ """
95+ Call mind completion
96+
97+ :param message: input question
98+ :param stream: to enable stream mode
99+
100+ :return: string if stream mode is off or iterator of ChoiceDelta objects (by openai)
101+ """
94102 parsed = urlparse (self .api .base_url )
95103
96104 netloc = parsed .netloc
@@ -107,14 +115,18 @@ def completion(self, message):
107115 base_url = base_url
108116 )
109117
110- completion = openai_client .chat .completions .create (
118+ response = openai_client .chat .completions .create (
111119 model = self .name ,
112120 messages = [
113121 {'role' : 'user' , 'content' : message }
114122 ],
115- stream = False
123+ stream = stream
116124 )
117- return completion .choices [0 ].message .content
125+ if stream :
126+ for chunk in response :
127+ yield chunk .choices [0 ].delta
128+ else :
129+ return response .choices [0 ].message .content
118130
119131
120132class Minds :
0 commit comments