v1 endpoints for kf and settings

This commit is contained in:
phact 2025-12-19 03:31:54 -05:00
parent 61371beeba
commit bb71167d11
6 changed files with 106 additions and 15 deletions

View file

@ -55,7 +55,7 @@ class SettingsClient:
else:
body = {k: v for k, v in options.items() if v is not None}
response = await self._client._request("POST", "/settings", json=body)
response = await self._client._request("POST", "/api/v1/settings", json=body)
data = response.json()
return SettingsUpdateResponse(message=data.get("message", "Settings updated"))

View file

@ -62,7 +62,7 @@ class KnowledgeFiltersClient:
response = await self._client._request(
"POST",
"/knowledge-filter",
"/api/v1/knowledge-filters",
json=body,
)
@ -95,7 +95,7 @@ class KnowledgeFiltersClient:
response = await self._client._request(
"POST",
"/knowledge-filter/search",
"/api/v1/knowledge-filters/search",
json=body,
)
@ -118,7 +118,7 @@ class KnowledgeFiltersClient:
try:
response = await self._client._request(
"GET",
f"/knowledge-filter/{filter_id}",
f"/api/v1/knowledge-filters/{filter_id}",
)
data = response.json()
@ -174,7 +174,7 @@ class KnowledgeFiltersClient:
response = await self._client._request(
"PUT",
f"/knowledge-filter/{filter_id}",
f"/api/v1/knowledge-filters/{filter_id}",
json=body,
)
@ -193,7 +193,7 @@ class KnowledgeFiltersClient:
"""
response = await self._client._request(
"DELETE",
f"/knowledge-filter/{filter_id}",
f"/api/v1/knowledge-filters/{filter_id}",
)
data = response.json()

View file

@ -52,7 +52,7 @@ class SettingsClient {
* @returns Success response with message.
*/
async update(options: SettingsUpdateOptions): Promise<SettingsUpdateResponse> {
const response = await this.client._request("POST", "/settings", {
const response = await this.client._request("POST", "/api/v1/settings", {
body: JSON.stringify(options),
});
const data = await response.json();

View file

@ -31,7 +31,7 @@ export class KnowledgeFiltersClient {
queryData: JSON.stringify(options.queryData),
};
const response = await this.client._request("POST", "/knowledge-filter", {
const response = await this.client._request("POST", "/api/v1/knowledge-filters", {
body: JSON.stringify(body),
});
@ -58,7 +58,7 @@ export class KnowledgeFiltersClient {
const response = await this.client._request(
"POST",
"/knowledge-filter/search",
"/api/v1/knowledge-filters/search",
{
body: JSON.stringify(body),
}
@ -83,7 +83,7 @@ export class KnowledgeFiltersClient {
try {
const response = await this.client._request(
"GET",
`/knowledge-filter/${filterId}`
`/api/v1/knowledge-filters/${filterId}`
);
const data = (await response.json()) as GetKnowledgeFilterResponse;
@ -124,7 +124,7 @@ export class KnowledgeFiltersClient {
const response = await this.client._request(
"PUT",
`/knowledge-filter/${filterId}`,
`/api/v1/knowledge-filters/${filterId}`,
{
body: JSON.stringify(body),
}
@ -143,7 +143,7 @@ export class KnowledgeFiltersClient {
async delete(filterId: string): Promise<boolean> {
const response = await this.client._request(
"DELETE",
`/knowledge-filter/${filterId}`
`/api/v1/knowledge-filters/${filterId}`
);
const data = (await response.json()) as DeleteKnowledgeFilterResponse;

View file

@ -1,12 +1,13 @@
"""
Public API v1 Settings endpoint.
Provides read-only access to configuration settings.
Provides access to configuration settings.
Uses API key authentication.
"""
from starlette.requests import Request
from starlette.responses import JSONResponse
from utils.logging_config import get_logger
from config.settings import get_openrag_config
logger = get_logger(__name__)
@ -59,3 +60,27 @@ async def get_settings_endpoint(request: Request):
{"error": "Failed to get settings"},
status_code=500,
)
async def update_settings_endpoint(request: Request, session_manager):
"""
Update OpenRAG configuration settings.
POST /v1/settings
Request body (all fields optional):
{
"chunk_size": 1000,
"chunk_overlap": 200
}
Response:
{
"message": "Configuration updated successfully"
}
Note: This endpoint only allows updating a limited subset of settings.
Provider API keys and credentials cannot be updated via this endpoint.
"""
from api.settings import update_settings
return await update_settings(request, session_manager)

View file

@ -58,7 +58,7 @@ from auth_middleware import optional_auth, require_auth
from api_key_middleware import require_api_key
from services.api_key_service import APIKeyService
from api import keys as api_keys
from api.v1 import chat as v1_chat, search as v1_search, documents as v1_documents, settings as v1_settings
from api.v1 import chat as v1_chat, search as v1_search, documents as v1_documents, settings as v1_settings, knowledge_filters as v1_knowledge_filters
# Configuration and setup
from config.settings import (
@ -1404,7 +1404,7 @@ async def create_app():
),
methods=["DELETE"],
),
# Settings endpoint (read-only)
# Settings endpoints
Route(
"/v1/settings",
require_api_key(services["api_key_service"])(
@ -1412,6 +1412,72 @@ async def create_app():
),
methods=["GET"],
),
Route(
"/v1/settings",
require_api_key(services["api_key_service"])(
partial(
v1_settings.update_settings_endpoint,
session_manager=services["session_manager"],
)
),
methods=["POST"],
),
# Knowledge filters endpoints
Route(
"/v1/knowledge-filters",
require_api_key(services["api_key_service"])(
partial(
v1_knowledge_filters.create_endpoint,
knowledge_filter_service=services["knowledge_filter_service"],
session_manager=services["session_manager"],
)
),
methods=["POST"],
),
Route(
"/v1/knowledge-filters/search",
require_api_key(services["api_key_service"])(
partial(
v1_knowledge_filters.search_endpoint,
knowledge_filter_service=services["knowledge_filter_service"],
session_manager=services["session_manager"],
)
),
methods=["POST"],
),
Route(
"/v1/knowledge-filters/{filter_id}",
require_api_key(services["api_key_service"])(
partial(
v1_knowledge_filters.get_endpoint,
knowledge_filter_service=services["knowledge_filter_service"],
session_manager=services["session_manager"],
)
),
methods=["GET"],
),
Route(
"/v1/knowledge-filters/{filter_id}",
require_api_key(services["api_key_service"])(
partial(
v1_knowledge_filters.update_endpoint,
knowledge_filter_service=services["knowledge_filter_service"],
session_manager=services["session_manager"],
)
),
methods=["PUT"],
),
Route(
"/v1/knowledge-filters/{filter_id}",
require_api_key(services["api_key_service"])(
partial(
v1_knowledge_filters.delete_endpoint,
knowledge_filter_service=services["knowledge_filter_service"],
session_manager=services["session_manager"],
)
),
methods=["DELETE"],
),
]
app = Starlette(debug=True, routes=routes)