mirror of
https://github.com/open-webui/openapi-servers
synced 2025-06-26 18:17:04 +00:00
fix pydantic json schema warnings
This commit is contained in:
parent
bd133a7578
commit
f27804f4f9
@ -2,7 +2,7 @@
|
||||
import os
|
||||
import httpx
|
||||
import inspect
|
||||
from typing import Optional, List, Dict, Any, Type
|
||||
from typing import Optional, List, Dict, Any, Type, Callable
|
||||
from fastapi import FastAPI, HTTPException, Body, Depends
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from pydantic import BaseModel, Field
|
||||
@ -269,31 +269,35 @@ TOOL_MAPPING = {
|
||||
},
|
||||
}
|
||||
|
||||
# Dynamically create endpoints for each tool
|
||||
for tool_name, config in TOOL_MAPPING.items():
|
||||
args_model = config["args_model"]
|
||||
method_to_call = config["method"]
|
||||
tool_description = config["description"]
|
||||
|
||||
async def endpoint_func(args: args_model = Body(...), # type: ignore
|
||||
method=method_to_call): # Capture method in closure
|
||||
# Define a function factory to create endpoint handlers
|
||||
def create_endpoint_handler(tool_name: str, method: Callable, args_model: Type[BaseModel]):
|
||||
async def endpoint_handler(args: args_model = Body(...)) -> ToolResponse:
|
||||
try:
|
||||
result = await method(args=args)
|
||||
return {"content": result}
|
||||
except HTTPException as e:
|
||||
raise e
|
||||
except Exception as e:
|
||||
print(f"Error executing tool: {e}")
|
||||
print(f"Error executing tool {tool_name}: {e}")
|
||||
raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
||||
return endpoint_handler
|
||||
|
||||
# Register endpoints for each tool
|
||||
for tool_name, config in TOOL_MAPPING.items():
|
||||
handler = create_endpoint_handler(
|
||||
tool_name=tool_name,
|
||||
method=config["method"],
|
||||
args_model=config["args_model"]
|
||||
)
|
||||
|
||||
app.post(
|
||||
f"/{tool_name}",
|
||||
response_model=ToolResponse,
|
||||
summary=tool_description,
|
||||
summary=config["description"],
|
||||
description=f"Executes the {tool_name} tool. Arguments are passed in the request body.",
|
||||
tags=["Slack Tools"],
|
||||
name=tool_name
|
||||
)(endpoint_func)
|
||||
)(handler)
|
||||
|
||||
# --- Root Endpoint ---
|
||||
@app.get("/", summary="Root endpoint", include_in_schema=False)
|
||||
|
Loading…
Reference in New Issue
Block a user