Overview
Styrr can be used as a drop-in model provider for most LLM frameworks. The RouterResult interface is compatible with standard chat completion shapes.
Strands Agents
Use Styrr as a model provider in Strands Agents:
import { Agent } from '@ strands/agent';
import { StyrRouter } from '@carloscortezcloud/styrr-llm';
const router = new StyrRouter({
apiKey: process.env.OPENROUTER_API_KEY,
models: [
{ id: 'nvidia/nemotron-3-ultra-550b:free' },
{ id: 'gpt-4o-mini' },
],
});
const agent = new Agent({
model: async (messages) => {
const result = await router.call(messages);
return {
role: 'assistant',
content: result.text,
};
},
});
LangChain (ChatModel)
import { BaseChatModel } from '@langchain/core/language_models/chat_models';
import { StyrRouter } from '@carloscortezcloud/styrr-llm';
class StyrrChatModel extends BaseChatModel {
private router: StyrRouter;
constructor(router: StyrRouter) {
super({});
this.router = router;
}
async _generate(messages, options) {
const result = await this.router.call(messages);
return {
generations: [{ text: result.text, message: new AIMessage(result.text) }],
};
}
}
Express / Fastify Middleware
app.post('/api/chat', async (req, res) => {
const { message } = req.body;
const result = await router.call([
{ role: 'user', content: message },
]);
res.json({ reply: result.text, model: result.modelUsed });
});
Custom Router Interface
Any object with a call() method works. Implement your own:
interface Router {
call(messages: Message[], tools?: Tool[]): Promise<RouterResult>;
}