37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from typing import Any, Dict, Iterable, List, Optional
|
|
|
|
from .factory import get_qwen_chat_model, bind_qwen_tools
|
|
from .validators import validate_tool_names, ToolValidationError
|
|
|
|
|
|
def create_qwen_react_agent(
|
|
tools: List[Any],
|
|
*,
|
|
model: Optional[Any] = None,
|
|
prefer: str = "custom",
|
|
tool_choice: Optional[str] = "auto",
|
|
model_kwargs: Optional[Dict[str, Any]] = None,
|
|
enforce_tool_name_check: bool = True,
|
|
**agent_kwargs: Any,
|
|
):
|
|
"""
|
|
Sugar around langgraph.prebuilt.create_react_agent configured for Qwen.
|
|
|
|
- If `model` is None, constructs one via get_qwen_chat_model(prefer=..., **model_kwargs).
|
|
- Binds tools and applies `tool_choice`.
|
|
- Returns a LangGraph ReAct agent ready to invoke/stream.
|
|
"""
|
|
|
|
from langgraph.prebuilt import create_react_agent as _create
|
|
|
|
model_kwargs = model_kwargs or {}
|
|
|
|
# Strictly validate tool names before binding, if enabled
|
|
if enforce_tool_name_check:
|
|
validate_tool_names(tools, strict=True)
|
|
if model is None:
|
|
model = get_qwen_chat_model(prefer=prefer, **model_kwargs)
|
|
|
|
model = bind_qwen_tools(model, tools, tool_choice=tool_choice)
|
|
return _create(model, tools, **agent_kwargs)
|