Skip to content

Latest commit

 

History

History
589 lines (417 loc) · 41.9 KB

CODEX-CLI-CONFIGURATION.md

File metadata and controls

589 lines (417 loc) · 41.9 KB

Codex CLI — Configuration with OmniRoute (עברית)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


מדריך מלא לשימוש ב-Codex CLI המוגדר לעבוד מול OmniRoute כקצה עורפי תואם OpenAI.


TOML הוא הפורמט היעיל היחיד. גרסאות מודרניות של Codex קוראות באופן בלעדי את ~/.codex/config.toml (אומת מול codex-cli 0.147.0: הפקודה codex --help מתעדת שדריסות -c/--config "נטענות מתוך ~/.codex/config.toml"). הקובץ הישן ~/.codex/config.yaml השתייך ל-CLI הישן של npm, ומתעלמים ממנו ללא הודעה. מחולל התצורה בלוח הבקרה (/api/cli-tools/apply, הכלי codex) כותב TOML באמצעות מיזוג שמרני — מפתחות קיימים ובלוקים של ספקים אחרים נשמרים, מפתח ה-API נשאר ב-OMNIROUTE_API_KEY (לעולם לא בקובץ), וקובץ config.yaml ישן שנותר מדווח כהערת הגירה מבלי שייערך.

config.toml מוכן להדבקה

החליפו את <YOUR_HOST> ואת <YOUR_KEY> בערכים שלכם:

# ~/.codex/config.toml
model                          = "cx/gpt-5.5"
model_provider                 = "omniroute"
model_reasoning_effort         = "xhigh"
model_context_window           = 400000
model_auto_compact_token_limit = 350000
tool_output_token_limit        = 32768    # מגבלת אחסון ההיסטוריה לכל קריאת כלי

[model_providers.omniroute]
name                 = "OmniRoute"
base_url             = "http://<YOUR_HOST>:20128/v1"
env_key              = "OMNIROUTE_API_KEY"
requires_openai_auth = false
wire_api             = "responses"
# ~/.bashrc או ~/.zshrc — ערך המפתח בפועל, לעולם לא בתוך config.toml
export OMNIROUTE_API_KEY="<YOUR_KEY>"

macOS:‏ Codex הכלול בתוך אפליקציית ChatGPT

אם התקנתם את Codex דרך אפליקציית שולחן העבודה של ChatGPT, ייתכן שקובץ ההפעלה codex קיים רק בתוך חבילת האפליקציה ועדיין אינו נמצא ב-PATH של המעטפת שלכם. הוסיפו את ספריית המשאבים לקובץ האתחול של המעטפת:

export PATH="/Applications/ChatGPT.app/Contents/Resources:$PATH"

פתחו מעטפת חדשה ולאחר מכן אמתו:

command -v codex
codex --version

OmniRoute מקומי ללא אימות: מספיק מפתח מציין מקום

Codex מוודא שמשתנה הסביבה ששמו מוגדר באמצעות env_key קיים לפני שהבקשה הראשונה יוצאת מה-CLI. אם מופע OmniRoute המקומי שלכם אינו דורש אימות, כל מציין מקום שאינו ריק יעבוד:

export OMNIROUTE_API_KEY="${OMNIROUTE_API_KEY:-local}"

השתמשו במקום זאת במפתח אמיתי כאשר שרת OmniRoute שלכם מוגן או מרוחק.

אפשרויות מארח נפוצות

גישה URL
רשת מקומית http://192.168.0.1:20128/v1
Tailscale http://100.x.x.x:20128/v1
ממשק לולאה חוזרת http://localhost:20128/v1

wire_api = "responses" — מדוע הוא עובד עם כל המודלים

Codex CLI הוציא משימוש את wire_api = "chat"‏ (Chat Completions) בפברואר 2026, וכעת דורש wire_api = "responses"‏ (OpenAI Responses API). הגדרת wire_api = "chat" גורמת לקריסה מיידית בעת ההפעלה החל מ-v0.138.

ספקים רבים, כולל GLM ו-Kimi, עדיין חושפים רק נקודת קצה של Chat Completions. ‏DeepSeek V4 חושף כעת גם Responses API מובנה וגם נקודת קצה תואמת Anthropic; ‏OmniRoute משתמש ב-Responses כברירת מחדל ומאפשר לכל חיבור DeepSeek לבחור תאימות ל-Anthropic.

