Spaces:
Configuration error
Configuration error
File size: 1,901 Bytes
aa15bce |
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 |
export const runtime = 'nodejs';
type UIMsgPart = { type: string; text?: string };
type UIMessage = { role: string; parts?: UIMsgPart[]; content?: string };
function uiToOpenAIContent(messages: UIMessage[]): { role: string; content: string }[] {
const out: { role: string; content: string }[] = [];
for (const m of messages || []) {
const role = m?.role;
if (!role) continue;
let content = '';
if (Array.isArray(m.parts)) {
content = m.parts.filter((p) => p?.type === 'text').map((p) => p.text || '').join('');
} else if (typeof m.content === 'string') {
content = m.content;
}
out.push({ role, content });
}
return out;
}
export async function POST(req: Request) {
let body: any;
try {
body = await req.json();
} catch (e) {
console.error('[chat-proxy] invalid json', e);
return new Response('Invalid JSON', { status: 400 });
}
const { messages } = body || {};
if (!Array.isArray(messages) || messages.length === 0) {
return new Response('Missing messages', { status: 400 });
}
const serverBase = process.env.PY_SERVER_URL || 'http://localhost:8001';
const serverPath = process.env.PY_CHAT_PATH || '/api/v1/chat/send';
const url = `${serverBase.replace(/\/$/, '')}${serverPath}`;
const payload = {
system: '',
messages: uiToOpenAIContent(messages),
stream: false,
};
try {
const upstream = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json', Accept: 'text/plain, */*' },
body: JSON.stringify(payload),
});
const text = await upstream.text();
return new Response(text, {
status: upstream.status,
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
} catch (e: any) {
console.error('[chat-proxy] upstream error', e);
return new Response(e?.message || 'Upstream error', { status: 502 });
}
}
|