bahi-bh commited on
Commit
5223410
·
verified ·
1 Parent(s): 264776a

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +135 -0
app.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ from flask_cors import CORS
3
+ import g4f
4
+
5
+ app = Flask(__name__)
6
+ CORS(app)
7
+
8
+ # ============================================
9
+ # قائمة الموديلات
10
+ # ============================================
11
+ MODELS = {
12
+ "gpt-4o": "gpt-4o",
13
+ "gpt-4o-mini": "gpt-4o-mini",
14
+ "gpt-3.5-turbo": "gpt-3.5-turbo",
15
+ "gemini-2.0-flash": "gemini-2.0-flash",
16
+ }
17
+
18
+
19
+ @app.route("/", methods=["GET"])
20
+ def home():
21
+ """الصفحة الرئيسية - API Info"""
22
+ return jsonify({
23
+ "status": "running ✅",
24
+ "service": "G4F API Server",
25
+ "endpoints": {
26
+ "/chat": "POST - إرسال رسالة",
27
+ "/models": "GET - قائمة الموديلات",
28
+ "/health": "GET - فحص الحالة",
29
+ },
30
+ "usage": {
31
+ "method": "POST",
32
+ "url": "/chat",
33
+ "body": {
34
+ "message": "مرحباً",
35
+ "model": "gpt-4o-mini",
36
+ "history": []
37
+ }
38
+ }
39
+ })
40
+
41
+
42
+ @app.route("/health", methods=["GET"])
43
+ def health():
44
+ """فحص حالة السيرفر"""
45
+ return jsonify({"status": "healthy ✅"})
46
+
47
+
48
+ @app.route("/models", methods=["GET"])
49
+ def list_models():
50
+ """قائمة الموديلات المتاحة"""
51
+ return jsonify({
52
+ "models": list(MODELS.keys()),
53
+ "default": "gpt-4o-mini"
54
+ })
55
+
56
+
57
+ @app.route("/chat", methods=["POST"])
58
+ def chat():
59
+ """إرسال رسالة والحصول على رد"""
60
+ try:
61
+ data = request.get_json()
62
+
63
+ # التحقق من البيانات
64
+ if not data or "message" not in data:
65
+ return jsonify({
66
+ "error": "الرجاء إرسال 'message' في الطلب"
67
+ }), 400
68
+
69
+ message = data["message"]
70
+ model = data.get("model", "gpt-4o-mini")
71
+ history = data.get("history", [])
72
+
73
+ # بناء الرسائل
74
+ messages = []
75
+ for msg in history:
76
+ messages.append(msg)
77
+ messages.append({"role": "user", "content": message})
78
+
79
+ # إرسال الطلب
80
+ response = g4f.ChatCompletion.create(
81
+ model=model,
82
+ messages=messages,
83
+ stream=False,
84
+ )
85
+
86
+ return jsonify({
87
+ "success": True,
88
+ "response": response,
89
+ "model": model,
90
+ "history": messages + [{"role": "assistant", "content": response}]
91
+ })
92
+
93
+ except Exception as e:
94
+ return jsonify({
95
+ "success": False,
96
+ "error": str(e),
97
+ "tip": "جرب تغيير الموديل أو أعد المحاولة"
98
+ }), 500
99
+
100
+
101
+ # ============================================
102
+ # سيرفر WebSocket للبث المباشر (Stream)
103
+ # ============================================
104
+ @app.route("/chat/stream", methods=["POST"])
105
+ def chat_stream():
106
+ """بث مباشر للرد"""
107
+ try:
108
+ data = request.get_json()
109
+ message = data["message"]
110
+ model = data.get("model", "gpt-4o-mini")
111
+
112
+ def generate():
113
+ response = g4f.ChatCompletion.create(
114
+ model=model,
115
+ messages=[{"role": "user", "content": message}],
116
+ stream=True,
117
+ )
118
+ for chunk in response:
119
+ yield chunk
120
+
121
+ return app.response_class(
122
+ generate(),
123
+ mimetype='text/plain'
124
+ )
125
+
126
+ except Exception as e:
127
+ return jsonify({"error": str(e)}), 500
128
+
129
+
130
+ if __name__ == "__main__":
131
+ print("=" * 50)
132
+ print("🚀 G4F API Server Started!")
133
+ print("📡 http://0.0.0.0:8080")
134
+ print("=" * 50)
135
+ app.run(host="0.0.0.0", port=7860, debug=False)