diff --git a/openai-webrtc.html b/openai-webrtc.html index e69664f..03a4cc7 100644 --- a/openai-webrtc.html +++ b/openai-webrtc.html @@ -196,6 +196,13 @@

+
+ + +
@@ -270,7 +277,7 @@

Session Events

totalCost: 0 } -async function createRealtimeSession(inStream, token, voice) { +async function createRealtimeSession(inStream, token, voice, model) { const pc = new RTCPeerConnection() pc.ontrack = e => { @@ -331,7 +338,6 @@

Session Events

headers } - const model = 'gpt-4o-realtime-preview-2024-12-17' const resp = await fetch(`https://api.openai.com/v1/realtime?model=${model}&voice=${voice}`, opts) await pc.setRemoteDescription({ @@ -343,17 +349,35 @@

Session Events

} function calculateCosts({audioInputTokens, textInputTokens, cachedInputTokens, audioOutputTokens, textOutputTokens}) { - const AUDIO_INPUT_COST = 0.00004 - const AUDIO_OUTPUT_COST = 0.00008 - const CACHED_AUDIO_COST = 0.0000025 - const TEXT_INPUT_COST = 0.0000025 - const TEXT_OUTPUT_COST = 0.00001 - - const audioInputCost = audioInputTokens * AUDIO_INPUT_COST - const cachedInputCost = cachedInputTokens * CACHED_AUDIO_COST - const textInputCost = textInputTokens * TEXT_INPUT_COST - const audioOutputCost = audioOutputTokens * AUDIO_OUTPUT_COST - const textOutputCost = textOutputTokens * TEXT_OUTPUT_COST + // Get the currently selected model + const selectedModel = document.getElementById('modelSelect').value; + + // Define pricing for both models + const PRICING = { + 'gpt-4o-realtime-preview-2024-12-17': { + AUDIO_INPUT_COST: 0.00004, // $40/1M tokens + AUDIO_OUTPUT_COST: 0.00008, // $80/1M tokens + CACHED_AUDIO_COST: 0.0000025, // $2.50/1M tokens + TEXT_INPUT_COST: 0.0000025, // $2.50/1M tokens + TEXT_OUTPUT_COST: 0.00001 // $10/1M tokens + }, + 'gpt-4o-mini-realtime-preview-2024-12-17': { + AUDIO_INPUT_COST: 0.00001, // $10/1M tokens + AUDIO_OUTPUT_COST: 0.00002, // $20/1M tokens + CACHED_AUDIO_COST: 0.0000003, // $0.30/1M tokens + TEXT_INPUT_COST: 0.0000006, // $0.60/1M tokens + TEXT_OUTPUT_COST: 0.0000024 // $2.40/1M tokens + } + }; + + // Get the pricing for the selected model + const rates = PRICING[selectedModel]; + + const audioInputCost = audioInputTokens * rates.AUDIO_INPUT_COST; + const cachedInputCost = cachedInputTokens * rates.CACHED_AUDIO_COST; + const textInputCost = textInputTokens * rates.TEXT_INPUT_COST; + const audioOutputCost = audioOutputTokens * rates.AUDIO_OUTPUT_COST; + const textOutputCost = textOutputTokens * rates.TEXT_OUTPUT_COST; return { inputCost: audioInputCost + cachedInputCost + textInputCost, @@ -482,7 +506,8 @@

Session Events

peerConnection = await createRealtimeSession( audioStream, tokenInput.value, - voiceSelect.value + voiceSelect.value, + modelSelect.value ) status.className = 'status success'