OmniRoute פותר זאת באופן שקוף:

Codex CLI
  → wire_api = "responses"
  → POST /v1/responses (OmniRoute)
    → OmniRoute בוחר את הפרוטוקול המובנה של הספק ומתרגם בעת הצורך
    → POST /responses (DeepSeek V4) או /chat/completions (Mistral / GLM / Kimi / אחרים)

בעת השימוש ב-OmniRoute לעולם אין צורך בשרת proxy נפרד לתרגום. כל המודלים משתמשים ב-wire_api = "responses" — OmniRoute מטפל בכל השאר.

wire_api הוא ברירת המחדל — ערך ברירת המחדל של השדה הוא "responses", וניתן להשמיט אותו לחלוטין מתוך config.toml. הגדירו אותו במפורש רק אם ברצונכם לתעד את הכוונה.


חלון הקשר ודחיסה

שדות תצורת טוקנים

שדה תיאור
model_context_window תקציב הטוקנים הכולל עבור המודל הפעיל. יש להגדיר למגבלה המוצהרת של המודל.
model_auto_compact_token_limit הסף שמפעיל דחיסה אוטומטית של ההיסטוריה. מקסימום: 90% מ־model_context_window — המערכת מתעלמת ללא הודעה מערכים הגבוהים מ־90%.
tool_output_token_limit מגבלת הטוקנים המאוחסנים בהיסטוריה לכל פלט של קריאת כלי. מונע מתגובת כלי גדולה יחידה למלא את החלון. זו אינה מגבלת הפלט המרבית — זוהי מגבלת אחסון בהיסטוריה.
compact_prompt דריסה מובנית של הנחיית המערכת המשמשת במהלך הדחיסה (v0.138+).

הערה לגבי model_max_output_tokens: שדה זה אינו חלק מסכמת התצורה של Codex CLI (הוא אינו קיים בבסיס הקוד של Codex ב־Rust). אם הוא מוגדר, המערכת מתעלמת ממנו ללא הודעה. אין להסתמך עליו — יש להשתמש ב־tool_output_token_limit כדי לשלוט בכמות פלט הכלים המאוחסנת בהיסטוריה.

חלונות הקשר לפי מודל

מודל מזהה OmniRoute חלון הקשר auto_compact tool_output_limit
GPT-5.5 cx/gpt-5.5 400k אמינים (1M לכל היותר) 350,000 32,768
Kimi K2.7 (חשיבה) kmc/kimi-k2.7 131,072 112,000 32,768
Kimi K2.6 kmc/kimi-k2.6 131,072 112,000 32,768
GLM-5.2 / 5.2-max (חשיבה) glm/glm-5.2 131,072 112,000 32,768
MiMo V2.5 Pro (חשיבה) opencode-go/mimo-v2.5-pro 131,072 112,000 32,768
Qwen 3.7 Plus (חשיבה) opencode-go/qwen3.7-plus 32,768 28,000 16,384
DeepSeek V4 Pro (OllamaCloud) ollamacloud/deepseek-v4-pro 131,072 112,000 32,768
DeepSeek V4 Pro ds/deepseek-v4-pro 1,000,000 900,000 65,536
MiMo V2.5 opencode-go/mimo-v2.5 131,072 112,000 32,768
Gemma 4 31B (OllamaCloud) ollamacloud/gemma4:31b 32,768 28,000 16,384
Nemotron 3 Super (OllamaCloud) ollamacloud/nemotron-3-super 32,768 28,000 16,384
GPT-OSS 20B (OllamaCloud) ollamacloud/gpt-oss:20b 32,768 28,000 16,384
DeepSeek V4 Flash (OllamaCloud) ollamacloud/deepseek-v4-flash 65,536 56,000 16,384
Gemini 3 Flash Preview (OllamaCloud) ollamacloud/gemini-3-flash-preview 1,000,000 850,000 32,768
GLM-5 Turbo glm/glm-5-turbo 131,072 112,000 16,384
GLM-4.7 Flash glm/glm-4.7-flash 131,072 112,000 16,384
Mistral Large Latest mistral/mistral-large-latest 262,144 220,000 16,384

