@@ -988,65 +988,6 @@ def validate_feedback(self) -> "FeedbackRequest":
988988 return self
989989
990990
991- def _coerce_json_dict (value : Any ) -> Dict [str , Any ]:
992- """Convert JSON-ish values to a dict for metadata lookups."""
993- if isinstance (value , dict ):
994- return value
995- if isinstance (value , str ):
996- try :
997- parsed = json .loads (value )
998- except (TypeError , ValueError ):
999- return {}
1000- return parsed if isinstance (parsed , dict ) else {}
1001- return {}
1002-
1003-
1004- def _extract_feedback_versions (payload : Optional [Dict [str , Any ]]) -> tuple [Optional [str ], Optional [str ]]:
1005- """Extract model and ruleset versions from a scan payload when available."""
1006- if not isinstance (payload , dict ):
1007- return None , None
1008-
1009- metadata = _coerce_json_dict (payload .get ("metadata" ))
1010- summary = _coerce_json_dict (payload .get ("summary" ))
1011- report_view_model_source = payload .get ("report_view_model" )
1012- if not report_view_model_source :
1013- report_view_model_source = summary .get ("report_view_model" )
1014- report_view_model = _coerce_json_dict (report_view_model_source )
1015- report_meta = _coerce_json_dict (report_view_model .get ("meta" ))
1016-
1017- scoring_v2 = _coerce_json_dict (payload .get ("scoring_v2" ))
1018- if not scoring_v2 :
1019- scoring_v2 = _coerce_json_dict (summary .get ("scoring_v2" ))
1020-
1021- model_version = (
1022- summary .get ("model_version" )
1023- or metadata .get ("model_version" )
1024- or report_meta .get ("model_version" )
1025- or summary .get ("llm_model" )
1026- or metadata .get ("llm_model" )
1027- )
1028-
1029- ruleset_version = (
1030- summary .get ("ruleset_version" )
1031- or metadata .get ("ruleset_version" )
1032- or report_meta .get ("ruleset_version" )
1033- or scoring_v2 .get ("weights_version" )
1034- or scoring_v2 .get ("scoring_version" )
1035- )
1036-
1037- return model_version , ruleset_version
1038-
1039-
1040- def _resolve_feedback_versions (scan_id : str ) -> tuple [Optional [str ], Optional [str ]]:
1041- """Look up the related scan payload and extract version metadata safely."""
1042- payload = scan_results .get (scan_id )
1043- if isinstance (payload , dict ):
1044- return _extract_feedback_versions (payload )
1045-
1046- db_payload = db .get_scan_result (scan_id )
1047- return _extract_feedback_versions (db_payload )
1048-
1049-
1050991class ReviewQueueClaimRequest (BaseModel ):
1051992 """Request body for claiming a review queue item."""
1052993 queue_item_id : str
@@ -1567,16 +1508,6 @@ async def run_analysis_workflow(url: str, extension_id: str):
15671508 if scoring_result .coverage_cap_reason is not None :
15681509 scoring_v2_payload ["coverage_cap_reason" ] = scoring_result .coverage_cap_reason
15691510
1570- executive_summary = final_state .get ("executive_summary" ) or {}
1571- if isinstance (executive_summary , dict ):
1572- executive_summary = dict (executive_summary )
1573- else :
1574- executive_summary = {}
1575- executive_summary .setdefault (
1576- "ruleset_version" ,
1577- scoring_v2_payload .get ("weights_version" ) or scoring_v2_payload .get ("scoring_version" ),
1578- )
1579-
15801511 # Build scan results - sanitize complex objects to prevent circular references
15811512 raw_results = {
15821513 "extension_id" : extension_id ,
@@ -1591,7 +1522,7 @@ async def run_analysis_workflow(url: str, extension_id: str):
15911522 "webstore_analysis" : analysis_results .get ("webstore_analysis" ) or {},
15921523 "virustotal_analysis" : analysis_results .get ("virustotal_analysis" ) or {},
15931524 "entropy_analysis" : analysis_results .get ("entropy_analysis" ) or {},
1594- "summary" : executive_summary ,
1525+ "summary" : final_state . get ( " executive_summary" ) or {} ,
15951526 "impact_analysis" : analysis_results .get ("impact_analysis" ) or {},
15961527 "privacy_compliance" : analysis_results .get ("privacy_compliance" ) or {},
15971528 "extracted_path" : _storage_relative_extracted_path (final_state .get ("extension_dir" )),
@@ -2272,14 +2203,11 @@ async def submit_feedback(feedback: FeedbackRequest, http_request: Request):
22722203 provide details about why it wasn't (false positive, score issues, etc.).
22732204 """
22742205 user_id = _get_user_id (http_request )
2275- if user_id == "anon" :
2276- user_id = None
22772206
22782207 # If helpful=true, ignore reason/suggested_score/comment
22792208 reason = None if feedback .helpful else (feedback .reason .value if feedback .reason else None )
22802209 suggested_score = None if feedback .helpful else feedback .suggested_score
22812210 comment = None if feedback .helpful else feedback .comment
2282- model_version , ruleset_version = _resolve_feedback_versions (feedback .scan_id )
22832211
22842212 # Save feedback to database (SQLite or Supabase)
22852213 db .save_feedback (
@@ -2289,8 +2217,8 @@ async def submit_feedback(feedback: FeedbackRequest, http_request: Request):
22892217 suggested_score = suggested_score ,
22902218 comment = comment ,
22912219 user_id = user_id ,
2292- model_version = model_version ,
2293- ruleset_version = ruleset_version ,
2220+ model_version = None , # TODO: Extract from scan result metadata
2221+ ruleset_version = None , # TODO: Extract from scan result metadata
22942222 )
22952223
22962224 return {"ok" : True }
0 commit comments