dspy icon indicating copy to clipboard operation
dspy copied to clipboard

Update langchain.py for old field types

Open mkotlarz opened this issue 1 year ago • 5 comments
trafficstars

in langchain.py import Old Fields as Fields

This is a short-term fix until langchain.py can be migrated to the new Pydantic fields

mkotlarz avatar Apr 28 '24 16:04 mkotlarz

Thanks for the PR @mkotlarz !

From #887 , I'm curious if removing the specified finalized lines would correct the change instead of modifying the import? Ideally, we'd like to keep "new" versions over legacy, and handle code changes accordingly.

arnavsinghvi11 avatar Apr 28 '24 18:04 arnavsinghvi11

I agree with you, I dont like it either, but short of rewriting langchain pieces, which i may take a stab at later, its the only thing I got to work without the real forensic change. Additionally langchain only supports pydantic 1. I have alot of langchain code, and there is so much synergy between the two platforms, i may build some more bridges. Agent tools is another example.. I honestly didnt want to waste time learning the old DSPY fields code, when this stuff is moving so fast.

mkotlarz avatar Apr 28 '24 18:04 mkotlarz

ah this is not rewriting langchain code, but rather the lines in langchain.py that may not be needed given the new dspy.InputField and dspy.OutputField. Does removing those lines resolve the issue?

            v.finalize(k, infer_prefix(k))  # TODO: Generate from the template at dspy.Predict(Template2Signature)

        for k, v in outputs.items():
            output_field_key = k
            v.finalize(k, infer_prefix(k))

If so, it makes sense to remove those than to refactor the imports to old DSPy field types. Let me know if that makes sense!

arnavsinghvi11 avatar Apr 28 '24 18:04 arnavsinghvi11

No, it didnt work.

File /opt/homebrew/Caskroom/miniforge/base/envs/hugface/lib/python3.12/site-packages/dsp/templates/template_v3.py:37, in Template.init(self, instructions, **kwargs) 30 self.format_handlers: dict[str, Callable] = { 31 "context": passages2text, 32 "passages": passages2text, 33 "answers": format_answers, 34 } 36 for key, value in kwargs.items(): ---> 37 if value.prefix: 38 prefix: str = value.prefix 39 else:

AttributeError: 'FieldInfo' object has no attribute 'prefix'

mkotlarz avatar Apr 28 '24 21:04 mkotlarz

Thanks for checking @mkotlarz . Could you run ruff check . --fix-only and push again? Should be good to merge after that!

arnavsinghvi11 avatar May 05 '24 00:05 arnavsinghvi11