נוסחת הדחיסה: effective_window = model_context_window - min(tool_output_token_limit, 20000). ערכים הגבוהים מ־20k אינם משנים את סף הדחיסה.

כלל אצבע: יש להגדיר את model_auto_compact_token_limit ל־85–88% מ־model_context_window. לעולם אין לעבור את 90% — המערכת תתעלם מכך ללא הודעה.


קידומת מודל: cx/

כל מודלי Codex ב-OmniRoute משתמשים בקידומת cx/:

שם ב-Codex CLI מודל OmniRoute
cx/gpt-5.5 GPT-5.5 סטנדרטי
cx/gpt-5.4 GPT-5.4 סטנדרטי
cx/gpt-5.4-mini GPT-5.4 מיני
cx/gpt-5.1-codex-mini GPT-5.1 Codex מיני

ספקים אחרים משתמשים בקידומת משלהם (kmc/, glm/, ds/, ollamacloud/, opencode-go/, mistral/) — הקידומת תואמת לכינוי הספק ב-OmniRoute.


מאמץ חשיבה

קובע כמה המודל "חושב" לפני שהוא משיב.

ערך מיועד עבור
none ללא חשיבה — תגובה ישירה
low משימות פשוטות (שינוי שם, עיצוב)
medium ברירת המחדל של השרת כאשר לא צוין ערך
high משימות ביניים (ארגון קוד מחדש, ניפוי שגיאות)
xhigh ארכיטקטורה, ניתוח מעמיק, בעיות מורכבות
# דריסה עבור הפעלה בודדת
codex -c model_reasoning_effort=low "rename variable x to count"
codex -c model_reasoning_effort=xhigh "design the auth module"

הגדירו גם סיכום חשיבה כדי ש-Desktop יוכל להציג את טקסט החשיבה (ולא רק מקטעים מוצפנים):

# ~/.codex/config.toml
model_reasoning_effort = "xhigh"   # או ultra כאשר הוא נתמך
model_reasoning_summary = "detailed"  # auto | concise | detailed | none

תקציב החשיבה של OmniRoute (הגדרת שרת)

במארח OmniRoute, הערך של Settings → AI → Thinking Budget חייב להיות passthrough כדי שמאמץ החשיבה והסיכום של Codex יגיעו לספק שמעלה הזרם. מצב auto מסיר את כל שדות הלקוח reasoning / reasoning_effort ויותיר את חלוניות החשיבה ריקות, גם כאשר Codex מוגדר כראוי.

המדריך המלא: THINKING_BUDGET.md.

דחיסה ומטמון הנחיות אינם תלויים בכך וממשיכים לפעול תחת passthrough.


פרופילים — תצורות בעלות שם לכל מודל/תהליך עבודה

פרופילים מאפשרים להחליף מודל + חלון הקשר באמצעות דגל יחיד. כל פרופיל הוא קובץ שטוח ~/.codex/<name>.config.toml שמתווסף מעל קובץ הבסיס config.toml.

כלל מתן שמות (Codex CLI v0.137+): שם הקובץ חייב להיות ~/.codex/<name>.config.toml — ללא הקידומת profile-. ה-CLI פותר את -p kimi-k27 ל-~/.codex/kimi-k27.config.toml. אם הקובץ אינו נמצא, ברירת המחדל מוחלת ללא הודעה.

codex --profile kimi-k27 "analyze 10k lines of this codebase"
codex -p glm52 "architecture review"
codex --profile deepseek-flash "rename variable"   # מהיר, זול

פרופילי מאמץ (אותו מודל, מאמץ שונה)

codex -p low      # cx/gpt-5.5, effort=low
codex -p medium   # cx/gpt-5.5, effort=medium
codex -p high     # cx/gpt-5.5, effort=high
codex -p xhigh    # cx/gpt-5.5, effort=xhigh (ברירת מחדל)
codex -p chat     # cx/gpt-5.5, לא הוגדר מאמץ (ברירת המחדל של השרת)

מודלי חשיבה (חשיבה מעמיקה) — xhigh + סיכום מפורט

