From 92b87c2fec17be1befead7b4aebd9f095938d017 Mon Sep 17 00:00:00 2001 From: SvMax Date: Wed, 7 Jun 2023 07:00:48 +0200 Subject: [PATCH] added support for different types in ResponseSchema class (#5789) I added support for specifing different types with ResponseSchema objects: ## before ` extracted_info = ResponseSchema(name="extracted_info", description="List of extracted information") ` generate the following doc: ```json\n{\n\t\"extracted_info\": string // List of extracted information}``` This brings GPT to create a JSON with only one string in the specified field even if you requested a List in the description. ## now `extracted_info = ResponseSchema(name="extracted_info", type="List[string]", description="List of extracted information") ` generate the following doc: ```json\n{\n\t\"extracted_info\": List[string] // List of extracted information}``` This way the model responds better to the prompt generating an array of strings. Tag maintainers/contributors who might be interested: Agents / Tools / Toolkits @vowelparrot Don't know who can be interested, I suppose this is a tool, so I tagged you vowelparrot, anyway, it's a minor change, and shouldn't impact any other part of the framework. --- langchain/output_parsers/structured.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/langchain/output_parsers/structured.py b/langchain/output_parsers/structured.py index 9afaf6cd..a7b5c391 100644 --- a/langchain/output_parsers/structured.py +++ b/langchain/output_parsers/structured.py @@ -14,11 +14,12 @@ line_template = '\t"{name}": {type} // {description}' class ResponseSchema(BaseModel): name: str description: str + type: str = "string" def _get_sub_string(schema: ResponseSchema) -> str: return line_template.format( - name=schema.name, description=schema.description, type="string" + name=schema.name, description=schema.description, type=schema.type )