microsoft / promptflow

Build high-quality LLM apps - from prototyping, testing to production deployment and monitoring.
https://microsoft.github.io/promptflow/
MIT License
8.32k stars 712 forks source link

[Feature Request] Make flow output json dump configurable to allow object as output #3099

Open duongthaiha opened 2 weeks ago

duongthaiha commented 2 weeks ago

Is your feature request related to a problem? Please describe. I want to return an class as output for the python tool however it shows error JSON dump failed: For example for the following code: it will return an error image

@dataclass
class ThoughtStep:
    title: str
    description: Optional[Any]
    props: Optional[dict[str, Any]] = None

# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(zone_instruction: str, modify_query:str, answer_question:str) -> list:
    thought_steps = [
        ThoughtStep(title="Look up Zone Instruction", description=zone_instruction, props=None),
        ThoughtStep(title="Modify the query with history and zone instruction", description=modify_query, props=None),
        ThoughtStep(title="Search relevant documentation", description=None, props=None),
        ThoughtStep(title="Answer the questions", description=answer_question, props=None)
    ]
    return thought_steps

Describe the solution you'd like Allow option to inject how to serialise an complex object

Describe alternatives you've considered My current work around is to manually use jsonoutput = json.dumps(thought_steps, default=lambda o: o.dict) inside the pythong tool and return a string instead

Additional context Happy to connect to explain in more detail if it helps

ferBV commented 2 weeks ago

For me this would be of great utility too, before migrating to Azure AI Studio in our project we were using Instructor package that uses pydantic for validate the outputs and was an almost perfect solution. I would be willing to contribute to make an enhancement feature.

0mza987 commented 1 week ago

@duongthaiha, Thanks for the feedback, I want to confirm that do you just want to pass a customized object inside a flow (from a node to another node)? If that's the case you can refer to Function based flow — Prompt flow documentation, with this type of flow you can pass any object inside a flow, actually there is no concept of node anymore, no dag either.

If you still want to use dag flow and return a customized object for a node (or flow output) just like your sample code, then we need a comprehensive design for this feature, it could be a long-term task to implement this feature.

@ferBV,

Thanks for your comments, really appreciate it. Could you please provide a more detailed design for this work? Maybe a doc or something? We would love it if community can contribute to prompt flow project.

duongthaiha commented 5 days ago

@0mza987 Yes it was the idea please. It will be a great feature as it will extend so much more use cases please