diff --git a/eval/dovodka/proba_gemini.py b/eval/dovodka/proba_gemini.py new file mode 100644 index 00000000..2f9b0ca7 --- /dev/null +++ b/eval/dovodka/proba_gemini.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""ЖИВАЯ ПРОБА: доезжает ли до `gemini-3.1-flash-lite` ПОЛНЫЙ системный промт. ~$0.002, касса ФД-N. + +⚠ ЗАЧЕМ. Клетки арма `RE` (тот же промт-роль на gemini) куплены 22.08 и вернули годный перевод, но +их `prompt_tokens` — **515 медиана против 3263 у того же промта на `deepseek-v4-pro`**, то есть +шестая часть инструкции. Скрытых токенов нет: `total = prompt + completion` побайтно, значит это не +особенность биллинга размышления (`additive_total`, квирк-бюллетень :157), а вопрос о ДОСТАВКЕ. + +Гадать запрещено правилом двух направлений (решение владельца 10.07): аномалия на проводе → сперва +вендор-дока и живая проба, потом диагноз. В бюллетене такого квирка НЕТ — значит проба. + +Различает ровно две гипотезы, и обе фальсифицируемы: + · **счётчик врёт, промт доезжает** — маркер из системного сообщения будет исполнен, а + `prompt_tokens` останется маленьким и НЕ вырастет между коротким и полным промтом; + · **промт не доезжает** — маркер не исполнится либо `prompt_tokens` не отреагирует на рост + системного сообщения в 15 раз. + +Маркер выбран так, чтобы его нельзя было выполнить случайно и чтобы он не менял задачу перевода. +""" +from __future__ import annotations + +import importlib.util +import sys +from pathlib import Path + +ZONE = Path(__file__).resolve().parent +MARK = "Первой строкой ответа напиши ровно: ГЕЙТ-ОК. Затем перевод." + + +def _load(name: str, path: Path): + spec = importlib.util.spec_from_file_location(name, path) + mod = importlib.util.module_from_spec(spec) + sys.modules[name] = mod + spec.loader.exec_module(mod) + return mod + + +def main() -> int: + R = _load("rol_probe", ZONE / "rol.py") + R.PAIRS["en"]["wire"]() + u = R.chosen("en")[0] + full = R.rol_msgs("en", u["source"], "RN") + sysm = "\n\n".join(x["content"] for x in full if x["role"] == "system") + usr = next(x["content"] for x in full if x["role"] == "user") + led = R.MONEY.Guarded("ФД-N", default_expect=0.01) + cases = [("короткий system", "short", "Ты — переводчик. " + MARK), + ("ПОЛНЫЙ system роли", "full", sysm + "\n\n" + MARK)] + for name, slug, s in cases: + msgs = [{"role": "system", "content": s}, {"role": "user", "content": usr}] + rec = R.MONEY.purchase(led, f"dv-n-probe-gemsys-{slug}", "gemini-3.1-flash-lite", + R.ED22.client("gemini-3.1-flash-lite"), + R.call_kwargs("gemini-3.1-flash-lite", msgs, "RE"), + role="probe", uid=u["uid"], arm="RE", pair="en") + c = rec.get("content") or "" + print(f"\n{name}: system {len(s)} знаков") + print(f" prompt_tokens {rec.get('prompt_tokens')} · completion {rec.get('completion_tokens')}" + f" · finish {rec.get('finish')}") + print(f" маркер ГЕЙТ-ОК исполнен: {'ДА' if 'ГЕЙТ-ОК' in c else '⛔ НЕТ'}") + print(f" начало ответа: {c[:90]!r}") + R.MONEY.report() + return 0 + + +if __name__ == "__main__": + sys.exit(main())