Add possibility to pass on_artifacts for a specific conversation (#12687)

Possibility to pass on_artifacts to a conversation. It can be then
achieved by adding this way:

```python
result = agent.run(
    input=message.text,
    metadata={
        "on_artifact": CALLBACK_FUNCTION
    },
)
```
This commit is contained in:
Jakub Novák 2023-11-06 16:29:47 +01:00 committed by GitHub
parent 0378662e1d
commit ada3d2cbd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,6 +9,7 @@ from typing import IO, TYPE_CHECKING, Any, Callable, List, Optional, Type
from langchain.callbacks.manager import ( from langchain.callbacks.manager import (
AsyncCallbackManagerForToolRun, AsyncCallbackManagerForToolRun,
CallbackManager,
CallbackManagerForToolRun, CallbackManagerForToolRun,
) )
from langchain.pydantic_v1 import BaseModel, Field, PrivateAttr from langchain.pydantic_v1 import BaseModel, Field, PrivateAttr
@ -151,14 +152,26 @@ class E2BDataAnalysisTool(BaseTool):
return "\n".join(lines) return "\n".join(lines)
def _run( def _run(
self, python_code: str, run_manager: Optional[CallbackManagerForToolRun] = None self,
python_code: str,
run_manager: Optional[CallbackManagerForToolRun] = None,
callbacks: Optional[CallbackManager] = None,
) -> str: ) -> str:
python_code = add_last_line_print(python_code) python_code = add_last_line_print(python_code)
stdout, stderr, _ = self.session.run_python(python_code)
if callbacks is not None:
on_artifact = getattr(callbacks.metadata, "on_artifact", None)
else:
on_artifact = None
stdout, stderr, artifacts = self.session.run_python(
python_code, on_artifact=on_artifact
)
out = { out = {
"stdout": stdout, "stdout": stdout,
"stderr": stderr, "stderr": stderr,
"artifacts": list(map(lambda artifact: artifact.name, artifacts)),
} }
return json.dumps(out) return json.dumps(out)