Spaces:
Sleeping
Sleeping
| # from langchain.callbacks import StreamlitCallbackHandler | |
| from langchain.callbacks.streamlit.streamlit_callback_handler import StreamlitCallbackHandler | |
| from tenacity import retry, wait_exponential, stop_after_attempt | |
| def bind_logger(toolClass): | |
| class newToolClass(toolClass): | |
| def __init__(self, tool_name: str, st_cb: StreamlitCallbackHandler, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| self.st_cb = st_cb | |
| self.tool_name = tool_name | |
| def run(self, *args, **kwargs): | |
| print(f"Running {toolClass.__name__} {[*args]}, {kwargs}") | |
| if self.st_cb._current_thought is None: | |
| self.st_cb.on_llm_start({}, []) | |
| args_str = ' '.join(args) + ' ' + ' '.join([f'{k}=`{v}`' for k, v in kwargs.items()]) | |
| self.st_cb.on_tool_start({'name': self.tool_name}, args_str) | |
| try: | |
| ret_val = retry( | |
| wait=wait_exponential(min=2, max=20), | |
| stop=stop_after_attempt(5), | |
| )(super().run)(*args, **kwargs) | |
| self.st_cb.on_tool_end(ret_val) | |
| return ret_val | |
| except Exception as e: | |
| original_exception = e.last_attempt.result() | |
| print(f"Exception {original_exception} in {toolClass.__name__} {[*args]}, {kwargs}") | |
| raise original_exception | |
| return newToolClass | |
| from functools import wraps | |
| def retry_and_streamlit_callback(st_cb: StreamlitCallbackHandler, tool_name: str): | |
| if st_cb is None: | |
| return lambda x: x | |
| def decorator(tool_func): | |
| def decorated_func(*args, **kwargs): | |
| print(f"Running {tool_name} {args}, {kwargs}") | |
| if st_cb._current_thought is None: | |
| st_cb.on_llm_start({}, []) | |
| args_str = ' '.join(args) + ' ' + ' '.join([f'{k}=`{v}`' for k, v in kwargs.items()]) | |
| st_cb.on_tool_start({'name': tool_name}, args_str) | |
| def retry_wrapper(): | |
| return tool_func(*args, **kwargs) | |
| try: | |
| ret_val = retry_wrapper() | |
| st_cb.on_tool_end(ret_val) | |
| return ret_val | |
| except Exception as e: | |
| print(f"Exception {e} in {tool_name} {args}, {kwargs}") | |
| raise e | |
| return decorated_func | |
| return decorator | |