INTEGRITY Dokumentace

WebSockets API mimo reálný čas

Non-realtime WebSockets API umožňuje navázat trvalá připojení pro AI požadavky bez nutnosti opakovaných handshaků. Tento přístup je ideální pro aplikace, které nevyžadují interakce v reálném čase, ale přesto těží ze snížené latence a nepřetržité komunikace.

Nastavit WebSockets API

  1. Vygenerujte token AI Gateway s příslušným oprávněním AI Gateway Run a povolte použití autentizované gateway.
  2. Použijte wss:// protokol pro navázání WebSocket připojení:
    wss://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}
  3. Otevřete připojení WebSocket ověřené pomocí tokenu Cloudflare s oprávněním AI Gateway Run.

Příklad požadavku

import WebSocket from "ws";

const ws = new WebSocket(
	"wss://gateway.ai.cloudflare.com/v1/my-account-id/my-gateway/",
	{
		headers: {
			"cf-aig-authorization": "Bearer AI_GATEWAY_TOKEN",
		},
	},
);

ws.on("open", () => {
	ws.send(
		JSON.stringify({
			type: "universal.create",
			request: {
				eventId: "my-request",
				provider: "workers-ai",
				endpoint: "@cf/meta/llama-3.1-8b-instruct",
				headers: {
					Authorization: "Bearer WORKERS_AI_TOKEN",
					"Content-Type": "application/json",
				},
				query: {
					prompt: "tell me a joke",
				},
			},
		}),
	);
})

ws.on("message", (message) => {
	console.log(message.toString());
});

Ukázková odpověď

{
	"type": "universal.created",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC3R94FRD97JBCBX3S0ZAXKW",
		"step": "0",
		"contentType": "application/json"
	},
	"response": {
		"result": {
			"response": "Why was the math book sad? Because it had too many problems. Would you like to hear another one?"
		},
		"success": true,
		"errors": [],
		"messages": []
	}
}

Příklad streamovaného požadavku

U streamovaných požadavků odesílá AI Gateway počáteční zprávu s metadaty požadavku, která signalizuje zahájení streamu:

{
	"type": "universal.created",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC40RB3NGBE5XFRZGBN07572",
		"step": "0",
		"contentType": "text/event-stream"
	}
}

Po této úvodní zprávě jsou všechny streamované fragmenty předávány v reálném čase do připojení WebSocket tak, jak přicházejí od poskytovatele inference. Pouze eventId pole je součástí metadat těchto streamovaných fragmentů. eventId umožňuje AI Gateway přiřadit ke každé zprávě ID definované klientem, a to i ve streamovaném prostředí WebSocket.

{
	"type": "universal.stream",
	"metadata": {
		"eventId": "my-request"
	},
	"response": {
		"response": "would"
	}
}

Jakmile jsou pro daný požadavek odeslány všechny chunky, AI Gateway odešle závěrečnou zprávu signalizující dokončení požadavku. Pro větší flexibilitu tato zpráva znovu obsahuje veškerá metadata, přestože byla poprvé poskytnuta už na začátku procesu streamování.

{
	"type": "universal.done",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC40RB3NGBE5XFRZGBN07572",
		"step": "0",
		"contentType": "text/event-stream"
	}
}