Set up the inference.sh proxy in Remix applications.
Installation
bash
1npm install @inferencesh/sdkBasic Setup
Create app/routes/api.inference.proxy.ts:
typescript
1import { createRequestHandler } from "@inferencesh/sdk/proxy/remix";2 3const handler = createRequestHandler();4 5// Handle both GET and POST requests6export const loader = handler;7export const action = handler;Environment Variable
Add to your .env:
bash
1INFERENCE_API_KEY="inf_your_key_here"Client Configuration
typescript
1import { inference } from "@inferencesh/sdk";2 3const client = inference({4 proxyUrl: "/api/inference/proxy"5});6 7export async function generateImage(prompt: string) {8 const result = await client.run({9 app: "infsh/flux",10 input: { prompt }11 });12 13 return result.output;14}With Authentication
Check user session before proxying:
typescript
1import { createRequestHandler } from "@inferencesh/sdk/proxy/remix";2import { getSession } from "~/lib/session.server";3 4const proxyHandler = createRequestHandler();5 6export const loader = async (args) => {7 const session = await getSession(args.request.headers.get("Cookie"));8 9 if (!session.userId) {10 return new Response(JSON.stringify({ error: "Unauthorized" }), {11 status: 401,12 headers: { "Content-Type": "application/json" },13 });14 }15 16 return proxyHandler(args);17};18 19export const action = async (args) => {20 const session = await getSession(args.request.headers.get("Cookie"));21 22 if (!session.userId) {23 return new Response(JSON.stringify({ error: "Unauthorized" }), {24 status: 401,25 headers: { "Content-Type": "application/json" },26 });27 }28 29 return proxyHandler(args);30};Custom API Key Resolution
typescript
1import { createRequestHandler } from "@inferencesh/sdk/proxy/remix";2 3const handler = createRequestHandler({4 resolveApiKey: async () => {5 // Load from secrets manager6 return await getSecret("INFERENCE_API_KEY");7 }8});9 10export const loader = handler;11export const action = handler;Route Naming
Remix uses file-based routing with dots as path separators:
| File | URL |
|---|---|
api.inference.proxy.ts | /api/inference/proxy |
api_.inference.proxy.ts | /api/inference/proxy (no layout) |
Streaming
The Remix handler supports streaming responses for real-time task updates.