bibibi12345 commited on
Commit
fcc679a
·
verified ·
1 Parent(s): c784c52

Update app/main.py

Browse files
Files changed (1) hide show
  1. app/main.py +52 -49
app/main.py CHANGED
@@ -579,7 +579,31 @@ Ready for your request."""
579
  )
580
  ]
581
 
582
- # Create a new list of messages with the pre-messages and encoded content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
583
  new_messages = []
584
 
585
  # Add a system message with instructions at the beginning
@@ -588,74 +612,53 @@ Ready for your request."""
588
  # Add pre-messages
589
  new_messages.extend(pre_messages)
590
 
591
- # Process all messages in their original order
592
  for i, message in enumerate(messages):
593
- if message.role == "system":
594
- # Pass system messages through as is
595
- new_messages.append(message)
596
 
597
- elif message.role == "user":
598
- # URL encode user message content
 
 
 
 
 
 
 
 
 
 
 
 
599
  if isinstance(message.content, str):
600
  new_messages.append(OpenAIMessage(
601
  role=message.role,
602
  content=urllib.parse.quote(message.content)
603
  ))
604
  elif isinstance(message.content, list):
605
- # For list content (like with images), we need to handle each part
606
  encoded_parts = []
607
  for part in message.content:
608
  if isinstance(part, dict) and part.get('type') == 'text':
609
- # URL encode text parts
610
  encoded_parts.append({
611
  'type': 'text',
612
  'text': urllib.parse.quote(part.get('text', ''))
613
  })
614
- else:
615
- # Pass through non-text parts (like images)
616
- encoded_parts.append(part)
617
-
 
 
 
 
618
  new_messages.append(OpenAIMessage(
619
  role=message.role,
620
  content=encoded_parts
621
  ))
622
- else:
623
- # For assistant messages
624
- # Check if this is the last assistant message in the conversation
625
- is_last_assistant = True
626
- for remaining_msg in messages[i+1:]:
627
- if remaining_msg.role != "user":
628
- is_last_assistant = False
629
- break
630
-
631
- if is_last_assistant:
632
- # URL encode the last assistant message content
633
- if isinstance(message.content, str):
634
- new_messages.append(OpenAIMessage(
635
- role=message.role,
636
- content=urllib.parse.quote(message.content)
637
- ))
638
- elif isinstance(message.content, list):
639
- # Handle list content similar to user messages
640
- encoded_parts = []
641
- for part in message.content:
642
- if isinstance(part, dict) and part.get('type') == 'text':
643
- encoded_parts.append({
644
- 'type': 'text',
645
- 'text': urllib.parse.quote(part.get('text', ''))
646
- })
647
- else:
648
- encoded_parts.append(part)
649
-
650
- new_messages.append(OpenAIMessage(
651
- role=message.role,
652
- content=encoded_parts
653
- ))
654
- else:
655
- # For non-string/list content, keep as is
656
- new_messages.append(message)
657
  else:
658
- # For other assistant messages, keep as is
 
659
  new_messages.append(message)
660
 
661
  print(f"Created encrypted prompt with {len(new_messages)} messages")
 
579
  )
580
  ]
581
 
582
+ # --- Find the index of the single assistant message to encrypt ---
583
+ target_assistant_index = -1
584
+ num_messages = len(messages)
585
+ for i in range(num_messages - 1, -1, -1): # Iterate backwards
586
+ if messages[i].role == 'assistant':
587
+ # Condition 1: Is assistant message - met.
588
+ # Condition 2: Not the last message overall?
589
+ is_last_overall = (i == num_messages - 1)
590
+ if is_last_overall:
591
+ continue # Cannot be the target if it's the last message
592
+
593
+ # Condition 3: Has a user/system message after it?
594
+ has_user_system_after = False
595
+ for k in range(i + 1, num_messages):
596
+ if messages[k].role in ['user', 'system']:
597
+ has_user_system_after = True
598
+ break
599
+
600
+ if has_user_system_after:
601
+ # This is the last assistant message meeting all criteria
602
+ target_assistant_index = i
603
+ print(f"DEBUG: Identified target assistant message for encoding at index {target_assistant_index}")
604
+ break # Found the target, stop searching
605
+
606
+ # --- Create the new message list with specific encoding ---
607
  new_messages = []
608
 
609
  # Add a system message with instructions at the beginning
 
612
  # Add pre-messages
613
  new_messages.extend(pre_messages)
614
 
615
+ # Process all original messages
616
  for i, message in enumerate(messages):
617
+ encode_this_message = False
 
 
618
 
619
+ if message.role == "user":
620
+ encode_this_message = True
621
+ print(f"DEBUG: Encoding user message (index {i})")
622
+ elif message.role == "assistant" and i == target_assistant_index:
623
+ encode_this_message = True
624
+ print(f"DEBUG: Encoding target assistant message (index {i})")
625
+ else:
626
+ # Keep system, other assistant, tool messages as is
627
+ print(f"DEBUG: Passing through message (index {i}, role {message.role}) without encoding")
628
+ new_messages.append(message)
629
+ continue # Skip encoding logic below for this message
630
+
631
+ # Apply encoding if needed
632
+ if encode_this_message:
633
  if isinstance(message.content, str):
634
  new_messages.append(OpenAIMessage(
635
  role=message.role,
636
  content=urllib.parse.quote(message.content)
637
  ))
638
  elif isinstance(message.content, list):
639
+ # Handle list content (encode text parts, pass others)
640
  encoded_parts = []
641
  for part in message.content:
642
  if isinstance(part, dict) and part.get('type') == 'text':
 
643
  encoded_parts.append({
644
  'type': 'text',
645
  'text': urllib.parse.quote(part.get('text', ''))
646
  })
647
+ # Pass through non-text parts (like images) as is
648
+ elif isinstance(part, dict) and part.get('type') == 'image_url':
649
+ encoded_parts.append(part)
650
+ elif isinstance(part, ContentPartImage): # Handle Pydantic model case
651
+ encoded_parts.append(part)
652
+ # Add other potential non-text part types if necessary
653
+ else: # Pass through any other unknown part types
654
+ encoded_parts.append(part)
655
  new_messages.append(OpenAIMessage(
656
  role=message.role,
657
  content=encoded_parts
658
  ))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
659
  else:
660
+ # For non-string/list content, keep as is (shouldn't be encoded)
661
+ print(f"DEBUG: Passing through non-string/list content for message index {i} without encoding")
662
  new_messages.append(message)
663
 
664
  print(f"Created encrypted prompt with {len(new_messages)} messages")