Benchmarking
Benchmarking هو مسار مشغّل. يستخدم estacoda bench run ومحولات Harbor وملفات artifacts؛ ولا يغيّر تجربة EstaCoda CLI العادية.
الأولوية
استخدم هذا الترتيب:
- Terminal-Bench local smoke
- Terminal-Bench Harbor smoke
- Terminal-Bench full baseline
- مقارنة Terminal-Bench مع وكيل آخر باستخدام النموذج نفسه
- SWE-bench Lite smoke
- SWE-bench Verified baseline
- GAIA لاحقًا
يأتي Terminal-Bench أولًا لأنه يختبر حلقة الوكيل الطرفية كاملة: استخدام shell، والإعداد، والتصحيح، والتكرار، والتعافي، وتغييرات workspace.
يلف estacoda bench run تعليمات المهمة بعقد تنفيذ خاص بالـ benchmark قبل دخول runtime. يوضح هذا العقد للوكيل أن نجاح benchmark يُقاس بحالة workspace أو العملية أو verifier، وليس بالنص فقط، وأن عليه استخدام أدوات الملفات والطرفية المتاحة عندما تتطلب المهمة تغييرات في workspace. هذا التغليف محدود بمسار benchmark CLI ولا يؤثر في جلسات EstaCoda العادية.
الفحوصات المحلية
شغّل smoke المحلي الآمن لـ CI:
pnpm run benchmark:smoke
شغّل اختبارات محول Harbor:
pnpm run benchmark:terminal-bench:adapter-test
هذه الفحوصات لا تستدعي نماذج حية ولا تنتج درجات عامة.
للتحقق من artifacts فقط من دون provider credentials، شغّل:
rm -rf /tmp/estacoda-bench-app /tmp/estacoda-summary.json /tmp/estacoda-events.jsonl
mkdir -p /tmp/estacoda-bench-app
estacoda bench run \
--instruction-file benchmarks/local-smoke/simple-file-task/instruction.txt \
--workspace /tmp/estacoda-bench-app \
--isolated-home \
--json-output /tmp/estacoda-summary.json \
--event-log /tmp/estacoda-events.jsonl
مع isolated home غير مهيأ، تكون حالة config_error صالحة. هذا smoke يتحقق من كتابة artifacts، وشكل schema، وredaction، وbenchmark: null، ووجود الحقل estimatedCostUsd دائمًا. الجواب النهائي متوقع فقط في live smoke مع إعداد provider/model صريح.
إذا لم يكن Harbor متاحًا محليًا، يبقى adapter مغطى باختبارات وحدة وcompile-check. شغّل Harbor one-task وfive-task validation في بيئة تحتوي Harbor قبل نشر نتائج benchmark.
Terminal-Bench Smoke
قبل التشغيل الكامل، استخدم Harbor smoke صغيرًا: خمس مهام، نموذج واحد، temperature واحدة، ومحاولة واحدة لكل مهمة.
export ESTACODA_BENCH_MODEL="anthropic/claude-sonnet"
export ESTACODA_BENCH_HOME="/tmp/estacoda-home"
export PYTHONPATH="/path/to/estacoda:${PYTHONPATH:-}"
harbor run \
-d terminal-bench/terminal-bench-2 \
-a benchmarks.terminal_bench.estacoda_harbor_agent:EstaCodaAgent \
--artifact /tmp/estacoda-terminal-bench \
-n 5
الهدف هو إثبات سلامة harness، لا الحصول على score.
نقاط Harbor الحادة
- يحتاج Harbor إلى Docker أو runtime حاويات مكافئ. على macOS/Colima، اجعل job/result directory الخاص بـ Harbor على مسار workspace مشترك مع Docker، مثل
.harbor-jobs/داخل checkout. تجنب host/tmpفي تشغيلات verifier إذا ظهرRewardFileNotFoundError. - يعمل
ESTACODA_BENCH_COMMANDداخل حاوية مهمة Terminal-Bench. لا تجعله يشير إلىnode_modulesالخاصة بـ macOS، أو binaries خاصة بالمضيف، أو مسار checkout غير موجود داخل الحاوية. استخدم runtime مبنيًا لـ Linux أو ابن/ثبّت EstaCoda داخل الحاوية. - تحتاج تشغيلات النموذج الحية إلى إعداد provider صريح: model id، credentials، temperature، وأي max-token setting. لا تعتمد على real user
~/.estacodahome. - بعض providers تفرض قيمة temperature محددة. سجّل القيمة الفعلية واضبط
ESTACODA_BENCH_TEMPERATUREعلى قيمة يدعمها provider. - قد تحتاج المهام الطويلة إلى provider-loop budgets صريحة. استخدم
ESTACODA_BENCH_MAX_PROVIDER_ITERATIONSوESTACODA_BENCH_MAX_PROVIDER_TOOL_CALLSوESTACODA_BENCH_MAX_PROVIDER_WALL_CLOCK_MSعندما تكون هذه الحدود جزءًا من run configuration. - في one-task probes، فضّل تمرير
ESTACODA_BENCH_TASK_IDإذا لم يمرر Harbor task identity إلى installed-agent context.
Full Baseline
بعد نجاح smoke، شغّل baseline الكامل لـ Terminal-Bench 2.0 بالإعدادات نفسها:
export ESTACODA_BENCH_MODEL="anthropic/claude-sonnet"
export ESTACODA_BENCH_HOME="/tmp/estacoda-home"
export ESTACODA_BENCH_TEMPERATURE="0"
export PYTHONPATH="/path/to/estacoda:${PYTHONPATH:-}"
harbor run \
-d terminal-bench/terminal-bench-2 \
-a benchmarks.terminal_bench.estacoda_harbor_agent:EstaCodaAgent \
--artifact /tmp/estacoda-terminal-bench
أبلِغ عن:
- إصدار EstaCoda وgit commit
- model provider وmodel id
- اسم benchmark وإصداره
- عدد المهام وعدد المحاولات
- temperature وإعداد max tokens
- pass rate
- median wall-clock time
- median estimated cost per task
- median provider calls وtool calls لكل مهمة
- الأمر الدقيق ومتغيرات البيئة
استخدم صياغة محافظة: baseline مبكر، وليس ادعاء leaderboard.
عند تشغيل adapter من source checkout محلي، اجعل PYTHONPATH يشير إلى checkout root. استخدم --artifact /tmp/estacoda-terminal-bench كي يجمع Harbor artifacts الخاصة بـ EstaCoda.
قاعدة المقارنة
قارِن:
same model in EstaCoda
vs
same model in another baseline agent
لا تصغ النتيجة باعتبارها EstaCoda ضد نموذج. الهدف هو عزل قيمة runtime.
لا تضبط السلوك لأجل benchmark
بعد smoke ذي الخمس مهام، أصلح فقط أخطاء harness أو runtime. لا تضف prompts خاصة بالمهام، أو فروعًا على أسماء المهام، أو أدوات benchmark-only، أو حالات خاصة لـ Terminal-Bench.
Artifacts
استخدم --out <dir> كالنمط المختصر canonical لـ artifacts. يمكن لـ harnesses التي تحتاج مسارات دقيقة تمرير --json-output <path> و--event-log <path> بدلًا من ذلك؛ ويبقى stdout وstderr عبر --out أو artifact directory الافتراضي المشتق.
يكتب كل estacoda bench run:
| Artifact | المعنى |
|---|---|
summary.json | run manifest يحتوي benchmark identity وEstaCoda identity وحالة التنفيذ وإعدادات النموذج والمقاييس ومسارات artifacts والجواب النهائي وتفاصيل الفشل |
events.ndjson أو مسار --event-log الصريح | stream أحداث runtime بعد redaction |
stdout.txt | ملخص تشغيل وجواب نهائي بعد redaction |
stderr.txt | رسالة فشل بعد redaction عند وجودها |
الحقل estimatedCostUsd موجود دائمًا وقد يكون null.
العزل
يستخدم benchmark mode سياسة container-benchmark:
- workspace صريح
- workspace trust محصور بهذا التشغيل
- لا توجد interactive approval prompts
- hard-deny command floor يبقى فعالًا
- لا وصول إلى real user home إلا إذا مُرّر صراحة
- لا memory أو session carryover افتراضيًا
- artifacts بعد redaction افتراضيًا
استخدم /tmp/estacoda-home أو isolated-home الافتراضي في المحول للتشغيلات العامة. لا تستخدم real ~/.estacoda home لـ benchmarks قابلة للإعادة.
SWE-bench لاحقًا
شغّل SWE-bench بعد Terminal-Bench. ابدأ بـ SWE-bench Lite، ثم SWE-bench Verified عندما تصبح EstaCoda موثوقة في فحص issues وrepos، وتعديل الملفات، وتشغيل الاختبارات، وإنتاج diffs نهائية، وتجنب التغييرات غير المتعلقة.