mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-08-02 13:57:30 +08:00
Refactor: consolidate page and page_size (#17597)
This commit is contained in:
@@ -64,7 +64,7 @@ from api.utils.api_utils import (
|
||||
server_error_response,
|
||||
validate_request,
|
||||
)
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from common import settings
|
||||
from common.ssrf_guard import assert_host_is_safe
|
||||
from common.constants import RetCode
|
||||
@@ -434,8 +434,8 @@ async def _run_workflow_session(
|
||||
def list_agent_sessions(agent_id, tenant_id):
|
||||
session_id = request.args.get("id")
|
||||
user_id = request.args.get("user_id")
|
||||
page_number = int(request.args.get("page", 1))
|
||||
items_per_page = validate_rest_api_page_size(int(request.args.get("page_size", 30)))
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
keywords = request.args.get("keywords")
|
||||
from_date = request.args.get("from_date")
|
||||
to_date = request.args.get("to_date")
|
||||
@@ -687,8 +687,8 @@ def list_agents(tenant_id):
|
||||
owner_ids = [item for item in request.args.get("owner_ids", "").strip().split(",") if item]
|
||||
tags = [item for item in request.args.get("tags", "").strip().split(",") if item]
|
||||
|
||||
page_number = int(request.args.get("page", 0))
|
||||
items_per_page = validate_rest_api_page_size(int(request.args.get("page_size", 0)))
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
order_by = request.args.get("orderby", "create_time")
|
||||
desc = str(request.args.get("desc", "true")).lower() != "false"
|
||||
tenants = TenantService.get_joined_tenants_by_user_id(tenant_id)
|
||||
|
||||
@@ -47,6 +47,7 @@ from api.utils.reference_metadata_utils import (
|
||||
enrich_chunks_with_document_metadata,
|
||||
resolve_reference_metadata_preferences,
|
||||
)
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -331,8 +332,8 @@ async def ask_about_embedded(tenant_id=None):
|
||||
@validate_request("kb_id", "question")
|
||||
async def retrieval_test_embedded(tenant_id=None):
|
||||
req = await get_request_json()
|
||||
page = int(req.get("page", 1))
|
||||
size = int(req.get("size", 30))
|
||||
page = validate_rest_api_page(req.get("page", DEFAULT_PAGE))
|
||||
size = validate_rest_api_page_size(req.get("size", DEFAULT_PAGE_SIZE))
|
||||
question = req["question"]
|
||||
kb_ids = req["kb_id"]
|
||||
if isinstance(kb_ids, str):
|
||||
|
||||
@@ -44,7 +44,7 @@ from api.utils.api_utils import (
|
||||
server_error_response,
|
||||
validate_request,
|
||||
)
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import validate_rest_api_page, validate_rest_api_page_size, DEFAULT_PAGE, DEFAULT_PAGE_SIZE
|
||||
from common.constants import LLMType, RetCode, StatusEnum
|
||||
from common import settings
|
||||
from common.misc_utils import get_uuid, thread_pool_exec
|
||||
@@ -464,15 +464,8 @@ async def list_chats():
|
||||
try:
|
||||
# Invalid or negative pagination values fall back to defaults
|
||||
# instead of leaking internal conversion/SQL errors.
|
||||
try:
|
||||
page_number = max(int(request.args.get("page", 0)), 0)
|
||||
except (TypeError, ValueError):
|
||||
page_number = 0
|
||||
try:
|
||||
parsed_page_size = int(request.args.get("page_size", 0))
|
||||
except (TypeError, ValueError):
|
||||
parsed_page_size = 0
|
||||
items_per_page = validate_rest_api_page_size(parsed_page_size)
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
|
||||
if owner_ids:
|
||||
chats, total = await thread_pool_exec(
|
||||
@@ -812,17 +805,8 @@ async def list_sessions(chat_id):
|
||||
)
|
||||
# Invalid or negative pagination values fall back to defaults
|
||||
# instead of leaking internal conversion/SQL errors.
|
||||
try:
|
||||
page_number = int(request.args.get("page", 1))
|
||||
except (TypeError, ValueError):
|
||||
page_number = 1
|
||||
if page_number < 1:
|
||||
page_number = 1
|
||||
try:
|
||||
parsed_page_size = int(request.args.get("page_size", 30))
|
||||
except (TypeError, ValueError):
|
||||
parsed_page_size = 30
|
||||
items_per_page = validate_rest_api_page_size(parsed_page_size)
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
orderby = request.args.get("orderby", "create_time")
|
||||
if orderby not in ("create_time", "update_time", "name"):
|
||||
return get_json_result(code=RetCode.ARGUMENT_ERROR, message=f"invalid orderby field: {orderby}")
|
||||
|
||||
@@ -48,7 +48,7 @@ from api.utils.api_utils import (
|
||||
get_result,
|
||||
server_error_response,
|
||||
)
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from api.utils.image_utils import store_chunk_image
|
||||
from api.utils.reference_metadata_utils import (
|
||||
enrich_chunks_with_document_metadata,
|
||||
@@ -325,8 +325,8 @@ async def retrieval_test(tenant_id):
|
||||
return get_result(message="Datasets use different embedding models.", code=RetCode.DATA_ERROR)
|
||||
if "question" not in req:
|
||||
return get_error_data_result("`question` is required.")
|
||||
page = int(req.get("page", 1))
|
||||
size = validate_rest_api_page_size(int(req.get("page_size", 30)))
|
||||
page = validate_rest_api_page(req.get("page", DEFAULT_PAGE))
|
||||
size = validate_rest_api_page_size(req.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
question = req["question"].strip() if isinstance(req["question"], str) else req["question"]
|
||||
if not question:
|
||||
return get_result(data={"total": 0, "chunks": [], "doc_aggs": {}})
|
||||
@@ -452,8 +452,8 @@ async def list_chunks(tenant_id, dataset_id, document_id):
|
||||
return get_error_data_result(message=f"you don't own the document {document_id}")
|
||||
doc = doc[0]
|
||||
req = request.args
|
||||
page = int(req.get("page", 1))
|
||||
size = validate_rest_api_page_size(int(req.get("page_size", 30)))
|
||||
page = validate_rest_api_page(req.get("page", DEFAULT_PAGE))
|
||||
size = validate_rest_api_page_size(req.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
question = req.get("keywords", "")
|
||||
chunk_ids = _get_query_id_list(req, "chunk_ids")
|
||||
query = {
|
||||
|
||||
@@ -29,7 +29,7 @@ from api.utils.api_utils import (
|
||||
server_error_response,
|
||||
validate_request,
|
||||
)
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
|
||||
|
||||
_GROUP_NAME_MAX = 128
|
||||
@@ -71,8 +71,8 @@ def _validate_group_payload(req: dict, require_all: bool = True) -> str:
|
||||
def list_groups() -> Response:
|
||||
keywords = request.args.get("keywords", "")
|
||||
scope = request.args.get("scope", "")
|
||||
page_number = int(request.args.get("page", 0))
|
||||
items_per_page = validate_rest_api_page_size(int(request.args.get("page_size", 0)))
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
orderby = request.args.get("orderby", "create_time")
|
||||
desc = request.args.get("desc", "true").lower() != "false"
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ from google_auth_oauthlib.flow import Flow
|
||||
from api.db import InputType
|
||||
from api.db.services.connector_service import ConnectorService, SyncLogsService
|
||||
from api.utils.api_utils import get_data_error_result, get_json_result, get_request_json, validate_request
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from common.constants import RetCode, TaskStatus
|
||||
from common.data_source.config import GOOGLE_DRIVE_WEB_OAUTH_REDIRECT_URI, GMAIL_WEB_OAUTH_REDIRECT_URI, BOX_WEB_OAUTH_REDIRECT_URI, DocumentSource
|
||||
from common.data_source.google_util.constant import WEB_OAUTH_POPUP_TEMPLATE, GOOGLE_SCOPES
|
||||
@@ -143,8 +143,8 @@ def list_logs(connector_id):
|
||||
req = request.args.to_dict(flat=True)
|
||||
arr, total = SyncLogsService.list_sync_tasks(
|
||||
connector_id,
|
||||
int(req.get("page", 1)),
|
||||
validate_rest_api_page_size(int(req.get("page_size", 15))),
|
||||
validate_rest_api_page(req.get("page", DEFAULT_PAGE)),
|
||||
validate_rest_api_page_size(req.get("page_size", DEFAULT_PAGE_SIZE)),
|
||||
)
|
||||
return get_json_result(data={"total": total, "logs": arr})
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ from quart import request
|
||||
from common.constants import RetCode
|
||||
from api.apps import login_required, current_user
|
||||
from api.utils.api_utils import get_error_argument_result, get_error_data_result, get_json_result, get_result, add_tenant_id_to_kwargs
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from api.utils.validation_utils import (
|
||||
CreateDatasetReq,
|
||||
DeleteDatasetReq,
|
||||
@@ -609,10 +609,10 @@ async def list_wiki_pages(tenant_id, dataset_id):
|
||||
Success: {"code": 0, "data": {"total": int, "items": [{slug, title, page_type}]}}
|
||||
"""
|
||||
try:
|
||||
page = int(request.args.get("page", 1) or 1)
|
||||
page_size = int(request.args.get("page_size", 200) or 200)
|
||||
except (TypeError, ValueError):
|
||||
return get_error_argument_result("page and page_size must be integers")
|
||||
page = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
except ValueError as e:
|
||||
return get_error_argument_result(str(e))
|
||||
page_type = (request.args.get("page_type") or "").strip() or None
|
||||
topic = (request.args.get("topic") or "").strip() or None
|
||||
|
||||
@@ -643,10 +643,10 @@ async def list_wiki_topics(tenant_id, dataset_id):
|
||||
Success: {"code": 0, "data": {"total": int, "items": [{topic, title, slug}]}}
|
||||
"""
|
||||
try:
|
||||
page = int(request.args.get("page", 1) or 1)
|
||||
page_size = int(request.args.get("page_size", 200) or 200)
|
||||
except (TypeError, ValueError):
|
||||
return get_error_argument_result("page and page_size must be integers")
|
||||
page = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
except ValueError as e:
|
||||
return get_error_argument_result(str(e))
|
||||
|
||||
try:
|
||||
success, result = await dataset_api_service.list_wiki_topics(
|
||||
@@ -1221,8 +1221,8 @@ async def check_embedding(tenant_id, dataset_id):
|
||||
@add_tenant_id_to_kwargs
|
||||
def list_ingestion_logs(tenant_id, dataset_id):
|
||||
try:
|
||||
page = int(request.args.get("page", 0))
|
||||
page_size = validate_rest_api_page_size(int(request.args.get("page_size", 0)))
|
||||
page = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
orderby = request.args.get("orderby", "create_time")
|
||||
desc = request.args.get("desc", "true").lower() != "false"
|
||||
operation_status = request.args.getlist("operation_status")
|
||||
|
||||
@@ -60,7 +60,7 @@ from api.utils.api_utils import (
|
||||
get_error_argument_result,
|
||||
check_duplicate_ids,
|
||||
)
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from api.utils.validation_utils import (
|
||||
UpdateDocumentReq,
|
||||
format_validation_error_message,
|
||||
@@ -862,19 +862,8 @@ def _get_docs_with_request(req, dataset_id: str):
|
||||
|
||||
# Invalid or negative pagination values fall back to defaults
|
||||
# instead of leaking internal conversion/SQL errors.
|
||||
try:
|
||||
page = int(q.get("page", 1))
|
||||
except (TypeError, ValueError):
|
||||
page = 1
|
||||
if page < 1:
|
||||
page = 1
|
||||
try:
|
||||
parsed_page_size = int(q.get("page_size", 30))
|
||||
except (TypeError, ValueError):
|
||||
parsed_page_size = 30
|
||||
if parsed_page_size < 0:
|
||||
parsed_page_size = 30
|
||||
page_size = validate_rest_api_page_size(parsed_page_size)
|
||||
page = validate_rest_api_page(q.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(q.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
|
||||
orderby = q.get("orderby", "create_time")
|
||||
if orderby not in ("create_time", "update_time", "name"):
|
||||
|
||||
@@ -19,6 +19,7 @@ from functools import wraps
|
||||
from quart import request
|
||||
from api.apps import login_required, current_user
|
||||
from api.utils.api_utils import get_json_result, get_data_error_result, get_request_json, server_error_response, validate_request
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from api.db.services.file_commit_service import FileCommitService
|
||||
from api.db.services.knowledgebase_service import KnowledgebaseService
|
||||
|
||||
@@ -142,8 +143,8 @@ def _register_commit_routes(prefix, param_name, resolver_type=None):
|
||||
async def list_commits(entity_id):
|
||||
folder_id = _resolve(entity_id)
|
||||
try:
|
||||
page = int(request.args.get("page", 1))
|
||||
page_size = int(request.args.get("page_size", 15))
|
||||
page = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
order_by = request.args.get("order_by", "create_time")
|
||||
desc = request.args.get("desc", "true").lower() != "false"
|
||||
slug = request.args.get("slug") or ""
|
||||
|
||||
@@ -21,7 +21,7 @@ from api.db.db_models import MCPServer
|
||||
from api.db.services.mcp_server_service import MCPServerService
|
||||
from api.db.services.user_service import TenantService
|
||||
from api.utils.api_utils import get_data_error_result, get_json_result, get_mcp_tools, get_request_json, server_error_response, validate_request
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
from api.utils.web_utils import get_float, safe_json_parse
|
||||
from common.constants import VALID_MCP_SERVER_TYPES
|
||||
from common.mcp_tool_call_conn import MCPToolCallSession, close_multiple_mcp_toolcall_sessions
|
||||
@@ -71,8 +71,8 @@ def _assert_mcp_url_is_safe(url, invalid_message: str = "Invalid url.") -> tuple
|
||||
@login_required
|
||||
async def list_mcp() -> Response:
|
||||
keywords = request.args.get("keywords", "")
|
||||
page_number = int(request.args.get("page", 0))
|
||||
items_per_page = validate_rest_api_page_size(int(request.args.get("page_size", 0)))
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
orderby = request.args.get("orderby", "create_time")
|
||||
if request.args.get("desc", "true").lower() == "false":
|
||||
desc = False
|
||||
|
||||
@@ -24,7 +24,7 @@ from api.apps import login_required, current_user
|
||||
from api.utils.api_utils import validate_request, get_request_json, get_error_argument_result, get_json_result
|
||||
from api.apps.services import memory_api_service
|
||||
from api.db.joint_services.tenant_model_service import ensure_tenant_model_ids_for_params
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
|
||||
|
||||
@manager.route("/memories", methods=["POST"]) # noqa: F821
|
||||
@@ -38,12 +38,7 @@ async def create_memory():
|
||||
try:
|
||||
# Resolve tenant_model IDs from model names
|
||||
tenant_id = current_user.id
|
||||
memory_info = {
|
||||
"name": req["name"],
|
||||
"memory_type": req["memory_type"],
|
||||
"embd_id": req["embd_id"],
|
||||
"llm_id": req["llm_id"]
|
||||
}
|
||||
memory_info = {"name": req["name"], "memory_type": req["memory_type"], "embd_id": req["embd_id"], "llm_id": req["llm_id"]}
|
||||
ensure_tenant_model_ids_for_params(tenant_id, memory_info)
|
||||
success, res = await memory_api_service.create_memory(memory_info)
|
||||
if timing_enabled:
|
||||
@@ -90,10 +85,26 @@ async def update_memory(memory_id):
|
||||
req = await get_request_json()
|
||||
# Resolve tenant_model IDs from model names when name is provided but id is not
|
||||
ensure_tenant_model_ids_for_params(current_user.id, req)
|
||||
new_settings = {k: req[k] for k in [
|
||||
"name", "permissions", "llm_id", "embd_id", "memory_type", "memory_size", "forgetting_policy", "temperature",
|
||||
"avatar", "description", "system_prompt", "user_prompt", "tenant_llm_id", "tenant_embd_id"
|
||||
] if k in req}
|
||||
new_settings = {
|
||||
k: req[k]
|
||||
for k in [
|
||||
"name",
|
||||
"permissions",
|
||||
"llm_id",
|
||||
"embd_id",
|
||||
"memory_type",
|
||||
"memory_size",
|
||||
"forgetting_policy",
|
||||
"temperature",
|
||||
"avatar",
|
||||
"description",
|
||||
"system_prompt",
|
||||
"user_prompt",
|
||||
"tenant_llm_id",
|
||||
"tenant_embd_id",
|
||||
]
|
||||
if k in req
|
||||
}
|
||||
try:
|
||||
success, res = await memory_api_service.update_memory(memory_id, new_settings)
|
||||
if success:
|
||||
@@ -130,8 +141,8 @@ async def delete_memory(memory_id):
|
||||
async def list_memory():
|
||||
filter_params = {k: request.args.get(k) for k in ["memory_type", "tenant_id", "owner_ids", "storage_type"] if k in request.args}
|
||||
keywords = request.args.get("keywords")
|
||||
page = int(request.args.get("page", 1))
|
||||
page_size = validate_rest_api_page_size(int(request.args.get("page_size", 50)))
|
||||
page = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
page_size = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
try:
|
||||
res = await memory_api_service.list_memory(filter_params, keywords, page, page_size)
|
||||
return get_json_result(message=True, data=res)
|
||||
@@ -163,8 +174,8 @@ async def get_memory_messages(memory_id):
|
||||
agent_ids = agent_ids[0].split(",")
|
||||
keywords = args.get("keywords", "")
|
||||
keywords = keywords.strip()
|
||||
page = int(args.get("page", 1))
|
||||
page_size = validate_rest_api_page_size(int(args.get("page_size", 50)))
|
||||
page = validate_rest_api_page(args.get("page", 1))
|
||||
page_size = validate_rest_api_page_size(args.get("page_size", 50))
|
||||
try:
|
||||
res = await memory_api_service.get_memory_messages(memory_id, agent_ids, keywords, page, page_size)
|
||||
return get_json_result(message=True, data=res)
|
||||
|
||||
@@ -31,7 +31,7 @@ from api.db.services.user_service import TenantService, UserTenantService
|
||||
from common.misc_utils import get_uuid
|
||||
from common.constants import RetCode, StatusEnum
|
||||
from api.utils.api_utils import get_data_error_result, get_json_result, get_request_json, server_error_response, validate_request
|
||||
from api.utils.pagination_utils import validate_rest_api_page_size
|
||||
from api.utils.pagination_utils import DEFAULT_PAGE, DEFAULT_PAGE_SIZE, validate_rest_api_page, validate_rest_api_page_size
|
||||
|
||||
|
||||
def _full_text_weight(vector_similarity_weight):
|
||||
@@ -78,8 +78,8 @@ async def create():
|
||||
@login_required
|
||||
def list_searches():
|
||||
keywords = request.args.get("keywords", "")
|
||||
page_number = int(request.args.get("page", 0))
|
||||
items_per_page = validate_rest_api_page_size(int(request.args.get("page_size", 0)))
|
||||
page_number = validate_rest_api_page(request.args.get("page", DEFAULT_PAGE))
|
||||
items_per_page = validate_rest_api_page_size(request.args.get("page_size", DEFAULT_PAGE_SIZE))
|
||||
orderby = request.args.get("orderby", "create_time")
|
||||
desc = request.args.get("desc", "true").lower() != "false"
|
||||
owner_ids = request.args.getlist("owner_ids")
|
||||
|
||||
Reference in New Issue
Block a user