Skip to content

Commit 6d18775

Browse files
committed
feat: update llm reasoning effort config and add google vertex ai support
1 parent be21195 commit 6d18775

6 files changed

Lines changed: 68 additions & 53 deletions

File tree

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ OPENROUTER_API_KEY=
55
OPENAI_API_KEY=
66
DEEPSEEK_API_KEY=
77
XAI_API_KEY=
8+
GOOGLE_API_KEY=
9+
GOOGLE_GENAI_USE_VERTEXAI=false
10+
GOOGLE_CLOUD_PROJECT=
811

912

1013
DB_HOST=

intentkit/config/config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ def __init__(self) -> None:
140140
# LLM providers
141141
self.openai_api_key: str | None = self.load("OPENAI_API_KEY")
142142
self.google_api_key: str | None = self.load("GOOGLE_API_KEY")
143+
self.google_genai_use_vertexai: bool = (
144+
self.load("GOOGLE_GENAI_USE_VERTEXAI", "false") == "true"
145+
)
146+
self.google_cloud_project: str | None = self.load("GOOGLE_CLOUD_PROJECT")
143147
self.deepseek_api_key: str | None = self.load("DEEPSEEK_API_KEY")
144148
self.xai_api_key: str | None = self.load("XAI_API_KEY")
145149
self.eternal_api_key: str | None = self.load("ETERNAL_API_KEY")

intentkit/core/middleware.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -165,17 +165,17 @@ async def awrap_model_call( # type: ignore[override]
165165
}.values()
166166
)
167167

