पाठ 10 / 27

Applications में Streaming: UI, Backends और Cancellation

Streams को अपने backend से browser तक पहुँचाएँ और stream के बीच की समस्याएँ सँभालें।

आपका backend बिचौलिया है

Browsers को आपकी API key नहीं रखनी चाहिए, इसलिए browser आपके backend को बुलाता है, जो provider को streaming के साथ बुलाता है और टुकड़े browser तक आगे भेजता है (जैसे Server-Sent Events या WebSockets से)। अप्रिय रास्तों के लिए डिज़ाइन करें: user page बंद करे या stop दबाए (upstream अनुरोध रद्द करें ताकि tokens का भुगतान बंद हो), stream बीच में विफल हो (जो आया दिखाएँ और retry दें; आंशिक पाठ को चुपचाप पूरा न मानें), proxy stream को buffer करे (buffering बंद करें वरना पाठ एक साथ आता है), और moderation या validation जिसे पूरा उत्तर चाहिए (stream समाप्त होने के बाद validate करें, या सुरक्षा जाँच के बाद ही stream करें)। बिलिंग के लिए usage अंतिम event से दर्ज करें।

Streaming relay (उदाहरण)

Web framework शैली में backend endpoint का रेखाचित्र; function नाम placeholders हैं। यहाँ चलाया नहीं गया।

def chat_stream(request):
    user = authenticate(request)                       # your auth, not the provider key
    check_rate_limit(user)
    def events():
        try:
            with client.messages.stream(model=MODEL, max_tokens=500,
                                         messages=load_history(user, request)) as stream:
                for piece in stream.text_stream:
                    if request.is_disconnected():          # user pressed stop / closed the page
                        return                              # leaving the block closes the upstream request
                    yield f"data: {piece}\n\n"
                final = stream.get_final_message()
                record_usage(user, final.usage)             # bill from the final event
        except Exception:
            yield "event: error\ndata: stream failed, please retry\n\n"
    return EventStreamResponse(events())

त्वरित जाँच: User stop दबाए तो upstream अनुरोध रद्द क्यों करें?

  • ताकि उन tokens का भुगतान बंद हो जो कोई नहीं पढ़ेगा
  • Key हटाने के लिए
  • मॉडल तेज़ करने के लिए
  • HTTP में यह ज़रूरी है
Answer

ताकि उन tokens का भुगतान बंद हो जो कोई नहीं पढ़ेगा — अनुरोध बंद होने तक generation जारी रहती और बिल होती है।