Lingara Lingara Dokumentasyon Mga gabay API Mga library Mga app Gumawa Web app
Wika: Filipino

Mga stream

Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles

Apat na operasyon ang nag-i-stream ng kanilang mga resulta bilang mga server-sent event: pagbuo ng bokabularyo, pagpapadala ng mensahe sa tutor, paggawa ng plano ng aralin at pagsubaybay sa isa. Ginagawa ng bawat library ang event stream na sariling uri ng iterator ng wika, at iniaabot sa iyo ang bawat event na naka-decode na bilang isang typed na value.

Paano natatapos ang isang stream

  • Kapag tapos na ang trabaho. Kusang humihinto ang pag-iterate sa huling event ng stream. Para sa plano ng aralin, dala ng huling event na iyon ang resulta, kaya natatanggap mo ito bago matapos ang loop.
  • Kapag nag-ulat ng error ang API. Ang error na dumating sa loob ng stream ay ibinabato bilang API error, kapareho ng uri ng error na dumarating bago ito.
  • Kapag nabigo ang koneksyon. Ang stream na natapos bago ang huling event nito, o walang ipinadala sa loob ng 120 segundo, ay ibinabato bilang transport error.
  • Kapag huminto ka. Kanselahin ang tawag sa karaniwang paraan ng iyong wika, o itigil ang pagbasa, at agad na magsasara ang koneksyon.

Nilalaktawan ang mga keepalive comment at mga uri ng event na hindi pa kilala ng library, kaya hindi kailanman masisira ng mas bagong API ang mas lumang library.

Hindi kailanman inuulit

Ang stream na nakapaghatid na kahit ng isang event ay hindi kailanman inuulit ng library, dahil ang pag-uulit dito ay maaaring gumastos nang dalawang beses sa iyong allowance. Kung maputol ang stream ng isang plano ng aralin pagkatapos itong magsimula, sundan ang parehong plano gamit ang streamLessonPlan at ang plan_id mula sa unang event nito.

Wika ng halimbawang code

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";
    }
}

Ang binabalot ng pahinang ito