Skip to content

← Integració

Streaming i tool calling

Streaming amb SSE i tool calling funcionen igual que a OpenAI, però el suport depèn del model — comprova-ho abans de dependre'n.

6 slides 5 min de lectura
  1. OpenRouter · Integració

    Streaming i tool calling

    Les mateixes funcions que a OpenAI, amb un matís per model.

    OpenRouter · Integració arlaf.dev
  2. Dues funcions clau

    El streaming et dóna els tokens a mesura que es generen i el tool calling deixa que el model demani executar funcions teves. Tots dos parlen el dialecte d'OpenAI.

    • stream=true → trossos de tokens via SSE.
    • tools=[...] → el model retorna tool_calls.
    • El suport real depèn del model que triïs.
    OpenRouter · Integració arlaf.dev
  3. Streaming en Python

    stream = client.chat.completions.create(
        model="openai/gpt-4o",  # exemple
        messages=[{"role": "user", "content": "Explica'm SSE en una frase."}],
        stream=True,
    )
    
    for chunk in stream:
        delta = chunk.choices[0].delta.content
        if delta:
            print(delta, end="", flush=True)
    
    OpenRouter · Integració arlaf.dev
  4. Tool calling en TypeScript

    const tools = [{
      type: "function",
      function: {
        name: "get_weather",
        description: "Temps actual d'una ciutat",
        parameters: {
          type: "object",
          properties: { city: { type: "string" } },
          required: ["city"],
        },
      },
    }];
    
    const resp = await client.chat.completions.create({
      model: "anthropic/claude-3.5-sonnet", // exemple
      messages: [{ role: "user", content: "Quin temps fa a Girona?" }],
      tools,
    });
    
    const calls = resp.choices[0].message.tool_calls;
    // calls[0].function.name === "get_weather"
    // → executes la teva funció i tornes el resultat com a missatge "tool"
    
    OpenRouter · Integració arlaf.dev
  5. El matís important

    No tots els models accepten tools ni streaming de la mateixa manera. Si demanes tools a un model que no els suporta, els ignorarà o fallarà. Comprova-ho abans de construir-hi a sobre.

    OpenRouter · Integració arlaf.dev
  6. L'API és uniforme; les capacitats del model, no. Comprova sempre el catàleg.
    OpenRouter · Integració arlaf.dev
Llegir la nota completa

Un cop tens el client apuntant a OpenRouter, dues funcions que ja coneixes d’OpenAI funcionen tal qual: el streaming i el tool calling. La mateixa forma de petició, els mateixos camps de resposta. El que canvia és que ara darrere hi pot haver qualsevol model del catàleg.

Streaming: tokens en directe

Amb stream=true la resposta arriba com un flux de SSE (server-sent events): petits chunks amb un delta que vas concatenant. És el que dóna la sensació de “escriure en viu” a un xat. El bucle és idèntic al d’OpenAI — iteres sobre el flux i imprimeixes cada tros que arriba.

Tool calling: que el model demani funcions

Amb tools=[...] descrius funcions (nom, descripció i un esquema JSON dels paràmetres). El model decideix si en vol cridar alguna i, si ho fa, no respon text sinó un tool_calls amb el nom i els arguments. Tu executes la funció de veritat, hi tornes el resultat com un missatge de rol tool, i el model continua la conversa amb aquesta dada a la mà.

El detall que no pots ignorar

Aquí és on el caràcter d’agregador d’OpenRouter es nota: l’API és uniforme, però les capacitats no. Un model pot suportar streaming i no tools; un altre pot acceptar tools però amb matisos de format. Si demanes una funció que el model no sap fer, el millor cas és que l’ignori i el pitjor que la petició falli.

Nota: el suport de streaming, tools i sortida estructurada varia per model. Contrasta sempre amb el catàleg d’OpenRouter quines capacitats té el model concret abans de dependre’n en producció.