פרופיל מודל הקשר מיועד עבור
kimi-k27 kmc/kimi-k2.7 128k איכות החשיבה הטובה ביותר (Kimi)
glm52 glm/glm-5.2 128k חשיבה של GLM
glm52max glm/glm-5.2-max 128k חשיבה מרבית של GLM
mimo-pro opencode-go/mimo-v2.5-pro 128k חשיבה של MiMo
qwen37plus opencode-go/qwen3.7-plus 32k חשיבה של Qwen

מודלים טובים — מאמץ גבוה

פרופיל מודל הקשר מיועד עבור
kimi-k26 kmc/kimi-k2.6 128k שימוש כללי (Kimi)
deepseek-pro ollamacloud/deepseek-v4-pro 128k DeepSeek Pro דרך OllamaCloud
deepseek ds/deepseek-v4-pro 1M DeepSeek Pro ישירות, הקשר עצום
mimo opencode-go/mimo-v2.5 128k MiMo לשימוש כללי

מודלים פשוטים — ללא מאמץ חשיבה

פרופיל מודל הקשר מיועד עבור
gemma4 ollamacloud/gemma4:31b 32k משתלם ובעל יכולת
nemotron ollamacloud/nemotron-3-super 32k NVIDIA Nemotron
gptoss ollamacloud/gpt-oss:20b 32k GPT בקוד פתוח

מודלים מהירים — מאמץ נמוך

פרופיל מודל הקשר מיועד עבור
deepseek-flash ollamacloud/deepseek-v4-flash 64k משימות מהירות
gemini-flash ollamacloud/gemini-3-flash-preview 1M מהיר מאוד, הקשר עצום
glm5turbo glm/glm-5-turbo 128k GLM Turbo
glm47flash glm/glm-4.7-flash 128k GLM Flash
mistral mistral/mistral-large-latest 256k Mistral Large

טבלת החלטה מהירה

משימה פרופיל מומלץ
שינוי שם, עיצוב, קוד תבניתי --profile deepseek-flash או -p low
הסבר, סקירה קלה -p chat או -p gemini-flash
ניפוי שגיאות, ארגון מחדש מתון -p medium או -p kimi-k26
תכונה חדשה, בדיקות מורכבות -p high או -p mimo
ארכיטקטורה, ניתוח מעמיק -p kimi-k27 או -p glm52 או -p xhigh
ניתוח בסיס קוד (דורש הקשר של 1M) --profile deepseek או --profile gemini-flash
איכות חשיבה מרבית -p glm52max או -p mimo-pro
חיסכון בעלויות -p gemma4 או -p gptoss

יצירת פרופילים אוטומטית באמצעות omniroute setup-codex

אם אתם מריצים את OmniRoute על VPS, תוכלו ליצור אוטומטית קובצי פרופיל מקטלוג המודלים הפעיל:

# מתוך VPS (משתמש ב-OmniRoute מקומי ביציאה 20128)
omniroute setup-codex

# מכל מחשב — הפניה אל ה-VPS שלכם
omniroute setup-codex --remote http://100.x.x.x:20128 --api-key sk-xxx

# תצוגה מקדימה ללא כתיבת קבצים
omniroute setup-codex --remote http://100.x.x.x:20128 --dry-run

# יצירת פרופילים עבור GLM ו-Kimi בלבד
omniroute setup-codex --only glm,kimi

# כתיבה לספרייה מותאמת אישית
omniroute setup-codex --codex-home /path/to/.codex

הפקודה מאחזרת את /v1/models, משתמשת בפרופילים מכווננים עבור מודלים מוכרים, מסתמכת על המטא-נתונים שבקטלוג עבור מודלי טקסט תואמים אחרים, וכותבת ~/.codex/<name>.config.toml עבור כל אחד מהם. הפעולה אידמפוטנטית — ניתן להריץ אותה שוב בבטחה.

