retrieval.py 874 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. from typing import Dict
  2. from pydantic import BaseModel
  3. from main import app
  4. from services import collection_view
  5. class RetrievalSetting(BaseModel):
  6. top_k: int
  7. score_threshold: float
  8. embedding_instruct: str | None = None
  9. reranker_instruct: str | None = None
  10. class Retrieval(BaseModel):
  11. knowledge_id: str
  12. query: str
  13. retrieval_setting: RetrievalSetting
  14. metadata_condition: Dict | None = None
  15. @app.post('/retrieval')
  16. def retrieval(req: Retrieval):
  17. chunks = collection_view.search(
  18. req.query,
  19. expand_chunk=[1, 1],
  20. limit=req.retrieval_setting.top_k,
  21. )
  22. chunks = [vars(i) for i in chunks]
  23. return {
  24. 'records': [
  25. {
  26. 'content': chunk['data']['text'],
  27. 'score': chunk['score'],
  28. 'title': chunk['documentSet']['documentSetName'],
  29. 'metadata': {
  30. 'document_id': str(chunk['documentSet']['documentSetId']),
  31. },
  32. } for chunk in chunks
  33. ]
  34. }