Skip to content

Commit 416a843

Browse files
committed
fix(types): add ty ignore comments for optional dependencies
- Add ty: ignore[unresolved-import] for langgraph and mcp imports (these are optional dependencies not always installed) - Add ty: ignore[invalid-argument-type] for bm25s.tokenize stemmer=None (upstream type stub incorrectly requires callable) - Add ty: ignore[invalid-assignment] for dynamic schema_class - Remove unused TYPE_CHECKING import block in langgraph integration
1 parent 835aae3 commit 416a843

File tree

4 files changed

+11
-19
lines changed

4 files changed

+11
-19
lines changed

stackone_ai/integrations/langgraph.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,16 @@
1414
from __future__ import annotations
1515

1616
from collections.abc import Sequence
17-
from typing import TYPE_CHECKING, Any
17+
from typing import Any
1818

1919
from langchain_core.tools import BaseTool
2020

2121
from stackone_ai.models import Tools
2222

23-
if TYPE_CHECKING: # pragma: no cover - only for typing
24-
try:
25-
from langgraph.prebuilt import ToolNode
26-
except Exception: # pragma: no cover
27-
28-
class ToolNode: # type: ignore[no-redef]
29-
pass
30-
3123

3224
def _ensure_langgraph() -> None:
3325
try:
34-
from langgraph import prebuilt as _ # noqa: F401
26+
from langgraph import prebuilt as _ # noqa: F401 # ty: ignore[unresolved-import]
3527
except Exception as e: # pragma: no cover
3628
raise ImportError(
3729
"LangGraph is not installed. Install with `pip install langgraph` or "
@@ -53,7 +45,7 @@ def to_tool_node(tools: Tools | Sequence[BaseTool], **kwargs: Any) -> Any:
5345
for inclusion in a graph.
5446
"""
5547
_ensure_langgraph()
56-
from langgraph.prebuilt import ToolNode # local import with helpful error
48+
from langgraph.prebuilt import ToolNode # ty: ignore[unresolved-import]
5749

5850
langchain_tools = _to_langchain_tools(tools)
5951
return ToolNode(langchain_tools, **kwargs)
@@ -66,7 +58,7 @@ def to_tool_executor(tools: Tools | Sequence[BaseTool], **kwargs: Any) -> Any:
6658
This function now returns a ToolNode for compatibility.
6759
"""
6860
_ensure_langgraph()
69-
from langgraph.prebuilt import ToolNode # local import with helpful error
61+
from langgraph.prebuilt import ToolNode # ty: ignore[unresolved-import]
7062

7163
langchain_tools = _to_langchain_tools(tools)
7264
return ToolNode(langchain_tools, **kwargs)
@@ -89,6 +81,6 @@ def create_react_agent(llm: Any, tools: Tools | Sequence[BaseTool], **kwargs: An
8981
`Tools` collection from this SDK.
9082
"""
9183
_ensure_langgraph()
92-
from langgraph.prebuilt import create_react_agent as _create
84+
from langgraph.prebuilt import create_react_agent as _create # ty: ignore[unresolved-import]
9385

9486
return _create(llm, _to_langchain_tools(tools), **kwargs)

stackone_ai/meta_tools.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def __init__(self, tools: list[StackOneTool], hybrid_alpha: float | None = None)
8686

8787
# Create BM25 index
8888
self.bm25_retriever = bm25s.BM25()
89-
corpus_tokens = bm25s.tokenize(corpus, stemmer=None, show_progress=False)
89+
corpus_tokens = bm25s.tokenize(corpus, stemmer=None, show_progress=False) # ty: ignore[invalid-argument-type]
9090
self.bm25_retriever.index(corpus_tokens)
9191

9292
# Create TF-IDF index
@@ -108,7 +108,7 @@ def search(self, query: str, limit: int = 5, min_score: float = 0.0) -> list[Met
108108
fetch_limit = max(50, limit)
109109

110110
# Tokenize query for BM25
111-
query_tokens = bm25s.tokenize([query], stemmer=None, show_progress=False)
111+
query_tokens = bm25s.tokenize([query], stemmer=None, show_progress=False) # ty: ignore[invalid-argument-type]
112112

113113
# Search with BM25
114114
bm25_results, bm25_scores = self.bm25_retriever.retrieve(

stackone_ai/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ def to_langchain(self) -> BaseTool:
426426
class StackOneLangChainTool(BaseTool):
427427
name: str = parent_tool.name
428428
description: str = parent_tool.description
429-
args_schema: type[BaseModel] = schema_class
429+
args_schema: type[BaseModel] = schema_class # ty: ignore[invalid-assignment]
430430
func = staticmethod(parent_tool.execute) # Required by CrewAI
431431

432432
def _run(self, **kwargs: Any) -> Any:

stackone_ai/toolset.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ def _build_auth_header(api_key: str) -> str:
9797

9898
def _fetch_mcp_tools(endpoint: str, headers: dict[str, str]) -> list[_McpToolDefinition]:
9999
try:
100-
from mcp import types as mcp_types
101-
from mcp.client.session import ClientSession
102-
from mcp.client.streamable_http import streamablehttp_client
100+
from mcp import types as mcp_types # ty: ignore[unresolved-import]
101+
from mcp.client.session import ClientSession # ty: ignore[unresolved-import]
102+
from mcp.client.streamable_http import streamablehttp_client # ty: ignore[unresolved-import]
103103
except ImportError as exc: # pragma: no cover - depends on optional extra
104104
raise ToolsetConfigError(
105105
"MCP dependencies are required for fetch_tools. Install with 'pip install \"stackone-ai[mcp]\"'."

0 commit comments

Comments
 (0)