إعادة الصياغة والتدقيق اللغوي والتلخيص والترجمة وفحص الاقتباس بـ ٥٦ لغة، منها العربية. واجهة REST بسيطة تُخدَّم من حافة شبكة Cloudflare.
Same-origin
تخدم الواجهة حاليًا الطلبات الصادرة من adeptwrite.com نفسه فقط (دون ترويسات CORS). والوصول الخارجي بمفاتيح API مخطَّط له مع باقة Pro. ننشر هذا التوثيق مبكرًا ليكون العقد مفتوحًا وتتهيأ له.
الخلاصة
للواجهة v1 ثلاث نقاط نهاية فعّالة. تستقبل POST /api/v1/run ملف JSON فيه task وmode وlang وtext (حتى ٦٬٠٠٠ حرف) وتعيد نصًا عاديًا من نموذج على Cloudflare Workers AI يُختار حسب اللغة؛ وتقارن POST /api/v1/plagiarism النص بمصادر مفتوحة وتسرد كل مصدر بُحث فيه؛ وتعيد GET /api/v1/health حالة الخدمة. لا يُخزَّن النص ولا يُسجَّل، وطلبات الذكاء الاصطناعي محدودة بـ ٣٠ في الدقيقة لكل IP.
الأساسيات
العنوان الأساسي (Base URL):https://adeptwrite.com/api/v1
المصادقة: لا توجد بعد؛ يجب أن تصدر الطلبات من صفحات adeptwrite.com (same-origin). تصل مفاتيح API مع باقة Pro.
الخصوصية: لا يُخزَّن حقل text ولا يُسجَّل؛ وتحمل الاستجابات الترويسة Cache-Control: no-store.
الإصدارات: لن يتغير المسار /v1/ بما يكسر التوافق؛ وستستخدم التغييرات الجذرية المسار /v2/.
POST/api/v1/run
ينفّذ مهمة ذكاء اصطناعي واحدة على نص ويعيد النتيجة نصًا عاديًا (بلا مقدمة وبلا أسوار شيفرة Markdown).
الطلب
Field
Type
Required
Notes
task
string
✓
اسم المهمة؛ انظر قائمة المهام أدناه.
text
string
✓
النص المدخل، من حرف واحد إلى ٦٬٠٠٠ حرف.
lang
string
✓
لغة النتيجة: أحد رموز لغات الموقع الـ٥٦ (ar وen وid وja وpt-pt وzh-hant…؛ وتُحوَّل وسوم BCP 47 مثل pt-BR)، أو auto بمعنى «بلغة النص المدخل نفسها».
mode
string
—
نمط متاح لتلك الأداة، مثل Formal وAkademik وRingkas وPoin-poin (أسماء الأنماط هي تسميات السجل الإندونيسية). يُتجاهل في المهام التي لا أنماط لها.
options
object
—
خيارات خاصة بكل مهمة: from وto لمهمة translate (من أي لغة مدعومة إلى أي لغة أخرى؛ ويجوز أن تكون from هي auto؛ وتطلب sr-Cyrl الصربية بالحرف السيريلي)، وplatform (instagram أو tiktok أو linkedin) لمهمة caption، وحقول fields اختيارية مسمّاة لمهام bio وcoverletter وmeta. وتُتجاهل المفاتيح الأخرى.
الحالة 200 مع ok: true والنتيجة في output، والنموذج الذي أجاب فعلًا في model (ويختلف حين يتدخل نموذج احتياطي)، وزمن المعالجة بالمللي ثانية. وتُضاف truncated: true حين بلغت الإجابة حدّ طولها أو مهلتها فقُطعت.
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"ar","text":"ذهب الطلاب الى المدرسه صباحا."}'
مثال: JavaScript (fetch)
const res = await fetch('/api/v1/run', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ task: 'summarize', mode: 'Poin-poin', lang: 'ar', text }),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error.code + ': ' + data.error.message);
console.log(data.output);
POST/api/v1/plagiarism
يختار من ٤ إلى ٨ عبارات مميزة من النص، ويبحث عنها في مصادر مفتوحة بلغة النص (ويكيبيديا وويكي مصدر والنص الكامل في أرشيف الإنترنت وEurope PMC وDOAJ وarXiv؛ ومزوّد بحث ويب فقط إذا كان مهيّأً ومطلوبًا)، ثم يقيس درجة التداخل. لا يغادر الخادمَ إلا تلك العبارات القصيرة.
الطلب
Field
Type
Required
Notes
text
string
✓
٣٠ كلمة على الأقل و٦٬٠٠٠ حرف على الأكثر.
lang
string
✓
رمز إحدى لغات الموقع أو auto.
options
object
—
يجعل web: true الطلب يستعلم أيضًا من مزوّد بحث الويب إذا هيّأه المشغّل؛ ويبيّن الحقل webSearched في الاستجابة هل أجاب فعلًا.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json
{ "text": "…٣٠ كلمة على الأقل…", "lang": "ar", "options": { "web": false } }
الاستجابة
الحالة 200 مع score (الكلمات المتطابقة ÷ الكلمات، من ٠ إلى ١)، وmatches لكل مصدر مع مقاطع passages مظلّلة (مواضع الأحرف في نصك)، وsourcesSearched (المصادر التي دخلت إجاباتها في النتيجة بالضبط)، وsourcesSkipped مع السبب، وwebSearched.
curl -X POST https://adeptwrite.com/api/v1/plagiarism \
-H "Content-Type: application/json" \
-d '{"lang":"ar","text":"…٣٠ كلمة على الأقل…"}'
GET/api/v1/health
يبيّن الخدمات المفعّلة. لا يأخذ جسمًا (body) ولا يُحتسب من الحصة.
الاستجابة
الحالة 200. يكون ai بقيمة false طالما مفتاح إيقاف الذكاء الاصطناعي مفعّلًا؛ ويسرد plagiarism المصادر التي يستطيع الفاحص الاستعلام منها؛ ويصف aidetect التحليل المعمّق على الخادم لكاشف الذكاء الاصطناعي، وهو غير منشور بعد (تجيب POST /api/v1/aidetect بـ 503 disabled؛ أما الكاشف في الموقع فيعمل داخل متصفحك).
حتى ٦٬٠٠٠ حرف في الطلب الواحد (يعيد ما فوق ذلك 413 too_long).
لكل عنوان IP
٣٠ طلبًا في الدقيقة.
عام
١٠٠ طلب في الدقيقة على مستوى الخدمة كلها، إضافة إلى سقف يومي لميزات الذكاء الاصطناعي.
فحص الاقتباس
٥ فحوص في الدقيقة لكل IP و٦٠ في الدقيقة على مستوى الخدمة؛ والحد الأدنى ٣٠ كلمة.
المخرجات
ميزانية طول لكل مهمة، لا تتجاوز ٢٬٠٤٨ رمزًا (token)؛ وتحمل الإجابة المقطوعة truncated: true.
النموذج
يُختار حسب اللغة: تعمل الإنجليزية والإندونيسية على @cf/aisingapore/gemma-sea-lion-v4-27b-it، وكل اللغات الأخرى ومنها العربية على @cf/qwen/qwen3-30b-a3b-fp8. وحين يكون النموذج مشغولًا أو مقيّد المعدّل أو بطيئًا أو يفشل، ينتقل الطلب إلى النموذج التالي في السلسلة (Qwen3-30B، ثم @cf/google/gemma-4-26b-a4b-it، ثم @cf/meta/llama-3.3-70b-instruct-fp8-fast). ويسمّي الحقل model دائمًا النموذج الذي أجاب.
رموز الأخطاء
الحالة
الرمز
متى تحدث
400
invalid_request
JSON غير صالح، أو حقل مطلوب ناقص، أو task أو lang غير معروف.
413
too_long
يتجاوز text ٦٬٠٠٠ حرف.
403
forbidden
لم يصدر الطلب من صفحة على adeptwrite.com.
429
rate_limited
تجاوز الطلب حدّ الدقيقة لكل IP أو الحد العام. انتظر عدد الثواني الوارد في Retry-After.
429
quota_exceeded
استُنفد السقف اليومي لميزات الذكاء الاصطناعي. حاول في اليوم التالي (بالتوقيت العالمي UTC).
502
upstream
فشلت كل النماذج في السلسلة في الإجابة ضمن المهلة.
502
empty_output
أجابت النماذج لكن بنتيجة فارغة.
503
disabled
أوقف المشغّل الخدمة مؤقتًا، أو (بالنسبة إلى /api/v1/aidetect) لم تُنشر بعد.
صيغة الأخطاء
يُعاد كل خطأ بصيغة JSON مع رمز حالة HTTP المناسب وبالشكل نفسه:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
افحص ok أولًا، ثم اقرأ error.code للمعالجة البرمجية؛ ورسالة error.message آمنة للعرض على المستخدمين.
ممارسات موصى بها
أرسل النص على أجزاء (مثلًا فقرة فقرة) بدل مستند طويل واحد؛ فتعود النتائج أسرع ويسهل مراجعتها.
عالج الاستجابة 429 بإعادة محاولة متباعدة تصاعديًا (exponential back-off) لا بإعادة فورية.
لا ترسل بيانات شخصية أو سرية لا حاجة إليها، فحتى مع أننا لا نخزّنها يبقى تقليل البيانات مبدأً واجبًا.
قد يخطئ الذكاء الاصطناعي؛ فاعرض مخرجاته اقتراحًا للمراجعة لا حقيقة نهائية.
الأسئلة الشائعة
هل أستطيع استدعاء الواجهة من تطبيقي أو نطاقي؟
ليس بعد. لا يرسل الـ Worker حاليًا ترويسات CORS ولا يخدم إلا صفحات adeptwrite.com. والوصول الخارجي بمفاتيح API مخطَّط له مع باقة Pro، وسنحدّث هذا التوثيق حين يتوافر.
هل يُخزَّن النص المرسل إلى الواجهة؟
لا. يُمرَّر النص إلى النموذج لإنتاج الإجابة ثم يُتخلَّص منه. وتحتوي السجلات على بيانات وصفية فقط (رمز الحالة والمهمة والمدة). راجع سياسة الخصوصية لمعرفة التفاصيل كلها.
لماذا المخرجات نص عادي لا JSON منظم؟
تنتج كل مهمة نصًا واحدًا جاهزًا للاستخدام بلا مقدمة ولا أسوار Markdown ليُعرض في المحرر مباشرة. وتُخطَّط بنية إضافية (مثل قائمة التعديلات) لإصدار لاحق دون تغيير v1.
كم تبلغ تكلفة استخدام الواجهة؟
من adeptwrite.com مجانية، بحد ٣٠ طلب ذكاء اصطناعي في الدقيقة لكل IP. وسيُعلَن عن أسعار الوصول الخارجي مع باقة Pro، ولا يُحتسب أي مبلغ قبل ذلك.
أي نموذج يجيب عن طلبي؟
يتوقف ذلك على اللغة: تذهب الإنجليزية والإندونيسية إلى SEA-LION، وسائر اللغات، ومنها العربية، إلى Qwen3-30B. وإذا كان النموذج مشغولًا أو فشل أجاب النموذج التالي في سلسلة الاحتياط، ويسمّي حقل model في الاستجابة النموذج الذي أجاب.