Skip to content

Commit 58fddd3

Browse files
committed
Adds modules for routes.
1 parent 2bbfef2 commit 58fddd3

File tree

4 files changed

+152
-120
lines changed

4 files changed

+152
-120
lines changed

src/__init__.py

Lines changed: 10 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1+
# Main imports
12
import os
2-
import json
33

44
# Our assessment code
55
from lib import assess
66

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+
712
# Flask
8-
from flask import Flask, Response, request
13+
from flask import Flask
914

1015
# OpenAI library
1116
import openai
1217

13-
1418
def create_app(test_config=None):
1519
# create and configure the app
1620
app = Flask(__name__, instance_relative_config=True)
@@ -37,122 +41,8 @@ def create_app(test_config=None):
3741
def root():
3842
return 'Success.'
3943

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)
15747

15848
return app

src/assessment.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from flask import Blueprint, request
2+
3+
import os
4+
import openai
5+
6+
assessment_routes = Blueprint('assessment_routes', __name__)
7+
8+
# Get the status of a rubric assessment
9+
@assessment_routes.route('/assessment', methods=['GET'])
10+
def get_assessment():
11+
return {}
12+
13+
# Submit a rubric assessment
14+
@assessment_routes.route('/assessment', methods=['POST'])
15+
def post_assessment():
16+
openai.api_key = os.getenv('OPENAI_API_KEY')
17+
18+
if request.values.get("code", None) == None:
19+
return "`code` is required", 400
20+
21+
if request.values.get("prompt", None) == None:
22+
return "`prompt` is required", 400
23+
24+
if request.values.get("rubric", None) == None:
25+
return "`rubric` is required", 400
26+
27+
try:
28+
grades = assess.grade(
29+
code=request.values.get("code", ""),
30+
prompt=request.values.get("prompt", ""),
31+
rubric=request.values.get("rubric", ""),
32+
api_key=request.values.get("api-key", openai.api_key),
33+
llm_model=request.values.get("model", "gpt-4"),
34+
remove_comments=(request.values.get("remove-comments", "0") != "0"),
35+
num_responses=int(request.values.get("num-responses", "1")),
36+
temperature=float(request.values.get("temperature", "0.2")),
37+
num_passing_grades=int(request.values.get("num-passing-grades", "2")),
38+
)
39+
except ValueError:
40+
return "One of the arguments is not parseable as a number", 400
41+
except openai.error.InvalidRequestError as e:
42+
return str(e), 400
43+
44+
if not isinstance(grades, list):
45+
return "response from AI or service not valid", 400
46+
47+
return grades

src/openai.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from flask import Blueprint
2+
3+
import os
4+
import openai
5+
6+
openai_routes = Blueprint('openai_routes', __name__)
7+
8+
# Just report the models from OpenAI
9+
@openai_routes.route('/openai/models')
10+
def get_openai_models():
11+
openai.api_key = os.getenv('OPENAI_API_KEY')
12+
return openai.Model.list().data

src/test.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
from flask import Blueprint, request
2+
3+
import os
4+
import openai
5+
import numpy
6+
7+
test_routes = Blueprint('test_routes', __name__)
8+
9+
# A simple JSON response that always succeeds
10+
@test_routes.route('/test')
11+
def test():
12+
return {}
13+
14+
# Test numpy integration
15+
@test_routes.route('/test/numpy')
16+
def test_numpy():
17+
response = []
18+
19+
x = numpy.asarray([[1, 2, 3], [4, 5, 6]])
20+
response.append(str(x))
21+
response.append(str(x[1, 1:2]))
22+
response.append(str(x.T))
23+
response.append(str(x.dot(x.T)))
24+
response.append(str(x.reshape([3, 2])))
25+
26+
return "\n<br>\n".join(response)
27+
28+
# Submit a test prompt
29+
@test_routes.route('/test/openai', methods=['GET','POST'])
30+
def test_openai():
31+
openai.api_key = os.getenv('OPENAI_API_KEY')
32+
33+
try:
34+
completion = openai.ChatCompletion.create(
35+
model=request.values.get("model", "gpt-3.5-turbo"),
36+
api_key=request.values.get("api-key", openai.api_key),
37+
messages=[
38+
{
39+
"role": "user",
40+
"content": "Hello world"
41+
}
42+
]
43+
)
44+
except openai.error.InvalidRequestError as e:
45+
return str(e), 400
46+
47+
return completion.choices[0].message
48+
49+
# Submit a test rubric assessment
50+
@test_routes.route('/test/assessment', methods=['GET','POST'])
51+
def test_assessment():
52+
openai.api_key = os.getenv('OPENAI_API_KEY')
53+
54+
with open('test/data/u3l23_01.js', 'r') as f:
55+
code = f.read()
56+
57+
with open('test/data/u3l23.txt', 'r') as f:
58+
prompt = f.read()
59+
60+
with open('test/data/u3l23.csv', 'r') as f:
61+
rubric = f.read()
62+
63+
try:
64+
grades = assess.grade(
65+
code=code,
66+
prompt=prompt,
67+
rubric=rubric,
68+
api_key=request.values.get("api-key", openai.api_key),
69+
llm_model=request.values.get("model", "gpt-4"),
70+
remove_comments=(request.values.get("remove-comments", "0") != "0"),
71+
num_responses=int(request.values.get("num-responses", "1")),
72+
temperature=float(request.values.get("temperature", "0.2")),
73+
num_passing_grades=int(request.values.get("num-passing-grades", "2")),
74+
)
75+
except ValueError:
76+
return "One of the arguments is not parseable as a number", 400
77+
except openai.error.InvalidRequestError as e:
78+
return str(e), 400
79+
80+
if not isinstance(grades, list):
81+
return "response from AI or service not valid", 400
82+
83+
return grades

0 commit comments

Comments
 (0)