Lingara Lingara Documentatie Gidsen API Bibliotheken Apps Bouwen Webapp
Taal: Nederlands

Streams

Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina

Vier bewerkingen streamen hun resultaten als server-sent events: woordenschat genereren, een bericht aan de tutor sturen, een lesplan maken en er een volgen. Elke bibliotheek zet de eventstream om in het eigen soort iterator van de taal en geeft je elk event al gedecodeerd tot een getypeerde waarde.

Hoe een stream eindigt

  • Als het werk klaar is. De iteratie stopt vanzelf bij het laatste event van de stream. Bij een lesplan bevat dat laatste event het resultaat, dus je ontvangt het voordat de lus eindigt.
  • Als de API een fout meldt. Een fout die binnen de stream binnenkomt, wordt opgeworpen als API-fout, hetzelfde type als een fout die ervoor binnenkomt.
  • Als de verbinding mislukt. Een stream die eindigt vóór zijn laatste event, of die 120 seconden lang helemaal niets stuurt, wordt opgeworpen als transportfout.
  • Als jij stopt. Annuleer de aanroep op de gebruikelijke manier van je taal, of stop met lezen, en de verbinding wordt direct gesloten.

Keepalive-commentaren en eventtypen die een bibliotheek nog niet kent, worden overgeslagen, zodat een nieuwere API een oudere bibliotheek nooit breekt.

Nooit opnieuw afgespeeld

Een stream die ook maar één event heeft geleverd, wordt door de bibliotheek nooit opnieuw geprobeerd, omdat herhalen je tegoed twee keer zou kunnen verbruiken. Als de stream van een lesplan breekt nadat hij is begonnen, volg hetzelfde plan dan met streamLessonPlan en de plan_id uit zijn eerste event.

Taal van het codevoorbeeld

TypeScript

const stream = client.generateVocabulary({ level: 2, source_lang: "en", target_lang: "zh", count: 8 });
for await (const ev of stream) {
  if (ev.event === "item") console.log(ev.data.word, ev.data.translation);
}

Rust

use lingara::models::{GenerateVocabularyEvent, VocabRequest};
use std::num::NonZeroU8;

let request = VocabRequest { level: 2, source_lang: "en".into(), target_lang: "zh".into(), count: NonZeroU8::new(8) };
let mut stream = client.generate_vocabulary(&request).await?;
while let Some(event) = stream.next().await {
    if let GenerateVocabularyEvent::Item(item) = event? {
        println!("{} {}", item.word, item.translation);
    }
}

Go

count := uint8(8)
s, err := client.GenerateVocabulary(ctx, lingara.VocabRequest{Level: 2, SourceLang: "en", TargetLang: "zh", Count: &count})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if item, ok := ev.(lingara.GenerateVocabularyEventItem); ok {
		fmt.Println(item.Data.Word, item.Data.Translation)
	}
}

Java

import com.getlingara.client.model.GenerateVocabularyEvent;
import com.getlingara.client.model.VocabRequest;

VocabRequest request = new VocabRequest().level(2).sourceLang("en").targetLang("zh").count(8);
try (EventStream<GenerateVocabularyEvent> stream = client.generateVocabulary(request)) {
  for (GenerateVocabularyEvent event : stream) {
    if (event instanceof GenerateVocabularyEvent.Item item) {
      System.out.println(item.data().getWord() + " " + item.data().getTranslation());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest

val request = VocabRequest(level = 2, sourceLang = "en", targetLang = "zh", count = 8)
// The request is sent here; collect the stream once, inside use {}.
client.generateVocabulary(request).use { stream ->
    stream.collect { event ->
        when (event) {
            is GenerateVocabularyEvent.Item -> println("${event.data.word} ${event.data.translation}")
            is GenerateVocabularyEvent.Started -> Unit
        }
    }
}

Ruby

client.generate_vocabulary(level: 2, source_lang: "en", target_lang: "zh", count: 8) do |event|
  case event
  in Lingara::GenerateVocabularyEventItem => item then puts "#{item.data.word}: #{item.data.translation}"
  else nil
  end
end

PHP

use Lingara\Model\VocabRequest;
use Lingara\Stream\GenerateVocabularyEvent;

$request = new VocabRequest(['level' => 2, 'source_lang' => 'en', 'target_lang' => 'zh', 'count' => 8]);
foreach ($client->generateVocabulary($request) as $event) {
    if ($event instanceof GenerateVocabularyEvent\Item) {
        echo $event->data->getWord(), ': ', $event->data->getTranslation(), "\n";
    }
}

Wat deze pagina omvat