wip logging

harrison/fix_logging_api
Harrison Chase 2 years ago
parent ad85f3bdbc
commit bf8bed493f

@ -12,7 +12,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 6,
"id": "4e272b47",
"metadata": {},
"outputs": [],
@ -32,13 +32,13 @@
" )\n",
"]\n",
"\n",
"llm = OpenAI(temperature=0)\n",
"llm = OpenAI(temperature=0, model_name=\"text-davinci-002\")\n",
"react = initialize_agent(tools, llm, agent=\"react-docstore\", verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 7,
"id": "8078c8f1",
"metadata": {},
"outputs": [
@ -50,30 +50,25 @@
"\n",
"\u001b[1m> Entering new ReActDocstoreAgent chain...\u001b[0m\n",
"Author David Chanoff has collaborated with a U.S. Navy admiral who served as the ambassador to the United Kingdom under which President?\n",
"Thought 1:\u001b[32;1m\u001b[1;3m I need to search David Chanoff and the U.S. Navy admiral, find the ambassador to the United Kingdom, then find the President they served under.\n",
"Thought 1:\u001b[32;1m\u001b[1;3m I need to search David Chanoff and find the U.S. Navy admiral he collaborated\n",
"with.\n",
"Action 1: Search[David Chanoff]\u001b[0m\n",
"Observation 1: \u001b[36;1m\u001b[1;3mDavid Chanoff is a noted author of non-fiction work. His work has typically involved collaborations with the principal protagonist of the work concerned. His collaborators have included; Augustus A. White, Joycelyn Elders, Đoàn Văn Toại, William J. Crowe, Ariel Sharon, Kenneth Good and Felix Zandman. He has also written about a wide range of subjects including literary history, education and foreign for The Washington Post, The New Republic and The New York Times Magazine. He has published more than twelve books.\u001b[0m\n",
"Thought 2:\u001b[32;1m\u001b[1;3m David Chanoff has collaborated with a U.S. Navy admiral. I need to search the U.S. Navy admiral and find the ambassador to the United Kingdom.\n",
"Action 2: Search[U.S. Navy admiral]\u001b[0m\n",
"Observation 2: \u001b[36;1m\u001b[1;3mAdmiral of the Navy was the highest-possible rank in the United States Navy, prior to the creation of fleet admiral in 1944. The rank is considered to be at least equivalent to that of a five-star admiral, with Admiral George Dewey being the only officer to be appointed to the rank.\u001b[0m\n",
"Thought 3:\u001b[32;1m\u001b[1;3m The U.S. Navy admiral is Admiral George Dewey. I need to search Admiral George Dewey and find the ambassador to the United Kingdom.\n",
"Action 3: Search[Admiral George Dewey]\u001b[0m\n",
"Observation 3: \u001b[36;1m\u001b[1;3mGeorge Dewey (December 26, 1837 January 16, 1917) was Admiral of the Navy, the only person in United States history to have attained that rank. He is best known for his victory at the Battle of Manila Bay during the SpanishAmerican War, with the loss of only a single crewman on the American side.\n",
"Dewey was born in Montpelier, Vermont. At age 15, Dewey's father enrolled him at Norwich University in Northfield, Vermont. Two years later Norwich expelled him for drunkenness and herding sheep into the barracks. Summarily, he entered the United States Naval Academy in 1854. He graduated from the academy in 1858 and was assigned as the executive lieutenant of the USS Mississippi at the beginning of the Civil War. He participated in the capture of New Orleans and the Siege of Port Hudson, helping the Union take control of the Mississippi River. By the end of the war, Dewey reached the rank of lieutenant commander.\n",
"After the Civil War, Dewey undertook a variety of assignments, serving on multiple ships (including the USS Constitution) and as an instructor at the Naval Academy. He also served on the United States Lighthouse Board and the Board of Inspection and Survey. He was promoted to commodore in 1896 and assigned to the Asiatic Squadron the following year. After that appointment, he began preparations for a potential war with Spain, which broke out in April 1898. Immediately after the beginning of the war, Dewey led an attack on Manila Bay, sinking the entire Spanish Pacific fleet while suffering only minor casualties. After the battle, his fleet assisted in the capture of Manila. Dewey's victory at Manila Bay was widely lauded in the United States, and he was promoted to Admiral of the Navy in 1903.\n",
"Dewey explored a run for the 1900 Democratic presidential nomination, but he withdrew from the race and endorsed President William McKinley. He served on the General Board of the United States Navy, an important policy-making body, from 1900 until his death in 1917.\u001b[0m\n",
"Thought 4:\u001b[32;1m\u001b[1;3m Admiral George Dewey served as the ambassador to the United Kingdom under President William McKinley.\n",
"Action 4: Finish[William McKinley]\u001b[0m\n",
"Thought 2:\u001b[32;1m\u001b[1;3m The U.S. Navy admiral David Chanoff collaborated with is William J. Crowe.\n",
"Action 2: Search[William J. Crowe]\u001b[0m\n",
"Observation 2: \u001b[36;1m\u001b[1;3mWilliam James Crowe Jr. (January 2, 1925 October 18, 2007) was a United States Navy admiral and diplomat who served as the 11th chairman of the Joint Chiefs of Staff under Presidents Ronald Reagan and George H. W. Bush, and as the ambassador to the United Kingdom and Chair of the Intelligence Oversight Board under President Bill Clinton.\u001b[0m\n",
"Thought 3:\u001b[32;1m\u001b[1;3m William J. Crowe served as the ambassador to the United Kingdom under President Bill Clinton.\n",
"Action 3: Finish[Bill Clinton]\u001b[0m\n",
"\u001b[1m> Finished ReActDocstoreAgent chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'William McKinley'"
"'Bill Clinton'"
]
},
"execution_count": 2,
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@ -108,7 +103,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
"version": "3.10.8"
}
},
"nbformat": 4,