168-
if self.llm_model.model_name == "gpt-5-mini":
169-
llm_params["reasoning_effort"] = "medium"
170-
171168
if context.search or context.agent.has_search():
172-
if self.llm_model.info.supports_search:
173-
if self.llm_model.info.provider == LLMProvider.OPENAI:
169+
model_info = await self.llm_model.model_info()
170+
if model_info.supports_search:
171+
if model_info.provider == LLMProvider.OPENAI:
174172
tools.append({"type": "web_search"})
175-
elif self.llm_model.info.provider == LLMProvider.XAI:
173+
elif model_info.provider == LLMProvider.XAI:
176174
tools.extend([{"type": "web_search"}, {"type": "x_search"}])
177-
elif self.llm_model.info.provider == LLMProvider.OPENROUTER:
175+
elif model_info.provider == LLMProvider.OPENROUTER:
178176
llm_params["plugins"] = [{"id": "web"}]
177+
elif model_info.provider == LLMProvider.GOOGLE:
178+
tools.append({"google_search": {}})
179179
else:
180180
logger.debug(
181181
"Search requested but model does not support native search"

intentkit/models/llm.csv

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
1-
id,name,provider,enabled,input_price,output_price,price_level,context_length,output_length,intelligence,speed,supports_image_input,supports_skill_calls,supports_structured_output,has_reasoning,supports_search,supports_temperature,supports_frequency_penalty,supports_presence_penalty,api_base,timeout,provider_model_id
2-
openrouter/free,OpenRouter Free,openrouter,TRUE,0,0,1,200000,20000,2,2,FALSE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,,300,
3-
minimax/minimax-m2.5,MiniMax M2.5,openrouter,TRUE,0.3,1.2,2,204800,131072,5,3,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,300,
4-
minimax/minimax-m2-her,Minimax M2 Her,openrouter,TRUE,0.3,1.2,2,65536,2048,3,3,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,,300,
5-
moonshotai/kimi-k2.5,Moonshot Kimi K2.5,openrouter,TRUE,0.6,3,2,262000,64000,4,3,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,,300,
6-
qwen/qwen3-coder-next,Qwen3 Coder Next,openrouter,TRUE,0.07,0.3,2,262144,65536,4,4,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,,300,
7-
qwen/qwen3.5-plus-02-15,Qwen3.5 Plus,openrouter,TRUE,0.4,2.4,3,1000000,65536,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,300,
8-
qwen/qwen3.5-flash-02-23,Qwen3.5 Flash,openrouter,TRUE,0.1,0.4,1,1000000,65536,4,5,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,,300,
9-
z-ai/glm-4.7-flash,GLM 4.7 Flash,openrouter,TRUE,0.06,0.4,1,202752,131072,3,5,FALSE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,,300,
10-
z-ai/glm-5,GLM 5,openrouter,TRUE,0.8,2.56,3,202752,131072,5,2,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,300,
11-
anthropic/claude-sonnet-4.6,Claude Sonnet 4.6,openrouter,TRUE,3,15,4,200000,8192,5,3,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,,300,
12-
anthropic/claude-opus-4.6,Claude Opus 4.6,openrouter,TRUE,5,25,5,1000000,8192,5,2,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,,300,
13-
gemini-3-flash-preview,Gemini 3 Flash,google,TRUE,0.5,3,2,1048576,65536,4,5,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,,300,
14-
gemini-3-flash-preview,Gemini 3 Flash,openrouter,TRUE,0.5,3,2,1048576,65536,4,5,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,,300,google/gemini-3-flash-preview
15-
gemini-3.1-pro-preview,Gemini 3.1 Pro,google,TRUE,2,12,4,1048576,65536,5,3,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,,300,
16-
gemini-3.1-pro-preview,Gemini 3.1 Pro,openrouter,TRUE,2,12,4,1048576,65536,5,3,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,,300,google/gemini-3.1-pro-preview
17-
gpt-5.2,GPT-5.2,openai,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,
18-
gpt-5.2,GPT-5.2,openrouter,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,openai/gpt-5.2
19-
gpt-5.3-codex,GPT-5.3 Codex,openai,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,
20-
gpt-5.3-codex,GPT-5.3 Codex,openrouter,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,openai/gpt-5.3-codex
21-
gpt-5-nano,GPT-5 Nano,openai,TRUE,0.05,0.4,1,400000,128000,3,5,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,,180,
22-
gpt-5-nano,GPT-5 Nano,openrouter,TRUE,0.05,0.4,1,400000,128000,3,5,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,,180,openai/gpt-5-nano
23-
gpt-5-mini,GPT-5 Mini,openai,TRUE,0.25,2,2,400000,128000,4,4,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,
24-
gpt-5-mini,GPT-5 Mini,openrouter,TRUE,0.25,2,2,400000,128000,4,4,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,,180,openai/gpt-5-mini
25-
deepseek-chat,Deepseek V3.2,deepseek,TRUE,0.28,0.42,2,128000,4096,4,3,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,https://api.deepseek.com,300,
26-
deepseek-chat,Deepseek V3.2,openrouter,TRUE,0.28,0.42,2,128000,4096,4,3,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,,300,deepseek/deepseek-v3.2
27-
deepseek-reasoner,DeepSeek V3.2 Thinking,deepseek,TRUE,0.28,0.42,2,128000,32000,5,1,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,https://api.deepseek.com,300,
28-
deepseek-reasoner,DeepSeek V3.2 Thinking,openrouter,TRUE,0.28,0.42,2,128000,32000,5,1,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,,300,deepseek/deepseek-v3.2
29-
grok-4,Grok 4,xai,TRUE,3,15,4,256000,4096,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,
30-
grok-4,Grok 4,openrouter,TRUE,3,15,4,256000,4096,5,3,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,x-ai/grok-4
31-
grok-4-1-fast-non-reasoning,Grok 4.1 Fast,xai,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,,180,
32-
grok-4-1-fast-non-reasoning,Grok 4.1 Fast,openrouter,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,,180,x-ai/grok-4.1-fast
33-
grok-4-1-fast-reasoning,Grok 4.1 Fast Reasoning,xai,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,
34-
grok-4-1-fast-reasoning,Grok 4.1 Fast Reasoning,openrouter,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,x-ai/grok-4.1-fast
35-
grok-code-fast-1,Grok Code Fast 1,xai,TRUE,0.2,1.5,3,256000,4096,4,4,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,
36-
grok-code-fast-1,Grok Code Fast 1,openrouter,TRUE,0.2,1.5,3,256000,4096,4,4,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,,180,x-ai/grok-code-fast-1
1+
id,name,provider,enabled,input_price,output_price,price_level,context_length,output_length,intelligence,speed,supports_image_input,supports_skill_calls,supports_structured_output,reasoning_effort,supports_search,supports_temperature,supports_frequency_penalty,supports_presence_penalty,api_base,timeout,provider_model_id
2+
openrouter/free,OpenRouter Free,openrouter,TRUE,0,0,1,200000,20000,2,2,FALSE,TRUE,FALSE,none,TRUE,TRUE,TRUE,TRUE,,300,
3+
minimax/minimax-m2.5,MiniMax M2.5,openrouter,TRUE,0.3,1.2,2,204800,131072,5,3,FALSE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,300,
4+
minimax/minimax-m2-her,Minimax M2 Her,openrouter,TRUE,0.3,1.2,2,65536,2048,3,3,FALSE,FALSE,FALSE,none,TRUE,TRUE,TRUE,TRUE,,300,
5+
moonshotai/kimi-k2.5,Moonshot Kimi K2.5,openrouter,TRUE,0.6,3,2,262000,64000,4,3,TRUE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,300,
6+
qwen/qwen3-coder-next,Qwen3 Coder Next,openrouter,TRUE,0.07,0.3,2,262144,65536,4,4,TRUE,TRUE,FALSE,none,TRUE,TRUE,TRUE,TRUE,,300,
7+
qwen/qwen3.5-plus-02-15,Qwen3.5 Plus,openrouter,TRUE,0.4,2.4,3,1000000,65536,5,3,TRUE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,300,
8+
qwen/qwen3.5-flash-02-23,Qwen3.5 Flash,openrouter,TRUE,0.1,0.4,1,1000000,65536,4,5,TRUE,TRUE,TRUE,none,TRUE,TRUE,TRUE,TRUE,,300,
9+
z-ai/glm-4.7-flash,GLM 4.7 Flash,openrouter,TRUE,0.06,0.4,1,202752,131072,3,5,FALSE,TRUE,FALSE,none,TRUE,TRUE,TRUE,TRUE,,300,
10+
z-ai/glm-5,GLM 5,openrouter,TRUE,0.8,2.56,3,202752,131072,5,2,FALSE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,300,
11+
anthropic/claude-sonnet-4.6,Claude Sonnet 4.6,openrouter,TRUE,3,15,4,200000,8192,5,3,TRUE,TRUE,FALSE,high,TRUE,TRUE,TRUE,TRUE,,300,
12+
anthropic/claude-opus-4.6,Claude Opus 4.6,openrouter,TRUE,5,25,5,1000000,8192,5,2,TRUE,TRUE,FALSE,high,TRUE,TRUE,TRUE,TRUE,,300,
13+
gemini-3-flash-preview,Gemini 3 Flash,google,TRUE,0.5,3,2,1048576,65536,4,5,TRUE,TRUE,FALSE,none,TRUE,TRUE,FALSE,FALSE,,300,
14+
gemini-3-flash-preview,Gemini 3 Flash,openrouter,TRUE,0.5,3,2,1048576,65536,4,5,TRUE,TRUE,FALSE,none,TRUE,TRUE,TRUE,TRUE,,300,google/gemini-3-flash-preview
15+
gemini-3.1-pro-preview,Gemini 3.1 Pro,google,TRUE,2,12,4,1048576,65536,5,3,TRUE,TRUE,FALSE,high,TRUE,TRUE,FALSE,FALSE,,300,
16+
gemini-3.1-pro-preview,Gemini 3.1 Pro,openrouter,TRUE,2,12,4,1048576,65536,5,3,TRUE,TRUE,FALSE,high,TRUE,TRUE,TRUE,TRUE,,300,google/gemini-3.1-pro-preview
17+
gpt-5.2,GPT-5.2,openai,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,high,TRUE,FALSE,FALSE,FALSE,,180,
18+
gpt-5.2,GPT-5.2,openrouter,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,high,TRUE,FALSE,TRUE,TRUE,,180,openai/gpt-5.2
19+
gpt-5.3-codex,GPT-5.3 Codex,openai,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,high,TRUE,FALSE,FALSE,FALSE,,180,
20+
gpt-5.3-codex,GPT-5.3 Codex,openrouter,TRUE,1.75,14,4,400000,128000,5,3,TRUE,TRUE,TRUE,high,TRUE,FALSE,TRUE,TRUE,,180,openai/gpt-5.3-codex
21+
gpt-5-nano,GPT-5 Nano,openai,TRUE,0.05,0.4,1,400000,128000,3,5,TRUE,TRUE,TRUE,minimal,FALSE,FALSE,FALSE,FALSE,,180,
22+
gpt-5-nano,GPT-5 Nano,openrouter,TRUE,0.05,0.4,1,400000,128000,3,5,TRUE,TRUE,TRUE,minimal,FALSE,FALSE,TRUE,TRUE,,180,openai/gpt-5-nano
23+
gpt-5-mini,GPT-5 Mini,openai,TRUE,0.25,2,2,400000,128000,4,4,TRUE,TRUE,TRUE,minimal,TRUE,FALSE,FALSE,FALSE,,180,
24+
gpt-5-mini,GPT-5 Mini,openrouter,TRUE,0.25,2,2,400000,128000,4,4,TRUE,TRUE,TRUE,minimal,TRUE,FALSE,TRUE,TRUE,,180,openai/gpt-5-mini
25+
deepseek-chat,Deepseek V3.2,deepseek,TRUE,0.28,0.42,2,128000,4096,4,3,FALSE,TRUE,TRUE,none,FALSE,TRUE,TRUE,TRUE,https://api.deepseek.com,300,
26+
deepseek-chat,Deepseek V3.2,openrouter,TRUE,0.28,0.42,2,128000,4096,4,3,FALSE,TRUE,TRUE,none,TRUE,TRUE,TRUE,TRUE,,300,deepseek/deepseek-v3.2
27+
deepseek-reasoner,DeepSeek V3.2 Thinking,deepseek,TRUE,0.28,0.42,2,128000,32000,5,1,FALSE,TRUE,TRUE,high,FALSE,TRUE,TRUE,TRUE,https://api.deepseek.com,300,
28+
deepseek-reasoner,DeepSeek V3.2 Thinking,openrouter,TRUE,0.28,0.42,2,128000,32000,5,1,FALSE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,300,deepseek/deepseek-v3.2
29+
grok-4,Grok 4,xai,TRUE,3,15,4,256000,4096,5,3,TRUE,TRUE,TRUE,high,TRUE,TRUE,FALSE,FALSE,,180,
30+
grok-4,Grok 4,openrouter,TRUE,3,15,4,256000,4096,5,3,TRUE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,180,x-ai/grok-4
31+
grok-4-1-fast-non-reasoning,Grok 4.1 Fast,xai,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,none,TRUE,TRUE,FALSE,FALSE,,180,
32+
grok-4-1-fast-non-reasoning,Grok 4.1 Fast,openrouter,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,none,TRUE,TRUE,TRUE,TRUE,,180,x-ai/grok-4.1-fast
33+
grok-4-1-fast-reasoning,Grok 4.1 Fast Reasoning,xai,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,high,TRUE,TRUE,FALSE,FALSE,,180,
34+
grok-4-1-fast-reasoning,Grok 4.1 Fast Reasoning,openrouter,TRUE,0.2,0.5,2,2000000,4096,3,4,TRUE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,180,x-ai/grok-4.1-fast
35+
grok-code-fast-1,Grok Code Fast 1,xai,TRUE,0.2,1.5,3,256000,4096,4,4,FALSE,TRUE,TRUE,high,TRUE,TRUE,FALSE,FALSE,,180,
36+
grok-code-fast-1,Grok Code Fast 1,openrouter,TRUE,0.2,1.5,3,256000,4096,4,4,FALSE,TRUE,TRUE,high,TRUE,TRUE,TRUE,TRUE,,180,x-ai/grok-code-fast-1

intentkit/models/llm.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def _load_default_llm_models() -> dict[str, "LLMModelInfo"]:
117117
"supports_structured_output": _parse_bool(
118118
row.get("supports_structured_output")
119119
),
120-
"has_reasoning": _parse_bool(row.get("has_reasoning")),
120+
"reasoning_effort": row.get("reasoning_effort", "").strip() or None,
121121
"supports_search": _parse_bool(row.get("supports_search")),
122122
"supports_temperature": _parse_bool(
123123
row.get("supports_temperature")
@@ -229,7 +229,7 @@ class LLMModelInfoTable(Base):
229229
supports_structured_output: Mapped[bool] = mapped_column(
230230
Boolean, nullable=False, default=False
231231
)
232-
has_reasoning: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
232+
reasoning_effort: Mapped[str | None] = mapped_column(String, nullable=True)
233233
supports_search: Mapped[bool] = mapped_column(
234234
Boolean, nullable=False, default=False
235235
)
@@ -286,7 +286,9 @@ class LLMModelInfo(BaseModel):
286286
supports_structured_output: bool = (
287287
False # Whether the model supports structured output
288288
)
289-
has_reasoning: bool = False # Whether the model has strong reasoning capabilities
289+
reasoning_effort: str | None = (
290+
None # Reasoning effort level: "xhigh", "high", "medium", "low", "minimal", "none", or None
291+
)
290292
supports_search: bool = (
291293
False # Whether the model supports native search functionality
292294
)
@@ -493,10 +495,8 @@ async def create_instance(self, params: dict[str, Any] = {}) -> BaseChatModel:
493495
if info.api_base:
494496
kwargs["openai_api_base"] = info.api_base
495497

496-
if self.model_name == "gpt-5-mini" or self.model_name == "gpt-5-nano":
497-
kwargs["reasoning_effort"] = "minimal"
498-
elif self.model_name == "gpt-5.1-codex":
499-
kwargs["reasoning_effort"] = "high"
498+
if info.reasoning_effort and info.reasoning_effort != "none":
499+
kwargs["reasoning_effort"] = info.reasoning_effort
500500

501501
# Update kwargs with params to allow overriding
502502
kwargs.update(params)
@@ -695,6 +695,9 @@ async def create_instance(self, params: dict[str, Any] = {}) -> BaseChatModel:
695695
if info.supports_presence_penalty:
696696
kwargs["presence_penalty"] = self.presence_penalty
697697

698+
if info.reasoning_effort:
699+
kwargs["reasoning"] = {"effort": info.reasoning_effort}
700+
698701
# Update kwargs with params to allow overriding
699702
kwargs.update(params)
700703

@@ -710,13 +713,18 @@ async def create_instance(self, params: dict[str, Any] = {}) -> BaseChatModel:
710713
from langchain_google_genai import ChatGoogleGenerativeAI
711714

712715
info = await self.model_info()
716+
use_vertexai = config.google_genai_use_vertexai is True
713717

714718
kwargs: dict[str, Any] = {
715719
"model": self.model_name,
716-
"google_api_key": config.google_api_key,
720+
"api_key": config.google_api_key,
717721
"timeout": info.timeout,
718722
"max_retries": 3,
719723
}
724+
if use_vertexai:
725+
kwargs["vertexai"] = True
726+
if config.google_cloud_project:
727+
kwargs["project"] = config.google_cloud_project
720728

721729
# Add optional parameters based on model support
722730
if info.supports_temperature:

tests/core/test_agent_local.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ async def test_local_agent_tool_call():
107107
supports_presence_penalty=True,
108108
supports_image_input=False,
109109
supports_structured_output=False,
110-
has_reasoning=False,
110+
reasoning_effort=None,
111111
supports_search=False,
112112
created_at=datetime.now(),
113113
updated_at=datetime.now(),
@@ -275,7 +275,7 @@ async def test_local_agent_system_tool_call():
275275
supports_presence_penalty=True,
276276
supports_image_input=False,
277277
supports_structured_output=False,
278-
has_reasoning=False,
278+
reasoning_effort=None,
279279
supports_search=False,
280280
created_at=datetime.now(),
281281
updated_at=datetime.now(),

0 commit comments

Comments
 (0)