OmniRoute יכול גם לבצע סנכרון אוטומטי של אותם קובצי פרופיל לאחר שגילוי/ייבוא מוצלח של מודלים מספק משנה את הקטלוג הפעיל. זוהי אפשרות שיש להפעיל במפורש והיא כבויה כברירת מחדל: הפעילו אותה מלוח הבקרה CLI Code ("סנכרון אוטומטי של פרופילי CLI" ← Codex), או הגדירו OMNIROUTE_AUTO_SYNC_CODEX_PROFILES=true (היא מכבדת גם את CLI_ALLOW_CONFIG_WRITES, שמופעל כברירת מחדל). כאשר האפשרות מופעלת, היא כותבת רק קובצי פרופיל נפרדים מסוג ~/.codex/*.config.toml; היא לעולם אינה משנה את ~/.codex/config.toml הפעיל/המוגדר כברירת מחדל, את הגדרות Codex-lb, את האימות או את בחירת הספק.


הפעלת Codex באמצעות omniroute launch-codex

הפקודה מבצעת בדיקת תקינות של מופע OmniRoute שלכם לפני הפעלת Codex:

# הפעלה מול OmniRoute מקומי (יציאת ברירת המחדל היא 20128)
omniroute launch-codex

# הפעלה עם פרופיל מסוים
omniroute launch-codex --profile kimi-k27

# הפעלה מול VPS מרוחק
omniroute launch-codex --remote http://100.x.x.x:20128/v1 --api-key sk-xxx

# העברת ארגומנטים נוספים אל codex
omniroute launch-codex --profile glm52 -- --yolo "fix this bug"

Codex הוא גם יעד של שתי נקודות הכניסה הכלליות המונעות באמצעות מניפסט (bin/cli/cli-manifest.mjs):

# בורר מודלים אינטראקטיבי ← כותב ~/.codex/<name>.config.toml (TOML, env_key)
omniroute configure codex

# הפעלת codex עם ספק omniroute שמוזרק באמצעות דגלי -c (ללא כתיבת תצורה)
omniroute run codex

תכונות CLI חדשות של Codex ‏(v0.138–v0.141)

גרסה תכונה
v0.138 העברה ליישום שולחן העבודה (/app), אסימוני גישה אישיים v2,‏ --profile כבורר הפרופיל הבלעדי (טבלאות [profiles] ישנות בתוך הקובץ גורמות לקריסה בעת ההפעלה)
v0.139 web_search = "live" — חיפוש אינטרנט מובנה ממצב קוד; oneOf/allOf בסכמות הכלים של MCP; אבחון סביבה באמצעות codex doctor
v0.140 תצוגת אסימונים /usage בתוך ההפעלה; /import מהפעלות Claude Code; תת-הפקודה codex delete <SESSION_ID>; אימות Amazon Bedrock באמצעות אובייקט aws בתצורת הספק
v0.141 ממסר Noise מוצפן מקצה לקצה עבור מריצים מרוחקים; תיקון SQLite WAL; תמיכה ב-TLS מסוג P-521

שדות config.toml חדשים (לאחר v0.137)

# חיפוש אינטרנט מובנה (v0.139)
web_search = "live"   # "disabled" | "cached" | "live"

# הנחיית מערכת נפרדת למפתח (v0.138)
developer_instructions = "Always prefer functional style."

# הנחיית דחיסה מותאמת אישית
compact_prompt = "Summarise the above as bullet points."

# ניתוב /review למודל זול יותר
review_model = "glm/glm-5-turbo"

# רמת השירות של OpenAI
service_tier = "fast"   # "fast" | "flex"

שדות [model_providers.<id>] חדשים

[model_providers.omniroute]
base_url             = "http://100.x.x.x:20128/v1"
env_key              = "OMNIROUTE_API_KEY"
requires_openai_auth = false

# כותרות נוספות סטטיות בכל בקשה
[model_providers.omniroute.http_headers]
"X-Custom-Header" = "value"

# כותרות שנקראות ממשתני סביבה
[model_providers.omniroute.env_http_headers]
"X-Trace-Id" = "TRACE_ID"

# פרמטרים נוספים בשאילתת URL (שימושי עבור api-version של Azure)
[model_providers.omniroute.query_params]
"api-version" = "2024-12-01-preview"

אימות Amazon Bedrock ‏(v0.140)

[model_providers.bedrock]
base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"

[model_providers.bedrock.aws]
profile = "default"   # פרופיל ~/.aws/credentials
region  = "us-east-1"

שרתים מרובים

[model_providers.omniroute-main]
base_url = "http://192.168.0.1:20128/v1"
env_key  = "OMNIROUTE_API_KEY"

[model_providers.omniroute-tailscale]
base_url = "http://100.x.x.x:20128/v1"
env_key  = "OMNIROUTE_API_KEY"

Claude Code — תצורה מקבילה

Codex CLI (config.toml) Claude Code (משתנה סביבה) השפעה
tool_output_token_limit = 32768 (לא נחשף ישירות) מגבלת היסטוריה לכל כלי
model_context_window = 400000 (נקבע לפי המודל) חלון הקשר
— CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536 מספר אסימונים מרבי לתגובה
# ~/.bashrc — מגבלת האסימונים של Claude Code
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=65536

עיון מהיר — דגלי CLI

דגל קיצור השפעה
--model <id> -m דורס את model עבור הפעלה זו
--profile <name> -p טוען את ~/.codex/<name>.config.toml
--config key=value -c דורס כל שדה ב-config.toml (ניתן לשימוש חוזר)
--enable <feature> — מפעיל בכפייה דגל תכונה
--disable <feature> — משבית בכפייה דגל תכונה
--search — מפעיל חיפוש חי באינטרנט עבור הפעלה זו

חדש ב-v0.140:

codex delete <SESSION_ID>          # מחיקת הפעלה
codex delete <SESSION_ID> --force  # דילוג על אישור
codex debug models --bundled       # הצגת קטלוג המודלים המובנה כ-JSON

בתוך הפעלה אינטראקטיבית:

פקודה השפעה
/model פתיחת בורר המודלים
/usage הצגת השימוש באסימונים בהפעלה זו (v0.140)
/app העברת השליטה ליישום שולחן העבודה (v0.138)
/import ייבוא הפעלת Claude Code (v0.140)
/help הצגת כל פקודות הלוכסן

משימות ממושכות

שתי ברירות מחדל של OmniRoute עלולות לשבש בשקט הפעלות Codex CLI הנמשכות שעות. אף אחת מהן אינה הגדרה של Codex CLI — שתיהן נמצאות בצד של OmniRoute. משתמשים שמעבירים תצורה משרתי proxy קיימים, אשר מקבעים חשבונות ומשביתים ניתוקים עקב חוסר פעילות, נתקלים לעיתים קרובות בשתיהן ומסיקים ש-OmniRoute „אינו מסוגל לתמוך בהפעלה ממושכת”.

תסמין סיבה סבירה הגדרה
ההפעלה ממשיכה להחליף חשבונות / רציפות מטמון ההנחיות אובדת בין תורים ה-TTL של שיוך ההפעלה הוא 0 (מושבת) sessionAffinityTtlMs
החיבור מתנתק באמצע ההסקה ללא הודעה המוצגת ללקוח מנגנון הפיקוח על חוסר פעילות בזרם הופעל לאחר 10 דקות ללא מקטע מצד המקור STREAM_IDLE_TIMEOUT_MS

דיונים קשורים: #7126 (ניתוקים במשימות ממושכות), #5718 (מדוע השיוך מושבת כברירת מחדל). מעקב: #7287.

1. שיוך הפעלה — קיבוע שיחה אחת לחשבון אחד

ברירת מחדל: sessionAffinityTtlMs = 0 (מושבת).

היכן להגדיר זאת

  • לוח הבקרה → הגדרות → ניתוב → שיוך הפעלה → TTL של השיוך (שניות) (ComboDefaultsTab)
  • לחלופין, בצעו PATCH להגדרות עם sessionAffinityTtlMs באלפיות שנייה (טווח Zod הוא 0–86_400_000, כלומר עד 24 שעות)

השם שונה ב-#7274 מ-codexSessionAffinityTtlMs, שהיה ייעודי ל-Codex. המפתח הקודם עדיין מתקבל ככינוי לקריאה בלבד; בתצורות חדשות יש להשתמש ב-sessionAffinityTtlMs. השיוך חל כעת על כל ספק לאחר שה-TTL גדול מ-0, ולא רק על Codex — ראו docs/architecture/RESILIENCE_GUIDE.md → שיוך הפעלה.

מה משתבש כשהערך נשאר 0

כל תור בשיחת Codex מרובת-תורים מנותב באופן עצמאי לפי אסטרטגיית השילוב הפעילה, ועשוי להגיע לחשבון שונה בכל תור. הדבר פוגע ברציפות ההפעלה / מטמון ההנחיות בצד המקור. OmniRoute בוחן כותרות הפעלה של Codex (x-codex-session-id / x-session-id / x-omniroute-session) ושדות גוף כגון prompt_cache_key / session_id רק כאשר ה-TTL גדול מ-0 (extractSessionAffinityKey בתוך src/sse/services/auth.ts).

המלצה למשימה יחידה הנמשכת שעות

הגדירו את ה-TTL לערך הגבוה ממשך הזמן הצפוי בפועל של המשימה (המקסימום בממשק המשתמש הוא 86400 שניות = 24 שעות):

משך המשימה הצפוי TTL של השיוך (ממשק משתמש, שניות) sessionAffinityTtlMs
מספר שעות 14400 (4 שעות) 14400000
במשך הלילה / כ-12 שעות 43200 (12 שעות) 43200000
יום שלם 86400 (24 שעות, המקסימום) 86400000

ההצטרפות היא מכוונת: השבתת השיוך מעדיפה איזון עומסים בין חשבונות; הפעלתו מעדיפה רציפות עבור הפעלת סוכן ממושכת אחת. מדריך זה אינו משנה את ברירת המחדל — מפעילים שמריצים משימות Codex ממושכות חייבים להפעיל את האפשרות במפורש.

2. פסק זמן עקב חוסר פעילות בזרם — אין להפסיק תורי הסקה שקטים

ברירת מחדל: STREAM_IDLE_TIMEOUT_MS = 600000 (10 דקות). כאשר אינו מוגדר, הוא יורש את הערך מ-REQUEST_TIMEOUT_MS; ערך הבסיס המשותף הוא גם 600000. ראו docs/guides/SETUP_GUIDE.md → פסקי זמן.

מה משתבש עם ברירת המחדל

סבב הנמקה / כלי של Codex שנשאר שקט במשך יותר מ־10 דקות ללא מקטע אמיתי ממקור upstream נסגר בכוח על ידי מנגנון מעקב חוסר הפעילות של SSE‏ (open-sse/utils/stream.ts). לעיתים קרובות הלקוח רואה ניתוק רגיל של החיבור — מצב התואם ל„נעצר אוטומטית ללא כל הודעה”.

פרט קריטי: פעימת הלב הסינתטית של SSE ב־OmniRoute אינה מאפסת את שעון חוסר הפעילות. רק מקטע גוף אמיתי ממקור upstream מעדכן את lastChunkTime. מנקודת מבטו של מנגנון המעקב, מודל שקט שעדיין „חושב” נראה בדיוק כמו מקור upstream שנתקע.

חוסר פעילות קשור בגוף של Undici:‏ FETCH_BODY_TIMEOUT_MS (גם הוא משתמש כברירת מחדל באותו קו בסיס של 10 דקות; 0 משבית אותו). עבור הזרמה, FETCH_TIMEOUT_MS מכסה רק את הקמת החיבור / הכותרות הראשונות — לאחר שהזרם פעיל, תקיעות נשלטות על ידי STREAM_IDLE_TIMEOUT_MS ו־FETCH_BODY_TIMEOUT_MS.

מומלץ עבור משימה יחידה הנמשכת כמה שעות

בסביבת התהליך של OmniRoute‏ (.env / compose / systemd):

# השבתת מגבלות חוסר הפעילות של הזרם ושל גוף הבקשה עבור סבבי הנמקה ארוכים
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0

לחלופין, העלו אותן מעבר לפרק הזמן השקט הארוך ביותר הצפוי (הערכים הם באלפיות שנייה):

# דוגמה: לאפשר עד שעתיים של שקט בין מקטעים ממקור upstream
STREAM_IDLE_TIMEOUT_MS=7200000
FETCH_BODY_TIMEOUT_MS=7200000

הפעילו מחדש את OmniRoute לאחר שינוי משתני הסביבה האלה.

מתכון קונקרטי — משימת Codex הנמשכת כמה שעות

  1. קיבוע החשבון: לוח הבקרה → הגדרות → ניתוב → שיוך הפעלה → Affinity TTL = 43200‏ (12 שעות) או 86400‏ (24 שעות לכל היותר).
  2. העלאת / השבתת מגבלות חוסר הפעילות בסביבה של OmniRoute:
STREAM_IDLE_TIMEOUT_MS=0
FETCH_BODY_TIMEOUT_MS=0
  1. השאירו את config.toml הרגיל של Codex‏ (wire_api = "responses",‏ base_url נכון, OMNIROUTE_API_KEY) — בצד של Codex אין אפשרויות שיוך/חוסר פעילות עבור שתי ההתנהגויות האלה.
  2. הפעילו מחדש את OmniRoute, ולאחר מכן התחילו את משימת Codex הארוכה.

החלטה לגבי ברירות המחדל (#7287)

אפשרות ברירת המחדל להפצה לשנות במדריך הזה?
sessionAffinityTtlMs 0 (כבוי) לא — נשאר אופציונלי (איזון עומסים לעומת רציפות; ראו דיון #5718)
STREAM_IDLE_TIMEOUT_MS 600000 (10 דקות) לא — נשאר 10 דקות לתעבורה כללית; מפעילי Codex במשימות ארוכות מעלים או משביתים אותו

שינוי גלובלי של אחת מברירות המחדל ישנה את ההתנהגות עבור כל לקוח של מופע, ולא רק עבור Codex. תעדו את האפשרויות; השאירו את ברירות המחדל ללא שינוי עד שהחלטה מפורשת של המפעיל תורה אחרת.

אבחון ניתוקים עקב חוסר פעילות

כאשר מנגנון המעקב אחר חוסר פעילות מופעל, OmniRoute רושם שורה במבנה הבא:

[STREAM] Idle timeout: no data from codex for 600000ms (model: cx/gpt-5.5)

חפשו באמצעות Grep את Idle timeout: no data from (או את הקוד stream_idle_timeout / שם השגיאה StreamIdleTimeoutError). מקטע הספק הוא הערך שבו OmniRoute השתמש עבור הבקשה הזו (codex, מזהה ספק אחר, או provider אם אינו ידוע) — הוא לא תמיד המחרוזת המילולית codex.


פתרון בעיות

Error: wire_api = "chat" is no longer supported הסירו את wire_api = "chat" מהתצורה שלכם. הגדירו wire_api = "responses" או השמיטו את השדה (מאז v0.138 ברירת המחדל היא "responses").

Error: model not found ודאו שהמודל קיים ב-OmniRoute עם הקידומת הנכונה. השתמשו ב-omniroute models list או פתחו את /dashboard/providers/<provider>.

Authentication error ודאו שהמשתנה OMNIROUTE_API_KEY מיוצא: echo $OMNIROUTE_API_KEY.

ERROR: Missing environment variable: OMNIROUTE_API_KEY Codex מוודא שמשתנה הסביבה קיים לפני שליחת הבקשה הראשונה. יצאו מפתח אמיתי עבור שרתים מוגנים, או ערך מציין מיקום שאינו ריק, כגון OMNIROUTE_API_KEY=local, כאשר מופע OmniRoute המקומי שלכם אינו דורש אימות. הפעילו מחדש את המעטפת אם הוספתם אותו ל-~/.bashrc או ל-~/.zshrc.

Connection refused ודאו ש-OmniRoute פועל וששם המארח/היציאה של base_url נכונים עבור הרשת שלכם (מקומית לעומת Tailscale לעומת VPS).

ההפעלה קורסת סמוך למגבלת ההקשר הגדירו במפורש את model_context_window ואת model_auto_compact_token_limit. עיינו בטבלת חלון ההקשר שלעיל.

הדחיסה מופעלת מאוחר מדי הנמיכו את model_auto_compact_token_limit ל-80–85% מהחלון. לעולם אל תגדירו ערך מעל 90%.

הפרופיל אינו נטען (-p <name> זוכה להתעלמות ללא הודעה) ודאו שהקובץ קיים ב-~/.codex/<name>.config.toml (ללא הקידומת profile-). הריצו ls ~/.codex/*.config.toml.

משימת Codex ארוכה מתנתקת באמצע ההרצה / מחליפה חשבונות בין תורות עיינו במשימות ארוכות טווח. הפעילו שיוך הפעלה (TTL ארוך ממשך המשימה) והגדילו או השביתו את STREAM_IDLE_TIMEOUT_MS / FETCH_BODY_TIMEOUT_MS. חפשו ביומני OmniRoute באמצעות grep את Idle timeout: no data from.