Installation
Copy
Ask AI
npm install openai
# or
yarn add openai
# or
pnpm add openai
Configuration
Copy
Ask AI
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "mvra_live_your_key_here",
baseURL: "https://app.mavera.io/api/v1",
});
Store your API key in an environment variable:
MAVERA_API_KEYCopy
Ask AI
const client = new OpenAI({
apiKey: process.env.MAVERA_API_KEY,
baseURL: "https://app.mavera.io/api/v1",
});
Chat Completions
Basic Usage
Copy
Ask AI
const response = await client.chat.completions.create({
model: "mavera-1",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "What are the latest trends in AI?" },
],
persona_id: "YOUR_PERSONA_ID",
});
console.log(response.choices[0].message.content);
console.log("Credits used:", response.usage.credits_used);
Streaming
Copy
Ask AI
const stream = await client.chat.completions.create({
model: "mavera-1",
messages: [{ role: "user", content: "Write a short story" }],
persona_id: "YOUR_PERSONA_ID",
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
}
}
With Analysis Mode
Copy
Ask AI
const response = await client.chat.completions.create({
model: "mavera-1",
messages: [
{ role: "user", content: "How do millennials feel about remote work?" },
],
persona_id: "YOUR_PERSONA_ID",
analysis_mode: true,
reasoning_effort: "high",
});
// Access analysis data
const analysis = response.analysis;
console.log(`Confidence: ${analysis.confidence}/10`);
REST API Endpoints
For non-Chat endpoints, usefetch:
Copy
Ask AI
const headers = {
Authorization: "Bearer mvra_live_your_key_here",
"Content-Type": "application/json",
};
const baseURL = "https://app.mavera.io/api/v1";
// List personas
const personasRes = await fetch(`${baseURL}/personas`, { headers });
const { data: personas } = await personasRes.json();
// Mave Agent
const maveRes = await fetch(`${baseURL}/mave/chat`, {
method: "POST",
headers,
body: JSON.stringify({ message: "Analyze the EV market" }),
});
const maveResult = await maveRes.json();
// Create Focus Group
const fgRes = await fetch(`${baseURL}/focus-groups`, {
method: "POST",
headers,
body: JSON.stringify({
name: "Product Feedback",
sample_size: 50,
persona_ids: ["persona_1", "persona_2"],
questions: [...],
}),
});
TypeScript Support
The SDK includes full TypeScript types:Copy
Ask AI
import OpenAI from "openai";
import type { ChatCompletion } from "openai/resources/chat/completions";
const client = new OpenAI({
apiKey: process.env.MAVERA_API_KEY,
baseURL: "https://app.mavera.io/api/v1",
});
const response: ChatCompletion = await client.chat.completions.create({
model: "mavera-1",
messages: [{ role: "user", content: "Hello" }],
// @ts-expect-error - Mavera-specific field
persona_id: "YOUR_PERSONA_ID",
});
Error Handling
Copy
Ask AI
import OpenAI from "openai";
try {
const response = await client.chat.completions.create({...});
} catch (error) {
if (error instanceof OpenAI.AuthenticationError) {
console.error("Invalid API key");
} else if (error instanceof OpenAI.RateLimitError) {
console.error("Rate limited - implement backoff");
} else if (error instanceof OpenAI.APIError) {
if (error.status === 402) {
console.error("Insufficient credits");
} else {
console.error("API error:", error.message);
}
}
}
Edge Runtime / Vercel
Works in Edge Runtime environments:Copy
Ask AI
// app/api/chat/route.ts
import OpenAI from "openai";
export const runtime = "edge";
const client = new OpenAI({
apiKey: process.env.MAVERA_API_KEY,
baseURL: "https://app.mavera.io/api/v1",
});
export async function POST(req: Request) {
const { message } = await req.json();
const response = await client.chat.completions.create({
model: "mavera-1",
messages: [{ role: "user", content: message }],
persona_id: process.env.PERSONA_ID,
});
return Response.json(response);
}
React / Next.js Example
Copy
Ask AI
"use client";
import { useState } from "react";
export function Chat() {
const [message, setMessage] = useState("");
const [response, setResponse] = useState("");
const handleSubmit = async () => {
const res = await fetch("/api/chat", {
method: "POST",
body: JSON.stringify({ message }),
});
const data = await res.json();
setResponse(data.choices[0].message.content);
};
return (
<div>
<input value={message} onChange={(e) => setMessage(e.target.value)} />
<button onClick={handleSubmit}>Send</button>
<p>{response}</p>
</div>
);
}