1111from app .database import db
1212from app .exceptions import ConfigurationException
1313from app .logging_config import get_logger , setup_logging
14+ from app .utils import color_text
1415
1516
1617setup_logging ()
@@ -67,7 +68,6 @@ def _log_success(self, message: str) -> None:
6768 def tool_factory_get_courses (self ) -> ChatCompletionFunctionToolParam :
6869 """LLM Factory function to create a tool for getting courses"""
6970 schema = StackademyGetCoursesParams .model_json_schema ()
70- schema ["required" ] = [] # Both parameters are optional
7171 return ChatCompletionFunctionToolParam (
7272 type = "function" ,
7373 function = {
@@ -80,7 +80,6 @@ def tool_factory_get_courses(self) -> ChatCompletionFunctionToolParam:
8080 def tool_factory_register (self ) -> ChatCompletionFunctionToolParam :
8181 """LLMFactory function to create a tool for registering a user"""
8282 schema = StackademyRegisterCourseParams .model_json_schema ()
83- schema ["required" ] = ["course_code" , "email" , "full_name" ] # All parameters are required
8483 return ChatCompletionFunctionToolParam (
8584 type = "function" ,
8685 function = {
@@ -115,7 +114,7 @@ def get_courses(self, description: Optional[str] = None, max_cost: Optional[floa
115114 Returns:
116115 List[Dict[str, Any]]: List of courses matching the criteria
117116 """
118- # Base query
117+
119118 query = """
120119 SELECT
121120 c.course_code,
@@ -128,7 +127,6 @@ def get_courses(self, description: Optional[str] = None, max_cost: Optional[floa
128127 LEFT JOIN courses prerequisite ON c.prerequisite_id = prerequisite.course_id
129128 """
130129
131- # Build WHERE clause dynamically
132130 where_conditions = []
133131 params = []
134132
@@ -140,14 +138,16 @@ def get_courses(self, description: Optional[str] = None, max_cost: Optional[floa
140138 where_conditions .append ("c.cost <= %s" )
141139 params .append (max_cost )
142140
143- # Add WHERE clause if we have conditions
144141 if where_conditions :
145142 query += " WHERE " + " AND " .join (where_conditions )
146143
147144 query += " ORDER BY c.prerequisite_id"
148- logger . info ( "get_courses() executing db query with params: %s" , params )
145+
149146 try :
150- return self .db .execute_query (query , tuple (params ))
147+ retval = self .db .execute_query (query , tuple (params ))
148+ msg = f"get_courses() retrieved { len (retval )} rows from { self .db .connection_string } "
149+ logger .info (color_text (msg , "green" ))
150+ return retval
151151 # pylint: disable=broad-except
152152 except Exception as e :
153153 logger .error ("Failed to retrieve courses: %s" , e )
@@ -190,9 +190,9 @@ def register_course(self, course_code: str, email: str, full_name: str) -> bool:
190190 if MISSING in (course_code , email , full_name ):
191191 raise ConfigurationException ("Missing required registration parameters." )
192192
193- full_name = full_name .title ().strip ()
194- email = email .lower ().strip ()
195- course_code = course_code .upper ().strip ()
193+ full_name = full_name .title ().strip () if isinstance ( full_name , str ) else full_name
194+ email = email .lower ().strip () if isinstance ( email , str ) else email
195+ course_code = course_code .upper ().strip () if isinstance ( course_code , str ) else course_code
196196
197197 logger .info ("Registering %s (%s) for course %s..." , full_name , email , course_code )
198198 if not self .verify_course (course_code ):
0 commit comments