Persist Qdrant to host: bind-mount ./data/qdrant; add data dir ignore; update docs
This commit is contained in:
@@ -86,6 +86,19 @@ async def _post_file(client: httpx.AsyncClient, url: str, data: bytes, fields: D
|
||||
raise HTTPException(status_code=502, detail=f"Upstream returned non-JSON at {url}: {r.status_code} {r.text[:1000]}")
|
||||
|
||||
|
||||
async def _get_json(client: httpx.AsyncClient, url: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
||||
try:
|
||||
r = await client.get(url, params=params)
|
||||
except httpx.RequestError as e:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream request failed {url}: {str(e)}")
|
||||
if r.status_code >= 400:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream error {url}: {r.status_code} {r.text[:1000]}")
|
||||
try:
|
||||
return r.json()
|
||||
except Exception:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream returned non-JSON at {url}: {r.status_code} {r.text[:1000]}")
|
||||
|
||||
|
||||
@app.get("/health")
|
||||
async def health():
|
||||
async with httpx.AsyncClient(timeout=5) as client:
|
||||
@@ -255,10 +268,7 @@ async def vectors_delete(payload: Dict[str, Any]):
|
||||
@app.get("/vectors/collections")
|
||||
async def vectors_collections():
|
||||
async with httpx.AsyncClient(timeout=VISION_TIMEOUT) as client:
|
||||
r = await client.get(f"{QDRANT_SVC_URL}/collections")
|
||||
if r.status_code >= 400:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream error: {r.status_code}")
|
||||
return r.json()
|
||||
return await _get_json(client, f"{QDRANT_SVC_URL}/collections")
|
||||
|
||||
|
||||
@app.post("/vectors/collections")
|
||||
@@ -270,10 +280,7 @@ async def vectors_create_collection(payload: Dict[str, Any]):
|
||||
@app.get("/vectors/collections/{name}")
|
||||
async def vectors_collection_info(name: str):
|
||||
async with httpx.AsyncClient(timeout=VISION_TIMEOUT) as client:
|
||||
r = await client.get(f"{QDRANT_SVC_URL}/collections/{name}")
|
||||
if r.status_code >= 400:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream error: {r.status_code}")
|
||||
return r.json()
|
||||
return await _get_json(client, f"{QDRANT_SVC_URL}/collections/{name}")
|
||||
|
||||
|
||||
@app.delete("/vectors/collections/{name}")
|
||||
@@ -291,10 +298,16 @@ async def vectors_get_point(point_id: str, collection: Optional[str] = None):
|
||||
params = {}
|
||||
if collection:
|
||||
params["collection"] = collection
|
||||
r = await client.get(f"{QDRANT_SVC_URL}/points/{point_id}", params=params)
|
||||
if r.status_code >= 400:
|
||||
raise HTTPException(status_code=502, detail=f"Upstream error: {r.status_code}")
|
||||
return r.json()
|
||||
return await _get_json(client, f"{QDRANT_SVC_URL}/points/{point_id}", params=params)
|
||||
|
||||
|
||||
@app.get("/vectors/points/by-original-id/{original_id}")
|
||||
async def vectors_get_point_by_original_id(original_id: str, collection: Optional[str] = None):
|
||||
async with httpx.AsyncClient(timeout=VISION_TIMEOUT) as client:
|
||||
params = {}
|
||||
if collection:
|
||||
params["collection"] = collection
|
||||
return await _get_json(client, f"{QDRANT_SVC_URL}/points/by-original-id/{original_id}", params=params)
|
||||
|
||||
|
||||
# ---- File-based universal analyze ----
|
||||
|
||||
Reference in New Issue
Block a user