CoolFace
Apppublic

AliceTheDreamer/gemini-rproxy

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
func.py112 linesDownload Raw Back to root
1from flask import jsonify
2import logging
3import os
4logger = logging.getLogger(__name__)
5
6request_counts = {}
7
8password = os.environ['password']
9
10def authenticate_request(request):
11    auth_header = request.headers.get('Authorization')
12
13    if not auth_header:
14        return False, jsonify({'error': '缺少Authorization请求头'}), 401
15
16    try:
17        auth_type, pass_word = auth_header.split(' ', 1)
18    except ValueError:
19        return False, jsonify({'error': 'Authorization请求头格式错误'}), 401
20
21    if auth_type.lower() != 'bearer':
22        return False, jsonify({'error': 'Authorization类型必须为Bearer'}), 401
23
24    if pass_word != password:
25        return False, jsonify({'error': '未授权'}), 401
26
27    return True, None, None
28
29def process_messages_for_gemini(messages, use_system_prompt=False):
30    gemini_history = []
31    errors = []
32    system_instruction_text = ""
33    is_system_phase = use_system_prompt
34    for i, message in enumerate(messages):
35        role = message.get('role')
36        content = message.get('content')
37
38        if isinstance(content, str):
39            if is_system_phase and role == 'system':
40                if system_instruction_text:
41                    system_instruction_text += "\n" + content
42                else:
43                    system_instruction_text = content
44            else:
45                is_system_phase = False
46
47                if role in ['user', 'system']:
48                    role_to_use = 'user'
49                elif role == 'assistant':
50                    role_to_use = 'model'
51                else:
52                    errors.append(f"Invalid role: {role}")
53                    continue
54
55                if gemini_history and gemini_history[-1]['role'] == role_to_use:
56                    gemini_history[-1]['parts'].append({"text": content})
57                else:
58                    gemini_history.append({"role": role_to_use, "parts": [{"text": content}]})
59
60        elif isinstance(content, list):
61            parts = []
62            for item in content:
63                if item.get('type') == 'text':
64                    parts.append({"text": item.get('text')})
65                elif item.get('type') == 'image_url':
66                    image_data = item.get('image_url', {}).get('url', '')
67                    if image_data.startswith('data:image/'):
68                        try:
69                            mime_type, base64_data = image_data.split(';')[0].split(':')[1], image_data.split(',')[1]
70                            parts.append({
71                                "inline_data": {
72                                    "mime_type": mime_type,
73                                    "data": base64_data
74                                }
75                            })
76                        except (IndexError, ValueError):
77                            errors.append(f"Invalid data URI for image: {image_data}")
78                    else:
79                        errors.append(f"Invalid image URL format for item: {item}")
80                elif item.get('type') == 'file_url':
81                    file_data = item.get('file_url', {}).get('url', '')
82                    if file_data.startswith('data:'):
83                        try:
84                            mime_type, base64_data = file_data.split(';')[0].split(':')[1], file_data.split(',')[1]
85                            parts.append({
86                                "inline_data": {
87                                    "mime_type": mime_type,
88                                    "data": base64_data
89                                }
90                            })
91                        except (IndexError, ValueError):
92                            errors.append(f"Invalid data URI for file: {file_data}")
93                    else:
94                        errors.append(f"Invalid file URL format for item: {item}")
95
96            if parts:
97                if role in ['user', 'system']:
98                    role_to_use = 'user'
99                elif role == 'assistant':
100                    role_to_use = 'model'
101                else:
102                    errors.append(f"Invalid role: {role}")
103                    continue
104                if gemini_history and gemini_history[-1]['role'] == role_to_use:
105                    gemini_history[-1]['parts'].extend(parts) 
106                else:
107                    gemini_history.append({"role": role_to_use, "parts": parts})
108
109    if errors:
110        return gemini_history, {"parts": [{"text": system_instruction_text}]}, (jsonify({'error': errors}), 400)
111    else:
112        return gemini_history, {"parts": [{"text": system_instruction_text}]}, None