langchain icon indicating copy to clipboard operation
langchain copied to clipboard

APIChain loading fails

Open liangz1 opened this issue 1 year ago • 3 comments

System Info

langchain==0.0.176

Who can help?

@hwchase17

Information

  • [X] The official example notebooks/scripts
  • [ ] My own modified scripts

Related Components

  • [ ] LLMs/Chat Models
  • [ ] Embedding Models
  • [ ] Prompts / Prompt Templates / Prompt Selectors
  • [ ] Output Parsers
  • [ ] Document Loaders
  • [ ] Vector Stores / Retrievers
  • [ ] Memory
  • [ ] Agents / Agent Executors
  • [ ] Tools / Toolkits
  • [X] Chains
  • [ ] Callbacks/Tracing
  • [ ] Async

Reproduction

Running the following code to load a saved APIChain fails.

from langchain.chains.api.prompt import API_RESPONSE_PROMPT
from langchain.chains import APIChain
from langchain.prompts.prompt import PromptTemplate
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)

from langchain.chains.api import open_meteo_docs
chain_new = APIChain.from_llm_and_api_docs(llm, open_meteo_docs.OPEN_METEO_DOCS, verbose=True)

chain_new.save("/Users/liang.zhang/api.yaml")
chain = load_chain("/Users/liang.zhang/api.yaml")

Error:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [29], in <cell line: 1>()
----> 1 chain = load_chain("/Users/liang.zhang/api.yaml")

File ~/miniforge3/envs/mlflow-3.8/lib/python3.8/site-packages/langchain/chains/loading.py:449, in load_chain(path, **kwargs)
    447     return hub_result
    448 else:
--> 449     return _load_chain_from_file(path, **kwargs)

File ~/miniforge3/envs/mlflow-3.8/lib/python3.8/site-packages/langchain/chains/loading.py:476, in _load_chain_from_file(file, **kwargs)
    473     config["memory"] = kwargs.pop("memory")
    475 # Load the chain from the config now.
--> 476 return load_chain_from_config(config, **kwargs)

File ~/miniforge3/envs/mlflow-3.8/lib/python3.8/site-packages/langchain/chains/loading.py:439, in load_chain_from_config(config, **kwargs)
    436     raise ValueError(f"Loading {config_type} chain not supported")
    438 chain_loader = type_to_loader_dict[config_type]
--> 439 return chain_loader(config, **kwargs)

File ~/miniforge3/envs/mlflow-3.8/lib/python3.8/site-packages/langchain/chains/loading.py:383, in _load_api_chain(config, **kwargs)
    381     requests_wrapper = kwargs.pop("requests_wrapper")
    382 else:
--> 383     raise ValueError("`requests_wrapper` must be present.")
    384 return APIChain(
    385     api_request_chain=api_request_chain,
    386     api_answer_chain=api_answer_chain,
    387     requests_wrapper=requests_wrapper,
    388     **config,
    389 )

ValueError: `requests_wrapper` must be present.

Expected behavior

No error should occur.

liangz1 avatar May 23 '23 13:05 liangz1

@dev2049 Could you take a look at this failure (similar to #4977)? Thanks!

liangz1 avatar May 23 '23 13:05 liangz1

@liangz1 this is actually intentional - we purposefully do NOT serialize the RequestsWrapper, and instead it should be provided at run time


chain = load_chain("api.yaml", requests_wrapper = chain_new.requests_wrapper)

this is because we havent gotten around to adding proper serialization for requests objects. that is on our roadmap, but not sure high up to be honest

hwchase17 avatar May 23 '23 14:05 hwchase17

@hwchase17 Thanks for clarifying. Is there any documentation on this behavior? Also, it would be helpful if users can get more guidance in the error message and get an idea about how to resolve this error.

liangz1 avatar May 23 '23 14:05 liangz1