From 2a5562a625f46e2e1f19bd7750c5e0613610ed1f Mon Sep 17 00:00:00 2001 From: Matthew Rowland Date: Wed, 20 Nov 2024 20:24:01 -1000 Subject: [PATCH 1/2] feat: Init semantic search --- docker-compose.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7b086f350..97725dd73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,6 +39,28 @@ services: - ./apps/frontend/src:/frontend/apps/frontend/src - ./packages/theme/src:/frontend/packages/theme/src - ./apps/frontend/public:/frontend/apps/frontend/public + weaviate: + command: + - --host + - 0.0.0.0 + - --port + - '8080' + - --scheme + - http + image: cr.weaviate.io/semitechnologies/weaviate:1.27.2 + ports: + - 8081:8080 + - 50051:50051 + volumes: + - weaviate_data:/var/lib/weaviate + restart: on-failure:0 + environment: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' + PERSISTENCE_DATA_PATH: '/var/lib/weaviate' + DEFAULT_VECTORIZER_MODULE: 'none' + ENABLE_API_BASED_MODULES: 'true' + CLUSTER_HOSTNAME: 'node1' mongodb: image: mongo:5 networks: @@ -67,3 +89,5 @@ services: restart: always networks: - bt +volumes: + weaviate_data: From 852aee792a66a3b6f40335efea911b883e913221 Mon Sep 17 00:00:00 2001 From: Matthew Rowland Date: Wed, 19 Mar 2025 20:17:15 -0700 Subject: [PATCH 2/2] feat: Comments for Oleg --- apps/backend/src/modules/course/controller.ts | 4 ++++ apps/backend/src/modules/course/resolver.ts | 2 ++ apps/backend/src/modules/course/typedefs/course.ts | 2 ++ apps/datapuller/src/pullers/courses.ts | 3 +++ 4 files changed, 11 insertions(+) diff --git a/apps/backend/src/modules/course/controller.ts b/apps/backend/src/modules/course/controller.ts index 6cdb6e434..a65ee4184 100644 --- a/apps/backend/src/modules/course/controller.ts +++ b/apps/backend/src/modules/course/controller.ts @@ -14,6 +14,10 @@ export const getCourse = async (subject: string, number: string) => { return formatCourse(course as ICourseItem); }; +// TODO: Query courses by embedded search +// Get topK subject and number back from Weaviate +// Query and return courses from MongoDB + export const getClassesByCourse = async (courseId: string) => { const classes = await ClassModel.find({ courseId, diff --git a/apps/backend/src/modules/course/resolver.ts b/apps/backend/src/modules/course/resolver.ts index ff095be9e..c7a9aad6a 100644 --- a/apps/backend/src/modules/course/resolver.ts +++ b/apps/backend/src/modules/course/resolver.ts @@ -47,6 +47,8 @@ const resolvers: CourseModule.Resolvers = { return course as unknown as CourseModule.Course; }, + // TODO: Add semantic search query resolver + courses: async (_, _arguments, _context, _info) => { const courses = getCourses(); diff --git a/apps/backend/src/modules/course/typedefs/course.ts b/apps/backend/src/modules/course/typedefs/course.ts index ee1480e48..b62acf0ea 100644 --- a/apps/backend/src/modules/course/typedefs/course.ts +++ b/apps/backend/src/modules/course/typedefs/course.ts @@ -7,6 +7,8 @@ export default gql` type Query { course(subject: String!, number: CourseNumber!): Course courses: [Course!]! + + # TODO: Add semantic search query } type Course { diff --git a/apps/datapuller/src/pullers/courses.ts b/apps/datapuller/src/pullers/courses.ts index 209b985d4..0278442e9 100644 --- a/apps/datapuller/src/pullers/courses.ts +++ b/apps/datapuller/src/pullers/courses.ts @@ -43,6 +43,9 @@ const updateCourses = async ({ const allCourses = await getCourses(log, COURSE_APP_ID, COURSE_APP_KEY); const courses = getLatestUniqueCourses(allCourses); + // TODO: Add embeddings for courses to Weaviate alongside any metadata necessary to query courses + // Use the best model from https://github.com/asuc-octo/semantic-search-fall-2024 + log.info(`Fetched ${courses.length.toLocaleString()} courses.`); if (!courses) { log.warn("No courses found, skipping update.");