Skip to content

Completion Examples

Examples

This guide provides practical examples of using the Completion service.

Using cURL

Completion Request

Terminal window
curl -X POST https://completion.genstack.app/ \
-H "Content-Type: application/json" \
-d '{
"genstackToken": "YOUR_GENSTACK_TOKEN",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me about AI."}
],
"model": "gpt-4-mini",
"temperature": 0.7,
"maxOutputTokens": 500,
"applicationId": "app.genstack.docs.completion",
"overrideGrossMarginPercent": 10
}'

Using TypeScript/JavaScript

Complete Completion Client

interface Message {
role: "system" | "user" | "assistant";
content: string;
}
interface CompletionOptions {
genstackToken: string;
messages: Message[];
model: string;
developerId?: string;
applicationId?: string;
temperature?: number;
maxOutputTokens?: number;
overrideGrossMarginPercent?: number;
}
interface UsageInfo {
type: "completion";
promptTokens: number;
completionTokens: number;
inputCost: string;
outputCost: string;
}
interface CompletionResponse {
model: string;
output: string;
usage: UsageInfo;
balanceBefore: string;
balanceAfter: string;
}
class CompletionClient {
private baseUrl: string;
constructor(baseUrl: string) {
this.baseUrl = baseUrl;
}
async generateCompletion(options: CompletionOptions): Promise<CompletionResponse> {
const response = await fetch(this.baseUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(options),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.message);
}
return response.json();
}
async generateStreamingCompletion(
options: CompletionOptions,
onToken: (token: string) => void,
onComplete: (response: CompletionResponse) => void,
onAbort?: (response: CompletionResponse) => void,
): Promise<string> {
const response = await fetch(`${this.baseUrl}/stream`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(options),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.message);
}
const streamId = response.headers.get("X-Stream-Id");
if (!streamId) {
throw new Error("No stream ID received from server");
}
const reader = response.body!.getReader();
const decoder = new TextDecoder();
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
const text = decoder.decode(value);
const lines = text.split("\n");
for (const line of lines) {
if (!line.trim() || !line.startsWith("data: ")) continue;
const data = JSON.parse(line.slice(6));
if (data.token) {
onToken(data.token);
}
if (data.completed) {
onComplete(data.response);
return streamId;
}
if (data.aborted) {
onAbort?.(data.response);
return streamId;
}
}
}
} catch (error) {
reader.cancel();
throw error;
}
return streamId;
}
async shutdownStream(streamId: string): Promise<void> {
const response = await fetch(`${this.baseUrl}/stream/shutdown`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ streamId }),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.message);
}
}
async checkHealth(): Promise<{ status: string; env: string; ui: string }> {
const response = await fetch(this.baseUrl);
if (!response.ok) {
throw new Error("Service health check failed");
}
return response.json();
}
}
// Usage Examples
async function completionExamples() {
const client = new CompletionClient("https://completion.genstack.app");
try {
// Basic completion
const basicResult = await client.generateCompletion({
genstackToken: "your_token_here",
messages: [{ role: "user", content: "Tell me about AI." }],
model: "gpt-3.5-turbo",
});
console.log("Completion:", basicResult.output);
console.log("Token usage:", basicResult.usage);
// Advanced completion
const advancedResult = await client.generateCompletion({
genstackToken: "your_token_here",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Tell me about AI." },
],
model: "gpt-3.5-turbo",
temperature: 0.7,
maxOutputTokens: 500,
developerId: "dev_123",
applicationId: "app_456",
});
console.log("Advanced completion result:", advancedResult);
} catch (error) {
console.error("Completion failed:", error);
}
}

Error Handling Examples

Handling Common Errors

async function handleCompletion(options: CompletionOptions) {
try {
const response = await fetch("https://completion.genstack.app/", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(options),
});
if (!response.ok) {
const error = await response.json();
switch (error.error.type) {
case "InsufficientFunds":
console.error("Insufficient balance for completion");
// Handle insufficient funds
break;
case "InvalidCredentials":
console.error("Invalid or expired token");
// Handle authentication error
break;
case "GatewayError":
console.error("AI service error:", error.error.details);
// Handle AI service errors
break;
default:
console.error("Unexpected error:", error.error.message);
}
return;
}
const result = await response.json();
// Process successful completion...
} catch (error) {
console.error("Request failed:", error);
}
}