Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core: Add ruff rules G, FA, INP, AIR and ISC #29334

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 20 additions & 10 deletions libs/core/langchain_core/callbacks/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,13 +280,17 @@ def handle_event(
else:
handler_name = handler.__class__.__name__
logger.warning(
f"NotImplementedError in {handler_name}.{event_name}"
f" callback: {repr(e)}"
"NotImplementedError in %s.%s callback: %s",
handler_name,
event_name,
repr(e),
)
except Exception as e:
logger.warning(
f"Error in {handler.__class__.__name__}.{event_name} callback:"
f" {repr(e)}"
"Error in %s.%s callback: %s",
handler.__class__.__name__,
event_name,
repr(e),
)
if handler.raise_error:
raise
Expand Down Expand Up @@ -326,7 +330,7 @@ def _run_coros(coros: list[Coroutine[Any, Any, Any]]) -> None:
try:
runner.run(coro)
except Exception as e:
logger.warning(f"Error in callback coroutine: {repr(e)}")
logger.warning("Error in callback coroutine: %s", repr(e))

# Run pending tasks scheduled by coros until they are all done
while pending := asyncio.all_tasks(runner.get_loop()):
Expand All @@ -338,7 +342,7 @@ def _run_coros(coros: list[Coroutine[Any, Any, Any]]) -> None:
try:
asyncio.run(coro)
except Exception as e:
logger.warning(f"Error in callback coroutine: {repr(e)}")
logger.warning("Error in callback coroutine: %s", repr(e))


async def _ahandle_event_for_handler(
Expand Down Expand Up @@ -380,12 +384,17 @@ async def _ahandle_event_for_handler(
)
else:
logger.warning(
f"NotImplementedError in {handler.__class__.__name__}.{event_name}"
f" callback: {repr(e)}"
"NotImplementedError in %s.%s callback: %s",
handler.__class__.__name__,
event_name,
repr(e),
)
except Exception as e:
logger.warning(
f"Error in {handler.__class__.__name__}.{event_name} callback: {repr(e)}"
"Error in %s.%s callback: %s",
handler.__class__.__name__,
event_name,
repr(e),
)
if handler.raise_error:
raise
Expand Down Expand Up @@ -2384,7 +2393,8 @@ def _configure(
"Unable to load requested LangChainTracer."
" To disable this warning,"
" unset the LANGCHAIN_TRACING_V2 environment variables.\n"
f"{repr(e)}",
"%s",
repr(e),
)
if run_tree is not None:
for handler in callback_manager.handlers:
Expand Down
5 changes: 3 additions & 2 deletions libs/core/langchain_core/tracers/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,9 @@ def _start_trace(self, run: Run) -> Union[None, Coroutine[Any, Any, None]]: # t
else:
if self.log_missing_parent:
logger.debug(
f"Parent run {run.parent_run_id} not found for run {run.id}."
" Treating as a root run."
"Parent run %s not found for run %s. Treating as a root run.",
run.parent_run_id,
run.id,
)
run.parent_run_id = None
run.trace_id = run.id
Expand Down
12 changes: 6 additions & 6 deletions libs/core/langchain_core/tracers/evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,11 @@ def _evaluate_in_project(self, run: Run, evaluator: langsmith.RunEvaluator) -> N
run,
source_run_id=cb.latest_run.id if cb.latest_run else None,
)
except Exception as e:
logger.error(
f"Error evaluating run {run.id} with "
f"{evaluator.__class__.__name__}: {repr(e)}",
exc_info=True,
except Exception:
logger.exception(
"Error evaluating run %s with %s",
run.id,
evaluator.__class__.__name__,
)
raise
example_id = str(run.reference_example_id)
Expand Down Expand Up @@ -201,7 +201,7 @@ def _persist_run(self, run: Run) -> None:

"""
if self.skip_unfinished and not run.outputs:
logger.debug(f"Skipping unfinished run {run.id}")
logger.debug("Skipping unfinished run %s", run.id)
return
run_ = run.copy()
run_.reference_example_id = self.example_id
Expand Down
4 changes: 3 additions & 1 deletion libs/core/langchain_core/utils/html.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ def extract_sub_links(
absolute_paths.add(absolute_path)
except Exception as e:
if continue_on_failure:
logger.warning(f"Unable to load link {link}. Raised exception:\n\n{e}")
logger.warning(
"Unable to load link %s. Raised exception:\n\n%s", link, e
)
continue
raise

Expand Down
2 changes: 1 addition & 1 deletion libs/core/langchain_core/utils/mustache.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ def _get_key(
# We couldn't find the key in any of the scopes

if warn:
logger.warn(f"Could not find key '{key}'")
logger.warning("Could not find key '%s'", key)

if keep:
return f"{def_ldel} {key} {def_rdel}"
Expand Down
14 changes: 8 additions & 6 deletions libs/core/langchain_core/vectorstores/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ def add_texts(
def embeddings(self) -> Optional[Embeddings]:
"""Access the query embedding object if available."""
logger.debug(
f"The embeddings property has not been "
f"implemented for {self.__class__.__name__}"
"The embeddings property has not been implemented for %s",
self.__class__.__name__,
)
return None

Expand Down Expand Up @@ -572,8 +572,9 @@ def similarity_search_with_relevance_scores(
]
if len(docs_and_similarities) == 0:
logger.warning(
"No relevant docs were retrieved using the relevance score"
f" threshold {score_threshold}"
"No relevant docs were retrieved using the "
"relevance score threshold %s",
score_threshold,
)
return docs_and_similarities

Expand Down Expand Up @@ -620,8 +621,9 @@ async def asimilarity_search_with_relevance_scores(
]
if len(docs_and_similarities) == 0:
logger.warning(
"No relevant docs were retrieved using the relevance score"
f" threshold {score_threshold}"
"No relevant docs were retrieved using the "
"relevance score threshold %s",
score_threshold,
)
return docs_and_similarities

Expand Down
6 changes: 3 additions & 3 deletions libs/core/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ python = ">=3.12.4"
[tool.poetry.extras]

[tool.ruff.lint]
select = [ "ASYNC", "B", "C4", "COM", "DJ", "E", "EM", "EXE", "F", "FLY", "FURB", "I", "ICN", "INT", "LOG", "N", "NPY", "PD", "PIE", "Q", "RSE", "S", "SIM", "SLOT", "T10", "T201", "TID", "TRY", "UP", "W", "YTT",]
ignore = [ "COM812", "UP007", "S110", "S112",]
select = [ "AIR", "ASYNC", "B", "C4", "COM", "DJ", "E", "EM", "EXE", "F", "FA", "FAST", "FLY", "FURB", "G", "I", "ICN", "INP","INT", "ISC", "LOG", "N", "NPY", "PD", "PIE", "Q", "RSE", "S", "SIM", "SLOT", "T10", "T20", "TID", "UP", "TRY", "W", "YTT",]
ignore = [ "COM812", "FA100", "ISC001", "UP007", "S110", "S112",]

[tool.coverage.run]
omit = [ "tests/*",]
Expand Down Expand Up @@ -79,7 +79,7 @@ classmethod-decorators = [ "classmethod", "langchain_core.utils.pydantic.pre_ini
"tests/unit_tests/runnables/test_runnable.py" = [ "E501",]
"tests/unit_tests/runnables/test_graph.py" = [ "E501",]
"tests/**" = [ "S",]
"scripts/**" = [ "S",]
"scripts/**" = [ "INP", "S",]

[tool.poetry.group.lint.dependencies]
ruff = "^0.9.2"
Expand Down
Empty file.
4 changes: 2 additions & 2 deletions libs/core/tests/unit_tests/runnables/test_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -862,7 +862,7 @@ def test_get_output_messages_with_value_error() -> None:
with_history.bound.invoke([HumanMessage(content="hello")], config)
excepted = (
"Expected str, BaseMessage, List[BaseMessage], or Tuple[BaseMessage]."
+ (f" Got {illegal_bool_message}.")
f" Got {illegal_bool_message}."
)
assert excepted in str(excinfo.value)

Expand All @@ -874,6 +874,6 @@ def test_get_output_messages_with_value_error() -> None:
with_history.bound.invoke([HumanMessage(content="hello")], config)
excepted = (
"Expected str, BaseMessage, List[BaseMessage], or Tuple[BaseMessage]."
+ (f" Got {illegal_int_message}.")
f" Got {illegal_int_message}."
)
assert excepted in str(excinfo.value)
2 changes: 1 addition & 1 deletion libs/core/tests/unit_tests/utils/test_function_calling.py
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,7 @@ class Tool(typed_dict):
)
def test_convert_union_type_py_39() -> None:
@tool
def magic_function(input: int | float) -> str:
def magic_function(input: int | float) -> str: # noqa: FA102
"""Compute a magic function."""

result = convert_to_openai_function(magic_function)
Expand Down
Loading