@ -18,6 +18,7 @@ from langchain.chains import (
)
from langchain.docstore import InMemoryDocstore, Wikipedia
from langchain.llms import Cohere, HuggingFaceHub, OpenAI
from langchain.logger import BaseLogger
from langchain.prompts import (
BasePromptTemplate,
FewShotPromptTemplate,
@ -28,6 +29,8 @@ from langchain.serpapi import SerpAPIChain, SerpAPIWrapper
from langchain.sql_database import SQLDatabase
from langchain.vectorstores import FAISS, ElasticVectorSearch
logger = BaseLogger()
__all__ = [
"LLMChain",
"LLMMathChain",

@ -6,15 +6,14 @@ from typing import Any, ClassVar, Dict, List, Optional, Tuple
from pydantic import BaseModel
from langchain.agents.input import ChainedInput
from langchain.agents.tools import Tool
from langchain.chains.base import Chain
from langchain.chains.llm import LLMChain
from langchain.input import get_color_mapping
from langchain.agents.input import ChainedInput
from langchain.llms.base import LLM
from langchain.prompts.base import BasePromptTemplate
from langchain.schema import AgentAction
from langchain.logger import logger
class Agent(Chain, BaseModel, ABC):
@ -149,4 +148,9 @@ class Agent(Chain, BaseModel, ABC):
# We then call the tool on the tool input to get an observation
observation = chain(output.tool_input)
# We then log the observation
chained_input.add_observation(observation, self.observation_prefix, self.llm_prefix, color=color_mapping[output.tool])
chained_input.add_observation(
observation,
self.observation_prefix,
self.llm_prefix,
color=color_mapping[output.tool],
)

@ -1,8 +1,8 @@
"""Input manager for agents."""
from typing import Optional
import langchain
from langchain.schema import AgentAction
from langchain.logger import logger
class ChainedInput:
@ -12,19 +12,25 @@ class ChainedInput:
"""Initialize with verbose flag and initial text."""
self._verbose = verbose
if self._verbose:
logger.log_agent_start(text)
langchain.logger.log_agent_start(text)
self._input = text
def add_action(self, action: AgentAction, color: Optional[str] = None) -> None:
"""Add text to input, print if in verbose mode."""
if self._verbose:
logger.log_agent_action(action, color=color)
langchain.logger.log_agent_action(action, color=color)
self._input += action.log
def add_observation(self, observation: str, observation_prefix: str, llm_prefix: str, color: Optional[str]) -> None:
def add_observation(
self,
observation: str,
observation_prefix: str,
llm_prefix: str,
color: Optional[str],
) -> None:
"""Add observation to input, print if in verbose mode."""
if self._verbose:
logger.log_agent_observation(
langchain.logger.log_agent_observation(
observation,
color=color,
observation_prefix=observation_prefix,

@ -3,8 +3,8 @@ from typing import Any, Dict, List, Union
from pydantic import BaseModel, Extra
import langchain
from langchain.chains.base import Chain
from langchain.input import print_text
from langchain.llms.base import LLM
from langchain.prompts.base import BasePromptTemplate
@ -55,12 +55,13 @@ class LLMChain(Chain, BaseModel):
selected_inputs = {k: inputs[k] for k in self.prompt.input_variables}
prompt = self.prompt.format(**selected_inputs)
if self.verbose:
print("Prompt after formatting:")
print_text(prompt, color="green", end="\n")
langchain.logger.log_llm_inputs(selected_inputs, prompt)
kwargs = {}
if "stop" in inputs:
kwargs["stop"] = inputs["stop"]
response = self.llm(prompt, **kwargs)
if self.verbose:
langchain.logger.log_llm_response(response)
return {self.output_key: response}
def predict(self, **kwargs: Any) -> str:

@ -1,12 +1,10 @@
from langchain.schema import AgentAction
from typing import Optional, Any
from typing import Any, Optional
from langchain.input import print_text
import logging
logging.basicConfig
from langchain.schema import AgentAction
class BaseLogger:
def log_agent_start(self, text: str, **kwargs: Any):
pass
@ -19,6 +17,12 @@ class BaseLogger:
def log_agent_observation(self, observation: str, **kwargs: Any):
pass
def log_llm_inputs(self, inputs: dict, prompt: str, **kwargs):
pass
def log_llm_response(self, output: str, **kwargs):
pass
class StOutLogger(BaseLogger):
def log_agent_start(self, text: str, **kwargs: Any):
@ -27,20 +31,26 @@ class StOutLogger(BaseLogger):
def log_agent_end(self, text: str, **kwargs: Any):
pass
def log_agent_action(self, action: AgentAction, color: Optional[str] = None, **kwargs: Any):
def log_agent_action(
self, action: AgentAction, color: Optional[str] = None, **kwargs: Any
):
print_text(action.log, color=color)
def log_llm_inputs(self, inputs: dict, prompt: str, **kwargs):
print("Prompt after formatting:")
print_text(prompt, color="green", end="\n")
def log_llm_response(self, output: str, **kwargs):
pass
def log_agent_observation(
self,
observation: str,
color: Optional[str] = None,
observation_prefix: Optional[str] = None,
llm_prefix: Optional[str] = None,
**kwargs: Any):
self,
observation: str,
color: Optional[str] = None,
observation_prefix: Optional[str] = None,
llm_prefix: Optional[str] = None,
**kwargs: Any,
):
print_text(f"\n{observation_prefix}")
print_text(observation, color=color)
print_text(f"\n{llm_prefix}")
logger = StOutLogger()

@ -3,8 +3,8 @@
import sys
from io import StringIO
from langchain.input import get_color_mapping
from langchain.agents.input import ChainedInput
from langchain.input import get_color_mapping
def test_chained_input_not_verbose() -> None:

Loading…
Cancel
Save