Browse Source

Merge pull request #12968 from alpha-pet/feat-openapi-parameter-description

feat: support OpenAPI parameter description and enum values in tool spec
Tim Jaeryang Baek 2 months ago
parent
commit
477ac7de86
2 changed files with 15 additions and 2 deletions
  1. 10 1
      backend/open_webui/utils/tools.py
  2. 5 1
      src/lib/utils/index.ts

+ 10 - 1
backend/open_webui/utils/tools.py

@@ -387,9 +387,18 @@ def convert_openapi_to_tool_payload(openapi_spec):
             for param in operation.get("parameters", []):
                 param_name = param["name"]
                 param_schema = param.get("schema", {})
+                description = param_schema.get("description", "")
+                if not description:
+                    description = param.get("description") or ""
+                if param_schema.get("enum") and isinstance(
+                    param_schema.get("enum"), list
+                ):
+                    description += (
+                        f". Possible values: {', '.join(param_schema.get('enum'))}"
+                    )
                 tool["parameters"]["properties"][param_name] = {
                     "type": param_schema.get("type"),
-                    "description": param_schema.get("description", ""),
+                    "description": description,
                 }
                 if param.get("required"):
                     tool["parameters"]["required"].append(param_name)

+ 5 - 1
src/lib/utils/index.ts

@@ -1257,9 +1257,13 @@ export const convertOpenApiToToolPayload = (openApiSpec) => {
 			// Extract path and query parameters
 			if (operation.parameters) {
 				operation.parameters.forEach((param) => {
+					let description = param.schema.description || param.description || '';
+					if (param.schema.enum && Array.isArray(param.schema.enum)) {
+						description += `. Possible values: ${param.schema.enum.join(', ')}`;
+					}
 					tool.parameters.properties[param.name] = {
 						type: param.schema.type,
-						description: param.schema.description || ''
+						description: description
 					};
 
 					if (param.required) {