1
+ # Main imports
1
2
import os
2
- import json
3
3
4
4
# Our assessment code
5
5
from lib import assess
6
6
7
+ # Our modules
8
+ from src .test import test_routes
9
+ from src .openai import openai_routes
10
+ from src .assessment import assessment_routes
11
+
7
12
# Flask
8
- from flask import Flask , Response , request
13
+ from flask import Flask
9
14
10
15
# OpenAI library
11
16
import openai
12
17
13
-
14
18
def create_app (test_config = None ):
15
19
# create and configure the app
16
20
app = Flask (__name__ , instance_relative_config = True )
@@ -37,122 +41,8 @@ def create_app(test_config=None):
37
41
def root ():
38
42
return 'Success.'
39
43
40
- # A simple JSON response that always succeeds
41
- @app .route ('/test' )
42
- def test ():
43
- print ("/test call handled" )
44
- return {}
45
-
46
- # Just report the models from OpenAI
47
- @app .route ('/openai/models' )
48
- def get_models ():
49
- openai .api_key = os .getenv ('OPENAI_API_KEY' )
50
- return openai .Model .list ().data
51
-
52
- # Submit a test prompt
53
- @app .route ('/openai/test' , methods = ['GET' ,'POST' ])
54
- def perform_openai_test ():
55
- print ("/openai/test call started" )
56
- openai .api_key = os .getenv ('OPENAI_API_KEY' )
57
-
58
- try :
59
- completion = openai .ChatCompletion .create (
60
- model = request .values .get ("model" , "gpt-3.5-turbo" ),
61
- api_key = request .values .get ("api-key" , openai .api_key ),
62
- messages = [
63
- {
64
- "role" : "user" ,
65
- "content" : "Hello world"
66
- }
67
- ]
68
- )
69
- except openai .error .InvalidRequestError as e :
70
- print ("/openai/test call handled with an error:" , str (e ))
71
- return str (e ), 400
72
-
73
- print ("/openai/test call handled successfully" )
74
- return completion .choices [0 ].message
75
-
76
- # Get the status of a rubric assessment
77
- @app .route ('/assessment' , methods = ['GET' ])
78
- def poll_assessment ():
79
- return {}
80
-
81
- # Submit a rubric assessment
82
- @app .route ('/assessment' , methods = ['POST' ])
83
- def perform_assessment ():
84
- openai .api_key = os .getenv ('OPENAI_API_KEY' )
85
-
86
- if request .values .get ("code" , None ) == None :
87
- return "`code` is required" , 400
88
-
89
- if request .values .get ("prompt" , None ) == None :
90
- return "`prompt` is required" , 400
91
-
92
- if request .values .get ("rubric" , None ) == None :
93
- return "`rubric` is required" , 400
94
-
95
- try :
96
- grades = assess .grade (
97
- code = request .values .get ("code" , "" ),
98
- prompt = request .values .get ("prompt" , "" ),
99
- rubric = request .values .get ("rubric" , "" ),
100
- api_key = request .values .get ("api-key" , openai .api_key ),
101
- llm_model = request .values .get ("model" , "gpt-4" ),
102
- remove_comments = (request .values .get ("remove-comments" , "0" ) != "0" ),
103
- num_responses = int (request .values .get ("num-responses" , "1" )),
104
- temperature = float (request .values .get ("temperature" , "0.2" )),
105
- num_passing_grades = int (request .values .get ("num-passing-grades" , "2" )),
106
- )
107
- except ValueError :
108
- return "One of the arguments is not parseable as a number" , 400
109
- except openai .error .InvalidRequestError as e :
110
- return str (e ), 400
111
-
112
- if not isinstance (grades , list ):
113
- return "response from AI or service not valid" , 400
114
-
115
- return grades
116
-
117
- # Submit a test rubric assessment
118
- @app .route ('/assessment/test' , methods = ['GET' ,'POST' ])
119
- def test_assessment ():
120
- print ("/assessment/test call started" )
121
- openai .api_key = os .getenv ('OPENAI_API_KEY' )
122
-
123
- with open ('test/data/u3l23_01.js' , 'r' ) as f :
124
- code = f .read ()
125
-
126
- with open ('test/data/u3l23.txt' , 'r' ) as f :
127
- prompt = f .read ()
128
-
129
- with open ('test/data/u3l23.csv' , 'r' ) as f :
130
- rubric = f .read ()
131
-
132
- try :
133
- grades = assess .grade (
134
- code = code ,
135
- prompt = prompt ,
136
- rubric = rubric ,
137
- api_key = request .values .get ("api-key" , openai .api_key ),
138
- llm_model = request .values .get ("model" , "gpt-4" ),
139
- remove_comments = (request .values .get ("remove-comments" , "0" ) != "0" ),
140
- num_responses = int (request .values .get ("num-responses" , "1" )),
141
- temperature = float (request .values .get ("temperature" , "0.2" )),
142
- num_passing_grades = int (request .values .get ("num-passing-grades" , "2" )),
143
- )
144
- except ValueError :
145
- print ("/assessment/test call errored: one of the arguments is not parseable as a number" )
146
- return "One of the arguments is not parseable as a number" , 400
147
- except openai .error .InvalidRequestError as e :
148
- print ("/assessment/test call errored: OpenAI error:" , str (e ))
149
- return str (e ), 400
150
-
151
- if not isinstance (grades , list ):
152
- print ("/assessment/test call errored: response from AI invalid" )
153
- return "response from AI or service not valid" , 400
154
-
155
- print ("/assessment/test call handled successfully" )
156
- return grades
44
+ app .register_blueprint (test_routes )
45
+ app .register_blueprint (openai_routes )
46
+ app .register_blueprint (assessment_routes )
157
47
158
48
return app
0 commit comments