Skip to content

Commit f50a84a

Browse files
authored
refactor: rename search test to search and update related components and APIs (#976)
1 parent 9417e28 commit f50a84a

31 files changed

Lines changed: 464 additions & 540 deletions

aperag/api/components/schemas/audit.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ auditLog:
1515
description: Username for display
1616
resource_type:
1717
type: string
18-
enum: [collection, document, bot, chat, message, api_key, llm_provider, llm_provider_model, model_service_provider, user, flow, search_test]
18+
enum: [collection, document, bot, chat, message, api_key, llm_provider, llm_provider_model, model_service_provider, user, flow, search]
1919
nullable: true
2020
description: Type of resource
2121
resource_id:

aperag/api/components/schemas/collection.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -313,20 +313,20 @@ graphSearchParams:
313313
type: integer
314314
description: Top K results
315315

316-
searchTestRequest:
316+
searchRequest:
317317
type: object
318+
description: Search request
318319
properties:
319320
query:
320321
type: string
321-
description: The user input query
322322
vector_search:
323323
$ref: '#/vectorSearchParams'
324324
fulltext_search:
325325
$ref: '#/fulltextSearchParams'
326326
graph_search:
327327
$ref: '#/graphSearchParams'
328328

329-
searchTestResultItem:
329+
searchResultItem:
330330
type: object
331331
properties:
332332
rank:
@@ -349,12 +349,12 @@ searchTestResultItem:
349349
- graph_search
350350
- fulltext_search
351351

352-
searchTestResult:
352+
searchResult:
353353
type: object
354354
properties:
355355
id:
356356
type: string
357-
description: The id of the search test result
357+
description: The id of the search result
358358
query:
359359
type: string
360360
vector_search:
@@ -366,17 +366,17 @@ searchTestResult:
366366
items:
367367
type: array
368368
items:
369-
$ref: '#/searchTestResultItem'
369+
$ref: '#/searchResultItem'
370370
created:
371371
type: string
372372
format: date-time
373-
description: The creation time of the search test result
373+
description: The creation time of the search result
374374

375-
searchTestResultList:
375+
searchResultList:
376376
type: object
377-
description: A list of search test results
377+
description: A list of search results
378378
properties:
379379
items:
380380
type: array
381381
items:
382-
$ref: '#/searchTestResult'
382+
$ref: '#/searchResult'

aperag/api/openapi.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ paths:
4747
$ref: './paths/collections.yaml#/documents'
4848
/collections/{collection_id}/documents/{document_id}:
4949
$ref: './paths/collections.yaml#/document'
50-
/collections/{collection_id}/searchTests:
51-
$ref: './paths/collections.yaml#/searchTests'
52-
/collections/{collection_id}/searchTests/{search_test_id}:
53-
$ref: './paths/collections.yaml#/searchTest'
50+
/collections/{collection_id}/searches:
51+
$ref: './paths/collections.yaml#/searches'
52+
/collections/{collection_id}/searches/{search_id}:
53+
$ref: './paths/collections.yaml#/search_detail'
5454

5555
# apikeys
5656
/apikeys:

aperag/api/paths/collections.yaml

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -296,10 +296,10 @@ document:
296296
schema:
297297
$ref: '../components/schemas/common.yaml#/failResponse'
298298

299-
searchTest:
300-
delete:
301-
summary: Delete a search test
302-
description: Delete a search test
299+
searches:
300+
get:
301+
summary: Get search history
302+
description: Get the history of searches
303303
security:
304304
- BearerAuth: []
305305
parameters:
@@ -308,21 +308,23 @@ searchTest:
308308
required: true
309309
schema:
310310
type: string
311-
- name: search_test_id
312-
in: path
313-
required: true
314-
schema:
315-
type: string
316311
responses:
317-
'204':
318-
description: Search test deleted successfully
312+
'200':
313+
description: Search history
314+
content:
315+
application/json:
316+
schema:
317+
$ref: '../components/schemas/collection.yaml#/searchResultList'
319318
'401':
320319
description: Unauthorized
320+
content:
321+
application/json:
322+
schema:
323+
$ref: '../components/schemas/common.yaml#/failResponse'
321324

322-
searchTests:
323-
get:
324-
summary: Get search test history
325-
description: Get the history of search tests
325+
post:
326+
summary: Search in collection
327+
description: Search in a collection with different search types
326328
security:
327329
- BearerAuth: []
328330
parameters:
@@ -331,23 +333,30 @@ searchTests:
331333
required: true
332334
schema:
333335
type: string
336+
requestBody:
337+
required: true
338+
content:
339+
application/json:
340+
schema:
341+
$ref: '../components/schemas/collection.yaml#/searchRequest'
334342
responses:
335343
'200':
336-
description: Search test history
344+
description: Search results
337345
content:
338346
application/json:
339347
schema:
340-
$ref: '../components/schemas/collection.yaml#/searchTestResultList'
348+
$ref: '../components/schemas/collection.yaml#/searchResult'
341349
'401':
342350
description: Unauthorized
343351
content:
344352
application/json:
345353
schema:
346354
$ref: '../components/schemas/common.yaml#/failResponse'
347355

348-
post:
349-
summary: Test search in collection
350-
description: Test search in a collection with different search types
356+
search_detail:
357+
delete:
358+
summary: Delete a search
359+
description: Delete a search
351360
security:
352361
- BearerAuth: []
353362
parameters:
@@ -356,19 +365,14 @@ searchTests:
356365
required: true
357366
schema:
358367
type: string
359-
requestBody:
360-
required: true
361-
content:
362-
application/json:
363-
schema:
364-
$ref: '../components/schemas/collection.yaml#/searchTestRequest'
368+
- name: search_id
369+
in: path
370+
required: true
371+
schema:
372+
type: string
365373
responses:
366374
'200':
367-
description: Search results
368-
content:
369-
application/json:
370-
schema:
371-
$ref: '../components/schemas/collection.yaml#/searchTestResult'
375+
description: Search deleted successfully
372376
'401':
373377
description: Unauthorized
374378
content:

aperag/db/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -588,10 +588,10 @@ async def use(self, session):
588588
# self.expires_at = utc_now()
589589

590590

591-
class SearchTestHistory(Base):
592-
__tablename__ = "searchtesthistory"
591+
class SearchHistory(Base):
592+
__tablename__ = "searchhistory"
593593

594-
id = Column(String(24), primary_key=True, default=lambda: "sth" + random_id())
594+
id = Column(String(24), primary_key=True, default=lambda: "sh" + random_id())
595595
user = Column(String(256), nullable=False, index=True) # Add index for user queries
596596
collection_id = Column(String(24), nullable=True, index=True) # Add index for collection queries
597597
query = Column(Text, nullable=False)
@@ -766,7 +766,7 @@ class AuditResource(str, Enum):
766766
INVITATION = "invitation"
767767
AUTH = "auth"
768768
CHAT_COMPLETION = "chat_completion"
769-
SEARCH_TEST = "search_test"
769+
SEARCH = "search"
770770
LLM = "llm"
771771
FLOW = "flow"
772772
SYSTEM = "system"

aperag/db/ops.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
AsyncLlmProviderRepositoryMixin,
3232
LlmProviderRepositoryMixin,
3333
)
34-
from aperag.db.repositories.search_test import AsyncSearchTestRepositoryMixin
34+
from aperag.db.repositories.search import AsyncSearchRepositoryMixin
3535
from aperag.db.repositories.system import AsyncSystemRepositoryMixin
3636
from aperag.db.repositories.user import AsyncUserRepositoryMixin
3737

