-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Default LLM to gpt-5.6-luna #7078
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
373d2a0
b053cfd
6a64a82
cf64d47
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -345,7 +345,7 @@ | |
| ], | ||
| } | ||
|
|
||
| DEFAULT_LLM_MODEL = "gpt-4.1-mini" | ||
| DEFAULT_LLM_MODEL = "gpt-5.6-luna" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
rg -n 'litellm|openai|gpt-5\.6-luna|DEFAULT_LLM_MODEL' \
--glob 'pyproject.toml' \
--glob 'uv.lock' \
--glob 'requirements*.txt' .
python - <<'PY'
import litellm
print("LiteLLM version:", getattr(litellm, "__version__", "unknown"))
for model in ("gpt-5.6-luna", "openai/gpt-5.6-luna"):
print(model, model in getattr(litellm, "model_cost", {}))
PYRepository: crewAIInc/crewAI Length of output: 2683 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- constants and project defaults ---'
cat -n lib/crewai/src/crewai/constants.py | sed -n '335,360p'
cat -n lib/cli/src/crewai_cli/constants.py | sed -n '342,367p'
printf '%s\n' '--- relevant runtime symbols ---'
rg -n -C 4 'DEFAULT_LLM_MODEL|llm_utils|litellm|LLM\(' lib/crewai/src lib/cli/src \
--glob '*.py' --glob '*.mdx'
printf '%s\n' '--- dependency declarations ---'
cat -n lib/crewai/pyproject.toml | sed -n '1,110p'
cat -n pyproject.toml | sed -n '220,242p'
cat -n uv.lock | sed -n '1445,1465p;4100,4130p'
printf '%s\n' '--- localized documentation files ---'
fd -i 'llm-connections.mdx' .Repository: crewAIInc/crewAI Length of output: 50372 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- exact default references ---'
rg -n -C 5 'DEFAULT_LLM_MODEL|gpt-5\.6-luna' . \
--glob '*.py' --glob '*.md' --glob '*.mdx' --glob '*.toml' --glob '*.json' \
| head -n 500
printf '%s\n' '--- LLM routing implementation ---'
cat -n lib/crewai/src/crewai/llm.py | sed -n '368,525p'
cat -n lib/crewai/src/crewai/llm.py | sed -n '680,740p'
printf '%s\n' '--- dependency declarations and lock entry ---'
cat -n lib/crewai/pyproject.toml | sed -n '1,105p'
cat -n uv.lock | sed -n '1448,1463p;4106,4128p'
printf '%s\n' '--- documentation files and fallback text ---'
fd -i 'llm-connections.mdx' .
rg -n -C 3 'fallback|default model|gpt-5\.6-luna|LiteLLM' \
--glob 'llm-connections.mdx' .Repository: crewAIInc/crewAI Length of output: 50375 🌐 Web query:
💡 Result: LiteLLM version 1.84.8 is a maintenance release focused on database resilience and key rotation improvements, not the addition of GPT-5.6 support [1][2][3]. Support for the OpenAI GPT-5.6 family (including gpt-5.6-luna) was added in later versions of LiteLLM, specifically bundled starting with v1.93.0-dev.2 for local model cost maps [4][5]. The GPT-5.6 family was released by OpenAI on July 9, 2026 [6][7]. Key details regarding your query: LiteLLM 1.84.8 Release Notes: This version, released on June 13, 2026, primarily includes patches for database-related issues (such as Prisma reconnection and timeout controls), grace-period key rotation fixes, and streaming corrections [1][2][3]. It does not contain support or pricing for the GPT-5.6 model family [4][5]. GPT-5.6 Support: LiteLLM provides Day 0 support for the GPT-5.6 family (Sol, Terra, and Luna) [4][5]. Since v1.93.0, LiteLLM includes this metadata in its bundled model cost maps [4][5]. Users can enable cost tracking and context-window enforcement by ensuring they are running a version >= 1.93.0 or by reloading the model cost map [4][5]. GPT-5.6-Luna Pricing: In LiteLLM's model cost map, the pricing for gpt-5.6-luna is structured as follows (standard tiers, per million tokens): Input: $1.00 [4][5] Output: $6.00 [4][5] Cache Read: $0.10 [4][5] Cache Write: $1.25 [4][5] You can access these models by configuring your model_list in LiteLLM to use openai/gpt-5.6-luna [4][5]. If you are running an older version like 1.84.8, you must upgrade to at least v1.93.0 to benefit from the built-in cost tracking and metadata for the GPT-5.6 family [4][5]. Citations:
🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- exact constant references only ---'
rg -n -F 'DEFAULT_LLM_MODEL' . --glob '*.py' --glob '*.toml' --glob '*.json' --glob '!docs/**' --glob '!**/.venv/**'
printf '%s\n' '--- exact model references only ---'
rg -n -F 'gpt-5.6-luna' . --glob '*.py' --glob '*.toml' --glob '*.json' --glob '*.mdx' --glob '!docs/**' --glob '!**/.venv/**'
printf '%s\n' '--- llm_utils default path ---'
fd -i 'llm_utils.py' lib/crewai
wc -l lib/crewai/src/crewai/utilities/llm_utils.py
rg -n -C 8 'DEFAULT_LLM_MODEL|create_llm|model_name|OPENAI_MODEL_NAME' \
lib/crewai/src/crewai/utilities/llm_utils.py lib/crewai/src/crewai/crew.py
printf '%s\n' '--- CLI constant consumers ---'
rg -n -C 8 'DEFAULT_LLM_MODEL|constants\.DEFAULT|from .*constants import' \
lib/cli/src/crewai_cli --glob '*.py' --glob '!model_catalog.py'
printf '%s\n' '--- dependency and lock data ---'
rg -n -C 3 '^name = "litellm"$|litellm>=|litellm-' lib/crewai/pyproject.toml uv.lockRepository: crewAIInc/crewAI Length of output: 29465 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- default references, summarized by file ---'
python3 - <<'PY'
from pathlib import Path
for root in (Path("lib/crewai"), Path("lib/cli")):
for path in root.rglob("*"):
if path.is_file() and path.suffix in {".py", ".toml", ".json"}:
try:
text = path.read_text()
except UnicodeDecodeError:
continue
for lineno, line in enumerate(text.splitlines(), 1):
if "DEFAULT_LLM_MODEL" in line or "gpt-5.6-luna" in line:
print(f"{path}:{lineno}:{line.strip()}")
PY
printf '%s\n' '--- llm_utils and default model configuration ---'
fd -i 'llm_utils.py' lib/crewai
rg -n -C 10 'DEFAULT_LLM_MODEL|create_llm|model_name|OPENAI_MODEL_NAME' \
lib/crewai/src/crewai/utilities/llm_utils.py lib/crewai/src/crewai/crew.py
printf '%s\n' '--- CLI constant consumers ---'
rg -n -C 8 'DEFAULT_LLM_MODEL|constants\.DEFAULT|from .*constants import' \
lib/cli/src/crewai_cli --glob '*.py' --glob '!model_catalog.py'
printf '%s\n' '--- dependency and lock data ---'
rg -n -C 3 '^name = "litellm"$|litellm>=|litellm-' lib/crewai/pyproject.toml uv.lock
printf '%s\n' '--- LiteLLM 1.84.8 model-price key probe ---'
python3 - <<'PY'
import json
from urllib.request import urlopen
urls = [
"https://raw.githubusercontent.com/BerriAI/litellm/v1.84.8/model_prices_and_context_window.json",
"https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json",
]
for url in urls:
try:
with urlopen(url, timeout=15) as response:
data = json.load(response)
print(url)
for key in ("gpt-5.6-luna", "openai/gpt-5.6-luna"):
print(key, key in data, data.get(key))
except Exception as exc:
print(url, type(exc).__name__, str(exc))
PYRepository: crewAIInc/crewAI Length of output: 32147 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- provider detection and native routing ---'
rg -n -C 6 'SUPPORTED_NATIVE_PROVIDERS|def __new__|provider =|custom_openai|_get_native_provider|model_string|native_class' \
lib/crewai/src/crewai/llm.py
cat -n lib/crewai/src/crewai/llm.py | sed -n '390,505p'
printf '%s\n' '--- native OpenAI adapter ---'
fd -i '*openai*' lib/crewai/src/crewai/llms
rg -n -C 5 'class OpenAI|SUPPORTED_NATIVE_PROVIDERS|provider.*openai|completion' \
lib/crewai/src/crewai/llms lib/crewai/src/crewai/llm.py | head -n 300
printf '%s\n' '--- CLI generator model selection ---'
cat -n lib/cli/src/crewai_cli/create_json_crew.py | sed -n '1,115p'
rg -n -C 8 'default_llm|_default_model_for_provider|gpt-5\.6-luna|openai/' \
lib/cli/src/crewai_cli/create_json_crew.py lib/cli/src/crewai_cli --glob '*.py' \
| head -n 300
printf '%s\n' '--- direct metadata probe with curl ---'
for url in \
'https://raw.githubusercontent.com/BerriAI/litellm/v1.84.8/model_prices_and_context_window.json' \
'https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json'
do
echo "$url"
curl -k -L --fail --silent --show-error --max-time 20 "$url" \
| python3 -c '
import json, sys
data = json.load(sys.stdin)
for key in ("gpt-5.6-luna", "openai/gpt-5.6-luna"):
print(key, key in data, data.get(key))
'
doneRepository: crewAIInc/crewAI Length of output: 18151 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- OpenAI model allow-list ---'
rg -n -C 3 'OPENAI_MODELS|gpt-5|gpt-4o' lib/crewai/src/crewai/constants.py
printf '%s\n' '--- provider inference ---'
cat -n lib/crewai/src/crewai/llm.py | sed -n '633,664p'
printf '%s\n' '--- CLI generated-model implementation ---'
cat -n lib/cli/src/crewai_cli/create_json_crew.py | sed -n '35,75p'
rg -n -C 10 '_default_model_for_provider|default_llm|openai/' \
lib/cli/src/crewai_cli/create_json_crew.py
printf '%s\n' '--- CLI model catalog and constants ---'
cat -n lib/cli/src/crewai_cli/constants.py | sed -n '115,145p'
rg -n -C 8 'def select_model|return .*model|default_llm|openai/' \
lib/cli/src/crewai_cli/provider.py lib/cli/src/crewai_cli/create_crew.py
printf '%s\n' '--- direct LiteLLM metadata probe ---'
for url in \
'https://raw.githubusercontent.com/BerriAI/litellm/v1.84.8/model_prices_and_context_window.json' \
'https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json'
do
echo "$url"
curl -k -L --fail --silent --show-error --max-time 20 "$url" \
| python3 -c '
import json, sys
data = json.load(sys.stdin)
for key in ("gpt-5.6-luna", "openai/gpt-5.6-luna"):
print(key, key in data)
'
doneRepository: crewAIInc/crewAI Length of output: 13286 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import ast
import re
constants = Path("lib/crewai/src/crewai/constants.py").read_text()
llm = Path("lib/crewai/src/crewai/llm.py").read_text()
cli = Path("lib/cli/src/crewai_cli/create_json_crew.py").read_text()
lock = Path("uv.lock").read_text()
tree = ast.parse(constants)
openai_models = set()
for node in tree.body:
if isinstance(node, ast.Assign):
for target in node.targets:
if isinstance(target, ast.Name) and target.id == "OPENAI_MODELS":
openai_models = set(ast.literal_eval(node.value))
break
assert "gpt-5.6-luna" not in openai_models
assert re.search(r'litellm-1\.84\.8-py3-none-any\.whl', lock)
# Model routing expressed by LLM.__new__:
# an unqualified model uses _infer_provider_from_model() and native routing;
# an explicit openai/ prefix requires _validate_model_in_constants().
unqualified = "gpt-5.6-luna"
qualified = "openai/gpt-5.6-luna"
assert unqualified.startswith("gpt-")
assert qualified.split("/", 1)[1] not in openai_models
assert 'default_llm = _default_model_for_provider(provider)' in cli
assert 'f"'{ + "'openai/{model_id}'" + '}' in cli or 'f"{provider_key}/{model_id}"' in cli
print("OPENAI_MODELS contains gpt-5.6-luna:", unqualified in openai_models)
print("Unqualified default selects native-inference branch: True")
print("Qualified CLI model passes native allow-list:", qualified.split("/", 1)[1] in openai_models)
print("Locked LiteLLM version: 1.84.8")Repository: crewAIInc/crewAI Length of output: 407 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import ast
import re
constants_path = Path("lib/crewai/src/crewai/constants.py")
llm_path = Path("lib/crewai/src/crewai/llm.py")
cli_path = Path("lib/cli/src/crewai_cli/create_json_crew.py")
lock_path = Path("uv.lock")
constants = constants_path.read_text()
llm = llm_path.read_text()
cli = cli_path.read_text()
lock = lock_path.read_text()
tree = ast.parse(constants)
openai_models = set()
for node in tree.body:
if isinstance(node, ast.Assign):
if any(isinstance(target, ast.Name) and target.id == "OPENAI_MODELS"
for target in node.targets):
openai_models = set(ast.literal_eval(node.value))
break
assert "gpt-5.6-luna" not in openai_models
assert "gpt-5.6-luna" in constants
assert "_infer_provider_from_model(model)" in llm
assert "use_native = True" in llm
assert "f'{provider_key}/{model_id}'" in cli
assert re.search(r'name = "litellm"\s+version = "1\.84\.8"', lock)
print("OPENAI_MODELS contains gpt-5.6-luna:", "gpt-5.6-luna" in openai_models)
print("Unqualified gpt-5.6-luna uses inferred native-provider branch: True")
print("Qualified openai/gpt-5.6-luna passes the native allow-list:",
"gpt-5.6-luna" in openai_models)
print("CLI formats provider/model values:", "f'{provider_key}/{model_id}'" in cli)
print("Locked LiteLLM version: 1.84.8")
PYRepository: crewAIInc/crewAI Length of output: 243 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import ast
constants = Path("lib/crewai/src/crewai/constants.py").read_text()
llm = Path("lib/crewai/src/crewai/llm.py").read_text()
cli = Path("lib/cli/src/crewai_cli/create_json_crew.py").read_text()
lock = Path("uv.lock").read_text()
tree = ast.parse(constants)
openai_models = set()
for node in tree.body:
if isinstance(node, ast.Assign):
if any(isinstance(target, ast.Name) and target.id == "OPENAI_MODELS"
for target in node.targets):
openai_models = set(ast.literal_eval(node.value))
break
checks = {
"default_constant_present": "gpt-5.6-luna" in constants,
"default_absent_from_library_openai_allowlist": "gpt-5.6-luna" not in openai_models,
"inference_call_present": "_infer_provider_from_model(model)" in llm,
"native_branch_present": "use_native = True" in llm,
"cli_provider_model_format_present": "f\"{provider_key}/{model_id}\"" in cli,
"locked_litellm_1_84_8_present": 'name = "litellm"' in lock and 'version = "1.84.8"' in lock,
}
for name, result in checks.items():
print(f"{name}: {result}")
print("library OPENAI_MODELS entries:", sorted(openai_models))
print("CLI model-format lines:")
for line in cli.splitlines():
if "provider_key" in line and "model_id" in line:
print(line.strip())
PYRepository: crewAIInc/crewAI Length of output: 465 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import ast
import re
constants_text = Path("lib/crewai/src/crewai/constants.py").read_text()
llm_text = Path("lib/crewai/src/crewai/llm.py").read_text()
cli_text = Path("lib/cli/src/crewai_cli/create_json_crew.py").read_text()
lock_text = Path("uv.lock").read_text()
tree = ast.parse(constants_text)
openai_models = None
for node in tree.body:
target_names = []
value = None
if isinstance(node, ast.Assign):
target_names = [
target.id for target in node.targets if isinstance(target, ast.Name)
]
value = node.value
elif isinstance(node, ast.AnnAssign) and isinstance(node.target, ast.Name):
target_names = [node.target.id]
value = node.value
if "OPENAI_MODELS" in target_names:
openai_models = set(ast.literal_eval(value))
break
assert openai_models is not None
assert "gpt-5.6-luna" not in openai_models
assert "_infer_provider_from_model(model)" in llm_text
assert "use_native = True" in llm_text
assert 'result = f"{provider_key}/{model_id}"' in cli_text
assert re.search(r'name = "litellm"\nversion = "1\.84\.8"', lock_text)
print("Library OPENAI_MODELS count:", len(openai_models))
print("gpt-5.6-luna in library OPENAI_MODELS:", "gpt-5.6-luna" in openai_models)
print("Unqualified default follows inferred native-provider branch: True")
print("CLI emits openai/gpt-5.6-luna for the selected OpenAI model: True")
print("Locked LiteLLM version: 1.84.8")Repository: crewAIInc/crewAI Length of output: 330 🏁 Script executed: #!/usr/bin/env bash
set -u
python3 - <<'PY'
from pathlib import Path
import ast
constants_text = Path("lib/crewai/src/crewai/constants.py").read_text()
llm_text = Path("lib/crewai/src/crewai/llm.py").read_text()
cli_text = Path("lib/cli/src/crewai_cli/create_json_crew.py").read_text()
lock_text = Path("uv.lock").read_text()
openai_models = None
for node in ast.walk(ast.parse(constants_text)):
name = None
value = None
if isinstance(node, ast.Assign):
for target in node.targets:
if isinstance(target, ast.Name) and target.id == "OPENAI_MODELS":
name, value = target.id, node.value
elif isinstance(node, ast.AnnAssign):
if isinstance(node.target, ast.Name) and node.target.id == "OPENAI_MODELS":
name, value = node.target.id, node.value
if name:
try:
openai_models = set(ast.literal_eval(value))
except Exception as exc:
print("OPENAI_MODELS parse error:", type(exc).__name__, str(exc))
break
print("OPENAI_MODELS found:", openai_models is not None)
print("OPENAI_MODELS count:", len(openai_models or ()))
print("gpt-5.6-luna in OPENAI_MODELS:", bool(openai_models and "gpt-5.6-luna" in openai_models))
print("inference call present:", "_infer_provider_from_model(model)" in llm_text)
print("native branch present:", "use_native = True" in llm_text)
print("CLI provider/model formatting present:",
'result = f"{provider_key}/{model_id}"' in cli_text)
print("lock has litellm package:", 'name = "litellm"' in lock_text)
print("lock has version 1.84.8:", 'version = "1.84.8"' in lock_text)
PYRepository: crewAIInc/crewAI Length of output: 403 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
cat -n lib/crewai/src/crewai/constants.py | sed -n '1,175p'
rg -n -C 5 'OPENAI_MODELS|gpt-4\.1|gpt-4o|o1-mini' \
lib/crewai/src/crewai/constants.py lib/crewai/src/crewai/llm.pyRepository: crewAIInc/crewAI Length of output: 12234 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
fd -i 'constants.py' lib/crewai/src/crewai/llms
rg -n -C 4 'OPENAI_MODELS|gpt-5\.6-luna|gpt-5' \
lib/crewai/src/crewai/llms/constants.pyRepository: crewAIInc/crewAI Length of output: 2011 Route the CLI-generated model through a supported path. The library default uses native OpenAI routing, but the CLI generates 📍 Affects 2 files
🤖 Prompt for AI Agents |
||
|
|
||
| JSON_URL = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json" | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Correct the fallback wording in every localized guide.
All four notes describe
OPENAI_MODEL_NAMEas the sole source of the default. The runtime also checksMODELandMODEL_NAME, then usesDEFAULT_LLM_MODEL.docs/edge/en/learn/llm-connections.mdx#L13-L13: describe the application fallback instead of assigning a default toOPENAI_MODEL_NAME.docs/edge/ar/learn/llm-connections.mdx#L13-L13: apply the same fallback wording in Arabic.docs/edge/ko/learn/llm-connections.mdx#L13-L13: apply the same fallback wording in Korean.docs/edge/pt-BR/learn/llm-connections.mdx#L13-L13: apply the same fallback wording in Brazilian Portuguese.📍 Affects 4 files
docs/edge/en/learn/llm-connections.mdx#L13-L13(this comment)docs/edge/ar/learn/llm-connections.mdx#L13-L13docs/edge/ko/learn/llm-connections.mdx#L13-L13docs/edge/pt-BR/learn/llm-connections.mdx#L13-L13🤖 Prompt for AI Agents