Skip to content

Commit c706269

Browse files
committed
Moves test routes to their respective modules and adds some docs.
1 parent 58fddd3 commit c706269

File tree

4 files changed

+73
-64
lines changed

4 files changed

+73
-64
lines changed

src/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# Main imports
22
import os
33

4-
# Our assessment code
5-
from lib import assess
6-
74
# Our modules
85
from src.test import test_routes
96
from src.openai import openai_routes

src/assessment.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1+
# These routes (/assessment) issue AI driven rubric assessments.
2+
# The /test/assessment will issue a hard-coded AI assessment of a rubric.
3+
14
from flask import Blueprint, request
25

36
import os
47
import openai
58

9+
# Our assessment code
10+
from lib import assess
11+
612
assessment_routes = Blueprint('assessment_routes', __name__)
713

814
# Get the status of a rubric assessment
915
@assessment_routes.route('/assessment', methods=['GET'])
1016
def get_assessment():
17+
# So far, we don't persist the results in any memory store, here.
1118
return {}
1219

1320
# Submit a rubric assessment
@@ -45,3 +52,39 @@ def post_assessment():
4552
return "response from AI or service not valid", 400
4653

4754
return grades
55+
56+
# Submit a test rubric assessment
57+
@assessment_routes.route('/test/assessment', methods=['GET','POST'])
58+
def test_assessment():
59+
openai.api_key = os.getenv('OPENAI_API_KEY')
60+
61+
with open('test/data/u3l23_01.js', 'r') as f:
62+
code = f.read()
63+
64+
with open('test/data/u3l23.txt', 'r') as f:
65+
prompt = f.read()
66+
67+
with open('test/data/u3l23.csv', 'r') as f:
68+
rubric = f.read()
69+
70+
try:
71+
grades = assess.grade(
72+
code=code,
73+
prompt=prompt,
74+
rubric=rubric,
75+
api_key=request.values.get("api-key", openai.api_key),
76+
llm_model=request.values.get("model", "gpt-4"),
77+
remove_comments=(request.values.get("remove-comments", "0") != "0"),
78+
num_responses=int(request.values.get("num-responses", "1")),
79+
temperature=float(request.values.get("temperature", "0.2")),
80+
num_passing_grades=int(request.values.get("num-passing-grades", "2")),
81+
)
82+
except ValueError:
83+
return "One of the arguments is not parseable as a number", 400
84+
except openai.error.InvalidRequestError as e:
85+
return str(e), 400
86+
87+
if not isinstance(grades, list):
88+
return "response from AI or service not valid", 400
89+
90+
return grades

src/openai.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# These routes (/openai) will query the OpenAI API with the configured API key.
2+
# This is useful for using the OpenAI API to determine metrics and usage data.
3+
# Right now, we can query the list of models available. (/openai/models)
4+
# The '/test/openai' route will query the given chat model with a small prompt.
5+
16
from flask import Blueprint
27

38
import os
@@ -10,3 +15,24 @@
1015
def get_openai_models():
1116
openai.api_key = os.getenv('OPENAI_API_KEY')
1217
return openai.Model.list().data
18+
19+
# Submit a test prompt
20+
@openai_routes.route('/test/openai', methods=['GET','POST'])
21+
def test_openai():
22+
openai.api_key = os.getenv('OPENAI_API_KEY')
23+
24+
try:
25+
completion = openai.ChatCompletion.create(
26+
model=request.values.get("model", "gpt-3.5-turbo"),
27+
api_key=request.values.get("api-key", openai.api_key),
28+
messages=[
29+
{
30+
"role": "user",
31+
"content": "Hello world"
32+
}
33+
]
34+
)
35+
except openai.error.InvalidRequestError as e:
36+
return str(e), 400
37+
38+
return completion.choices[0].message

src/test.py

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
from flask import Blueprint, request
1+
# This houses generic tests of supplemental libraries and health
2+
# of the service.
23

3-
import os
4-
import openai
5-
import numpy
4+
from flask import Blueprint, request
65

76
test_routes = Blueprint('test_routes', __name__)
87

@@ -14,6 +13,7 @@ def test():
1413
# Test numpy integration
1514
@test_routes.route('/test/numpy')
1615
def test_numpy():
16+
import numpy
1717
response = []
1818

1919
x = numpy.asarray([[1, 2, 3], [4, 5, 6]])
@@ -24,60 +24,3 @@ def test_numpy():
2424
response.append(str(x.reshape([3, 2])))
2525

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