omar0scarf commited on
Commit
cc68efa
·
verified ·
1 Parent(s): e0e0595

Delete README.md

Browse files
Files changed (1) hide show
  1. README.md +0 -430
README.md DELETED
@@ -1,430 +0,0 @@
1
- ---
2
- title: UI TARS API (Optimized)
3
- emoji: 🚀
4
- colorFrom: indigo
5
- colorTo: blue
6
- sdk: docker
7
- pinned: false
8
- ---
9
-
10
- # UI-TARS-1.5-7B API Server ⚡ (نسخة محسّنة)
11
-
12
- <div align="center">
13
-
14
- [![Hugging Face](https://img.shields.io/badge/Hugging%20Face-Spaces-yellow.svg)](https://huggingface.co/spaces)
15
- [![Model](https://img.shields.io/badge/Model-UI--TARS--1.5--7B-blue.svg)](https://huggingface.co/ByteDance-Seed/UI-TARS-1.5-7B)
16
- [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE)
17
- [![Speed](https://img.shields.io/badge/Speed-⚡%20Lightning%20Fast-green.svg)]()
18
-
19
- **نسخة محسّنة للعمل بسرعة فائقة على Hugging Face Spaces المجاني!**
20
-
21
- </div>
22
-
23
- ---
24
-
25
- ## 🌟 ما الجديد في هذه النسخة؟
26
-
27
- ### ✨ التحسينات الرئيسية
28
-
29
- - ⚡ **سرعة فائقة**: يستخدم Hugging Face Inference API بدلاً من تحميل النموذج محلياً
30
- - 💰 **مجاني 100%**: يعمل على Hugging Face Spaces المجاني بدون GPU
31
- - 🚀 **استجابة فورية**: لا حاجة لانتظار تحميل النموذج (7+ دقائق)
32
- - 📦 **حجم صغير**: Docker image أقل من 500 MB (بدلاً من 15+ GB)
33
- - 🔄 **إعادة محاولة تلقائية**: يتعامل مع حالة تحميل النموذج تلقائياً
34
- - 🌐 **API متوافقة 100%**: نفس endpoints مع أداء أفضل
35
-
36
- ### 📊 المقارنة
37
-
38
- | الميزة | النسخة القديمة | النسخة الجديدة (محسّنة) |
39
- |--------|----------------|------------------------|
40
- | وقت البدء | 7-10 دقائق | < 30 ثانية |
41
- | استهلاك الذاكرة | 16+ GB | < 1 GB |
42
- | يتطلب GPU | ✅ نعم | ❌ لا |
43
- | مجاني على HF | ❌ لا | ✅ نعم |
44
- | حجم Docker | 15+ GB | < 500 MB |
45
- | سرعة الاستجابة | متوسطة | سريعة جداً |
46
-
47
- ---
48
-
49
- ## 🚀 البدء السريع
50
-
51
- ### 1️⃣ النشر على Hugging Face Spaces
52
-
53
- #### الطريقة الأسهل (بدون كود):
54
-
55
- 1. اذهب إلى [Hugging Face Spaces](https://huggingface.co/new-space)
56
- 2. اختر **Docker** كـ SDK
57
- 3. اختر **CPU Basic** (مجاني!)
58
- 4. قم برفع الملفات التالية:
59
- - `app.py`
60
- - `requirements.txt`
61
- - `Dockerfile`
62
- - `action_parser.py`
63
- - `README.md`
64
- 5. انتظر 30 ثانية فقط! 🎉
65
-
66
- #### متغيرات البيئة (اختيارية):
67
-
68
- ```bash
69
- # في إعدادات Space الخاص بك، أضف:
70
- HF_TOKEN=hf_xxx... # فقط للنماذج الخاصة
71
- TEMPERATURE=0.7
72
- TOP_P=0.9
73
- MAX_TOKENS=2048
74
- ```
75
-
76
- ### 2️⃣ التشغيل المحلي
77
-
78
- ```bash
79
- # استنساخ المشروع
80
- git clone <your-repo-url>
81
- cd ui-tars-api
82
-
83
- # تثبيت المتطلبات
84
- pip install -r requirements.txt
85
-
86
- # تشغيل السيرفر
87
- python app.py
88
- ```
89
-
90
- السيرفر سيعمل على: `http://localhost:7860`
91
-
92
- ---
93
-
94
- ## 📖 دليل الاستخدام
95
-
96
- ### أمثلة Python
97
-
98
- #### 1. استدعاء بسيط
99
-
100
- ```python
101
- import requests
102
- import base64
103
-
104
- # قراءة صورة
105
- with open("screenshot.png", "rb") as f:
106
- image_b64 = base64.b64encode(f.read()).decode()
107
-
108
- # إرسال طلب
109
- response = requests.post(
110
- "https://your-space.hf.space/v1/inference",
111
- json={
112
- "instruction": "انقر على زر البحث",
113
- "image": image_b64,
114
- "system_prompt_type": "computer"
115
- }
116
- )
117
-
118
- result = response.json()
119
- print(f"التفكير: {result['thought']}")
120
- print(f"الإجراء: {result['action']}")
121
- print(f"الإحداثيات: {result['coordinates']}")
122
- ```
123
-
124
- #### 2. رفع ملف
125
-
126
- ```python
127
- with open("screenshot.png", "rb") as f:
128
- response = requests.post(
129
- "https://your-space.hf.space/v1/inference/file",
130
- files={"image": ("screenshot.png", f, "image/png")},
131
- data={
132
- "instruction": "اضغط على أيقونة الإعدادات",
133
- "system_prompt_type": "computer"
134
- }
135
- )
136
-
137
- print(response.json())
138
- ```
139
-
140
- #### 3. تنسيق OpenAI
141
-
142
- ```python
143
- response = requests.post(
144
- "https://your-space.hf.space/v1/chat/completions",
145
- json={
146
- "model": "ui-tars-1.5-7b",
147
- "messages": [
148
- {
149
- "role": "user",
150
- "content": [
151
- {"type": "text", "text": "ابحث عن زر تسجيل الدخول"},
152
- {
153
- "type": "image_url",
154
- "image_url": {
155
- "url": f"data:image/png;base64,{image_b64}"
156
- }
157
- }
158
- ]
159
- }
160
- ]
161
- }
162
- )
163
-
164
- print(response.json()["choices"][0]["message"]["content"])
165
- ```
166
-
167
- #### 4. الحصول على إحداثيات عنصر
168
-
169
- ```python
170
- with open("screenshot.png", "rb") as f:
171
- response = requests.post(
172
- "https://your-space.hf.space/v1/grounding",
173
- files={"image": ("screenshot.png", f, "image/png")},
174
- data={
175
- "instruction": "ابحث عن زر الإرسال",
176
- "image_width": 1920,
177
- "image_height": 1080
178
- }
179
- )
180
-
181
- coords = response.json().get("absolute_coordinates")
182
- print(f"الإحداثيات: x={coords['x']}, y={coords['y']}")
183
- ```
184
-
185
- ### استخدام JavaScript/TypeScript
186
-
187
- ```javascript
188
- // مثال باستخدام fetch
189
- const response = await fetch("https://your-space.hf.space/v1/inference", {
190
- method: "POST",
191
- headers: {
192
- "Content-Type": "application/json"
193
- },
194
- body: JSON.stringify({
195
- instruction: "Click the submit button",
196
- image: imageBase64,
197
- system_prompt_type: "computer"
198
- })
199
- });
200
-
201
- const result = await response.json();
202
- console.log("Action:", result.action);
203
- console.log("Coordinates:", result.coordinates);
204
- ```
205
-
206
- ---
207
-
208
- ## 🎯 الـ Endpoints المتاحة
209
-
210
- | Endpoint | الطريقة | الوصف |
211
- |----------|---------|--------|
212
- | `/` | GET | معلومات API |
213
- | `/health` | GET | فحص الحالة |
214
- | `/model/info` | GET | معلومات النموذج |
215
- | `/v1/inference` | POST | استدلال مع base64 |
216
- | `/v1/inference/file` | POST | استدلال برفع ملف |
217
- | `/v1/chat/completions` | POST | متوافق مع OpenAI |
218
- | `/v1/grounding` | POST | الحصول على إحداثيات |
219
- | `/v1/batch/inference` | POST | معالجة دفعة |
220
-
221
- ### التوثيق التفاعلي
222
-
223
- بعد تشغيل السيرفر، تفضل بزيارة:
224
- - **Swagger UI**: `https://your-space.hf.space/docs`
225
- - **ReDoc**: `https://your-space.hf.space/redoc`
226
-
227
- ---
228
-
229
- ## 🎮 الإجراءات المدعومة
230
-
231
- ### للكمبيوتر (Computer Use)
232
-
233
- | الإجراء | الوصف | مثال |
234
- |---------|--------|------|
235
- | `click` | نقرة واحدة | `click(start_box='<\|box_start\|>(500,300)<\|box_end\|>')` |
236
- | `left_double` | نقرة مزدوجة | `left_double(start_box='...')` |
237
- | `right_single` | نقرة يمين | `right_single(start_box='...')` |
238
- | `drag` | سحب | `drag(start_box='...', end_box='...')` |
239
- | `type` | كتابة نص | `type(content='مرحباً')` |
240
- | `hotkey` | اختصار لوحة مفاتيح | `hotkey(key='ctrl+c')` |
241
- | `scroll` | تمرير | `scroll(start_box='...', direction='down')` |
242
- | `wait` | انتظار | `wait()` |
243
- | `finished` | انتهى | `finished(content='تم')` |
244
-
245
- ### للجوال (Mobile Use)
246
-
247
- | الإجراء | الوصف |
248
- |---------|--------|
249
- | `long_press` | ضغطة طويلة |
250
- | `open_app` | فتح تطبيق |
251
- | `press_home` | زر الرئيسية |
252
- | `press_back` | زر الرجوع |
253
-
254
- ---
255
-
256
- ## 🔧 كيف يعمل؟
257
-
258
- ### البنية التقنية
259
-
260
- ```
261
- ┌─────────────┐
262
- │ Client │
263
- │ (Your App) │
264
- └──────┬──────┘
265
- │ HTTP Request
266
- ↓
267
- ┌─────────────────────┐
268
- │ FastAPI Server │
269
- │ (Your HF Space) │
270
- └──────┬──────────────┘
271
- │ API Call
272
- ↓
273
- ┌──────────────────────────┐
274
- │ HF Inference API │
275
- │ (ByteDance UI-TARS-1.5) │
276
- └──────┬───────────────────┘
277
- │ AI Response
278
- ↓
279
- ┌─────────────────────┐
280
- │ Parsed Action │
281
- │ + Coordinates │
282
- └─────────────────────┘
283
- ```
284
-
285
- ### المزايا الرئيسية
286
-
287
- 1. **بدون تحميل النموذج**: يستخدم Hugging Face Inference API
288
- 2. **معالجة ذكية**: يحاول تلقائياً 3 مرات إذا كان النموذج يُحمّل
289
- 3. **تحليل متقدم**: يستخرج الأفكار والإجراءات والإحداثيات
290
- 4. **متوافق 100%**: نفس API السابق مع أداء أفضل
291
-
292
- ---
293
-
294
- ## 🔗 التكامل مع UI-TARS-desktop
295
-
296
- هذا API متوافق تماماً مع [UI-TARS-desktop](https://github.com/bytedance/UI-TARS-desktop):
297
-
298
- ### خطوات الإعداد:
299
-
300
- 1. افتح إعدادات UI-TARS-desktop
301
- 2. اضبط **VLM Provider** على `Custom`
302
- 3. اضبط **VLM Base URL** على: `https://your-space.hf.space/v1`
303
- 4. اضبط **VLM Model Name** على: `ui-tars-1.5-7b`
304
- 5. (اختياري) اضبط **VLM API Key** إذا كان Space خاص
305
-
306
- ---
307
-
308
- ## 🐛 استكشاف الأخطاء
309
-
310
- ### المشكلة: "Model is loading"
311
-
312
- **السبب**: النموذج يُحمّل على خوادم Hugging Face (يحدث في أول استخدام)
313
-
314
- **الحل**:
315
- ```python
316
- # السيرفر يحاول تلقائياً 3 مرات مع انتظار
317
- # فقط انتظر 10-20 ثانية وأعد المحاولة
318
- import time
319
- time.sleep(15)
320
- # ثم أعد الطلب
321
- ```
322
-
323
- ### المشكلة: "API not available"
324
-
325
- **الحل**:
326
- ```python
327
- # تحقق من حالة API
328
- response = requests.get("https://your-space.hf.space/health")
329
- print(response.json())
330
- ```
331
-
332
- ### المشكلة: "Rate limited"
333
-
334
- **السبب**: طلبات كثيرة جداً
335
-
336
- **الحل**:
337
- ```python
338
- # أضف تأخير بين الطلبات
339
- import time
340
- time.sleep(2) # ثانيتان بين الطلبات
341
- ```
342
-
343
- ---
344
-
345
- ## 📚 مراجع
346
-
347
- - [UI-TARS Paper](https://arxiv.org/abs/2501.12326)
348
- - [UI-TARS GitHub](https://github.com/bytedance/UI-TARS)
349
- - [UI-TARS-desktop](https://github.com/bytedance/UI-TARS-desktop)
350
- - [Hugging Face Model](https://huggingface.co/ByteDance-Seed/UI-TARS-1.5-7B)
351
- - [HF Inference API Docs](https://huggingface.co/docs/api-inference)
352
-
353
- ---
354
-
355
- ## 💡 نصائح للأداء الأفضل
356
-
357
- ### 1. تحسين الصور
358
-
359
- ```python
360
- from PIL import Image
361
-
362
- # قلل حجم الصورة لسرعة أكبر
363
- img = Image.open("screenshot.png")
364
- img = img.resize((1280, 720)) # بدلاً من 1920x1080
365
- ```
366
-
367
- ### 2. استخدام Cache
368
-
369
- ```python
370
- import functools
371
- import hashlib
372
-
373
- @functools.lru_cache(maxsize=100)
374
- def get_action(instruction_hash, image_hash):
375
- # يحفظ النتائج المتكررة
376
- pass
377
- ```
378
-
379
- ### 3. Batch Processing
380
-
381
- ```python
382
- # معالجة عدة طلبات دفعة واحدة
383
- requests_batch = [
384
- {"instruction": "Click button 1", "image": img1},
385
- {"instruction": "Click button 2", "image": img2},
386
- ]
387
-
388
- response = requests.post(
389
- "https://your-space.hf.space/v1/batch/inference",
390
- json={"requests": requests_batch}
391
- )
392
- ```
393
-
394
- ---
395
-
396
- ## 🤝 المساهمة
397
-
398
- نرحب بالمساهمات! إذا كان لديك اقتراحات أو تحسينات:
399
-
400
- 1. Fork المشروع
401
- 2. أنشئ branch للميزة الجديدة
402
- 3. Commit التغييرات
403
- 4. Push إلى Branch
404
- 5. افتح Pull Request
405
-
406
- ---
407
-
408
- ## 📄 الترخيص
409
-
410
- هذا المشروع مرخص بموجب Apache License 2.0
411
-
412
- ---
413
-
414
- ## 🙏 شكر وتقدير
415
-
416
- - [ByteDance Seed Team](https://huggingface.co/ByteDance-Seed) على النموذج الرائع
417
- - [Qwen2.5-VL](https://huggingface.co/Qwen) على البنية الأساسية
418
- - [Hugging Face](https://huggingface.co) على Inference API المجاني
419
-
420
- ---
421
-
422
- ## ⭐ إذا أعجبك المشروع
423
-
424
- لا تنسَ وضع نجمة ⭐ على GitHub!
425
-
426
- <div align="center">
427
-
428
- **صُنع بـ ❤️ للمجتمع العربي**
429
-
430
- </div>