The first version was from Rand (called "Rand Pipes"). They certainly were available in the mid-70s on Sixth Edition, you have to ask someone like Bruce Borden if they were on Fifth. I think the code is on one of the 'USENIX' tapes in Warren's archives.
At this point in time, someone would need to refresh my memory of the details of Rand's implementation compared to what came in the USG systems in the 1980s. For instance, I believe the early versions used mknod(2) to create the "named entity." IIRC early USG did that too, and mkfifo(3) came as part of the POSIX (I have memories of the discussion at a POSIX meeting, but as I say, I've forgotten the details).
IIRC there were differences in buffering behavior, flushing, error path between USG's later versions and the original Rand, but I'd have to stare at the code again to remember.