import {
createRouter,
type RouterExecutor,
type RoutingPolicy,
} from "@mupt-ai/dari-router";
const policy: RoutingPolicy = ({ request, candidates }) => {
const text = request.items
.filter((item) => item.type === "message")
.flatMap((item) => item.content)
.filter((part) => part.type === "text")
.map((part) => part.text)
.join(" ");
const preferred = text.length > 80 ? "demo/strong" : "demo/fast";
const model = candidates.find((candidate) => candidate.id === preferred)
?? candidates[0]!;
return { model: model.id, reason: `Selected ${model.id}.` };
};
const executor: RouterExecutor = {
execute({ request, model, decision }) {
const text = `${model.id} handled ${request.protocol}: ${decision.reason}`;
return {
type: "complete",
output: {
content: [{ type: "text", text }],
finishReason: "stop",
usage: { inputTokens: 1, outputTokens: 1 },
},
};
},
};
const router = createRouter({
models: [
{ id: "demo/fast", executor: "demo", capabilities: { streaming: true } },
{
id: "demo/strong",
executor: "demo",
capabilities: { streaming: true, toolUse: true, imageInput: true },
reasoningEfforts: ["off", "high"],
},
],
policy,
executors: { demo: executor },
});
Bun.serve({ port: 3000, fetch: router.fetch });
console.log("Listening on http://localhost:3000");