Skip to content

Commit e545e2e

Browse files
authored
Merge pull request #159 from dreadnode/users/raja/fix-pre-commit-errors
fix: Fix Ruff, MyPy, and PyTest Errors
2 parents 2d9c0d8 + ada60c9 commit e545e2e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+641
-287
lines changed

.hooks/generate_docs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def simple_convert_markdown(
9696
html_id: str = "",
9797
**kwargs: t.Any,
9898
) -> t.Any:
99-
return Markup(md.convert(text) if text else "") # noqa: S704 # nosec
99+
return Markup(md.convert(text) if text else "") # nosec # noqa: S704
100100

101101
self.handler.env.filters["convert_markdown"] = simple_convert_markdown
102102

dreadnode/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from dreadnode.version import VERSION
3333

3434
if t.TYPE_CHECKING:
35-
from dreadnode import scorers # noqa: F401
35+
from dreadnode import scorers
3636

3737
logger.disable("dreadnode")
3838

dreadnode/agent/agent.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
from dreadnode.agent.stop import StopCondition, stop_never
5252
from dreadnode.agent.thread import Thread
5353
from dreadnode.agent.tools import AnyTool, Tool, Toolset, discover_tools_on_obj
54+
from dreadnode.agent.tools.planning import update_todo
55+
from dreadnode.agent.tools.tasking import finish_task, give_up_on_task
5456
from dreadnode.agent.types import Message, ToolCall
5557
from dreadnode.meta import Component, Config, Model, component
5658
from dreadnode.scorers import ScorersLike
@@ -745,9 +747,6 @@ class TaskAgent(Agent):
745747
"""
746748

747749
def model_post_init(self, _: t.Any) -> None:
748-
from dreadnode.agent.tools.planning import update_todo
749-
from dreadnode.agent.tools.tasking import finish_task, give_up_on_task
750-
751750
if not any(tool for tool in self.tools if tool.name == "finish_task"):
752751
self.tools.append(finish_task)
753752

dreadnode/agent/console.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ def _handle_tool_start(self, event: ToolStart) -> None:
4848
self._status_table, console=self.console, transient=True, auto_refresh=True
4949
)
5050
self._live_status.start()
51+
if self._status_table is not None:
52+
# Add a new row for the running tool with a spinner.
53+
self._status_table.add_row(
54+
Text(f"Running [bold]{event.tool_call.name}[/bold]...", style="yellow")
55+
)
5156

52-
# Add a new row for the running tool with a spinner.
53-
self._status_table.add_row(
54-
Text(f"Running [bold]{event.tool_call.name}[/bold]...", style="yellow")
55-
)
56-
57-
def _handle_tool_end(self, event: ToolEnd):
57+
def _handle_tool_end(self, event: ToolEnd) -> None:
5858
"""Prints the tool's result and cleans up the status board."""
5959
# First, print the static result panel. This ensures it's in the
6060
# console history even after the live display is gone.

dreadnode/agent/hooks/summarize.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import contextlib
22
import typing as t
33

4+
from litellm.exceptions import ContextWindowExceededError
5+
46
from dreadnode.agent.events import AgentError, AgentEvent, GenerationEnd, StepStart
57
from dreadnode.agent.prompts import summarize_conversation
68
from dreadnode.agent.reactions import Continue, Reaction, Retry
@@ -23,8 +25,6 @@
2325
def _is_context_length_error(error: BaseException) -> bool:
2426
"""Checks if an exception is likely due to exceeding the context window."""
2527
with contextlib.suppress(ImportError):
26-
from litellm.exceptions import ContextWindowExceededError
27-
2828
if isinstance(error, ContextWindowExceededError):
2929
return True
3030

dreadnode/agent/tools/fs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import rigging as rg
99
from fsspec import AbstractFileSystem # type: ignore[import-untyped]
1010
from pydantic import PrivateAttr
11-
from upath import UPath
11+
from upath import UPath # type: ignore[import-not-found]
1212

1313
from dreadnode.agent.tools import Toolset, tool_method
1414
from dreadnode.meta import Config
@@ -127,7 +127,7 @@ def read_file(
127127
content = _path.read_bytes()
128128

129129
try:
130-
return content.decode("utf-8")
130+
return content.decode("utf-8") # type: ignore[no-any-return]
131131
except UnicodeDecodeError as e:
132132
if self.multi_modal:
133133
return rg.ContentImageUrl.from_file(path)

dreadnode/agent/tools/tasking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
@tool
8-
async def finish_task(success: bool, summary: str) -> None: # noqa: ARG001, FBT001
8+
async def finish_task(success: bool, summary: str) -> None: # noqa: ARG001
99
"""
1010
Mark your task as complete with a success/failure status and markdown summary of actions taken.
1111

dreadnode/airt/attack/prompt.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def prompt_attack(
2828
beam_width: int = 3,
2929
branching_factor: int = 3,
3030
max_steps: int = 10,
31-
additional_scorers: list[Scorer] | None = None,
31+
additional_scorers: list[Scorer[t.Any]] | None = None,
3232
name: str | None = None,
3333
) -> Attack[str, str]:
3434
"""
@@ -88,7 +88,7 @@ def prompt_attack(
8888

8989
objective = weighted_avg(
9090
(judge_scorer, 1),
91-
*[(scorer, 1) for scorer in additional_scorers],
91+
*[(scorer, 1) for scorer in (additional_scorers or [])],
9292
name="prompt_objective",
9393
)
9494

dreadnode/airt/attack/tap.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def tap_attack(
1818
beam_width: int = 10,
1919
branching_factor: int = 3,
2020
max_steps: int = 10,
21-
additional_constraints: list[Scorer] | None = None,
21+
additional_constraints: list[Scorer[t.Any]] | None = None,
2222
) -> Attack[str, str]:
2323
"""
2424
Creates a Generative Attack optimized for the TAP (Tree-of-thought Attack Prompting) pattern,

dreadnode/airt/target/llm.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class LLMTarget(Model, Target[t.Any, str]):
3535

3636
@property
3737
def name(self) -> str:
38+
if self._generator is None:
39+
return "unknown"
3840
return self._generator.to_identifier(short=True)
3941

4042
def as_task(self, input: t.Any) -> Task[[], str]:
@@ -51,9 +53,12 @@ def as_task(self, input: t.Any) -> Task[[], str]:
5153

5254
@task(name=f"generate - {self.name}", label="llm_target_generate", tags=["target"])
5355
async def generate(
54-
messages: list[rg.Message] = messages, params: rg.GenerateParams = params
56+
messages: list[rg.Message] = messages, params: rg.GenerateParams | None = params
5557
) -> str:
56-
generated = (await self._generator.generate_messages([messages], [params]))[0]
58+
if self._generator is None:
59+
raise ValueError("Generator not initialized")
60+
params_list = [params] if params is not None else [rg.GenerateParams()]
61+
generated = (await self._generator.generate_messages([messages], params_list))[0]
5762
if isinstance(generated, BaseException):
5863
raise generated
5964
return generated.message.content

0 commit comments

Comments
 (0)