freegate 0.6.26 → 0.6.28
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 +12 -10
- package/package.json +1 -1
- package/providers.json +3 -13
- package/server.js +4 -4
package/lib/compactor.js
CHANGED
|
@@ -19,17 +19,19 @@ const KEEP_RECENT_TOKENS = 12000; // tokens — recent messages kept untouched (
|
|
|
19
19
|
// блок → на длинной сессии тонула и переставала вызывать
|
|
20
20
|
// инструменты («замирала»). 12000 — стабильный баланс, как
|
|
21
21
|
// в рабочем «раньше», но с небольшим запасом.
|
|
22
|
-
const MAX_COMPACT_THRESHOLD =
|
|
23
|
-
//
|
|
22
|
+
const MAX_COMPACT_THRESHOLD = 200000; // est tokens — cap для window-aware порогов. Большие окна
|
|
23
|
+
// (dots-3 512k, minimax 1M) держат ~100-200k живого диалога
|
|
24
|
+
// без компакции — не сжимаем раньше, чем реально нужно.
|
|
25
|
+
// Раньше cap 100k жал 150k-контексты, хотя модель годится.
|
|
24
26
|
const SUMMARY_MAX_TOKENS = 2000; // tokens — summary length cap (detailed enough to not lose the work)
|
|
25
|
-
const CHARS_PER_TOKEN =
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
27
|
+
const CHARS_PER_TOKEN = 3.5; // heuristic chars→tokens. Реальная плотность ~3.5-4 chars
|
|
28
|
+
// на токен для кода/текста (был 3.6 изначально и работало).
|
|
29
|
+
// Ошибки: 2.0 ЗАВЫШАЛИ оценку вдвое → компакция сжимала
|
|
30
|
+
// уже на 36k контексте (хотя модель держит 100-150k+).
|
|
31
|
+
// 3.5 даёт точную оценку: 36k токенов ≈ 36k→ не компактится,
|
|
32
|
+
// работаем до реальных ~60k+ живого диалога.
|
|
33
|
+
// WINDOW_SAFETY (1.3×) в server.js компенсирует для отсева
|
|
34
|
+
// малых окон (groq 131k) при больших запросах.
|
|
33
35
|
|
|
34
36
|
// Reliability-ordered long-context summarizers. Порядок важен: getSummary идёт
|
|
35
37
|
// по списку и ждёт ПЕРВЫЙ отвечающий (до 30с). Медленные/непроверенные в начале
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "freegate",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.28",
|
|
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/providers.json
CHANGED
|
@@ -666,7 +666,7 @@
|
|
|
666
666
|
"gemini-gemini-flash-lite-latest": {
|
|
667
667
|
"endpoint": "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",
|
|
668
668
|
"model": "gemini-flash-lite-latest",
|
|
669
|
-
"priority":
|
|
669
|
+
"priority": 2,
|
|
670
670
|
"dailyLimit": 1500,
|
|
671
671
|
"keyHint": "gemini → Keys (автодобавлено, general)",
|
|
672
672
|
"envVar": "PROVIDER_GEMINI_APIKEY",
|
|
@@ -676,7 +676,7 @@
|
|
|
676
676
|
"gemini-gemini-3-1-flash-lite-preview": {
|
|
677
677
|
"endpoint": "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",
|
|
678
678
|
"model": "gemini-3.1-flash-lite-preview",
|
|
679
|
-
"priority":
|
|
679
|
+
"priority": 4,
|
|
680
680
|
"dailyLimit": 1500,
|
|
681
681
|
"keyHint": "gemini → Keys (автодобавлено, general)",
|
|
682
682
|
"envVar": "PROVIDER_GEMINI_APIKEY",
|
|
@@ -696,7 +696,7 @@
|
|
|
696
696
|
"gemini-gemini-3-5-flash-lite": {
|
|
697
697
|
"endpoint": "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",
|
|
698
698
|
"model": "gemini-3.5-flash-lite",
|
|
699
|
-
"priority":
|
|
699
|
+
"priority": 3,
|
|
700
700
|
"dailyLimit": 1500,
|
|
701
701
|
"keyHint": "gemini → Keys (автодобавлено, general)",
|
|
702
702
|
"envVar": "PROVIDER_GEMINI_APIKEY",
|
|
@@ -712,15 +712,5 @@
|
|
|
712
712
|
"envVar": "PROVIDER_GEMINI_APIKEY",
|
|
713
713
|
"free": true,
|
|
714
714
|
"category": "general"
|
|
715
|
-
},
|
|
716
|
-
"hf-Qwen3-Coder-Next": {
|
|
717
|
-
"endpoint": "https://router.huggingface.co/v1/chat/completions",
|
|
718
|
-
"model": "Qwen/Qwen3-Coder-Next",
|
|
719
|
-
"priority": 1,
|
|
720
|
-
"dailyLimit": 200,
|
|
721
|
-
"keyHint": "huggingface → Keys (автодобавлено, coding)",
|
|
722
|
-
"envVar": "PROVIDER_HF_APIKEY",
|
|
723
|
-
"free": true,
|
|
724
|
-
"category": "coding"
|
|
725
715
|
}
|
|
726
716
|
}
|
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
|
-
// Запас
|
|
623
|
-
// размер (
|
|
624
|
-
//
|
|
625
|
-
const WINDOW_SAFETY =
|
|
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) {
|