mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-06 07:04:01 +00:00
langchain[patch]: add aprep_output
method to langchain/chains/base.py
(#20748)
## Description Add `aprep_output` method to `langchain/chains/base.py`. Some downstream `ChatMessageHistory` objects that use async connections require an async way to append to the context. It turned out that `ainvoke()` was calling `prep_output` which is synchronous. --------- Co-authored-by: Bagatur <22008038+baskaryan@users.noreply.github.com>
This commit is contained in:
parent
43c041cda5
commit
243ba71b28
@ -204,7 +204,7 @@ class Chain(RunnableSerializable[Dict[str, Any], Dict[str, Any]], ABC):
|
|||||||
if new_arg_supported
|
if new_arg_supported
|
||||||
else await self._acall(inputs)
|
else await self._acall(inputs)
|
||||||
)
|
)
|
||||||
final_outputs: Dict[str, Any] = self.prep_outputs(
|
final_outputs: Dict[str, Any] = await self.aprep_outputs(
|
||||||
inputs, outputs, return_only_outputs
|
inputs, outputs, return_only_outputs
|
||||||
)
|
)
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
@ -458,6 +458,32 @@ class Chain(RunnableSerializable[Dict[str, Any], Dict[str, Any]], ABC):
|
|||||||
else:
|
else:
|
||||||
return {**inputs, **outputs}
|
return {**inputs, **outputs}
|
||||||
|
|
||||||
|
async def aprep_outputs(
|
||||||
|
self,
|
||||||
|
inputs: Dict[str, str],
|
||||||
|
outputs: Dict[str, str],
|
||||||
|
return_only_outputs: bool = False,
|
||||||
|
) -> Dict[str, str]:
|
||||||
|
"""Validate and prepare chain outputs, and save info about this run to memory.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
inputs: Dictionary of chain inputs, including any inputs added by chain
|
||||||
|
memory.
|
||||||
|
outputs: Dictionary of initial chain outputs.
|
||||||
|
return_only_outputs: Whether to only return the chain outputs. If False,
|
||||||
|
inputs are also added to the final outputs.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A dict of the final chain outputs.
|
||||||
|
"""
|
||||||
|
self._validate_outputs(outputs)
|
||||||
|
if self.memory is not None:
|
||||||
|
await self.memory.asave_context(inputs, outputs)
|
||||||
|
if return_only_outputs:
|
||||||
|
return outputs
|
||||||
|
else:
|
||||||
|
return {**inputs, **outputs}
|
||||||
|
|
||||||
def prep_inputs(self, inputs: Union[Dict[str, Any], Any]) -> Dict[str, str]:
|
def prep_inputs(self, inputs: Union[Dict[str, Any], Any]) -> Dict[str, str]:
|
||||||
"""Prepare chain inputs, including adding inputs from memory.
|
"""Prepare chain inputs, including adding inputs from memory.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user