Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions client-sdks/stainless/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2087,7 +2087,7 @@ paths:
title: Identifier
description: The identifier of the shield to unregister.
deprecated: true
/v1/tools:
/v1/admin/tools:
get:
responses:
'200':
Expand All @@ -2112,7 +2112,7 @@ paths:
- Tools
summary: List tools with optional tool group filter.
description: List tools with optional tool group filter.
operationId: list_tools_v1_tools_get
operationId: list_tools_v1_admin_tools_get
parameters:
- name: toolgroup_id
in: query
Expand Down
4 changes: 2 additions & 2 deletions docs/static/ogx-spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1926,7 +1926,7 @@ paths:
input_items = client.responses.input_items.list("resp_abc123")
for item in input_items:
print(item)
/v1/tools:
/v1/admin/tools:
get:
responses:
'200':
Expand All @@ -1951,7 +1951,7 @@ paths:
- Tools
summary: List tools with optional tool group filter.
description: List tools with optional tool group filter.
operationId: list_tools_v1_tools_get
operationId: list_tools_v1_admin_tools_get
parameters:
- name: toolgroup_id
in: query
Expand Down
4 changes: 2 additions & 2 deletions docs/static/stainless-ogx-spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2087,7 +2087,7 @@ paths:
title: Identifier
description: The identifier of the shield to unregister.
deprecated: true
/v1/tools:
/v1/admin/tools:
get:
responses:
'200':
Expand All @@ -2112,7 +2112,7 @@ paths:
- Tools
summary: List tools with optional tool group filter.
description: List tools with optional tool group filter.
operationId: list_tools_v1_tools_get
operationId: list_tools_v1_admin_tools_get
parameters:
- name: toolgroup_id
in: query
Expand Down
2 changes: 1 addition & 1 deletion scripts/openapi_generator/_legacy_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"/v1/tool-runtime/list-tools",
"/v1/toolgroups",
"/v1/toolgroups/{toolgroup_id}",
"/v1/tools",
"/v1/admin/tools",
"/v1/tools/{tool_name}",
"/v1/vector-io/insert",
"/v1/vector-io/query",
Expand Down
9 changes: 9 additions & 0 deletions src/ogx/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
ListToolsResponse,
)
from ogx_api.tools import ToolDef
from ogx_api.tools.api import ToolGroups
from ogx_api.tools.models import ListToolDefsResponse, ListToolsRequest

logger = get_logger(name=__name__, category="core")

