返回提交历史
Modified
g4f/Provider/needs_auth/Antigravity.py
+17
-13
Modified
g4f/gui/server/backend_api.py
+4
-2
XFEstudio/gpt4free
fix: Update API key retrieval method and enhance error handling in backend API
1107316b
代码差异
2 个文件
+21
-15
@@ -962,6 +962,8 @@ class AntigravityProvider:
962
962
for msg in messages:
963
963
role = "model" if msg["role"] == "assistant" else "user"
964
964
965
content = msg.get("content")
966
965
967
# Handle tool role (OpenAI style)
966
968
if msg["role"] == "tool":
967
969
parts = [
@@ -970,9 +972,9 @@ class AntigravityProvider:
970
972
"name": msg.get("tool_call_id", "unknown_function"),
971
973
"response": {
972
974
"result": (
973
msg["content"]
974
if isinstance(msg["content"], str)
975
else json.dumps(msg["content"])
975
content
976
if isinstance(content, str)
977
else json.dumps(content)
976
978
)
977
979
},
978
980
}
@@ -982,8 +984,8 @@ class AntigravityProvider:
982
984
# Handle assistant messages with tool calls
983
985
elif msg["role"] == "assistant" and msg.get("tool_calls"):
984
986
parts = []
985
if isinstance(msg["content"], str) and msg["content"].strip():
986
parts.append({"text": msg["content"]})
987
if isinstance(content, str) and content.strip():
988
parts.append({"text": content})
987
989
for tool_call in msg["tool_calls"]:
988
990
if tool_call.get("type") == "function":
989
991
parts.append(
@@ -996,18 +998,18 @@ class AntigravityProvider:
996
998
)
997
999
998
1000
# Handle string content
999
elif isinstance(msg["content"], str):
1000
parts = [{"text": msg["content"]}]
1001
elif isinstance(content, str):
1002
parts = [{"text": content}]
1001
1003
1002
1004
# Handle array content (possibly multimodal)
1003
elif isinstance(msg["content"], list):
1005
elif isinstance(content, list):
1004
1006
parts = []
1005
for content in msg["content"]:
1006
ctype = content.get("type")
1007
for item in content:
1008
ctype = item.get("type")
1007
1009
if ctype == "text":
1008
parts.append({"text": content["text"]})
1010
parts.append({"text": item["text"]})
1009
1011
elif ctype == "image_url":
1010
image_url = content.get("image_url", {}).get("url")
1012
image_url = item.get("image_url", {}).get("url")
1011
1013
if not image_url:
1012
1014
continue
1013
1015
if image_url.startswith("data:"):
@@ -1024,8 +1026,10 @@ class AntigravityProvider:
1024
1026
}
1025
1027
}
1026
1028
)
1029
elif content is not None:
1030
parts = [{"text": str(content)}]
1027
1031
else:
1028
parts = [{"text": str(msg["content"])}]
1032
parts = []
1029
1033
1030
1034
format_messages.append({"role": role, "parts": parts})
1031
1035
@@ -317,11 +317,13 @@ class Backend_Api(Api):
317
317
return "Provider not found", 404
318
318
if not hasattr(provider_handler, "get_quota"):
319
319
return "Provider doesn't support get_quota", 500
320
request_api_key = request.headers.get("Authorization", "").replace("Bearer ", "")
320
request_api_key = request.headers.get("x-api-key")
321
321
try:
322
322
return jsonify(await provider_handler.get_quota(api_key=request_api_key))
323
323
except MissingAuthError as e:
324
324
return jsonify({"error": {"message": f"{type(e).__name__}: {e}"}}), 401
325
except NotImplementedError as e:
326
return jsonify({"error": {"message": f"{type(e).__name__}: {e}"}}), 501
325
327
except Exception as e:
326
328
logger.exception(e)
327
329
return jsonify({"error": {"message": f"{type(e).__name__}: {e}"}}), 500
@@ -358,7 +360,7 @@ class Backend_Api(Api):
358
360
@app.route('/backend-api/v2/version', methods=['GET'])
359
361
def version():
360
362
resp = jsonify(self.get_version())
361
if not if request.args.get("cache"):
363
if not request.args.get("cache"):
362
364
resp.set_cookie('fingerprint', base64.b64encode(str(int(time.time())).encode()).decode(), max_age=60 * 60 *2, httponly=True, secure=True)
363
365
return resp
364
366