feat: logging in parse method

feature/stdout-breaker
adldotori 1 year ago
parent 9eefef4019
commit 318c4781de

@ -1,18 +1,18 @@
from typing import Any, Dict, List, Optional, Union from typing import Any, Dict, List, Optional, Union
from ansi import ANSI, Color, Style
from langchain.callbacks.base import BaseCallbackHandler from langchain.callbacks.base import BaseCallbackHandler
from langchain.schema import AgentAction, AgentFinish, LLMResult from langchain.schema import AgentAction, AgentFinish, LLMResult
from ansi import ANSI, Color, Style
from logger import logger from logger import logger
class EVALCallbackHandler(BaseCallbackHandler): def dim_multiline(message: str) -> str:
def dim_multiline(self, message: str) -> str: return message.split("\n")[0] + ANSI(
return message.split("\n")[0] + ANSI( "\n... ".join(["", *message.split("\n")[1:]])
"\n... ".join(["", *message.split("\n")[1:]]) ).to(Color.black().bright())
).to(Color.black().bright())
class EVALCallbackHandler(BaseCallbackHandler):
def on_llm_start( def on_llm_start(
self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any
) -> None: ) -> None:
@ -33,7 +33,7 @@ class EVALCallbackHandler(BaseCallbackHandler):
self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
) -> None: ) -> None:
logger.info(ANSI(f"Entering new chain.").to(Color.green(), Style.italic())) logger.info(ANSI(f"Entering new chain.").to(Color.green(), Style.italic()))
logger.info(ANSI("Prompted Text").to(Color.yellow()) + f': {inputs["input"]}') logger.info(ANSI("Prompted Text").to(Color.yellow()) + f': {inputs["input"]}\n')
def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None: def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
logger.info(ANSI(f"Finished chain.").to(Color.green(), Style.italic())) logger.info(ANSI(f"Finished chain.").to(Color.green(), Style.italic()))
@ -52,14 +52,7 @@ class EVALCallbackHandler(BaseCallbackHandler):
pass pass
def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any: def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
logger.info( pass
ANSI("Action").to(Color.cyan()) + ": " + ANSI(action.tool).to(Style.bold())
)
logger.info(
ANSI("Input").to(Color.cyan())
+ ": "
+ self.dim_multiline(action.tool_input)
)
def on_tool_end( def on_tool_end(
self, self,
@ -69,7 +62,7 @@ class EVALCallbackHandler(BaseCallbackHandler):
**kwargs: Any, **kwargs: Any,
) -> None: ) -> None:
logger.info( logger.info(
ANSI("Observation").to(Color.magenta()) + ": " + self.dim_multiline(output) ANSI("Observation").to(Color.magenta()) + ": " + dim_multiline(output)
) )
logger.info(ANSI("Thinking...").to(Color.green(), Style.italic())) logger.info(ANSI("Thinking...").to(Color.green(), Style.italic()))
@ -93,5 +86,5 @@ class EVALCallbackHandler(BaseCallbackHandler):
logger.info( logger.info(
ANSI("Final Answer").to(Color.yellow()) ANSI("Final Answer").to(Color.yellow())
+ ": " + ": "
+ self.dim_multiline(finish.return_values.get("output", "")) + dim_multiline(finish.return_values.get("output", ""))
) )

@ -1,9 +1,12 @@
import re import re
import time
from typing import Dict from typing import Dict
from langchain.output_parsers.base import BaseOutputParser from ansi import ANSI, Color, Style
from core.agents.callback import dim_multiline
from core.prompts.input import EVAL_FORMAT_INSTRUCTIONS from core.prompts.input import EVAL_FORMAT_INSTRUCTIONS
from langchain.output_parsers.base import BaseOutputParser
from logger import logger
class EvalOutputParser(BaseOutputParser): class EvalOutputParser(BaseOutputParser):
@ -15,8 +18,19 @@ class EvalOutputParser(BaseOutputParser):
match = re.search(regex, text, re.DOTALL) match = re.search(regex, text, re.DOTALL)
if not match: if not match:
raise Exception("parse error") raise Exception("parse error")
action = match.group(1).strip() action = match.group(1).strip()
plan = match.group(2)
action_input = match.group(3) action_input = match.group(3)
logger.info(ANSI("Plan").to(Color.blue()) + ": " + plan)
time.sleep(1)
logger.info(
ANSI("Action").to(Color.cyan()) + ": " + ANSI(action).to(Style.bold())
)
time.sleep(1)
logger.info(ANSI("Input").to(Color.cyan()) + ": " + dim_multiline(action_input))
time.sleep(1)
return {"action": action, "action_input": action_input.strip(" ").strip('"')} return {"action": action, "action_input": action_input.strip(" ").strip('"')}
def __str__(self): def __str__(self):

@ -61,7 +61,7 @@ class SyscallTracer:
break break
try: try:
self.wait_syscall_with_timeout(60) self.wait_syscall_with_timeout(30)
except ProcessExit as event: except ProcessExit as event:
if event.exitcode is not None: if event.exitcode is not None:
exitcode = event.exitcode exitcode = event.exitcode

Loading…
Cancel
Save