adrienbrdne commited on
Commit
5ceabf4
·
verified ·
1 Parent(s): 420dba4

Update api.py

Browse files
Files changed (1) hide show
  1. api.py +22 -15
api.py CHANGED
@@ -73,12 +73,18 @@ class FormattedKeyIssue(BaseModel):
73
  class KeyIssueFormatResponse(BaseModel):
74
  key_issues: List[FormattedKeyIssue]
75
 
 
 
 
 
 
76
  class CreateSeveralProbDescRequest(BaseModel):
77
- descriptions: Dict[int, str]
78
- challenges: Dict[int, List[str]]
79
  technical_topic: str
80
 
81
  class CreateSeveralProbDescResponse(BaseModel):
 
82
  problem_descriptions: List[str]
83
 
84
  # --- Global Variables / State ---
@@ -493,8 +499,7 @@ async def create_several_probdesc(request: CreateSeveralProbDescRequest):
493
  logger.error("Gemini client is not available or configured.")
494
  raise HTTPException(status_code=503, detail="Service Unavailable: Gemini client not configured")
495
 
496
- descriptions_map = request.descriptions
497
- challenges_map = request.challenges
498
  technical_topic = request.technical_topic
499
 
500
  # Basic input validation
@@ -509,24 +514,25 @@ async def create_several_probdesc(request: CreateSeveralProbDescRequest):
509
  generated_descriptions = []
510
 
511
  # Iterate through challenges to create tasks
512
- for key_issue_id, list_of_challenges in challenges_map.items():
513
- # Get the corresponding description
514
- description = descriptions_map.get(key_issue_id)
515
- successful_count = 0
516
- failed_count = 0
517
  if description is None:
518
  logger.warning(f"No description found for key_issue_id {key_issue_id}. Skipping its challenges.")
519
  continue # Skip challenges for this ID if description is missing
520
 
521
  if not list_of_challenges:
522
- logger.warning(f"Empty challenge list for key_issue_id {key_issue_id}. Skipping.")
523
- continue
524
 
525
- # Create a task for each challenge associated with this description
526
  for ind, challenge in enumerate(list_of_challenges):
 
 
 
527
  if not challenge: # Skip empty challenges
528
- logger.warning(f"Skipping empty challenge string for key_issue_id {key_issue_id}.")
529
- continue
530
  else:
531
  prompt = f"""I want you to create a problem description using a key issue explained in a detailed description.
532
  Here is the description of the key issue: <description>{description}</description>
@@ -558,9 +564,10 @@ Try to be about the same length as the examples if possible."""
558
  failed_count += 1
559
  logger.error(f"Error calling Gemini API for problem description {ind+1}: {e}", exc_info=True)
560
  # Check for specific Gemini API errors if possible
561
- raise HTTPException(status_code=502, detail=f"Failed to generate problem description using LLM: {e}")
562
 
563
  logger.info(f"Successfully generated descriptions: {successful_count}/{len(list_of_challenges)} ")
 
564
 
565
  # --- Return Result ---
566
  return CreateSeveralProbDescResponse(problem_descriptions=generated_descriptions)
 
73
  class KeyIssueFormatResponse(BaseModel):
74
  key_issues: List[FormattedKeyIssue]
75
 
76
+ class KeyIssueInput(BaseModel):
77
+ """Represents a single key issue with its description and challenges."""
78
+ description: str
79
+ challenges: List[str]
80
+
81
  class CreateSeveralProbDescRequest(BaseModel):
82
+ """Request body for creating multiple problem descriptions."""
83
+ keys_issues: List[KeyIssueInput] # Changed field name and type
84
  technical_topic: str
85
 
86
  class CreateSeveralProbDescResponse(BaseModel):
87
+ """Response body containing the list of generated problem descriptions."""
88
  problem_descriptions: List[str]
89
 
90
  # --- Global Variables / State ---
 
499
  logger.error("Gemini client is not available or configured.")
500
  raise HTTPException(status_code=503, detail="Service Unavailable: Gemini client not configured")
501
 
502
+ key_issues_list = request.keys_issues
 
503
  technical_topic = request.technical_topic
504
 
505
  # Basic input validation
 
514
  generated_descriptions = []
515
 
516
  # Iterate through challenges to create tasks
517
+ for key_issue in key_issues_list:
518
+ description = key_issue.description
519
+ list_of_challenges = key_issue.challenges
520
+
 
521
  if description is None:
522
  logger.warning(f"No description found for key_issue_id {key_issue_id}. Skipping its challenges.")
523
  continue # Skip challenges for this ID if description is missing
524
 
525
  if not list_of_challenges:
526
+ logger.warning(f"Empty challenge list for key_issue_id {key_issue_id}. Skipping.")
527
+ continue
528
 
 
529
  for ind, challenge in enumerate(list_of_challenges):
530
+ successful_count = 0
531
+ failed_count = 0
532
+ # Create a task for each challenge associated with this description
533
  if not challenge: # Skip empty challenges
534
+ logger.warning(f"Skipping empty challenge string for key_issue_id {key_issue_id}.")
535
+ continue
536
  else:
537
  prompt = f"""I want you to create a problem description using a key issue explained in a detailed description.
538
  Here is the description of the key issue: <description>{description}</description>
 
564
  failed_count += 1
565
  logger.error(f"Error calling Gemini API for problem description {ind+1}: {e}", exc_info=True)
566
  # Check for specific Gemini API errors if possible
567
+ raise HTTPException(status_code=502, detail=f"Failed to generate problem description {ind+1} using LLM: {e}")
568
 
569
  logger.info(f"Successfully generated descriptions: {successful_count}/{len(list_of_challenges)} ")
570
+
571
 
572
  # --- Return Result ---
573
  return CreateSeveralProbDescResponse(problem_descriptions=generated_descriptions)