Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit 7649886

Browse files
Merge pull request #96 from stacklok/specify-provider-in-url
Specify the provider in the URL to properly route traffic
2 parents e17088e + af50968 commit 7649886

File tree

6 files changed

+29
-7
lines changed

6 files changed

+29
-7
lines changed

src/codegate/providers/anthropic/provider.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,18 @@ def __init__(self):
1313
completion_handler = LiteLLmShim(adapter)
1414
super().__init__(completion_handler)
1515

16+
@property
17+
def provider_route_name(self) -> str:
18+
return "anthropic"
19+
1620
def _setup_routes(self):
1721
"""
1822
Sets up the /messages route for the provider as expected by the Anthropic
1923
API. Extracts the API key from the "x-api-key" header and passes it to the
2024
completion handler.
2125
"""
2226

23-
@self.router.post("/messages")
27+
@self.router.post(f"/{self.provider_route_name}/messages")
2428
async def create_message(
2529
request: Request,
2630
x_api_key: str = Header(None),

src/codegate/providers/base.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ def __init__(self, completion_handler: BaseCompletionHandler):
3939
def _setup_routes(self) -> None:
4040
pass
4141

42+
@property
43+
@abstractmethod
44+
def provider_route_name(self) -> str:
45+
pass
46+
4247
async def complete(self, data: Dict, api_key: str) -> AsyncIterator[Any]:
4348
return await self._completion_handler.complete(data, api_key)
4449

src/codegate/providers/llamacpp/completion_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any, AsyncIterator, Dict
22

3+
from litellm import ModelResponse
34
from fastapi.responses import StreamingResponse
4-
from litellm import ModelResponse, acompletion
55

66
from codegate.providers.base import BaseCompletionHandler
77
from codegate.providers.llamacpp.adapter import BaseAdapter

src/codegate/providers/llamacpp/provider.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22

3-
from fastapi import Header, HTTPException, Request
3+
from fastapi import Request
44

55
from codegate.providers.base import BaseProvider
66
from codegate.providers.llamacpp.completion_handler import LlamaCppCompletionHandler
@@ -13,13 +13,17 @@ def __init__(self):
1313
completion_handler = LlamaCppCompletionHandler(adapter)
1414
super().__init__(completion_handler)
1515

16+
@property
17+
def provider_route_name(self) -> str:
18+
return "llamacpp"
19+
1620
def _setup_routes(self):
1721
"""
1822
Sets up the /chat route for the provider as expected by the
1923
Llama API. Extracts the API key from the "Authorization" header and
2024
passes it to the completion handler.
2125
"""
22-
@self.router.post("/completion")
26+
@self.router.post(f"/{self.provider_route_name}/completion")
2327
async def create_completion(
2428
request: Request,
2529
):

src/codegate/providers/openai/provider.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,18 @@ def __init__(self):
1313
completion_handler = LiteLLmShim(adapter)
1414
super().__init__(completion_handler)
1515

16+
@property
17+
def provider_route_name(self) -> str:
18+
return "openai"
19+
1620
def _setup_routes(self):
1721
"""
1822
Sets up the /chat/completions route for the provider as expected by the
1923
OpenAI API. Extracts the API key from the "Authorization" header and
2024
passes it to the completion handler.
2125
"""
2226

23-
@self.router.post("/chat/completions")
27+
@self.router.post(f"/{self.provider_route_name}/chat/completions")
2428
async def create_completion(
2529
request: Request,
2630
authorization: str = Header(..., description="Bearer token"),

tests/providers/test_registry.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@ def create_streaming_response(
2020

2121

2222
class MockProvider(BaseProvider):
23+
24+
@property
25+
def provider_route_name(self) -> str:
26+
return 'mock_provider'
27+
2328
def _setup_routes(self) -> None:
24-
@self.router.get("/test")
29+
@self.router.get(f"/{self.provider_route_name}/test")
2530
def test_route():
2631
return {"message": "test"}
2732

@@ -61,5 +66,5 @@ def test_provider_routes_added(app, registry, mock_completion_handler):
6166
provider = MockProvider(mock_completion_handler)
6267
registry.add_provider("test", provider)
6368

64-
routes = [route for route in app.routes if route.path == "/test"]
69+
routes = [route for route in app.routes if route.path == "/mock_provider/test"]
6570
assert len(routes) == 1

0 commit comments

Comments
 (0)