🏗️ Framework Integration Guide
NeuroLink integrates seamlessly with popular web frameworks. Here are complete examples for common use cases.
SvelteKit Integration
API Route (src/routes/api/chat/+server.ts)
import { createBestAIProvider } from "@juspay/neurolink";
import type { RequestHandler } from "./$types";
export const POST: RequestHandler = async ({ request }) => {
try {
const { message } = await request.json();
const provider = createBestAIProvider();
const result = await provider.stream({
input: { text: message },
temperature: 0.7,
maxTokens: 1000,
});
// Manually create ReadableStream from AsyncIterable
const readable = new ReadableStream({
async start(controller) {
try {
for await (const chunk of result.stream) {
if (chunk && typeof chunk === "object" && "content" in chunk) {
controller.enqueue(new TextEncoder().encode(chunk.content));
}
}
controller.close();
} catch (error) {
controller.error(error);
}
},
});
return new Response(readable, {
headers: {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
Connection: "keep-alive",
},
});
} catch (error) {
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
headers: { "Content-Type": "application/json" },
});
}
};
Svelte Component (src/routes/chat/+page.svelte)
<script lang="ts">
let message = '';
let response = '';
let isLoading = false;
async function sendMessage() {
if (!message.trim()) return;
isLoading = true;
response = '';
try {
const res = await fetch('/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message })
});
if (!res.body) throw new Error('No response');
const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
response += decoder.decode(value, { stream: true });
}
} catch (error) {
response = `Error: ${error.message}`;
} finally {
isLoading = false;
}
}
</script>
<div class="chat">
<input bind:value={message} placeholder="Ask something..." />
<button on:click={sendMessage} disabled={isLoading}>
{isLoading ? 'Sending...' : 'Send'}
</button>
{#if response}
<div class="response">{response}</div>
{/if}
</div>
<style>
.chat {
max-width: 600px;
margin: 2rem auto;
padding: 1rem;
}
input {
width: 70%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
}
button {
width: 25%;
padding: 0.5rem;
margin-left: 0.5rem;
background: #007acc;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.response {
margin-top: 1rem;
padding: 1rem;
background: #f5f5f5;
border-radius: 4px;
white-space: pre-wrap;
}
</style>