def event.loop
bend-kit-llm@0.13.0.1 · llm.bend:545
import bend-kit-llm@0.13.0.1/llm.bend as Llm
import Base
import bend-kit-llm@0.13.0.1/sse.bend as Sse
import bend-kit-http@0.38.1.1/http.bend as Http
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
545
546def event.loop(f: Nat, st: Rn) -> IO(Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>):
547 match f:
548 case 0n:
549 match st:
550 case RnNext{h, r}:
551 (rd, n) = r
552 IO.pure(Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>, (h, rd, Fail{ErrReply{"too many pieces without an event"}}))
553 case RnOut{h, rd, r}:
554 IO.pure(Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>, (h, rd, r))
555 case 1n+g:
556 match st:
557 case RnNext{h, r}:
558 (rd, n) = r
559 match n:
560 case Sse.Got{e}:
561 IO.pure(Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>, (h, rd, Done{Some{e}}))
562 case Sse.Want{}:
563 do IO<Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>>:
564 x : Http.Stream & Result<&1, &1, Http.Err, Maybe<&1, Bytes.Bytes>> <- Http.stream.read(h)
565 event.loop(g, event.read(rd, x))
566 case RnOut{h, rd, r}:
567 IO.pure(Http.Stream & Sse.Reader & Result<&1, &1, Err, Maybe<&1, Sse.Message>>, (h, rd, r))