forked from phoenix/litellm-mirror
(feat) pass through llm endpoints - add PATCH
support (vertex context caching requires for update ops) (#6924)
* add PATCH for pass through endpoints * test_pass_through_routes_support_all_methods
This commit is contained in:
parent
8673f2541e
commit
8fd3bf34d8
4 changed files with 45 additions and 8 deletions
|
@ -56,7 +56,7 @@ def create_request_copy(request: Request):
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/gemini/{endpoint:path}",
|
"/gemini/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Google AI Studio Pass-through", "pass-through"],
|
tags=["Google AI Studio Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def gemini_proxy_route(
|
async def gemini_proxy_route(
|
||||||
|
@ -122,7 +122,7 @@ async def gemini_proxy_route(
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/cohere/{endpoint:path}",
|
"/cohere/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Cohere Pass-through", "pass-through"],
|
tags=["Cohere Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def cohere_proxy_route(
|
async def cohere_proxy_route(
|
||||||
|
@ -171,7 +171,7 @@ async def cohere_proxy_route(
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/anthropic/{endpoint:path}",
|
"/anthropic/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Anthropic Pass-through", "pass-through"],
|
tags=["Anthropic Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def anthropic_proxy_route(
|
async def anthropic_proxy_route(
|
||||||
|
@ -224,7 +224,7 @@ async def anthropic_proxy_route(
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/bedrock/{endpoint:path}",
|
"/bedrock/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Bedrock Pass-through", "pass-through"],
|
tags=["Bedrock Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def bedrock_proxy_route(
|
async def bedrock_proxy_route(
|
||||||
|
@ -305,7 +305,7 @@ async def bedrock_proxy_route(
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/azure/{endpoint:path}",
|
"/azure/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Azure Pass-through", "pass-through"],
|
tags=["Azure Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def azure_proxy_route(
|
async def azure_proxy_route(
|
||||||
|
|
|
@ -60,7 +60,7 @@ def create_request_copy(request: Request):
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/langfuse/{endpoint:path}",
|
"/langfuse/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Langfuse Pass-through", "pass-through"],
|
tags=["Langfuse Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def langfuse_proxy_route(
|
async def langfuse_proxy_route(
|
||||||
|
|
|
@ -143,12 +143,14 @@ def construct_target_url(
|
||||||
|
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/vertex-ai/{endpoint:path}",
|
"/vertex-ai/{endpoint:path}",
|
||||||
methods=["GET", "POST", "PUT", "DELETE"],
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
tags=["Vertex AI Pass-through", "pass-through"],
|
tags=["Vertex AI Pass-through", "pass-through"],
|
||||||
include_in_schema=False,
|
include_in_schema=False,
|
||||||
)
|
)
|
||||||
@router.api_route(
|
@router.api_route(
|
||||||
"/vertex_ai/{endpoint:path}", methods=["GET", "POST", "PUT", "DELETE"], tags=["Vertex AI Pass-through", "pass-through"]
|
"/vertex_ai/{endpoint:path}",
|
||||||
|
methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
|
||||||
|
tags=["Vertex AI Pass-through", "pass-through"],
|
||||||
)
|
)
|
||||||
async def vertex_proxy_route(
|
async def vertex_proxy_route(
|
||||||
endpoint: str,
|
endpoint: str,
|
||||||
|
|
|
@ -10,6 +10,8 @@ sys.path.insert(
|
||||||
) # Adds the parent directory to the system path
|
) # Adds the parent directory to the system path
|
||||||
|
|
||||||
import fastapi
|
import fastapi
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from fastapi.routing import APIRoute
|
||||||
import httpx
|
import httpx
|
||||||
import pytest
|
import pytest
|
||||||
import litellm
|
import litellm
|
||||||
|
@ -320,3 +322,36 @@ async def test_pass_through_request_logging_failure_with_stream(
|
||||||
assert content is not None
|
assert content is not None
|
||||||
if isinstance(content, bytes):
|
if isinstance(content, bytes):
|
||||||
assert len(content) > 0
|
assert len(content) > 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_pass_through_routes_support_all_methods():
|
||||||
|
"""
|
||||||
|
Test that all pass-through routes support GET, POST, PUT, DELETE, PATCH methods
|
||||||
|
"""
|
||||||
|
# Import the routers
|
||||||
|
from litellm.proxy.pass_through_endpoints.llm_passthrough_endpoints import (
|
||||||
|
router as llm_router,
|
||||||
|
)
|
||||||
|
from litellm.proxy.vertex_ai_endpoints.vertex_endpoints import (
|
||||||
|
router as vertex_router,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Expected HTTP methods
|
||||||
|
expected_methods = {"GET", "POST", "PUT", "DELETE", "PATCH"}
|
||||||
|
|
||||||
|
# Function to check routes in a router
|
||||||
|
def check_router_methods(router):
|
||||||
|
for route in router.routes:
|
||||||
|
if isinstance(route, APIRoute):
|
||||||
|
# Get path and methods for this route
|
||||||
|
path = route.path
|
||||||
|
methods = set(route.methods)
|
||||||
|
print("supported methods for route", path, "are", methods)
|
||||||
|
# Assert all expected methods are supported
|
||||||
|
assert (
|
||||||
|
methods == expected_methods
|
||||||
|
), f"Route {path} does not support all methods. Supported: {methods}, Expected: {expected_methods}"
|
||||||
|
|
||||||
|
# Check both routers
|
||||||
|
check_router_methods(llm_router)
|
||||||
|
check_router_methods(vertex_router)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue