| 1234567891011121314151617181920212223242526272829303132333435363738 |
- from typing import Dict
- from pydantic import BaseModel
- from main import app
- from services import collection_view
- class RetrievalSetting(BaseModel):
- top_k: int
- score_threshold: float
- embedding_instruct: str | None = None
- reranker_instruct: str | None = None
- class Retrieval(BaseModel):
- knowledge_id: str
- query: str
- retrieval_setting: RetrievalSetting
- metadata_condition: Dict | None = None
- @app.post('/retrieval')
- def retrieval(req: Retrieval):
- chunks = collection_view.search(
- req.query,
- expand_chunk=[1, 1],
- limit=req.retrieval_setting.top_k,
- )
- chunks = [vars(i) for i in chunks]
- return {
- 'records': [
- {
- 'content': chunk['data']['text'],
- 'score': chunk['score'],
- 'title': chunk['documentSet']['documentSetName'],
- 'metadata': {
- 'document_id': str(chunk['documentSet']['documentSetId']),
- },
- } for chunk in chunks
- ]
- }
|