freegate 0.6.26 → 0.6.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/compactor.js CHANGED
@@ -22,14 +22,14 @@ const KEEP_RECENT_TOKENS = 12000; // tokens — recent messages kept untouched (
22
22
  const MAX_COMPACT_THRESHOLD = 100000; // est tokens — cap for window-aware thresholds (≈200k real,
23
23
  // sits safely inside even 512k/1M windows without compacting too early)
24
24
  const SUMMARY_MAX_TOKENS = 2000; // tokens — summary length cap (detailed enough to not lose the work)
25
- const CHARS_PER_TOKEN = 2.0; // heuristic chars→tokens. 3.0 СЛИШКОМ занижал оценку:
26
- // window-aware фильтр не отсеивал groq (окно 131k) при
27
- // реальном контексте 140k+ groq принимал слишком большой
28
- // запрос и МОЛЧАЛ («no first token») → каскад → зависание
29
- // на минуты. 2.0: диалог 300k+ символов оценивается >131k
30
- // (groq отсеивается) и компактится (>60k), но обычный
31
- // рабочий диалог агента компактится реже, чем при 1.5.
32
- // Баланс: не занижаем для окна, не завышаем для компакций.
25
+ const CHARS_PER_TOKEN = 3.5; // heuristic chars→tokens. Реальная плотность ~3.5-4 chars
26
+ // на токен для кода/текста (был 3.6 изначально и работало).
27
+ // Ошибки: 2.0 ЗАВЫШАЛИ оценку вдвое компакция сжимала
28
+ // уже на 36k контексте (хотя модель держит 100-150k+).
29
+ // 3.5 даёт точную оценку: 36k токенов 36k→ не компактится,
30
+ // работаем до реальных ~60k+ живого диалога.
31
+ // WINDOW_SAFETY (1.3×) в server.js компенсирует для отсева
32
+ // малых окон (groq 131k) при больших запросах.
33
33
 
34
34
  // Reliability-ordered long-context summarizers. Порядок важен: getSummary идёт
35
35
  // по списку и ждёт ПЕРВЫЙ отвечающий (до 30с). Медленные/непроверенные в начале
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freegate",
3
- "version": "0.6.26",
3
+ "version": "0.6.27",
4
4
  "description": "Free multi-provider LLM gateway with automatic failover. One OpenAI-compatible endpoint routes to many free models (Groq, Mistral, Gemini, NIM, OpenRouter, ZAI, Cerebras, DeepSeek and more). Never pay for LLMs.",
5
5
  "license": "MIT",
6
6
  "bin": {
package/server.js CHANGED
@@ -619,10 +619,10 @@ async function handleChatCompletion(req, res, body) {
619
619
  // requests keep the full fast pool.
620
620
  const requestTokens = estimateTokens(body.messages);
621
621
  const MIN_WINDOW = 50000; // below this we don't filter (typical requests)
622
- // Запас 1.3×: estimateTokens на диалогах с инструментами/кодом ЗАНИЖАЕТ реальный
623
- // размер (opencode показывает ~140k, а прокси оценивает меньше). Без запаса малые
624
- // окна (groq 131k, or-lfm 65k) берут большие запросы 400/молчание «замирание».
625
- const WINDOW_SAFETY = 1.3;
622
+ // Запас 2.0×: estimateTokens на диалогах с инструментами/кодом ЗАНИЖАЕТ реальный
623
+ // размер ( 2-3 раза). Запас отсекает малые окна (groq 131k, or-lfm 65k) от больших
624
+ // запросов, но не убивает пул (большие окна: dots-3 512k, minimax 1M остаются).
625
+ const WINDOW_SAFETY = 2.0;
626
626
  let windowPool = healthy2;
627
627
  let upgradeNoCapable = false; // апгрейд, но ни один здоровый провайдер не держит запрос
628
628
  if (requestTokens > MIN_WINDOW || windowUpgraded) {