959a391334
Some checks failed
publish docs / publish-docs (push) Has been cancelled
release-please / release-please (push) Has been cancelled
tests / setup (push) Has been cancelled
tests / ${{ matrix.quality-command }} (black) (push) Has been cancelled
tests / ${{ matrix.quality-command }} (mypy) (push) Has been cancelled
tests / ${{ matrix.quality-command }} (ruff) (push) Has been cancelled
tests / test (push) Has been cancelled
tests / all_checks_passed (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
from typing import Literal
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from pydantic import BaseModel, Field
|
|
|
|
from private_gpt.open_ai.extensions.context_filter import ContextFilter
|
|
from private_gpt.server.chunks.chunks_service import Chunk, ChunksService
|
|
from private_gpt.server.utils.auth import authenticated
|
|
|
|
chunks_router = APIRouter(prefix="/v1", dependencies=[Depends(authenticated)])
|
|
|
|
|
|
class ChunksBody(BaseModel):
|
|
text: str = Field(examples=["Q3 2023 sales"])
|
|
context_filter: ContextFilter | None = None
|
|
limit: int = 10
|
|
prev_next_chunks: int = Field(default=0, examples=[2])
|
|
|
|
|
|
class ChunksResponse(BaseModel):
|
|
object: Literal["list"]
|
|
model: Literal["private-gpt"]
|
|
data: list[Chunk]
|
|
|
|
|
|
@chunks_router.post("/chunks", tags=["Context Chunks"])
|
|
def chunks_retrieval(request: Request, body: ChunksBody) -> ChunksResponse:
|
|
"""Given a `text`, returns the most relevant chunks from the ingested documents.
|
|
|
|
The returned information can be used to generate prompts that can be
|
|
passed to `/completions` or `/chat/completions` APIs. Note: it is usually a very
|
|
fast API, because only the Embeddings model is involved, not the LLM. The
|
|
returned information contains the relevant chunk `text` together with the source
|
|
`document` it is coming from. It also contains a score that can be used to
|
|
compare different results.
|
|
|
|
The max number of chunks to be returned is set using the `limit` param.
|
|
|
|
Previous and next chunks (pieces of text that appear right before or after in the
|
|
document) can be fetched by using the `prev_next_chunks` field.
|
|
|
|
The documents being used can be filtered using the `context_filter` and passing
|
|
the document IDs to be used. Ingested documents IDs can be found using
|
|
`/ingest/list` endpoint. If you want all ingested documents to be used,
|
|
remove `context_filter` altogether.
|
|
"""
|
|
service = request.state.injector.get(ChunksService)
|
|
results = service.retrieve_relevant(
|
|
body.text, body.context_filter, body.limit, body.prev_next_chunks
|
|
)
|
|
return ChunksResponse(
|
|
object="list",
|
|
model="private-gpt",
|
|
data=results,
|
|
)
|