Skip to content

Commit 3a4418a

Browse files
committed
Merge branch 'develop' into ax/scrum-101-timetable-frontend
2 parents 1c2131f + 46f0384 commit 3a4418a

File tree

23 files changed

+2648
-82
lines changed

23 files changed

+2648
-82
lines changed

course-matrix/backend/package-lock.json

Lines changed: 251 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

course-matrix/backend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"express": "^4.21.2",
2727
"langchain": "^0.3.19",
2828
"openai": "^4.85.4",
29+
"pdf-parse": "^1.1.1",
2930
"swagger-jsdoc": "^6.2.8",
3031
"swagger-ui-express": "^5.0.1",
3132
"ts-node": "^10.9.2",

course-matrix/backend/src/constants/constants.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@ export const yearToCode = (year: number) => {
3939

4040
// Set minimum results wanted for a similarity search on the associated namespace.
4141
export const namespaceToMinResults = new Map();
42-
namespaceToMinResults.set("courses", 10);
42+
namespaceToMinResults.set("courses_v2", 10);
4343
namespaceToMinResults.set("offerings", 16); // Typically, more offering info is wanted.
4444
namespaceToMinResults.set("prerequisites", 5);
4545
namespaceToMinResults.set("corequisites", 5);
4646
namespaceToMinResults.set("departments", 5);
47+
namespaceToMinResults.set("programs", 5);
4748

4849
// Consider the last X messages in history to influence vector DB query
4950
export const CHATBOT_MEMORY_THRESHOLD = 3;

course-matrix/backend/src/constants/promptKeywords.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Keywords related to each namespace
22
export const NAMESPACE_KEYWORDS = {
3-
courses: [
3+
courses_v2: [
44
"course",
55
"class",
66
"description",
@@ -57,16 +57,8 @@ export const NAMESPACE_KEYWORDS = {
5757
"concurrent",
5858
"co-enroll",
5959
],
60-
departments: [
61-
"department",
62-
"faculty",
63-
"program",
64-
"major",
65-
"minor",
66-
"specialist",
67-
"division",
68-
"academic unit",
69-
],
60+
departments: ["department", "faculty", "division"],
61+
programs: ["program", "major", "minor", "specialist", "degree", "stream"],
7062
};
7163

7264
// General academic terms that might indicate a search is needed

course-matrix/backend/src/controllers/aiController.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ function analyzeQuery(query: string): {
5858

5959
// If a course code is detected, add tehse namespaces
6060
if (containsCourseCode) {
61-
if (!relevantNamespaces.includes("courses"))
62-
relevantNamespaces.push("courses");
61+
if (!relevantNamespaces.includes("courses_v2"))
62+
relevantNamespaces.push("courses_v2");
6363
if (!relevantNamespaces.includes("offerings"))
6464
relevantNamespaces.push("offerings");
6565
if (!relevantNamespaces.includes("prerequisites"))
@@ -70,8 +70,8 @@ function analyzeQuery(query: string): {
7070
if (DEPARTMENT_CODES.some((code) => lowerQuery.includes(code))) {
7171
if (!relevantNamespaces.includes("departments"))
7272
relevantNamespaces.push("departments");
73-
if (!relevantNamespaces.includes("courses"))
74-
relevantNamespaces.push("courses");
73+
if (!relevantNamespaces.includes("courses_v2"))
74+
relevantNamespaces.push("courses_v2");
7575
}
7676

7777
// If search is required at all
@@ -83,11 +83,12 @@ function analyzeQuery(query: string): {
8383
// If no specific namespaces identified & search required, then search all
8484
if (requiresSearch && relevantNamespaces.length === 0) {
8585
relevantNamespaces.push(
86-
"courses",
86+
"courses_v2",
8787
"offerings",
8888
"prerequisites",
8989
"corequisites",
9090
"departments",
91+
"programs",
9192
);
9293
}
9394

@@ -153,6 +154,8 @@ async function reformulateQuery(
153154
apiKey: process.env.OPENAI_API_KEY,
154155
});
155156

157+
// console.log("History: ", conversationHistory);
158+
156159
// Create messages array with the correct type structure
157160
const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [
158161
{
@@ -184,7 +187,13 @@ async function reformulateQuery(
184187
Output: "What are the course names of course codes: MGTA01, CSCA08, MATA31, MATA35?"
185188
186189
User: "How are you doing today?"
187-
Output: "How are you doing today?"`,
190+
Output: "How are you doing today?"
191+
192+
User: "Give 2nd year math courses."
193+
Output: "What are some 2nd year math courses?"
194+
195+
User: "Give first year math courses."
196+
Output: "What are some 1st year math courses?"`,
188197
},
189198
];
190199

@@ -206,7 +215,7 @@ async function reformulateQuery(
206215
model: "gpt-4o-mini",
207216
messages: messages,
208217
temperature: 0.1, // Lower temperature for more consistent, focused queries
209-
max_tokens: 150, // Limit response length
218+
max_tokens: latestQuery.length * 3, // Limit response length. Proportional to user input.
210219
top_p: 0.5, // Reduced top_p for more focused outputs
211220
});
212221

0 commit comments

Comments
 (0)