Spaces:
Running
Running
File size: 2,170 Bytes
20d33c7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import express from "express";
const app = express();
app.use(express.json());
app.use(express.static("public"));
const ENV_API_KEY = process.env.OPENAI_API_KEY ?? null;
const SUPPORTED_LANGUAGES = {
en: "English", pl: "Polish", de: "German", fr: "French",
es: "Spanish", it: "Italian", ja: "Japanese", zh: "Chinese",
uk: "Ukrainian", ru: "Russian",
};
app.post("/session", async (req, res) => {
const targetLanguage = req.body.targetLanguage ?? "en";
const inputLanguage = req.body.inputLanguage ?? null;
// Klucz z env Secrets ma priorytet; fallback na klucz wpisany przez użytkownika w UI
const apiKey = ENV_API_KEY ?? req.body.apiKey ?? null;
if (!apiKey || !apiKey.startsWith("sk-")) {
return res.status(401).json({ error: "Brak lub nieprawidłowy klucz API OpenAI." });
}
if (!SUPPORTED_LANGUAGES[targetLanguage]) {
return res.status(400).json({ error: `Nieobsługiwany język: ${targetLanguage}` });
}
try {
const session = {
model: "gpt-realtime-translate",
audio: { output: { language: targetLanguage } },
};
if (inputLanguage && SUPPORTED_LANGUAGES[inputLanguage]) {
session.audio.input = { language: inputLanguage };
}
const response = await fetch(
"https://api.openai.com/v1/realtime/translations/client_secrets",
{
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ session }),
}
);
if (!response.ok) {
const err = await response.text();
console.error("OpenAI error:", err);
return res.status(response.status).json({ error: "Błąd OpenAI API", details: err });
}
res.json(await response.json());
} catch (err) {
console.error("Fetch error:", err);
res.status(500).json({ error: "Błąd serwera", details: err.message });
}
});
const PORT = process.env.PORT ?? 7860;
app.listen(PORT, "0.0.0.0", () => {
console.log(`Serwer działa na porcie ${PORT}`);
if (!ENV_API_KEY) {
console.log("INFO: OPENAI_API_KEY nie ustawiony — użytkownicy podają klucz przez UI.");
}
});
|