Install
npm install @polpo-ai/sdk @polpo-ai/react
Setup
import { PolpoProvider } from "@polpo-ai/react";
const root = createRoot(document.getElementById("root")!);
root.render(
<PolpoProvider
baseUrl={import.meta.env.VITE_POLPO_API_URL}
apiKey={import.meta.env.VITE_POLPO_API_KEY}
>
<App />
</PolpoProvider>
);
Chat with an agent
import { useState, useCallback } from "react";
import { usePolpo } from "@polpo-ai/react";
export function Chat() {
const { client } = usePolpo();
const [messages, setMessages] = useState<{ role: string; content: string }[]>([]);
const [input, setInput] = useState("");
const [streaming, setStreaming] = useState(false);
const send = useCallback(async () => {
if (!input.trim()) return;
const userMsg = { role: "user", content: input };
setMessages(prev => [...prev, userMsg]);
setInput("");
setStreaming(true);
let assistantContent = "";
setMessages(prev => [...prev, { role: "assistant", content: "" }]);
const stream = client.chatCompletionsStream({
agent: "assistant",
messages: [...messages, userMsg],
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content ?? "";
assistantContent += delta;
setMessages(prev => [
...prev.slice(0, -1),
{ role: "assistant", content: assistantContent },
]);
}
setStreaming(false);
}, [client, messages, input]);
return (
<div>
{messages.map((m, i) => (
<div key={i} className={m.role}>{m.content}</div>
))}
<input value={input} onChange={e => setInput(e.target.value)} onKeyDown={e => e.key === "Enter" && send()} />
<button onClick={send} disabled={streaming}>Send</button>
</div>
);
}
Live task dashboard
import { useTasks, useStats } from "@polpo-ai/react";
export function Dashboard() {
const { tasks, isLoading } = useTasks();
const { stats } = useStats();
if (isLoading) return <div>Loading...</div>;
return (
<div>
<div>
<span>{stats?.pending ?? 0} pending</span>
<span>{stats?.inProgress ?? 0} running</span>
<span>{stats?.done ?? 0} done</span>
</div>
<ul>
{tasks.map(t => (
<li key={t.id}>{t.title} — {t.status}</li>
))}
</ul>
</div>
);
}
Environment variables
# .env
VITE_POLPO_API_URL=https://api.polpo.sh
VITE_POLPO_API_KEY=pk_live_...
Never expose API keys in client-side code in production. Use a backend proxy or session-based auth to inject the key server-side.