改接口 搞!
啊,刚看到,还没用上就没了吗
佬,你太高估我了,原谅我一个javaer,前端js纯菜鸟改起来费劲。ps:有哪里可以参考过cf盾的方法吗?
看这个
yep,来晚了,车都已经开停了
看这个
okok,我看看
期待ing
我去,血亏
小白终于进阶了
哈哈哈,另一方面来说我们也是帮助他进步
嗯,谢谢分享,这就去看看 尴尬,看不了
是 Reno佬的,感谢他就行
啊,那就算了吧,估计也快G了,论坛还有很多4可用的
嗯,好的,谢谢
我用不了!不知道为啥
真流式的那个用不了吗?用下面这个试试
addEventListener('fetch', event => {
const url = new URL(event.request.url);
if (url.pathname === '/v1/chat/completions' && (event.request.method === 'POST' || event.request.method === 'OPTIONS')) {
event.respondWith(handleStream(event.request));
} else {
event.respondWith(new Response('Not found', { status: 404 }));
}
});
async function handleStream(request) {
if (request.method === "OPTIONS") {
return new Response(null, {
headers: {
'Access-Control-Allow-Origin': '*',
"Access-Control-Allow-Headers": '*'
}, status: 204
})
}
const authHeader = request.headers.get('Authorization');
// Verify if the Authorization header matches "Bearer 960712phh"
if (authHeader !== "Bearer none") {
return new Response('Unauthorized access', { status: 401 });
}
const incomingData = await request.json();
const userMessage = incomingData.messages[incomingData.messages.length - 1].content;
const userModel = incomingData.model;
const data = JSON.stringify({
text: userMessage,
endpoint: "openAI",
model: userModel
});
const headers = new Headers({
"Content-Type": "application/json",
});
const response = await fetch('https://chatpro.ai-pro.org/api/ask/openAI', {
method: 'POST',
headers: headers,
body: data
});
if (response.status !== 200) {
return response;
}
const { readable, writable } = new TransformStream();
const writer = writable.getWriter();
const currentTimestamp = Math.floor(Date.now() / 1000);
if (incomingData.stream === false) {
const responseData = await response.json();
const modifiedData = {
id: `chatcmpl-${currentTimestamp}`,
object: "chat.completion",
created: currentTimestamp,
model: userModel,
choices: [{
index: 0,
message: {
role: "assistant",
content: responseData.text || responseData.error
},
logprobs: null,
finish_reason: "stop"
}],
usage: {
prompt_tokens: 0,
completion_tokens: 0,
total_tokens: 0
},
system_fingerprint: null
};
return new Response(JSON.stringify(modifiedData), {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Content-Type': 'application/json; charset=UTF-8'
},
status: response.status
});
}
const reader = response.body.getReader();
let buffer = '';
let lastLineWasEvent = false;
let finishReason = null;
let lastText = "";
async function push() {
const { done, value } = await reader.read();
if (done) {
await writer.close();
return;
}
buffer += new TextDecoder("utf-8").decode(value);
let position;
while ((position = buffer.indexOf('\n')) !== -1) {
let line = buffer.substring(0, position).trim();
buffer = buffer.substring(position + 1);
if (line.startsWith('event: message')) {
lastLineWasEvent = true;
} else if (lastLineWasEvent && line.startsWith('data: ')) {
const dataContent = JSON.parse(line.substring(5));
const text = dataContent.text || "";
const textDifference = text.replace(lastText, '');
lastText = text;
if (textDifference === "") {
finishReason = "stop";
} else {
finishReason = null;
}
const modifiedData = {
id: `chatcmpl-${currentTimestamp}`,
created: currentTimestamp,
object: "chat.completion.chunk",
model: userModel,
choices: [{
delta: { content: textDifference },
index: 0,
finish_reason: finishReason
}]
};
const dataString = JSON.stringify(modifiedData);
await writer.write(new TextEncoder().encode(`data: ${dataString}\n\n`));
lastLineWasEvent = false;
} else {
lastLineWasEvent = false;
}
}
push();
}
push();
return new Response(readable, {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Content-Type': 'text/event-stream; charset=UTF-8'
},
status: response.status
});
}
貌似NextChat都不支持?