SilverElixir commited on
Commit
169a54e
·
1 Parent(s): eeb83cf

Probe tools: repeat loop for 500-rate measurement

Browse files
Files changed (2) hide show
  1. docs/PROMPT_EVAL.md +9 -0
  2. eval/persona_models.py +26 -15
docs/PROMPT_EVAL.md CHANGED
@@ -52,6 +52,15 @@ OR-модель заметно слабее — согласуется с жал
52
  контрольный прогон по «Как гонять» после правки роутера (если она будет
53
  одобрена).
54
 
 
 
 
 
 
 
 
 
 
55
  ## Как гонять
56
 
57
  1. Каждый вопрос — отдельным сообщением, по порядку. Контекст между вопросами
 
52
  контрольный прогон по «Как гонять» после правки роутера (если она будет
53
  одобрена).
54
 
55
+ ### Проба инструментов (22.10.2026, Actions)
56
+
57
+ `probe-tools` (вопрос «сколько сегодня стоит доллар»): gemma-4-26b-a4b-it
58
+ без инструментов отвечает честно («проверьте курс в банком приложении»),
59
+ с `google_search` — HTTP 500 INTERNAL; gemma-4-31b-it с инструментом — та же
60
+ 500. Итог: search grounding через API у Gemma недоступен, свежесть остаётся
61
+ на цепочке Gemini 2.5 (и там же DuckDuckGo-сниппет как резерв). В роутере
62
+ правка не нужна: `no_search=True` подтверждено провайдером, а не догадкой.
63
+
64
  ## Как гонять
65
 
66
  1. Каждый вопрос — отдельным сообщением, по порядку. Контекст между вопросами
eval/persona_models.py CHANGED
@@ -623,21 +623,31 @@ def cmd_probe_tools(args: argparse.Namespace) -> int:
623
  client = genai.Client(api_key=key)
624
  model = args.model
625
  contents = [types.Content(role="user", parts=[types.Part.from_text(text="Сколько сегодня стоит доллар? Ответь коротко.")])]
626
- for label, tools in (
627
- ("без инструментов", None),
628
- ("с google_search", [types.Tool(google_search=types.GoogleSearch())]),
629
- ):
630
- try:
631
- config = types.GenerateContentConfig(system_instruction=get_system_prompt(model), tools=tools) if tools else types.GenerateContentConfig(system_instruction=get_system_prompt(model))
632
- resp = client.models.generate_content(model=model, contents=contents, config=config)
633
- answer = (resp.text or "").strip()
634
- gm = None
635
- cands = resp.candidates or []
636
- if cands:
637
- gm = getattr(cands[0], "grounding_metadata", None)
638
- log(f"{model} {label}: ответ {len(answer)} симв., grounding {'ЕСТЬ' if gm else 'нет'} — {answer[:160]!r}")
639
- except Exception as exc:
640
- log(f"{model} {label}: ОШИБКА {exc}")
 
 
 
 
 
 
 
 
 
 
641
  return 0
642
 
643
 
@@ -661,6 +671,7 @@ def main() -> int:
661
 
662
  probe = sub.add_parser("probe-tools", help="проверить, тянет ли Gemma инструмент поиска")
663
  probe.add_argument("--model", default="gemma-4-31b-it")
 
664
  probe.set_defaults(func=cmd_probe_tools)
665
 
666
  args = parser.parse_args()
 
623
  client = genai.Client(api_key=key)
624
  model = args.model
625
  contents = [types.Content(role="user", parts=[types.Part.from_text(text="Сколько сегодня стоит доллар? Ответь коротко.")])]
626
+ rates = {"ok": 0, "search_ok": 0}
627
+ for attempt in range(args.repeat):
628
+ for label, tools in (
629
+ ("без инструментов", None),
630
+ ("с google_search", [types.Tool(google_search=types.GoogleSearch())]),
631
+ ):
632
+ try:
633
+ config = types.GenerateContentConfig(system_instruction=get_system_prompt(model), tools=tools) if tools else types.GenerateContentConfig(system_instruction=get_system_prompt(model))
634
+ resp = client.models.generate_content(model=model, contents=contents, config=config)
635
+ answer = (resp.text or "").strip()
636
+ gm = None
637
+ cands = resp.candidates or []
638
+ if cands:
639
+ gm = getattr(cands[0], "grounding_metadata", None)
640
+ if tools:
641
+ rates["search_ok"] += 1 if gm else 0
642
+ else:
643
+ rates["ok"] += 1
644
+ time.sleep(20)
645
+ log(f"{model} {label}: ответ {len(answer)} симв., grounding {'ЕСТЬ' if gm else 'нет'} — {answer[:160]!r}")
646
+ except Exception as exc:
647
+ time.sleep(20)
648
+ log(f"{model} {label}: ОШИБКА {str(exc)[:140]}")
649
+ total = args.repeat
650
+ log(f"{model}: попыток с поиском {total}, успешных с grounding {rates['search_ok']}; без инструментов ok {rates['ok']}/{total}")
651
  return 0
652
 
653
 
 
671
 
672
  probe = sub.add_parser("probe-tools", help="проверить, тянет ли Gemma инструмент поиска")
673
  probe.add_argument("--model", default="gemma-4-31b-it")
674
+ probe.add_argument("--repeat", type=int, default=1, help="повторов каждой пробы — доля 500 у поиска")
675
  probe.set_defaults(func=cmd_probe_tools)
676
 
677
  args = parser.parse_args()