FullStackRetrieval-com / RetrievalTutorials

https://retrieval-tutorials.vercel.app
750 stars 120 forks source link

Pydantic Validation Error #3

Open Sachin-Bhat opened 7 months ago

Sachin-Bhat commented 7 months ago

Hello,

Thanks for sharing this notebook on agentic chunking. It was quite informative. I tried to run the notebook myself. However, I get the following error:

{
    "name": "ValidationError",
    "message": "1 validation error for PydanticSchema
info
  value is not a valid list (type=type_error.list)",
    "stack": "---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
Cell In[9], line 4
      1 essay_propositions = []
      3 for i, para in enumerate(paragraphs[:5]):
----> 4     propositions = get_propositions(para)
      6     essay_propositions.extend(propositions)
      7     print (f\"Done with {i}\")

Cell In[5], line 9, in get_propositions(text)
      4 def get_propositions(text):
      5     runnable_output = runnable.invoke({
      6     \t\"input\": text
      7     }).content
----> 9     propositions = extraction_chain.run(runnable_output)[0].sentences
     10     return propositions

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain_core\\_api\\deprecation.py:145, in deprecated.<locals>.deprecate.<locals>.warning_emitting_wrapper(*args, **kwargs)
    143     warned = True
    144     emit_warning()
--> 145 return wrapped(*args, **kwargs)

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\base.py:545, in Chain.run(self, callbacks, tags, metadata, *args, **kwargs)
    543     if len(args) != 1:
    544         raise ValueError(\"`run` supports only one positional argument.\")
--> 545     return self(args[0], callbacks=callbacks, tags=tags, metadata=metadata)[
    546         _output_key
    547     ]
    549 if kwargs and not args:
    550     return self(kwargs, callbacks=callbacks, tags=tags, metadata=metadata)[
    551         _output_key
    552     ]

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain_core\\_api\\deprecation.py:145, in deprecated.<locals>.deprecate.<locals>.warning_emitting_wrapper(*args, **kwargs)
    143     warned = True
    144     emit_warning()
--> 145 return wrapped(*args, **kwargs)

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\base.py:378, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, metadata, run_name, include_run_info)
    346 \"\"\"Execute the chain.
    347 
    348 Args:
   (...)
    369         `Chain.output_keys`.
    370 \"\"\"
    371 config = {
    372     \"callbacks\": callbacks,
    373     \"tags\": tags,
    374     \"metadata\": metadata,
    375     \"run_name\": run_name,
    376 }
--> 378 return self.invoke(
    379     inputs,
    380     cast(RunnableConfig, {k: v for k, v in config.items() if v is not None}),
    381     return_only_outputs=return_only_outputs,
    382     include_run_info=include_run_info,
    383 )

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\base.py:163, in Chain.invoke(self, input, config, **kwargs)
    161 except BaseException as e:
    162     run_manager.on_chain_error(e)
--> 163     raise e
    164 run_manager.on_chain_end(outputs)
    166 if include_run_info:

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\base.py:153, in Chain.invoke(self, input, config, **kwargs)
    150 try:
    151     self._validate_inputs(inputs)
    152     outputs = (
--> 153         self._call(inputs, run_manager=run_manager)
    154         if new_arg_supported
    155         else self._call(inputs)
    156     )
    158     final_outputs: Dict[str, Any] = self.prep_outputs(
    159         inputs, outputs, return_only_outputs
    160     )
    161 except BaseException as e:

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\llm.py:104, in LLMChain._call(self, inputs, run_manager)
     98 def _call(
     99     self,
    100     inputs: Dict[str, Any],
    101     run_manager: Optional[CallbackManagerForChainRun] = None,
    102 ) -> Dict[str, str]:
    103     response = self.generate([inputs], run_manager=run_manager)
--> 104     return self.create_outputs(response)[0]

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\llm.py:258, in LLMChain.create_outputs(self, llm_result)
    256 def create_outputs(self, llm_result: LLMResult) -> List[Dict[str, Any]]:
    257     \"\"\"Create outputs from response.\"\"\"
--> 258     result = [
    259         # Get the text of the top generated string.
    260         {
    261             self.output_key: self.output_parser.parse_result(generation),
    262             \"full_generation\": generation,
    263         }
    264         for generation in llm_result.generations
    265     ]
    266     if self.return_final_only:
    267         result = [{self.output_key: r[self.output_key]} for r in result]

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain\\chains\\llm.py:261, in <listcomp>(.0)
    256 def create_outputs(self, llm_result: LLMResult) -> List[Dict[str, Any]]:
    257     \"\"\"Create outputs from response.\"\"\"
    258     result = [
    259         # Get the text of the top generated string.
    260         {
--> 261             self.output_key: self.output_parser.parse_result(generation),
    262             \"full_generation\": generation,
    263         }
    264         for generation in llm_result.generations
    265     ]
    266     if self.return_final_only:
    267         result = [{self.output_key: r[self.output_key]} for r in result]

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain_core\\output_parsers\\openai_functions.py:219, in PydanticAttrOutputFunctionsParser.parse_result(self, result, partial)
    218 def parse_result(self, result: List[Generation], *, partial: bool = False) -> Any:
--> 219     result = super().parse_result(result)
    220     return getattr(result, self.attr_name)

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\langchain_core\\output_parsers\\openai_functions.py:204, in PydanticOutputFunctionsParser.parse_result(self, result, partial)
    202 _result = super().parse_result(result)
    203 if self.args_only:
--> 204     pydantic_args = self.pydantic_schema.parse_raw(_result)  # type: ignore
    205 else:
    206     fn_name = _result[\"name\"]

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\pydantic\\v1\\main.py:549, in BaseModel.parse_raw(cls, b, content_type, encoding, proto, allow_pickle)
    547 except (ValueError, TypeError, UnicodeDecodeError) as e:
    548     raise ValidationError([ErrorWrapper(e, loc=ROOT_KEY)], cls)
--> 549 return cls.parse_obj(obj)

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\pydantic\\v1\\main.py:526, in BaseModel.parse_obj(cls, obj)
    524         exc = TypeError(f'{cls.__name__} expected dict not {obj.__class__.__name__}')
    525         raise ValidationError([ErrorWrapper(exc, loc=ROOT_KEY)], cls) from e
--> 526 return cls(**obj)

File c:\\Users\\Sachin_Bhat\\Documents\\dev\\proj\\RetrievalTutorials-main\\.venv\\lib\\site-packages\\pydantic\\v1\\main.py:341, in BaseModel.__init__(__pydantic_self__, **data)
    339 values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
    340 if validation_error:
--> 341     raise validation_error
    342 try:
    343     object_setattr(__pydantic_self__, '__dict__', values)

ValidationError: 1 validation error for PydanticSchema
info
  value is not a valid list (type=type_error.list)"
}

any help with this is greatly appreciated!

Cheers, Sachin

Vikram-HTC commented 6 months ago

same error

gkamradt commented 6 months ago

Might be a package version situation. I'll run it on my end, add requirements.txt and throw an update up next week

1024689068 commented 4 months ago

I also encountered the same problem. The mysterious thing about this error is that it occurred in the morning, ran normally at noon, and then the same error occurred again in the afternoon, which is very frustrating.

gkamradt commented 4 months ago

This validation error looks like it is with the LLM not returning consistent types (since the latest comment says it works sometimes).

The solution is to:

  1. Update output parsing method to something more reliable
  2. Get better LLMs that follow instructions more (not happening soon)

I can't devote time to this now but happy to review a PR if anyone wants to try themselves