Skip to content

Commit 9e02e87

Browse files
fix(models): add Gemini 2.5 token limits so they are not truncated to 8192
1 parent d59c3df commit 9e02e87

2 files changed

Lines changed: 106 additions & 66 deletions

File tree

scrapegraphai/helpers/models_tokens.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@
140140
"gemini-2.0-flash-latest": 1000000,
141141
"gemini-2.0-flash-exp": 1000000,
142142
"gemini-2.0-pro-exp": 2000000,
143+
"gemini-2.5-flash": 1000000,
144+
"gemini-2.5-flash-latest": 1000000,
145+
"gemini-2.5-flash-lite": 1000000,
146+
"gemini-2.5-pro": 1000000,
147+
"gemini-flash-latest": 1000000,
143148
"models/embedding-001": 2048,
144149
},
145150
"google_vertexai": {
@@ -150,6 +155,10 @@
150155
"gemini-2.0-flash-exp": 1048576,
151156
"gemini-2.0-pro": 2000000,
152157
"gemini-2.0-pro-exp": 2000000,
158+
"gemini-2.5-flash": 1048576,
159+
"gemini-2.5-flash-lite": 1048576,
160+
"gemini-2.5-pro": 1048576,
161+
"gemini-flash-latest": 1048576,
153162
},
154163
"ollama": {
155164
"command-r": 12800,

tests/test_models_tokens.py

Lines changed: 97 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ class TestModelsTokens:
77
def test_openai_tokens(self):
88
"""Test that the 'openai' provider exists and its tokens are valid positive integers."""
99
openai_models = models_tokens.get("openai")
10-
assert openai_models is not None, (
11-
"'openai' key should be present in models_tokens"
12-
)
10+
assert (
11+
openai_models is not None
12+
), "'openai' key should be present in models_tokens"
1313
for model, token in openai_models.items():
1414
assert isinstance(model, str), "Model name should be a string"
1515
assert isinstance(token, int), "Token limit should be an integer"
@@ -30,19 +30,50 @@ def test_google_providers(self):
3030
assert google_genai is not None, "'google_genai' key should be present"
3131
assert google_vertexai is not None, "'google_vertexai' key should be present"
3232
# Check a specific key from google_genai
33-
assert "gemini-pro" in google_genai, (
34-
"'gemini-pro' should be in google_genai models"
35-
)
33+
assert (
34+
"gemini-pro" in google_genai
35+
), "'gemini-pro' should be in google_genai models"
3636
# Validate token values types
3737
for provider in [google_genai, google_vertexai]:
3838
for token in provider.values():
3939
assert isinstance(token, int), "Token limit must be an integer"
4040

41+
def test_gemini_2_5_models_are_registered(self):
42+
"""Gemini 2.5 / flash-latest must be in the table so they are not truncated to 8192.
43+
44+
#1121: an unknown model silently falls back to an 8192-token window.
45+
google_genai/gemini-2.5-flash is the reported case; gemini-flash-latest
46+
is the current flash alias. Both have a 1M input context.
47+
"""
48+
google_genai = models_tokens["google_genai"]
49+
google_vertexai = models_tokens["google_vertexai"]
50+
51+
for model in (
52+
"gemini-2.5-flash",
53+
"gemini-2.5-flash-latest",
54+
"gemini-2.5-flash-lite",
55+
"gemini-2.5-pro",
56+
"gemini-flash-latest",
57+
):
58+
assert (
59+
google_genai.get(model) == 1000000
60+
), f"Expected 1M context for {model} in google_genai"
61+
62+
for model in (
63+
"gemini-2.5-flash",
64+
"gemini-2.5-flash-lite",
65+
"gemini-2.5-pro",
66+
"gemini-flash-latest",
67+
):
68+
assert (
69+
google_vertexai.get(model) == 1048576
70+
), f"Expected 1M context for {model} in google_vertexai"
71+
4172
def test_non_existent_provider(self):
4273
"""Test that a non-existent provider returns None."""
43-
assert models_tokens.get("non_existent") is None, (
44-
"Non-existent provider should return None"
45-
)
74+
assert (
75+
models_tokens.get("non_existent") is None
76+
), "Non-existent provider should return None"
4677

4778
def test_total_model_keys(self):
4879
"""Test that the total number of models across all providers is above an expected count."""
@@ -59,136 +90,136 @@ def test_non_empty_model_keys(self):
5990
"""Ensure that model token names are non-empty strings."""
6091
for provider, model_dict in models_tokens.items():
6192
for model in model_dict.keys():
62-
assert model != "", (
63-
f"Model name in provider '{provider}' should not be empty."
64-
)
93+
assert (
94+
model != ""
95+
), f"Model name in provider '{provider}' should not be empty."
6596

6697
def test_token_limits_range(self):
6798
"""Test that token limits for all models fall within a plausible range (e.g., 1 to 300000)."""
6899
for provider, model_dict in models_tokens.items():
69100
for model, token in model_dict.items():
70-
assert 1 <= token <= 1100000, (
71-
f"Token limit for {model} in provider {provider} is out of plausible range."
72-
)
101+
assert (
102+
1 <= token <= 1100000
103+
), f"Token limit for {model} in provider {provider} is out of plausible range."
73104

74105
def test_provider_structure(self):
75106
"""Test that every provider in models_tokens has a dictionary as its value."""
76107
for provider, models in models_tokens.items():
77-
assert isinstance(models, dict), (
78-
f"Provider {provider} should map to a dictionary, got {type(models).__name__}"
79-
)
108+
assert isinstance(
109+
models, dict
110+
), f"Provider {provider} should map to a dictionary, got {type(models).__name__}"
80111

81112
def test_non_empty_provider(self):
82113
"""Test that each provider dictionary is not empty."""
83114
for provider, models in models_tokens.items():
84-
assert len(models) > 0, (
85-
f"Provider {provider} should contain at least one model."
86-
)
115+
assert (
116+
len(models) > 0
117+
), f"Provider {provider} should contain at least one model."
87118

88119
def test_specific_model_token_values(self):
89120
"""Test specific expected token values for selected models from various providers."""
90121
# Verify a token for a selected model from the 'openai' provider
91122
openai = models_tokens.get("openai")
92-
assert openai.get("gpt-3.5-turbo-0125") == 16385, (
93-
"Expected token limit for gpt-3.5-turbo-0125 in openai to be 16385"
94-
)
123+
assert (
124+
openai.get("gpt-3.5-turbo-0125") == 16385
125+
), "Expected token limit for gpt-3.5-turbo-0125 in openai to be 16385"
95126

96127
# Verify a token for a selected model from the 'azure_openai' provider
97128
azure = models_tokens.get("azure_openai")
98-
assert azure.get("gpt-3.5") == 4096, (
99-
"Expected token limit for gpt-3.5 in azure_openai to be 4096"
100-
)
129+
assert (
130+
azure.get("gpt-3.5") == 4096
131+
), "Expected token limit for gpt-3.5 in azure_openai to be 4096"
101132

102133
# Verify a token for a selected model from the 'anthropic' provider
103134
anthropic = models_tokens.get("anthropic")
104-
assert anthropic.get("claude_instant") == 100000, (
105-
"Expected token limit for claude_instant in anthropic to be 100000"
106-
)
135+
assert (
136+
anthropic.get("claude_instant") == 100000
137+
), "Expected token limit for claude_instant in anthropic to be 100000"
107138

108139
def test_providers_count(self):
109140
"""Test that the total number of providers is as expected (at least 15)."""
110-
assert len(models_tokens) >= 15, (
111-
"Expected at least 15 providers in models_tokens"
112-
)
141+
assert (
142+
len(models_tokens) >= 15
143+
), "Expected at least 15 providers in models_tokens"
113144

114145
def test_non_existent_model(self):
115146
"""Test that a non-existent model within a valid provider returns None."""
116147
openai = models_tokens.get("openai")
117-
assert openai.get("non_existent_model") is None, (
118-
"Non-existent model should return None from a valid provider."
119-
)
148+
assert (
149+
openai.get("non_existent_model") is None
150+
), "Non-existent model should return None from a valid provider."
120151

121152
def test_no_whitespace_in_model_names(self):
122153
"""Test that model names do not contain leading or trailing whitespace."""
123154
for provider, model_dict in models_tokens.items():
124155
for model in model_dict.keys():
125156
# Assert that stripping whitespace does not change the model name
126-
assert model == model.strip(), (
127-
f"Model name '{model}' in provider '{provider}' contains leading or trailing whitespace."
128-
)
157+
assert (
158+
model == model.strip()
159+
), f"Model name '{model}' in provider '{provider}' contains leading or trailing whitespace."
129160

130161
def test_specific_models_additional(self):
131162
"""Test specific token values for additional models across various providers."""
132163
# Check some models in the 'ollama' provider
133164
ollama = models_tokens.get("ollama")
134-
assert ollama.get("llama2") == 4096, (
135-
"Expected token limit for 'llama2' in ollama to be 4096"
136-
)
137-
assert ollama.get("llama2:70b") == 4096, (
138-
"Expected token limit for 'llama2:70b' in ollama to be 4096"
139-
)
165+
assert (
166+
ollama.get("llama2") == 4096
167+
), "Expected token limit for 'llama2' in ollama to be 4096"
168+
assert (
169+
ollama.get("llama2:70b") == 4096
170+
), "Expected token limit for 'llama2:70b' in ollama to be 4096"
140171

141172
# Check a specific model from the 'mistralai' provider
142173
mistralai = models_tokens.get("mistralai")
143-
assert mistralai.get("open-codestral-mamba") == 256000, (
144-
"Expected token limit for 'open-codestral-mamba' in mistralai to be 256000"
145-
)
174+
assert (
175+
mistralai.get("open-codestral-mamba") == 256000
176+
), "Expected token limit for 'open-codestral-mamba' in mistralai to be 256000"
146177

147178
# Check a specific model from the 'deepseek' provider
148179
deepseek = models_tokens.get("deepseek")
149-
assert deepseek.get("deepseek-chat") == 28672, (
150-
"Expected token limit for 'deepseek-chat' in deepseek to be 28672"
151-
)
180+
assert (
181+
deepseek.get("deepseek-chat") == 28672
182+
), "Expected token limit for 'deepseek-chat' in deepseek to be 28672"
152183

153184
# Check a model from the 'ernie' provider
154185
ernie = models_tokens.get("ernie")
155-
assert ernie.get("ernie-bot") == 4096, (
156-
"Expected token limit for 'ernie-bot' in ernie to be 4096"
157-
)
186+
assert (
187+
ernie.get("ernie-bot") == 4096
188+
), "Expected token limit for 'ernie-bot' in ernie to be 4096"
158189

159190
def test_nvidia_specific(self):
160191
"""Test specific token value for 'meta/codellama-70b' in the nvidia provider."""
161192
nvidia = models_tokens.get("nvidia")
162193
assert nvidia is not None, "'nvidia' provider should exist"
163194
# Verify token for 'meta/codellama-70b' equals 16384 as defined in the nvidia dictionary
164-
assert nvidia.get("meta/codellama-70b") == 16384, (
165-
"Expected token limit for 'meta/codellama-70b' in nvidia to be 16384"
166-
)
195+
assert (
196+
nvidia.get("meta/codellama-70b") == 16384
197+
), "Expected token limit for 'meta/codellama-70b' in nvidia to be 16384"
167198

168199
def test_groq_specific(self):
169200
"""Test specific token value for 'claude-3-haiku-20240307\'' in the groq provider."""
170201
groq = models_tokens.get("groq")
171202
assert groq is not None, "'groq' provider should exist"
172203
# Note: The model name has an embedded apostrophe at the end in its name.
173-
assert groq.get("claude-3-haiku-20240307'") == 8192, (
174-
"Expected token limit for 'claude-3-haiku-20240307\\'' in groq to be 8192"
175-
)
204+
assert (
205+
groq.get("claude-3-haiku-20240307'") == 8192
206+
), "Expected token limit for 'claude-3-haiku-20240307\\'' in groq to be 8192"
176207

177208
def test_togetherai_specific(self):
178209
"""Test specific token value for 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo' in the toghetherai provider."""
179210
togetherai = models_tokens.get("toghetherai")
180211
assert togetherai is not None, "'toghetherai' provider should exist"
181212
expected = 128000
182213
model_name = "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo"
183-
assert togetherai.get(model_name) == expected, (
184-
f"Expected token limit for '{model_name}' in toghetherai to be {expected}"
185-
)
214+
assert (
215+
togetherai.get(model_name) == expected
216+
), f"Expected token limit for '{model_name}' in toghetherai to be {expected}"
186217

187218
def test_ernie_all_values(self):
188219
"""Test that all models in the 'ernie' provider have token values exactly 4096."""
189220
ernie = models_tokens.get("ernie")
190221
assert ernie is not None, "'ernie' provider should exist"
191222
for model, token in ernie.items():
192-
assert token == 4096, (
193-
f"Expected token limit for '{model}' in ernie to be 4096, got {token}"
194-
)
223+
assert (
224+
token == 4096
225+
), f"Expected token limit for '{model}' in ernie to be 4096, got {token}"

0 commit comments

Comments
 (0)