public()->published()->find($id); if ($artwork === null) { return response()->json(['error' => 'Artwork not found'], 404); } if (! $this->vectors->isConfigured()) { return response()->json([ 'data' => [], 'reason' => 'vector_gateway_not_configured', ], 503); } $limit = max(1, min(24, (int) $request->query('limit', 12))); try { $items = $this->vectors->similarToArtwork($artwork, $limit); } catch (RuntimeException $e) { return response()->json([ 'data' => [], 'reason' => 'vector_gateway_error', 'message' => $e->getMessage(), ], 502); } return response()->json([ 'data' => $items, 'meta' => [ 'source' => 'vector_gateway', 'artwork_id' => $artwork->id, 'limit' => $limit, ], ]); } }