BusDK Update

Usage-kirjaukset saavat oman integraatiotyöntekijän

bus-integration-usage käsittelee usage-tapahtumien tallennuksen, listauksen ja poiston Bus Events -request/reply-mallilla. API-providerit voivat julkaista usage-pyynnön tapahtumana, ja tietokantaan kirjoittava osa pysyy erillisessä integraatioprosessissa.

Muutos sopii samaan rajaan kuin uusi Events API ja usage-provider: HTTP-pinta voi toimia kapeana fasadina, mutta varsinainen laskutettava usage-kirjaus kulkee jonotettavana työnä. LLM- ja container-providerit voivat käyttää samaa työntekijää Events-pohjaisena usage-storena.

26.4.2026bus-integration-usageEvents APIusage

Tiiviisti

TL;DR

  • bus-integration-usage kuuntelee bus.usage.record.request-, bus.usage.list.request- ja bus.usage.delete.request -tapahtumia.
  • Vastaus tulee korreloituna response-tapahtumana, joten tuottaja saa hyväksynnän, sivutetun listauksen, poistolaskurin tai vakaan virhekoodin samasta Events API -virrasta.
  • event_id tekee uudelleenyrityksistä idempotentteja: sama laskutettava toiminto ei synnytä uutta usage-riviä, jos pyyntö toimitetaan uudelleen.
  • Työntekijä lukee jaetut BUS_EVENTS_LISTENER_*-asetukset, joten se voi käynnistyä ennen Events APIa ja reconnectata streamin katketessa.

Workerin julkinen sopimus on pieni tapahtumapari jokaista operaatiota kohti:

bus.usage.record.request  -> bus.usage.record.response
bus.usage.list.request    -> bus.usage.list.response
bus.usage.delete.request  -> bus.usage.delete.response

Record-pyyntö sisältää tapahtumatyypin, tilin tunnisteen, tapahtuma-ajan, vapaamuotoisen JSON-datan ja valinnaisen uudelleenyritysavaimen:

{
  "event_id": "evt-20260426-llm-0001",
  "account_id": "00000000-0000-4000-8000-000000000001",
  "event_type": "llm.usage",
  "data": {
    "total_tokens": 42
  }
}

Onnistunut vastaus palauttaa saman korrelaation alla hyväksynnän. Jos pyyntö on virheellinen, worker julkaisee response-eventin virhekoodilla kuten bad_request. Jos usage-tallennus ei ole käytettävissä, virhe näkyy koodina usage_storage_unavailable.

{
  "accepted": true,
  "event_id": "evt-20260426-llm-0001"
}

Listaus ja poisto käyttävät samaa sivutettua mallia: before, page ja page_size. Sivut järjestetään tapahtuma-ajan ja tallennus-ID:n mukaan, jotta keräilijä voi käsitellä usage-erät deterministisesti. Poisto palauttaa vain poistetun rivimäärän, jolloin jatkokäsittelijä voi kirjata etenemisen ilman, että sen tarvitsee tuntea tallennustoteutuksen yksityiskohtia.

event_id ei jää vain event-payloadiin. PostgreSQL-usage-store tallentaa sen omalle sarakkeelle ja käyttää ei-tyhjille arvoille uniikkia indeksiä. Siksi sama llm.usage- tai container.run-kirjaus voi tulla uudelleen ilman, että uudelleenyritys kasvattaa laskutettavaa käyttöä kahteen kertaan.

Paikallisessa kehityksessä työntekijän saa ajettua muistitaustalla, ja julkaistussa ympäristössä se käyttää PostgreSQL-taustaa. Sama työntekijä voidaan käynnistää omana bus-integration-usage-prosessinaan tai rekisteröidä yhteiseen bus-integration-hostiin usageintegration.Registration(...)-pinnalla.

$ bus-integration-usage --self-test
bus-integration-usage self-test OK

Events-listener käyttää samaa retry-konfiguraatiota kuin muut Bus-integraatiotyöntekijät. BUS_EVENTS_LISTENER_RETRY, minimi- ja maksimiviiveen asetukset sekä BUS_EVENTS_TOKEN_REFRESH näkyvät suoraan helpissä. Käytännössä usage-worker voi käynnistyä ennen Events APIa ja muodostaa kuuntelun myöhemmin, ja streamin katkeaminen johtaa reconnect-yritykseen. Staattisen tokenin 401- tai 403-virhe pysyy nopeana virheenä, jotta väärä credential ei peity loputtomaan odotukseen.

Operaattorin kannalta tärkein ero on tunnusten rajaus: malli-, VM-, container- ja muut providerit eivät tarvitse suoraa usage-tietokantayhteyttä. Ne julkaisevat usage-pyynnön Bus Eventsiin, ja usage-työntekijä omistaa tallennuksen. Katso jatkoon bus-integration-usage-dokumentaatio, usage-providerin dokumentaatio ja bus-integration-runtime.