Expand Down Expand Up @@ -249,3 +251,10 @@ async def list_connector_tools(

async def get_connector_tool(self, request: GetConnectorToolRequest, authorization: str | None = None) -> ToolDef:
return await self._connectors.get_connector_tool(request, authorization=authorization)

@property
def _tool_groups(self) -> ToolGroups:
return cast(ToolGroups, self.deps[Api.tool_groups.value])

async def list_tools(self, request: ListToolsRequest) -> ListToolDefsResponse:
return await self._tool_groups.list_tools(request)
11 changes: 11 additions & 0 deletions src/ogx_api/admin/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from typing import Protocol, runtime_checkable

from ogx_api.connectors.api import Connectors
from ogx_api.tools.models import ListToolDefsResponse, ListToolsRequest

from .models import (
HealthInfo,
Expand Down Expand Up @@ -72,3 +73,13 @@ async def version(self) -> VersionInfo:
:returns: Version information containing the service version number.
"""
...

async def list_tools(self, request: ListToolsRequest) -> ListToolDefsResponse:
"""List tools.

List tools with optional tool group filter.

:param request: Request containing optional filter parameters
:returns: A ListToolDefsResponse containing available tool definitions.
"""
...
49 changes: 38 additions & 11 deletions src/ogx_api/admin/fastapi_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
)
from ogx_api.router_utils import create_path_dependency, create_query_dependency, standard_responses
from ogx_api.tools import ToolDef
from ogx_api.version import OGX_API_V1ALPHA
from ogx_api.tools.models import ListToolDefsResponse, ListToolsRequest
from ogx_api.version import OGX_API_V1, OGX_API_V1ALPHA

from .api import Admin
from .models import (
Expand All @@ -41,6 +42,7 @@
# Automatically generate dependency functions from Pydantic models
get_inspect_provider_request = create_path_dependency(InspectProviderRequest)
get_list_routes_request = create_query_dependency(ListRoutesRequest)
get_list_tools_request = create_query_dependency(ListToolsRequest)
get_connector_request = create_path_dependency(GetConnectorRequest)
list_connector_tools_request = create_path_dependency(ListConnectorToolsRequest)

Expand All @@ -55,12 +57,15 @@ def create_router(impl: Admin) -> APIRouter:
APIRouter configured for the Admin API
"""
router = APIRouter(
responses=standard_responses,
)

v1alpha_router = APIRouter(
prefix=f"/{OGX_API_V1ALPHA}",
tags=["Admin"],
responses=standard_responses,
)

@router.get(
@v1alpha_router.get(
"/admin/providers",
response_model=ListProvidersResponse,
summary="List all available providers",
Expand All @@ -72,7 +77,7 @@ def create_router(impl: Admin) -> APIRouter:
async def list_providers() -> ListProvidersResponse:
return await impl.list_providers()

@router.get(
@v1alpha_router.get(
"/admin/providers/{provider_id}",
response_model=ProviderInfo,
summary="Get provider details",
Expand All @@ -87,7 +92,7 @@ async def inspect_provider(
) -> ProviderInfo:
return await impl.inspect_provider(request)

@router.get(
@v1alpha_router.get(
"/admin/inspect/routes",
response_model=ListRoutesResponse,
summary="List all available API routes",
Expand All @@ -101,7 +106,7 @@ async def list_routes(
) -> ListRoutesResponse:
return await impl.list_routes(request)

@router.get(
@v1alpha_router.get(
"/admin/health",
response_model=HealthInfo,
summary="Get service health status",
Expand All @@ -113,7 +118,7 @@ async def list_routes(
async def health() -> HealthInfo:
return await impl.health()

@router.get(
@v1alpha_router.get(
"/admin/version",
response_model=VersionInfo,
summary="Get service version",
Expand All @@ -125,7 +130,7 @@ async def health() -> HealthInfo:
async def version() -> VersionInfo:
return await impl.version()

@router.get(
@v1alpha_router.get(
"/admin/connectors",
response_model=ListConnectorsResponse,
summary="List all connectors.",
Expand All @@ -134,7 +139,7 @@ async def version() -> VersionInfo:
async def list_connectors() -> ListConnectorsResponse:
return await impl.list_connectors()

@router.get(
@v1alpha_router.get(
"/admin/connectors/{connector_id}/tools/{tool_name}",
response_model=ToolDef,
summary="Get a tool by name from a connector.",
Expand All @@ -148,7 +153,7 @@ async def get_connector_tool(
request = GetConnectorToolRequest(connector_id=connector_id, tool_name=tool_name)
return await impl.get_connector_tool(request, authorization=authorization)

@router.get(
@v1alpha_router.get(
"/admin/connectors/{connector_id}/tools",
response_model=ListToolsResponse,
summary="List tools from a connector.",
Expand All @@ -160,7 +165,7 @@ async def list_connector_tools(
) -> ListToolsResponse:
return await impl.list_connector_tools(request, authorization=authorization)

@router.get(
@v1alpha_router.get(
"/admin/connectors/{connector_id}",
response_model=Connector,
summary="Get a connector by its ID.",
Expand All @@ -172,4 +177,26 @@ async def get_connector(
) -> Connector:
return await impl.get_connector(request, authorization=authorization)

v1_router = APIRouter(
prefix=f"/{OGX_API_V1}",
tags=["Tools"],
)

@v1_router.get(
"/admin/tools",
response_model=ListToolDefsResponse,
summary="List tools with optional tool group filter.",
description="List tools with optional tool group filter.",
responses={
200: {"description": "A ListToolDefsResponse."},
},
)
async def list_tools(
request: Annotated[ListToolsRequest, Depends(get_list_tools_request)],
) -> ListToolDefsResponse:
return await impl.list_tools(request)

router.include_router(v1alpha_router)
router.include_router(v1_router)

return router
5 changes: 0 additions & 5 deletions src/ogx_api/tools/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,8 @@

This module contains the ToolGroups and ToolRuntime protocol definitions.
Pydantic models are defined in ogx_api.tools.models.
The FastAPI router is defined in ogx_api.tools.fastapi_routes.
"""

# Import fastapi_routes for router factory access
from . import fastapi_routes

# Import protocols for re-export
from .api import ToolGroups, ToolRuntime

Expand Down Expand Up @@ -42,5 +38,4 @@
"ToolInvocationResult",
"ToolRuntime",
"ToolStore",
"fastapi_routes",
]
58 changes: 0 additions & 58 deletions src/ogx_api/tools/fastapi_routes.py

This file was deleted.

Loading