v1 endpoints for kf and settings
This commit is contained in:
parent
61371beeba
commit
bb71167d11
6 changed files with 106 additions and 15 deletions
|
|
@ -55,7 +55,7 @@ class SettingsClient:
|
||||||
else:
|
else:
|
||||||
body = {k: v for k, v in options.items() if v is not None}
|
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()
|
data = response.json()
|
||||||
return SettingsUpdateResponse(message=data.get("message", "Settings updated"))
|
return SettingsUpdateResponse(message=data.get("message", "Settings updated"))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class KnowledgeFiltersClient:
|
||||||
|
|
||||||
response = await self._client._request(
|
response = await self._client._request(
|
||||||
"POST",
|
"POST",
|
||||||
"/knowledge-filter",
|
"/api/v1/knowledge-filters",
|
||||||
json=body,
|
json=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -95,7 +95,7 @@ class KnowledgeFiltersClient:
|
||||||
|
|
||||||
response = await self._client._request(
|
response = await self._client._request(
|
||||||
"POST",
|
"POST",
|
||||||
"/knowledge-filter/search",
|
"/api/v1/knowledge-filters/search",
|
||||||
json=body,
|
json=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -118,7 +118,7 @@ class KnowledgeFiltersClient:
|
||||||
try:
|
try:
|
||||||
response = await self._client._request(
|
response = await self._client._request(
|
||||||
"GET",
|
"GET",
|
||||||
f"/knowledge-filter/{filter_id}",
|
f"/api/v1/knowledge-filters/{filter_id}",
|
||||||
)
|
)
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
|
|
@ -174,7 +174,7 @@ class KnowledgeFiltersClient:
|
||||||
|
|
||||||
response = await self._client._request(
|
response = await self._client._request(
|
||||||
"PUT",
|
"PUT",
|
||||||
f"/knowledge-filter/{filter_id}",
|
f"/api/v1/knowledge-filters/{filter_id}",
|
||||||
json=body,
|
json=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -193,7 +193,7 @@ class KnowledgeFiltersClient:
|
||||||
"""
|
"""
|
||||||
response = await self._client._request(
|
response = await self._client._request(
|
||||||
"DELETE",
|
"DELETE",
|
||||||
f"/knowledge-filter/{filter_id}",
|
f"/api/v1/knowledge-filters/{filter_id}",
|
||||||
)
|
)
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class SettingsClient {
|
||||||
* @returns Success response with message.
|
* @returns Success response with message.
|
||||||
*/
|
*/
|
||||||
async update(options: SettingsUpdateOptions): Promise<SettingsUpdateResponse> {
|
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),
|
body: JSON.stringify(options),
|
||||||
});
|
});
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ export class KnowledgeFiltersClient {
|
||||||
queryData: JSON.stringify(options.queryData),
|
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),
|
body: JSON.stringify(body),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -58,7 +58,7 @@ export class KnowledgeFiltersClient {
|
||||||
|
|
||||||
const response = await this.client._request(
|
const response = await this.client._request(
|
||||||
"POST",
|
"POST",
|
||||||
"/knowledge-filter/search",
|
"/api/v1/knowledge-filters/search",
|
||||||
{
|
{
|
||||||
body: JSON.stringify(body),
|
body: JSON.stringify(body),
|
||||||
}
|
}
|
||||||
|
|
@ -83,7 +83,7 @@ export class KnowledgeFiltersClient {
|
||||||
try {
|
try {
|
||||||
const response = await this.client._request(
|
const response = await this.client._request(
|
||||||
"GET",
|
"GET",
|
||||||
`/knowledge-filter/${filterId}`
|
`/api/v1/knowledge-filters/${filterId}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const data = (await response.json()) as GetKnowledgeFilterResponse;
|
const data = (await response.json()) as GetKnowledgeFilterResponse;
|
||||||
|
|
@ -124,7 +124,7 @@ export class KnowledgeFiltersClient {
|
||||||
|
|
||||||
const response = await this.client._request(
|
const response = await this.client._request(
|
||||||
"PUT",
|
"PUT",
|
||||||
`/knowledge-filter/${filterId}`,
|
`/api/v1/knowledge-filters/${filterId}`,
|
||||||
{
|
{
|
||||||
body: JSON.stringify(body),
|
body: JSON.stringify(body),
|
||||||
}
|
}
|
||||||
|
|
@ -143,7 +143,7 @@ export class KnowledgeFiltersClient {
|
||||||
async delete(filterId: string): Promise<boolean> {
|
async delete(filterId: string): Promise<boolean> {
|
||||||
const response = await this.client._request(
|
const response = await this.client._request(
|
||||||
"DELETE",
|
"DELETE",
|
||||||
`/knowledge-filter/${filterId}`
|
`/api/v1/knowledge-filters/${filterId}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const data = (await response.json()) as DeleteKnowledgeFilterResponse;
|
const data = (await response.json()) as DeleteKnowledgeFilterResponse;
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
"""
|
"""
|
||||||
Public API v1 Settings endpoint.
|
Public API v1 Settings endpoint.
|
||||||
|
|
||||||
Provides read-only access to configuration settings.
|
Provides access to configuration settings.
|
||||||
Uses API key authentication.
|
Uses API key authentication.
|
||||||
"""
|
"""
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
from starlette.responses import JSONResponse
|
from starlette.responses import JSONResponse
|
||||||
from utils.logging_config import get_logger
|
from utils.logging_config import get_logger
|
||||||
|
from config.settings import get_openrag_config
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
|
@ -59,3 +60,27 @@ async def get_settings_endpoint(request: Request):
|
||||||
{"error": "Failed to get settings"},
|
{"error": "Failed to get settings"},
|
||||||
status_code=500,
|
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)
|
||||||
|
|
|
||||||
70
src/main.py
70
src/main.py
|
|
@ -58,7 +58,7 @@ from auth_middleware import optional_auth, require_auth
|
||||||
from api_key_middleware import require_api_key
|
from api_key_middleware import require_api_key
|
||||||
from services.api_key_service import APIKeyService
|
from services.api_key_service import APIKeyService
|
||||||
from api import keys as api_keys
|
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
|
# Configuration and setup
|
||||||
from config.settings import (
|
from config.settings import (
|
||||||
|
|
@ -1404,7 +1404,7 @@ async def create_app():
|
||||||
),
|
),
|
||||||
methods=["DELETE"],
|
methods=["DELETE"],
|
||||||
),
|
),
|
||||||
# Settings endpoint (read-only)
|
# Settings endpoints
|
||||||
Route(
|
Route(
|
||||||
"/v1/settings",
|
"/v1/settings",
|
||||||
require_api_key(services["api_key_service"])(
|
require_api_key(services["api_key_service"])(
|
||||||
|
|
@ -1412,6 +1412,72 @@ async def create_app():
|
||||||
),
|
),
|
||||||
methods=["GET"],
|
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)
|
app = Starlette(debug=True, routes=routes)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue