diff --git a/libs/langchain/langchain/_api/module_import.py b/libs/langchain/langchain/_api/module_import.py index f196a86247c..d96f70c0bf1 100644 --- a/libs/langchain/langchain/_api/module_import.py +++ b/libs/langchain/langchain/_api/module_import.py @@ -106,11 +106,12 @@ def create_importer( "" ), ) - return result except Exception as e: msg = f"module {new_module} has no attribute {name}" raise AttributeError(msg) from e + return result + if fallback_module: try: module = importlib.import_module(fallback_module) @@ -139,12 +140,13 @@ def create_importer( "" ), ) - return result except Exception as e: msg = f"module {fallback_module} has no attribute {name}" raise AttributeError(msg) from e + return result + msg = f"module {package} has no attribute {name}" raise AttributeError(msg) diff --git a/libs/langchain/langchain/agents/agent.py b/libs/langchain/langchain/agents/agent.py index c35bdedcf81..198ab1f33c5 100644 --- a/libs/langchain/langchain/agents/agent.py +++ b/libs/langchain/langchain/agents/agent.py @@ -1380,7 +1380,7 @@ class AgentExecutor(Chain): observation = self.handle_parsing_errors(e) else: msg = "Got unexpected type of `handle_parsing_errors`" - raise ValueError(msg) from e + raise ValueError(msg) from e # noqa: TRY004 output = AgentAction("_Exception", observation, text) if run_manager: run_manager.on_agent_action(output, color="green") @@ -1519,7 +1519,7 @@ class AgentExecutor(Chain): observation = self.handle_parsing_errors(e) else: msg = "Got unexpected type of `handle_parsing_errors`" - raise ValueError(msg) from e + raise ValueError(msg) from e # noqa: TRY004 output = AgentAction("_Exception", observation, text) tool_run_kwargs = self._action_agent.tool_run_logging_kwargs() observation = await ExceptionTool().arun( diff --git a/libs/langchain/langchain/agents/chat/base.py b/libs/langchain/langchain/agents/chat/base.py index 6b5c05bed26..883238e2f24 100644 --- a/libs/langchain/langchain/agents/chat/base.py +++ b/libs/langchain/langchain/agents/chat/base.py @@ -55,7 +55,7 @@ class ChatAgent(Agent): agent_scratchpad = super()._construct_scratchpad(intermediate_steps) if not isinstance(agent_scratchpad, str): msg = "agent_scratchpad should be of type string." - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if agent_scratchpad: return ( f"This was your previous work " diff --git a/libs/langchain/langchain/agents/openai_assistant/base.py b/libs/langchain/langchain/agents/openai_assistant/base.py index e0e081a576f..5a014069133 100644 --- a/libs/langchain/langchain/agents/openai_assistant/base.py +++ b/libs/langchain/langchain/agents/openai_assistant/base.py @@ -358,12 +358,12 @@ class OpenAIAssistantRunnable(RunnableSerializable[dict, OutputType]): run = self._wait_for_run(run.id, run.thread_id) except BaseException as e: run_manager.on_chain_error(e) - raise e + raise try: response = self._get_response(run) except BaseException as e: run_manager.on_chain_error(e, metadata=run.dict()) - raise e + raise else: run_manager.on_chain_end(response) return response @@ -494,12 +494,12 @@ class OpenAIAssistantRunnable(RunnableSerializable[dict, OutputType]): run = await self._await_for_run(run.id, run.thread_id) except BaseException as e: run_manager.on_chain_error(e) - raise e + raise try: response = self._get_response(run) except BaseException as e: run_manager.on_chain_error(e, metadata=run.dict()) - raise e + raise else: run_manager.on_chain_end(response) return response diff --git a/libs/langchain/langchain/agents/output_parsers/openai_functions.py b/libs/langchain/langchain/agents/output_parsers/openai_functions.py index 63b448e346d..0dfb6405913 100644 --- a/libs/langchain/langchain/agents/output_parsers/openai_functions.py +++ b/libs/langchain/langchain/agents/output_parsers/openai_functions.py @@ -87,7 +87,7 @@ class OpenAIFunctionsAgentOutputParser(AgentOutputParser): ) -> Union[AgentAction, AgentFinish]: if not isinstance(result[0], ChatGeneration): msg = "This output parser only works on ChatGeneration output" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 message = result[0].message return self._parse_ai_message(message) diff --git a/libs/langchain/langchain/agents/output_parsers/openai_tools.py b/libs/langchain/langchain/agents/output_parsers/openai_tools.py index 3e612f625b3..df995af548c 100644 --- a/libs/langchain/langchain/agents/output_parsers/openai_tools.py +++ b/libs/langchain/langchain/agents/output_parsers/openai_tools.py @@ -61,7 +61,7 @@ class OpenAIToolsAgentOutputParser(MultiActionAgentOutputParser): ) -> Union[list[AgentAction], AgentFinish]: if not isinstance(result[0], ChatGeneration): msg = "This output parser only works on ChatGeneration output" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 message = result[0].message return parse_ai_message_to_openai_tool_action(message) diff --git a/libs/langchain/langchain/agents/output_parsers/tools.py b/libs/langchain/langchain/agents/output_parsers/tools.py index 9f0b513b269..c7bf0055536 100644 --- a/libs/langchain/langchain/agents/output_parsers/tools.py +++ b/libs/langchain/langchain/agents/output_parsers/tools.py @@ -98,7 +98,7 @@ class ToolsAgentOutputParser(MultiActionAgentOutputParser): ) -> Union[list[AgentAction], AgentFinish]: if not isinstance(result[0], ChatGeneration): msg = "This output parser only works on ChatGeneration output" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 message = result[0].message return parse_ai_message_to_tool_action(message) diff --git a/libs/langchain/langchain/agents/structured_chat/base.py b/libs/langchain/langchain/agents/structured_chat/base.py index 8a374faa242..04379142e56 100644 --- a/libs/langchain/langchain/agents/structured_chat/base.py +++ b/libs/langchain/langchain/agents/structured_chat/base.py @@ -56,7 +56,7 @@ class StructuredChatAgent(Agent): agent_scratchpad = super()._construct_scratchpad(intermediate_steps) if not isinstance(agent_scratchpad, str): msg = "agent_scratchpad should be of type string." - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if agent_scratchpad: return ( f"This was your previous work " diff --git a/libs/langchain/langchain/agents/structured_chat/output_parser.py b/libs/langchain/langchain/agents/structured_chat/output_parser.py index 062c61e7c81..94d3c12c9b9 100644 --- a/libs/langchain/langchain/agents/structured_chat/output_parser.py +++ b/libs/langchain/langchain/agents/structured_chat/output_parser.py @@ -71,12 +71,8 @@ class StructuredChatOutputParserWithRetries(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: try: if self.output_fixing_parser is not None: - parsed_obj: Union[AgentAction, AgentFinish] = ( - self.output_fixing_parser.parse(text) - ) - else: - parsed_obj = self.base_parser.parse(text) - return parsed_obj + return self.output_fixing_parser.parse(text) + return self.base_parser.parse(text) except Exception as e: msg = f"Could not parse LLM output: {text}" raise OutputParserException(msg) from e diff --git a/libs/langchain/langchain/chains/base.py b/libs/langchain/langchain/chains/base.py index 3308173a3a8..ffba114e2c7 100644 --- a/libs/langchain/langchain/chains/base.py +++ b/libs/langchain/langchain/chains/base.py @@ -174,7 +174,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC): ) except BaseException as e: run_manager.on_chain_error(e) - raise e + raise run_manager.on_chain_end(outputs) if include_run_info: @@ -228,7 +228,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC): ) except BaseException as e: await run_manager.on_chain_error(e) - raise e + raise await run_manager.on_chain_end(outputs) if include_run_info: diff --git a/libs/langchain/langchain/chains/combine_documents/map_rerank.py b/libs/langchain/langchain/chains/combine_documents/map_rerank.py index b83007ad25b..c6ad0c611c7 100644 --- a/libs/langchain/langchain/chains/combine_documents/map_rerank.py +++ b/libs/langchain/langchain/chains/combine_documents/map_rerank.py @@ -127,7 +127,7 @@ class MapRerankDocumentsChain(BaseCombineDocumentsChain): "Output parser of llm_chain should be a RegexParser," f" got {output_parser}" ) - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 output_keys = output_parser.output_keys if self.rank_key not in output_keys: msg = ( diff --git a/libs/langchain/langchain/chains/conversational_retrieval/base.py b/libs/langchain/langchain/chains/conversational_retrieval/base.py index 76c80072732..9a8bcdfe758 100644 --- a/libs/langchain/langchain/chains/conversational_retrieval/base.py +++ b/libs/langchain/langchain/chains/conversational_retrieval/base.py @@ -57,7 +57,7 @@ def _get_chat_history(chat_history: list[CHAT_TURN_TYPE]) -> str: f"Unsupported chat history format: {type(dialogue_turn)}." f" Full chat history: {chat_history} " ) - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 return buffer diff --git a/libs/langchain/langchain/chains/elasticsearch_database/base.py b/libs/langchain/langchain/chains/elasticsearch_database/base.py index 45e83929815..d57c97f1c62 100644 --- a/libs/langchain/langchain/chains/elasticsearch_database/base.py +++ b/libs/langchain/langchain/chains/elasticsearch_database/base.py @@ -164,12 +164,13 @@ class ElasticsearchDatabaseChain(Chain): chain_result: dict[str, Any] = {self.output_key: final_result} if self.return_intermediate_steps: chain_result[INTERMEDIATE_STEPS_KEY] = intermediate_steps - return chain_result except Exception as exc: # Append intermediate steps to exception, to aid in logging and later # improvement of few shot prompt seeds exc.intermediate_steps = intermediate_steps # type: ignore[attr-defined] - raise exc + raise + + return chain_result @property def _chain_type(self) -> str: diff --git a/libs/langchain/langchain/chains/llm.py b/libs/langchain/langchain/chains/llm.py index ce9b473093a..a5d8c3e47b4 100644 --- a/libs/langchain/langchain/chains/llm.py +++ b/libs/langchain/langchain/chains/llm.py @@ -251,7 +251,7 @@ class LLMChain(Chain): response = self.generate(input_list, run_manager=run_manager) except BaseException as e: run_manager.on_chain_error(e) - raise e + raise outputs = self.create_outputs(response) run_manager.on_chain_end({"outputs": outputs}) return outputs @@ -276,7 +276,7 @@ class LLMChain(Chain): response = await self.agenerate(input_list, run_manager=run_manager) except BaseException as e: await run_manager.on_chain_error(e) - raise e + raise outputs = self.create_outputs(response) await run_manager.on_chain_end({"outputs": outputs}) return outputs diff --git a/libs/langchain/langchain/chains/loading.py b/libs/langchain/langchain/chains/loading.py index b0e5359705e..5255dc6b42e 100644 --- a/libs/langchain/langchain/chains/loading.py +++ b/libs/langchain/langchain/chains/loading.py @@ -117,7 +117,7 @@ def _load_stuff_documents_chain(config: dict, **kwargs: Any) -> StuffDocumentsCh if not isinstance(llm_chain, LLMChain): msg = f"Expected LLMChain, got {llm_chain}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if "document_prompt" in config: prompt_config = config.pop("document_prompt") @@ -150,7 +150,7 @@ def _load_map_reduce_documents_chain( if not isinstance(llm_chain, LLMChain): msg = f"Expected LLMChain, got {llm_chain}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if "reduce_documents_chain" in config: reduce_documents_chain = load_chain_from_config( diff --git a/libs/langchain/langchain/chains/openai_functions/openapi.py b/libs/langchain/langchain/chains/openai_functions/openapi.py index bd736367b14..fe7a265d98c 100644 --- a/libs/langchain/langchain/chains/openai_functions/openapi.py +++ b/libs/langchain/langchain/chains/openai_functions/openapi.py @@ -361,13 +361,13 @@ def get_openapi_chain( try: spec = conversion(spec) break - except ImportError as e: - raise e + except ImportError: + raise except Exception: # noqa: S110 pass if isinstance(spec, str): msg = f"Unable to parse spec from source {spec}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 openai_fns, call_api_fn = openapi_spec_to_openai_fn(spec) if not llm: msg = ( diff --git a/libs/langchain/langchain/chains/router/llm_router.py b/libs/langchain/langchain/chains/router/llm_router.py index 631c60b9987..33731c63b0c 100644 --- a/libs/langchain/langchain/chains/router/llm_router.py +++ b/libs/langchain/langchain/chains/router/llm_router.py @@ -125,7 +125,7 @@ class LLMRouterChain(RouterChain): def _validate_outputs(self, outputs: dict[str, Any]) -> None: super()._validate_outputs(outputs) if not isinstance(outputs["next_inputs"], dict): - raise ValueError + raise ValueError # noqa: TRY004 def _call( self, @@ -178,10 +178,10 @@ class RouterOutputParser(BaseOutputParser[dict[str, str]]): parsed = parse_and_check_json_markdown(text, expected_keys) if not isinstance(parsed["destination"], str): msg = "Expected 'destination' to be a string." - raise ValueError(msg) + raise TypeError(msg) if not isinstance(parsed["next_inputs"], self.next_inputs_type): msg = f"Expected 'next_inputs' to be {self.next_inputs_type}." - raise ValueError(msg) + raise TypeError(msg) parsed["next_inputs"] = {self.next_inputs_inner_key: parsed["next_inputs"]} if ( parsed["destination"].strip().lower() @@ -190,7 +190,7 @@ class RouterOutputParser(BaseOutputParser[dict[str, str]]): parsed["destination"] = None else: parsed["destination"] = parsed["destination"].strip() - return parsed except Exception as e: msg = f"Parsing text\n{text}\n raised following error:\n{e}" raise OutputParserException(msg) from e + return parsed diff --git a/libs/langchain/langchain/embeddings/cache.py b/libs/langchain/langchain/embeddings/cache.py index 2f60d096f4a..b42bd959312 100644 --- a/libs/langchain/langchain/embeddings/cache.py +++ b/libs/langchain/langchain/embeddings/cache.py @@ -340,7 +340,7 @@ class CacheBackedEmbeddings(Embeddings): "key_encoder must be either 'blake2b', 'sha1', 'sha256', 'sha512' " "or a callable that encodes keys." ) - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 document_embedding_store = EncoderBackedStore[str, list[float]]( document_embedding_cache, diff --git a/libs/langchain/langchain/evaluation/embedding_distance/base.py b/libs/langchain/langchain/evaluation/embedding_distance/base.py index 04baf6ea2fb..0844074c1c8 100644 --- a/libs/langchain/langchain/evaluation/embedding_distance/base.py +++ b/libs/langchain/langchain/evaluation/embedding_distance/base.py @@ -23,11 +23,10 @@ from langchain.schema import RUN_KEY def _import_numpy() -> Any: try: import numpy as np - - return np except ImportError as e: msg = "Could not import numpy, please install with `pip install numpy`." raise ImportError(msg) from e + return np logger = logging.getLogger(__name__) diff --git a/libs/langchain/langchain/evaluation/parsing/base.py b/libs/langchain/langchain/evaluation/parsing/base.py index d0703df302a..d14ef851cf9 100644 --- a/libs/langchain/langchain/evaluation/parsing/base.py +++ b/libs/langchain/langchain/evaluation/parsing/base.py @@ -74,9 +74,9 @@ class JsonValidityEvaluator(StringEvaluator): """ try: parse_json_markdown(prediction, parser=json.loads) - return {"score": 1} except Exception as e: return {"score": 0, "reasoning": str(e)} + return {"score": 1} class JsonEqualityEvaluator(StringEvaluator): diff --git a/libs/langchain/langchain/evaluation/parsing/json_schema.py b/libs/langchain/langchain/evaluation/parsing/json_schema.py index 44996f72fae..796a5293ab7 100644 --- a/libs/langchain/langchain/evaluation/parsing/json_schema.py +++ b/libs/langchain/langchain/evaluation/parsing/json_schema.py @@ -80,11 +80,9 @@ class JsonSchemaEvaluator(StringEvaluator): try: validate(instance=prediction, schema=schema) - return { - "score": True, - } except ValidationError as e: return {"score": False, "reasoning": repr(e)} + return {"score": True} @override def _evaluate_strings( diff --git a/libs/langchain/langchain/indexes/_sql_record_manager.py b/libs/langchain/langchain/indexes/_sql_record_manager.py index d8e3af5443e..8d24433ae4c 100644 --- a/libs/langchain/langchain/indexes/_sql_record_manager.py +++ b/libs/langchain/langchain/indexes/_sql_record_manager.py @@ -153,7 +153,7 @@ class SQLRecordManager(RecordManager): """Create the database schema.""" if isinstance(self.engine, AsyncEngine): msg = "This method is not supported for async engines." - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 Base.metadata.create_all(self.engine) @@ -162,7 +162,7 @@ class SQLRecordManager(RecordManager): if not isinstance(self.engine, AsyncEngine): msg = "This method is not supported for sync engines." - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 async with self.engine.begin() as session: await session.run_sync(Base.metadata.create_all) @@ -173,7 +173,7 @@ class SQLRecordManager(RecordManager): if isinstance(self.session_factory, async_sessionmaker): msg = "This method is not supported for async engines." - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 session = self.session_factory() try: @@ -187,7 +187,7 @@ class SQLRecordManager(RecordManager): if not isinstance(self.session_factory, async_sessionmaker): msg = "This method is not supported for sync engines." - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 async with self.session_factory() as session: yield session @@ -221,7 +221,7 @@ class SQLRecordManager(RecordManager): dt = float(dt) if not isinstance(dt, float): msg = f"Unexpected type for datetime: {type(dt)}" - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 return dt async def aget_time(self) -> float: @@ -254,7 +254,7 @@ class SQLRecordManager(RecordManager): dt = float(dt) if not isinstance(dt, float): msg = f"Unexpected type for datetime: {type(dt)}" - raise AssertionError(msg) + raise AssertionError(msg) # noqa: TRY004 return dt def update( diff --git a/libs/langchain/langchain/memory/entity.py b/libs/langchain/langchain/memory/entity.py index 05349b925fc..e66a60a4737 100644 --- a/libs/langchain/langchain/memory/entity.py +++ b/libs/langchain/langchain/memory/entity.py @@ -128,7 +128,7 @@ class UpstashRedisEntityStore(BaseEntityStore): self.redis_client = Redis(url=url, token=token) except Exception as exc: error_msg = "Upstash Redis instance could not be initiated" - logger.error(error_msg) + logger.exception(error_msg) raise RuntimeError(error_msg) from exc self.session_id = session_id @@ -237,8 +237,8 @@ class RedisEntityStore(BaseEntityStore): try: self.redis_client = get_client(redis_url=url, decode_responses=True) - except redis.exceptions.ConnectionError as error: - logger.error(error) + except redis.exceptions.ConnectionError: + logger.exception("Redis client could not connect") self.session_id = session_id self.key_prefix = key_prefix diff --git a/libs/langchain/langchain/model_laboratory.py b/libs/langchain/langchain/model_laboratory.py index f90646ceb58..a07e57cbfab 100644 --- a/libs/langchain/langchain/model_laboratory.py +++ b/libs/langchain/langchain/model_laboratory.py @@ -39,7 +39,7 @@ class ModelLaboratory: "If you want to initialize with LLMs, use the `from_llms` method " "instead (`ModelLaboratory.from_llms(...)`)" ) - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if len(chain.input_keys) != 1: msg = ( "Currently only support chains with one input variable, " diff --git a/libs/langchain/langchain/output_parsers/fix.py b/libs/langchain/langchain/output_parsers/fix.py index 62b1bbf7e01..c556a0d7298 100644 --- a/libs/langchain/langchain/output_parsers/fix.py +++ b/libs/langchain/langchain/output_parsers/fix.py @@ -70,7 +70,7 @@ class OutputFixingParser(BaseOutputParser[T]): return self.parser.parse(completion) except OutputParserException as e: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "run"): completion = self.retry_chain.run( @@ -107,7 +107,7 @@ class OutputFixingParser(BaseOutputParser[T]): return await self.parser.aparse(completion) except OutputParserException as e: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "arun"): completion = await self.retry_chain.arun( diff --git a/libs/langchain/langchain/output_parsers/retry.py b/libs/langchain/langchain/output_parsers/retry.py index d0aed891210..91ad9fda59f 100644 --- a/libs/langchain/langchain/output_parsers/retry.py +++ b/libs/langchain/langchain/output_parsers/retry.py @@ -104,9 +104,9 @@ class RetryOutputParser(BaseOutputParser[T]): while retries <= self.max_retries: try: return self.parser.parse(completion) - except OutputParserException as e: + except OutputParserException: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "run"): completion = self.retry_chain.run( @@ -141,7 +141,7 @@ class RetryOutputParser(BaseOutputParser[T]): return await self.parser.aparse(completion) except OutputParserException as e: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "arun"): completion = await self.retry_chain.arun( @@ -232,7 +232,7 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]): return self.parser.parse(completion) except OutputParserException as e: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "run"): completion = self.retry_chain.run( @@ -260,7 +260,7 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]): return await self.parser.aparse(completion) except OutputParserException as e: if retries == self.max_retries: - raise e + raise retries += 1 if self.legacy and hasattr(self.retry_chain, "arun"): completion = await self.retry_chain.arun( diff --git a/libs/langchain/langchain/retrievers/document_compressors/base.py b/libs/langchain/langchain/retrievers/document_compressors/base.py index f007e1c7d2c..42f126fa56a 100644 --- a/libs/langchain/langchain/retrievers/document_compressors/base.py +++ b/libs/langchain/langchain/retrievers/document_compressors/base.py @@ -48,7 +48,7 @@ class DocumentCompressorPipeline(BaseDocumentCompressor): documents = _transformer.transform_documents(documents) else: msg = f"Got unexpected transformer type: {_transformer}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 return documents async def acompress_documents( @@ -78,5 +78,5 @@ class DocumentCompressorPipeline(BaseDocumentCompressor): documents = await _transformer.atransform_documents(documents) else: msg = f"Got unexpected transformer type: {_transformer}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 return documents diff --git a/libs/langchain/langchain/retrievers/ensemble.py b/libs/langchain/langchain/retrievers/ensemble.py index 27d39ab0b50..2357d4b2ffb 100644 --- a/libs/langchain/langchain/retrievers/ensemble.py +++ b/libs/langchain/langchain/retrievers/ensemble.py @@ -116,7 +116,7 @@ class EnsembleRetriever(BaseRetriever): result = self.rank_fusion(input, run_manager=run_manager, config=config) except Exception as e: run_manager.on_retriever_error(e) - raise e + raise else: run_manager.on_retriever_end( result, @@ -157,7 +157,7 @@ class EnsembleRetriever(BaseRetriever): ) except Exception as e: await run_manager.on_retriever_error(e) - raise e + raise else: await run_manager.on_retriever_end( result, diff --git a/libs/langchain/langchain/smith/evaluation/runner_utils.py b/libs/langchain/langchain/smith/evaluation/runner_utils.py index c5c796c88fa..6ca7656d153 100644 --- a/libs/langchain/langchain/smith/evaluation/runner_utils.py +++ b/libs/langchain/langchain/smith/evaluation/runner_utils.py @@ -558,7 +558,7 @@ def _construct_run_evaluator( return run_evaluator_dec(eval_config) else: msg = f"Unknown evaluator type: {type(eval_config)}" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 if isinstance(evaluator_, StringEvaluator): if evaluator_.requires_reference and reference_key is None: @@ -668,7 +668,7 @@ def _load_run_evaluators( f"Unsupported custom evaluator: {custom_evaluator}." f" Expected RunEvaluator or StringEvaluator." ) - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY004 return run_evaluators @@ -1040,7 +1040,7 @@ def _prepare_eval_run( ) except (HTTPError, ValueError, LangSmithError) as e: if "already exists " not in str(e): - raise e + raise uid = uuid.uuid4() example_msg = f""" run_on_dataset( @@ -1123,9 +1123,9 @@ class _DatasetRunContainer: run_id=None, project_id=self.project.id, ) - except Exception as e: + except Exception: logger.exception( - "Error running batch evaluator %s: %s", repr(evaluator), e + "Error running batch evaluator %s", repr(evaluator) ) return aggregate_feedback diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 52e20a4fdff..3b1add6dca5 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -181,6 +181,7 @@ select = [ "T10", # flake8-debugger "T20", # flake8-print "TID", # flake8-tidy-imports + "TRY", # tryceratops "UP", # pyupgrade "W", # pycodestyle warning "YTT", # flake8-2020 @@ -201,6 +202,9 @@ ignore = [ "RUF012", # Doesn't play well with Pydantic "SLF001", # Private member access "UP007", # pyupgrade: non-pep604-annotation-union + + # TODO + "TRY301", # tryceratops: raise-within-try ] unfixable = ["B028"] # People should intentionally tune the stacklevel diff --git a/libs/langchain/tests/unit_tests/llms/fake_chat_model.py b/libs/langchain/tests/unit_tests/llms/fake_chat_model.py index d4d46d3b973..677fbc44684 100644 --- a/libs/langchain/tests/unit_tests/llms/fake_chat_model.py +++ b/libs/langchain/tests/unit_tests/llms/fake_chat_model.py @@ -105,7 +105,7 @@ class GenericFakeChatModel(BaseChatModel): f"Expected generate to return a ChatResult, " f"but got {type(chat_result)} instead." ) - raise ValueError(msg) + raise TypeError(msg) message = chat_result.generations[0].message @@ -114,7 +114,7 @@ class GenericFakeChatModel(BaseChatModel): f"Expected invoke to return an AIMessage, " f"but got {type(message)} instead." ) - raise ValueError(msg) + raise TypeError(msg) content = message.content diff --git a/libs/langchain/uv.lock b/libs/langchain/uv.lock index f3234561e7d..dcf763aee3f 100644 --- a/libs/langchain/uv.lock +++ b/libs/langchain/uv.lock @@ -2721,7 +2721,7 @@ dependencies = [ requires-dist = [ { name = "jsonpatch", specifier = ">=1.33,<2.0" }, { name = "langsmith", specifier = ">=0.3.45" }, - { name = "packaging", specifier = ">=23.2,<25" }, + { name = "packaging", specifier = ">=23.2" }, { name = "pydantic", specifier = ">=2.7.4" }, { name = "pyyaml", specifier = ">=5.3" }, { name = "tenacity", specifier = ">=8.1.0,!=8.4.0,<10.0.0" },