mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-23 07:09:31 +00:00
Added async support to PlanAndExecute Chain (#8239)
- Description: Adds async support to the PlanAndExecute Chain Maintainer responsibilities: - Async: @agola11 --------- Co-authored-by: Bagatur <baskaryan@gmail.com>
This commit is contained in:
parent
a3ac9b23eb
commit
bf1357f584
@ -1,6 +1,9 @@
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from langchain.callbacks.manager import CallbackManagerForChainRun
|
||||
from langchain.callbacks.manager import (
|
||||
AsyncCallbackManagerForChainRun,
|
||||
CallbackManagerForChainRun,
|
||||
)
|
||||
from langchain.chains.base import Chain
|
||||
from pydantic import Field
|
||||
|
||||
@ -58,3 +61,35 @@ class PlanAndExecute(Chain):
|
||||
)
|
||||
self.step_container.add_step(step, response)
|
||||
return {self.output_key: self.step_container.get_final_response()}
|
||||
|
||||
async def _acall(
|
||||
self,
|
||||
inputs: Dict[str, Any],
|
||||
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
|
||||
) -> Dict[str, Any]:
|
||||
plan = await self.planner.aplan(
|
||||
inputs,
|
||||
callbacks=run_manager.get_child() if run_manager else None,
|
||||
)
|
||||
if run_manager:
|
||||
await run_manager.on_text(str(plan), verbose=self.verbose)
|
||||
for step in plan.steps:
|
||||
_new_inputs = {
|
||||
"previous_steps": self.step_container,
|
||||
"current_step": step,
|
||||
"objective": inputs[self.input_key],
|
||||
}
|
||||
new_inputs = {**_new_inputs, **inputs}
|
||||
response = await self.executor.astep(
|
||||
new_inputs,
|
||||
callbacks=run_manager.get_child() if run_manager else None,
|
||||
)
|
||||
if run_manager:
|
||||
await run_manager.on_text(
|
||||
f"*****\n\nStep: {step.value}", verbose=self.verbose
|
||||
)
|
||||
await run_manager.on_text(
|
||||
f"\n\nResponse: {response.response}", verbose=self.verbose
|
||||
)
|
||||
self.step_container.add_step(step, response)
|
||||
return {self.output_key: self.step_container.get_final_response()}
|
||||
|
@ -2,7 +2,10 @@ from typing import Any, Dict, List, Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from langchain.callbacks.manager import CallbackManagerForChainRun
|
||||
from langchain.callbacks.manager import (
|
||||
AsyncCallbackManagerForChainRun,
|
||||
CallbackManagerForChainRun,
|
||||
)
|
||||
from langchain.chains.base import Chain
|
||||
from langchain.experimental.plan_and_execute.executors.base import BaseExecutor
|
||||
from langchain.experimental.plan_and_execute.planners.base import BasePlanner
|
||||
@ -63,3 +66,35 @@ class PlanAndExecute(Chain):
|
||||
)
|
||||
self.step_container.add_step(step, response)
|
||||
return {self.output_key: self.step_container.get_final_response()}
|
||||
|
||||
async def _acall(
|
||||
self,
|
||||
inputs: Dict[str, Any],
|
||||
run_manager: Optional[AsyncCallbackManagerForChainRun] = None,
|
||||
) -> Dict[str, Any]:
|
||||
plan = await self.planner.aplan(
|
||||
inputs,
|
||||
callbacks=run_manager.get_child() if run_manager else None,
|
||||
)
|
||||
if run_manager:
|
||||
await run_manager.on_text(str(plan), verbose=self.verbose)
|
||||
for step in plan.steps:
|
||||
_new_inputs = {
|
||||
"previous_steps": self.step_container,
|
||||
"current_step": step,
|
||||
"objective": inputs[self.input_key],
|
||||
}
|
||||
new_inputs = {**_new_inputs, **inputs}
|
||||
response = await self.executor.astep(
|
||||
new_inputs,
|
||||
callbacks=run_manager.get_child() if run_manager else None,
|
||||
)
|
||||
if run_manager:
|
||||
await run_manager.on_text(
|
||||
f"*****\n\nStep: {step.value}", verbose=self.verbose
|
||||
)
|
||||
await run_manager.on_text(
|
||||
f"\n\nResponse: {response.response}", verbose=self.verbose
|
||||
)
|
||||
self.step_container.add_step(step, response)
|
||||
return {self.output_key: self.step_container.get_final_response()}
|
||||
|
Loading…
Reference in New Issue
Block a user