@@ -88,9 +88,10 @@ private function get_submission_record(int $assignmentid, int $userid) {
8888 /**
8989 * Generate AI feedback for a submission.
9090 *
91- * @param object|false $record The submission record.
91+ * @param mixed $record The submission record.
9292 * @param string $triggeredby How the task was triggered: 'auto' (observer) or 'manual' (teacher).
93- * @param \assign $assign The assign instance.
93+ * @param null|assign $assign The assign instance.
94+ * @return void
9495 */
9596 private function generate_feedback ($ record , string $ triggeredby = 'manual ' , ?\assign $ assign = null ): void {
9697 global $ DB , $ CFG ;
@@ -113,45 +114,47 @@ private function generate_feedback($record, string $triggeredby = 'manual', ?\as
113114 return ;
114115 }
115116
116- try {
117- // All content (including images and PDFs) is now converted to text during
118- // prompt building, so we always use the default feedback purpose.
119- $ provider = \core \di::get (\assignfeedback_aif \local \ai_request_provider::class);
120- $ purpose = get_config ('assignfeedback_aif ' , 'purpose ' ) ?: 'feedback ' ;
121- if (!$ provider ->is_available ($ purpose , $ record ->contextid )) {
122- mtrace ("AI backend not available for purpose ' {$ purpose }', skipping submission {$ record ->subid }. " );
123- return ;
124- }
117+ // All content (including images and PDFs) is now converted to text during
118+ // prompt building, so we always use the default feedback purpose.
119+ $ provider = \core \di::get (\assignfeedback_aif \local \ai_request_provider::class);
120+ $ purpose = get_config ('assignfeedback_aif ' , 'purpose ' ) ?: 'feedback ' ;
121+ if (!$ provider ->is_available ($ purpose , $ record ->contextid )) {
122+ mtrace ("AI backend not available for purpose ' {$ purpose }', skipping submission {$ record ->subid }. " );
123+ return ;
124+ }
125125
126+ try {
126127 $ aifeedback = $ aif ->perform_request (
127128 $ promptdata ['prompt ' ],
128129 null ,
129130 $ promptdata ['options ' ],
130131 $ this ->get_userid () ?: get_admin ()->id
131132 );
133+ } catch (\moodle_exception $ e ) {
134+ mtrace ("AI request failed for submission {$ record ->subid }: " . $ e ->getMessage ());
135+ return ;
136+ }
132137
133- // Practice mode: only when auto-triggered (not teacher) and no marking workflow.
134- $ ispractice = ($ triggeredby === 'auto ' ) && $ this ->is_practice_mode ($ record ->aid );
138+ // Practice mode: only when auto-triggered (not teacher) and no marking workflow.
139+ $ ispractice = ($ triggeredby === 'auto ' ) && $ this ->is_practice_mode ($ record ->aid );
135140
136- // Append the appropriate disclaimer to feedback.
137- $ aifeedback = $ aif ->append_disclaimer ($ aifeedback , $ ispractice );
141+ // Append the appropriate disclaimer to feedback.
142+ $ aifeedback = $ aif ->append_disclaimer ($ aifeedback , $ ispractice );
138143
139- $ clock = \core \di::get (\core \clock::class);
140- $ data = (object ) [
141- 'aif ' => $ record ->aifid ,
142- 'feedback ' => $ aifeedback ,
143- 'timecreated ' => $ clock ->now ()->getTimestamp (),
144- 'submission ' => $ record ->subid ,
145- ];
146- $ DB ->insert_record ('assignfeedback_aif_feedback ' , $ data );
144+ $ clock = \core \di::get (\core \clock::class);
145+ $ data = (object ) [
146+ 'aif ' => $ record ->aifid ,
147+ 'feedback ' => $ aifeedback ,
148+ 'feedbackformat ' => FORMAT_MARKDOWN ,
149+ 'timecreated ' => $ clock ->now ()->getTimestamp (),
150+ 'submission ' => $ record ->subid ,
151+ ];
152+ $ DB ->insert_record ('assignfeedback_aif_feedback ' , $ data );
147153
148- // Ensure a grade record exists so students can see feedback in the submission view.
149- $ this ->ensure_grade_record ($ record , $ assign );
154+ // Ensure a grade record exists so students can see feedback in the submission view.
155+ $ this ->ensure_grade_record ($ record , $ assign );
150156
151- mtrace ("AI feedback generated for assignment {$ record ->aid } submission {$ record ->subid }" );
152- } catch (\Exception $ e ) {
153- mtrace ("Error generating AI feedback: " . $ e ->getMessage ());
154- }
157+ mtrace ("AI feedback generated for assignment {$ record ->aid } submission {$ record ->subid }" );
155158 }
156159
157160 /**
@@ -190,8 +193,8 @@ private function ensure_grade_record(object $record, \assign $assign): void {
190193
191194 if (
192195 !$ DB ->record_exists ('assign_grades ' , [
193- 'assignment ' => $ record ->aid ,
194- 'userid ' => $ record ->userid ,
196+ 'assignment ' => $ record ->aid ,
197+ 'userid ' => $ record ->userid ,
195198 ])
196199 ) {
197200 $ assign ->get_user_grade ($ record ->userid , true );
0 commit comments