| 171 | return final_outputs |
| 172 | |
| 173 | async def ainvoke( |
| 174 | self, |
| 175 | input: Dict[str, Any], |
| 176 | config: Optional[RunnableConfig] = None, |
| 177 | **kwargs: Any, |
| 178 | ) -> Dict[str, Any]: |
| 179 | config = ensure_config(config) |
| 180 | callbacks = config.get("callbacks") |
| 181 | tags = config.get("tags") |
| 182 | metadata = config.get("metadata") |
| 183 | run_name = config.get("run_name") or self.get_name() |
| 184 | run_id = config.get("run_id") |
| 185 | include_run_info = kwargs.get("include_run_info", False) |
| 186 | return_only_outputs = kwargs.get("return_only_outputs", False) |
| 187 | |
| 188 | inputs = await self.aprep_inputs(input) |
| 189 | callback_manager = AsyncCallbackManager.configure( |
| 190 | callbacks, |
| 191 | self.callbacks, |
| 192 | self.verbose, |
| 193 | tags, |
| 194 | self.tags, |
| 195 | metadata, |
| 196 | self.metadata, |
| 197 | ) |
| 198 | new_arg_supported = inspect.signature(self._acall).parameters.get("run_manager") |
| 199 | run_manager = await callback_manager.on_chain_start( |
| 200 | dumpd(self), |
| 201 | inputs, |
| 202 | run_id, |
| 203 | name=run_name, |
| 204 | ) |
| 205 | try: |
| 206 | self._validate_inputs(inputs) |
| 207 | outputs = ( |
| 208 | await self._acall(inputs, run_manager=run_manager) |
| 209 | if new_arg_supported |
| 210 | else await self._acall(inputs) |
| 211 | ) |
| 212 | final_outputs: Dict[str, Any] = await self.aprep_outputs( |
| 213 | inputs, outputs, return_only_outputs |
| 214 | ) |
| 215 | except BaseException as e: |
| 216 | await run_manager.on_chain_error(e) |
| 217 | raise e |
| 218 | await run_manager.on_chain_end(outputs) |
| 219 | |
| 220 | if include_run_info: |
| 221 | final_outputs[RUN_KEY] = RunInfo(run_id=run_manager.run_id) |
| 222 | return final_outputs |
| 223 | |
| 224 | @property |
| 225 | def _chain_type(self) -> str: |