1
1
import json
2
2
import time
3
- from faker import Faker
4
- from flask import Flask , request , Response
5
3
4
+ from faker import Faker
5
+ from rolo import Request , Response , route
6
6
7
7
faker = Faker ()
8
- app = Flask (__name__ )
9
8
10
9
res_len = 20
11
10
11
+
12
12
class ChunkReader :
13
13
def __init__ (self , chunks , delay ):
14
14
self .ID = ""
@@ -18,12 +18,15 @@ def __init__(self, chunks, delay):
18
18
self .SentDone = False
19
19
self .Delay = delay
20
20
21
+
21
22
def new_chunk_reader (cs , d ):
22
23
return ChunkReader (cs , d )
23
24
25
+
24
26
def done (r ):
25
27
return r .SentFinished and r .SentDone
26
28
29
+
27
30
def next_chunk (r ):
28
31
if r .SentDone :
29
32
return None , None
@@ -74,6 +77,7 @@ def next_chunk(r):
74
77
b = b"data: " + b + b"\n \n "
75
78
return b , None
76
79
80
+
77
81
def read (r , p ):
78
82
if done (r ):
79
83
return 0 , None
@@ -130,106 +134,106 @@ def read(r, p):
130
134
time .sleep (r .Delay )
131
135
return n , None
132
136
133
- @app .route ('/v1/chat/completions' , methods = ['POST' ])
134
- def chat_completions ():
135
- data = request .get_data ()
136
- req = json .loads (data )
137
137
138
- ws = [faker .word () for _ in range (res_len )]
139
- ws = [" " + w if i > 0 else w for i , w in enumerate (ws )]
138
+ class Api :
139
+
140
+ @route ("/v1/chat/completions" , methods = ["POST" ])
141
+ def chat_completions (self , request : Request ):
142
+ data = request .get_data ()
143
+ req = json .loads (data )
144
+
145
+ ws = [faker .word () for _ in range (res_len )]
146
+ ws = [" " + w if i > 0 else w for i , w in enumerate (ws )]
147
+
148
+ if not req .get ("stream" ):
149
+ m = "" .join (ws )
150
+ return {
151
+ "choices" : [
152
+ {
153
+ "index" : 0 ,
154
+ "message" : {
155
+ "role" : "assistant" ,
156
+ "content" : m ,
157
+ },
158
+ }
159
+ ]
160
+ }
140
161
141
- if not req .get ("stream" ):
142
- m = "" .join (ws )
143
- return {
144
- "choices" : [
145
- {
146
- "index" : 0 ,
147
- "message" : {
148
- "role" : "assistant" ,
149
- "content" : m ,
150
- },
151
- }
152
- ]
153
- }
162
+ id = faker .uuid4 ()
163
+ ct = int (time .time ())
164
+ sd = 0.5
154
165
155
- id = faker .uuid4 ()
156
- ct = int (time .time ())
157
- sd = 0.5
166
+ def generate ():
167
+ for w in ws :
168
+ b , _ = next_chunk (chunk_reader )
169
+ if b is not None :
170
+ yield b
171
+ time .sleep (sd )
158
172
159
- def generate ():
160
- for w in ws :
161
173
b , _ = next_chunk (chunk_reader )
162
174
if b is not None :
163
175
yield b
164
- time .sleep (sd )
165
-
166
- b , _ = next_chunk (chunk_reader )
167
- if b is not None :
168
- yield b
169
176
170
- yield b"[done]\n "
177
+ yield b"[done]\n "
171
178
172
- chunk_reader = new_chunk_reader (ws , sd )
173
- return Response (generate (), content_type = ' text/event-stream' )
179
+ chunk_reader = new_chunk_reader (ws , sd )
180
+ return Response (generate (), content_type = " text/event-stream" )
174
181
182
+ @route ("/v1/audio/transcriptions" , methods = ["POST" ])
183
+ def transcribe (self , request : Request ):
184
+ return {
185
+ "text" : faker .sentence (),
186
+ }
175
187
176
- @app .route ('/v1/audio/transcriptions' , methods = ['POST' ])
177
- def transcribe ():
178
- return {
179
- "text" : faker .sentence (),
180
- }
181
-
182
-
183
- @app .route ('/v1/audio/translations' , methods = ['POST' ])
184
- def translate ():
185
- return {
186
- "text" : faker .sentence (),
187
- }
188
-
188
+ @route ("/v1/audio/translations" , methods = ["POST" ])
189
+ def translate (self , request : Request ):
190
+ return {
191
+ "text" : faker .sentence (),
192
+ }
189
193
190
- @app .route ('/v1/images/generations' , methods = ['POST' ])
191
- def generate_image ():
192
- return {
193
- "created" : int (time .time ()),
194
- "data" : [
195
- {"url" : faker .image_url ()}
196
- ]
197
- }
194
+ @route ("/v1/images/generations" , methods = ["POST" ])
195
+ def generate_image (self , request : Request ):
196
+ return {"created" : int (time .time ()), "data" : [{"url" : faker .image_url ()}]}
198
197
199
- @ app . route (' /v1/engines' , methods = [' GET' ])
200
- def list_engines ():
201
- return {
202
- "object" : "list" ,
203
- "data" : [
204
- {
205
- "id" : "model-id-0" ,
206
- "object" : "model" ,
207
- "created" : 1686935002 ,
208
- "owned_by" : "organization-owner"
209
- },
210
- {
211
- "id" : "model-id-1" ,
212
- "object" : "model" ,
213
- "created" : 1686935002 ,
214
- "owned_by" : "organization-owner" ,
215
- },
216
- {
217
- "id" : "model-id-2" ,
218
- "object" : "model" ,
219
- "created" : 1686935002 ,
220
- "owned_by" : "openai"
221
- },
222
- ],
223
- "object" : "list"
224
- }
198
+ @ route (" /v1/engines" , methods = [" GET" ])
199
+ def list_engines (self , request : Request ):
200
+ return {
201
+ "object" : "list" ,
202
+ "data" : [
203
+ {
204
+ "id" : "model-id-0" ,
205
+ "object" : "model" ,
206
+ "created" : 1686935002 ,
207
+ "owned_by" : "organization-owner" ,
208
+ },
209
+ {
210
+ "id" : "model-id-1" ,
211
+ "object" : "model" ,
212
+ "created" : 1686935002 ,
213
+ "owned_by" : "organization-owner" ,
214
+ },
215
+ {
216
+ "id" : "model-id-2" ,
217
+ "object" : "model" ,
218
+ "created" : 1686935002 ,
219
+ "owned_by" : "openai" ,
220
+ },
221
+ ],
222
+ "object" : "list" ,
223
+ }
225
224
226
225
227
226
def run (port = 1323 ):
228
- app .run (host = "0.0.0.0" ,port = port , debug = True )
227
+ from rolo import Router
228
+ from rolo .dispatcher import handler_dispatcher
229
+ from werkzeug import Request , run_simple
230
+
231
+ r = Router (dispatcher = handler_dispatcher ())
232
+ r .add (Api ())
229
233
234
+ app = Request .application (r .dispatch )
230
235
231
- def stop ():
232
- app .stop ()
236
+ run_simple ("0.0.0.0" , port , app )
233
237
234
238
235
239
if __name__ == "__main__" :
0 commit comments