关于这个问题,是由于KIMI大模型的问题。
stream: false 发出去会提示 {"error":{"message":"invalid temperature: only 1 is allowed for this model","type":"invalid_request_error"}}。可以新建插件管理,监听 llm/chat/completions 接口,如果发现 model 是 kimi 系列就把参数里的 temperature 删了。
插件代码:
- (() => {
- const PLUGIN_NAME = '移除Kimi模型temperature参数';
- const MIDDLEWARE_NAME = 'remove-kimi-temperature';
- const TARGET_PATH = '/llm/chat/completions';
- const KIMI_MODEL_RE = /^kimi(?:-|$)/i;
- const isTargetUrl = (url) => typeof url === 'string' && url.includes(TARGET_PATH);
- const normalizeBody = (body) => {
- if (!body || typeof body !== 'object' || Array.isArray(body)) return null;
- return body;
- };
- const shouldStripTemperature = (url, body) => {
- if (!isTargetUrl(url)) return false;
- const model = typeof body?.model === 'string' ? body.model.trim() : '';
- return KIMI_MODEL_RE.test(model);
- };
- const register = () => {
- if (!window.GD || typeof window.GD.registerFetchMiddleware !== 'function') {
- console.warn(`[${PLUGIN_NAME}] GD.registerFetchMiddleware is unavailable`);
- return;
- }
- window.GD.unregisterFetchMiddleware?.(MIDDLEWARE_NAME, 20);
- window.GD.registerFetchMiddleware(
- MIDDLEWARE_NAME,
- async (request) => {
- const body = normalizeBody(request?.body);
- if (!shouldStripTemperature(request?.url, body)) {
- return {
- body: request?.body,
- headers: request?.headers,
- credentials: request?.credentials,
- };
- }
- const nextBody = { ...body };
- const hadTemperature = Object.prototype.hasOwnProperty.call(nextBody, 'temperature');
- if (hadTemperature) {
- delete nextBody.temperature;
- }
- console.log(`[${PLUGIN_NAME}] stripped temperature`, {
- url: request?.url,
- model: nextBody.model,
- removed: hadTemperature,
- });
- return {
- body: nextBody,
- headers: request?.headers,
- credentials: request?.credentials,
- };
- },
- async (response) => ({ response: response?.response }),
- 20,
- );
- console.log(`[${PLUGIN_NAME}] middleware registered`);
- };
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', register, { once: true });
- } else {
- register();
- }
- window.addEventListener('load', register);
- window.addEventListener('hashchange', register);
- window.addEventListener('popstate', register);
- document.addEventListener('visibilitychange', () => {
- if (!document.hidden) register();
- });
- })();
复制代码
|