@@ -58,7 +58,7 @@ class AsyncDatabaseOps(
5858
AsyncUserRepositoryMixin,
5959
AsyncLlmProviderRepositoryMixin,
6060
AsyncSystemRepositoryMixin,
61-
AsyncSearchTestRepositoryMixin,
61+
AsyncSearchRepositoryMixin,
6262
):
6363
pass
6464

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
from sqlalchemy import desc, select
1818

19-
from aperag.db.models import SearchTestHistory
19+
from aperag.db.models import SearchHistory
2020
from aperag.db.repositories.base import AsyncRepositoryProtocol
2121

2222

23-
class AsyncSearchTestRepositoryMixin(AsyncRepositoryProtocol):
24-
async def create_search_test(
23+
class AsyncSearchRepositoryMixin(AsyncRepositoryProtocol):
24+
async def create_search(
2525
self,
2626
user: str,
2727
collection_id: str,
@@ -30,9 +30,9 @@ async def create_search_test(
3030
fulltext_search: dict = None,
3131
graph_search: dict = None,
3232
items: List[dict] = None,
33-
) -> SearchTestHistory:
33+
) -> SearchHistory:
3434
async def _operation(session):
35-
instance = SearchTestHistory(
35+
instance = SearchHistory(
3636
user=user,
3737
collection_id=collection_id,
3838
query=query,
@@ -48,28 +48,28 @@ async def _operation(session):
4848

4949
return await self.execute_with_transaction(_operation)
5050

51-
async def query_search_tests(self, user: str, collection_id: str) -> List[SearchTestHistory]:
52-
"""Query search tests by user and collection"""
51+
async def query_searches(self, user: str, collection_id: str) -> List[SearchHistory]:
52+
"""Query searches by user and collection"""
5353

5454
async def _query(session):
5555
stmt = (
56-
select(SearchTestHistory)
57-
.where(SearchTestHistory.user == user, SearchTestHistory.collection_id == collection_id)
58-
.order_by(desc(SearchTestHistory.gmt_created))
56+
select(SearchHistory)
57+
.where(SearchHistory.user == user, SearchHistory.collection_id == collection_id)
58+
.order_by(desc(SearchHistory.gmt_created))
5959
)
6060
result = await session.execute(stmt)
6161
return result.scalars().all()
6262

6363
return await self._execute_query(_query)
6464

65-
async def delete_search_test(self, user: str, collection_id: str, search_test_id: str) -> bool:
66-
"""Delete search test by ID"""
65+
async def delete_search(self, user: str, collection_id: str, search_id: str) -> bool:
66+
"""Delete search by ID"""
6767

6868
async def _operation(session):
69-
stmt = select(SearchTestHistory).where(
70-
SearchTestHistory.id == search_test_id,
71-
SearchTestHistory.user == user,
72-
SearchTestHistory.collection_id == collection_id,
69+
stmt = select(SearchHistory).where(
70+
SearchHistory.id == search_id,
71+
SearchHistory.user == user,
72+
SearchHistory.collection_id == collection_id,
7373
)
7474
result = await session.execute(stmt)
7575
instance = result.scalars().first()

aperag/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ErrorCode(Enum):
6565
AUTH_TOKEN_EXPIRED = ("AUTH_TOKEN_EXPIRED", 1602, HTTPStatus.UNAUTHORIZED)
6666

6767
# Search errors (1700-1799)
68-
SEARCH_TEST_NOT_FOUND = ("SEARCH_TEST_NOT_FOUND", 1701, HTTPStatus.NOT_FOUND)
68+
SEARCH_NOT_FOUND = ("SEARCH_NOT_FOUND", 1701, HTTPStatus.NOT_FOUND)
6969

7070
# LLM Provider errors (1800-1899)
7171
LLM_PROVIDER_ALREADY_EXISTS = ("LLM_PROVIDER_ALREADY_EXISTS", 1801, HTTPStatus.CONFLICT)

aperag/migration/versions/20250621002836-2768dfee8bbc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def upgrade() -> None:
2525
sa.Column('id', sa.String(length=36), nullable=False),
2626
sa.Column('user_id', sa.String(length=36), nullable=True, comment='User ID'),
2727
sa.Column('username', sa.String(length=255), nullable=True, comment='Username'),
28-
sa.Column('resource_type', sa.Enum('collection', 'document', 'bot', 'chat', 'message', 'api_key', 'llm_provider', 'llm_provider_model', 'model_service_provider', 'user', 'config', 'invitation', 'auth', 'chat_completion', 'search_test', 'llm', 'flow', 'system', name='auditresource'), nullable=True, comment='Resource type'),
28+
sa.Column('resource_type', sa.Enum('collection', 'document', 'bot', 'chat', 'message', 'api_key', 'llm_provider', 'llm_provider_model', 'model_service_provider', 'user', 'config', 'invitation', 'auth', 'chat_completion', 'search', 'llm', 'flow', 'system', name='auditresource'), nullable=True, comment='Resource type'),
2929
sa.Column('resource_id', sa.String(length=255), nullable=True, comment='Resource ID (extracted at query time)'),
3030
sa.Column('api_name', sa.String(length=255), nullable=False, comment='API operation name'),
3131
sa.Column('http_method', sa.String(length=10), nullable=False, comment='HTTP method (POST, PUT, DELETE)'),
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""empty message
2+
3+
Revision ID: 23c0533b6b63
4+
Revises: 2768dfee8bbc
5+
Create Date: 2025-06-23 11:06:58.841005
6+
7+
"""
8+
from typing import Sequence, Union
9+
10+
from alembic import op
11+
import sqlalchemy as sa
12+
from sqlalchemy.dialects import postgresql
13+
14+
# revision identifiers, used by Alembic.
15+
revision: str = '23c0533b6b63'
16+
down_revision: Union[str, None] = '2768dfee8bbc'
17+
branch_labels: Union[str, Sequence[str], None] = None
18+
depends_on: Union[str, Sequence[str], None] = None
19+
20+
21+
def upgrade() -> None:
22+
# Rename table from searchtesthistory to searchhistory
23+
op.rename_table('searchtesthistory', 'searchhistory')
24+
op.rename_table('document_indexes', 'document_index')
25+
26+
# Update any indexes that reference the old table name
27+
op.drop_index('ix_searchtesthistory_collection_id', table_name='searchhistory')
28+
op.drop_index('ix_searchtesthistory_gmt_deleted', table_name='searchhistory')
29+
op.drop_index('ix_searchtesthistory_user', table_name='searchhistory')
30+
31+
# Create new indexes with updated names
32+
op.create_index('ix_searchhistory_collection_id', 'searchhistory', ['collection_id'], unique=False)
33+
op.create_index('ix_searchhistory_gmt_deleted', 'searchhistory', ['gmt_deleted'], unique=False)
34+
op.create_index('ix_searchhistory_user', 'searchhistory', ['user'], unique=False)
35+
36+
37+
def downgrade() -> None:
38+
# Reverse the operation
39+
op.drop_index('ix_searchhistory_user', table_name='searchhistory')
40+
op.drop_index('ix_searchhistory_gmt_deleted', table_name='searchhistory')
41+
op.drop_index('ix_searchhistory_collection_id', table_name='searchhistory')
42+
43+
# Recreate old indexes
44+
op.create_index('ix_searchtesthistory_user', 'searchtesthistory', ['user'], unique=False)
45+
op.create_index('ix_searchtesthistory_gmt_deleted', 'searchtesthistory', ['gmt_deleted'], unique=False)
46+
op.create_index('ix_searchtesthistory_collection_id', 'searchtesthistory', ['collection_id'], unique=False)
47+
48+
# Rename table back
49+
op.rename_table('searchhistory', 'searchtesthistory')
50+
op.rename_table('document_index', 'document_indexes')

0 commit comments

Comments
 (0)