Laddro DocsLaddro Docs

Streaming SSE

Streaming SSE

La Career API supporte le streaming Server-Sent Events (SSE) pour les endpoints IA. Cela vous permet de recevoir les resultats en temps reel au fur et a mesure de leur generation.

Endpoints avec streaming

EndpointDescription
POST /v1/tailorSuggestions de personnalisation de CV
POST /v1/cover-letters/generateGeneration de lettre de motivation

Comment l'activer

Ajoutez Accept: text/event-stream aux headers de votre requete :

curl https://api.laddro.com/v1/tailor \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{ "resumeId": "res_abc123", "jobDescription": "..." }'

Format des evenements

Les evenements suivent la specification SSE :

data: {"type":"section","section":"summary","content":"Experienced engineer..."}

data: {"type":"section","section":"experience","content":"..."}

data: {"type":"done"}

Chaque evenement est un objet JSON avec :

ChampTypeDescription
typestringsection ou done
sectionstringNom de la section du CV (quand type est section)
contentstringContenu genere

Exemples d'implementation

JavaScript (Navigateur)

const response = await fetch('https://api.laddro.com/v1/tailor', {
  method: 'POST',
  headers: { 'x-api-key': apiKey, 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },
  body: JSON.stringify({ resumeId, jobDescription })
})
const reader = response.body.getReader()
const decoder = new TextDecoder()
while (true) {
  const { done, value } = await reader.read()
  if (done) break
  const lines = decoder.decode(value).split('\n')
  for (const line of lines) {
    if (line.startsWith('data: ')) {
      const event = JSON.parse(line.slice(6))
      if (event.type === 'done') return
      console.log(event.section, event.content)
    }
  }
}

TypeScript SDK

for await (const event of client.tailor({ resumeId, jobDescription }, { stream: true })) {
  console.log(event.section, event.content)
}

Python SDK

for event in client.tailor(resume_id=resume_id, job_description=jd, stream=True):
    print(event.section, event.content)

Node.js (Raw)

import { createParser } from 'eventsource-parser'
const response = await fetch('https://api.laddro.com/v1/tailor', {
  method: 'POST',
  headers: { 'x-api-key': process.env.LADDRO_API_KEY, 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },
  body: JSON.stringify({ resumeId, jobDescription })
})
const parser = createParser(event => {
  if (event.type === 'event') {
    const data = JSON.parse(event.data)
    if (data.type === 'done') return
    process.stdout.write(data.content)
  }
})
for await (const chunk of response.body) { parser.feed(new TextDecoder().decode(chunk)) }

Gestion des erreurs

Si une erreur survient pendant le streaming, le stream emettra un evenement d'erreur :

data: {"type":"error","message":"Rate limit exceeded","statusCode":429}

Gerez toujours le type d'evenement erreur dans votre consommateur de stream.

On this page