Test

Benchmark created on


Setup

"use strict";
window.testRequest = {
    model: "gpt-4",
    messages: [
        {
            role: "system",
            content: "Sen yardımcı bir asistansın."
        },
        {
            role: "user",
            content: "TypeScript'te interface ve type arasındaki fark nedir?"
        },
        {
            role: "assistant",
            content: "Interface ve type arasındaki temel farklar şunlardır: Interface declaration merging destekler, type ise union ve intersection için daha uygun."
        },
        {
            role: "user",
            content: [
                { type: "text", text: "Bir örnek kod gösterir misin?" },
                { type: "text", text: "Özellikle extends kullanımını merak ediyorum." }
            ]
        }
    ]
};
// Test Response
window.testResponse = {
    id: "chatcmpl-abc123",
    object: "chat.completion",
    created: 1699876543,
    model: "gpt-4",
    choices: [
        {
            index: 0,
            message: {
                role: "assistant",
                content: `İşte interface ve type karşılaştırması:

\`\`\`typescript
// Interface extends
interface Animal {
  name: string;
}

interface Dog extends Animal {
  breed: string;
}

// Type intersection
type Animal = { name: string };
type Dog = Animal & { breed: string };
\`\`\`

Her ikisi de benzer sonuç verir ancak interface daha okunabilir.`
            },
            finish_reason: "stop"
        }
    ],
    usage: {
        prompt_tokens: 85,
        completion_tokens: 120,
        total_tokens: 205
    }
};

Test runner

Ready to run.

Testing in
TestOps/sec
Default
"use strict";
function estimateCredits(request) {
    const promptTokens = this.estimatePromptTokens(request);
    return this.calculateCredits(promptTokens);
}
function estimatePromptTokens(request) {
    return request.messages.reduce((total, message) => {
        if (typeof message.content === 'string') {
            return total + Math.ceil(message.content.length / 4);
        }
        else if (Array.isArray(message.content)) {
            return total + message.content.reduce((contentTotal, item) => {
                if (item.type === 'text' && item.text) {
                    return contentTotal + Math.ceil(item.text.length / 4);
                }
                else if (item.type === 'image_url') {
                    return contentTotal + 765;
                }
                return contentTotal;
            }, 0);
        }
        return total + 5;
    }, 0);
}
function calculateCredits(tokens) {
    return Math.ceil(tokens * 0.001);
}
function calculateTotalTokens(request, response) {
    var _a, _b;
    const promptTokens = estimatePromptTokens(request);
    const responseText = ((_b = (_a = response.choices[0]) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.content) || '';
    const completionTokens = Math.ceil(responseText.length / 4);
    return promptTokens + completionTokens;
}

calculateTotalTokens(testRequest, testResponse)
ready
Optimized
function estimatePromptTokens(request) {
    const messages = request.messages;
    let total = 0;
    for (let i = 0; i < messages.length; i++) {
        const content = messages[i].content;
        if (typeof content === "string") {
            total += (content.length + 3) >> 2;
        }
        else if (Array.isArray(content)) {
            for (let j = 0; j < content.length; j++) {
                const item = content[j];
                if (item.type === "text" && item.text) {
                    total += (item.text.length + 3) >> 2;
                }
            }
        }
        else {
            total += 5;
        }
    }
    return total;
}
function calculateCredits(tokens) {
    return ((tokens + 999) / 1000) | 0;
}
function calculateTotalTokens(request, response) {
    var _a, _b;
    const responseText = (_b = (_a = response.choices[0]) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.content;
    const completionTokens = responseText ? (responseText.length + 3) >> 2 : 0;
    return estimatePromptTokens(request) + completionTokens;
}
function calculateModelCost(request, response) {
    const cost = calculateTotalTokens(request, response);
    console.log({ model: request.model, cost });
    return cost;
}
calculateTotalTokens(testRequest, testResponse)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.