Безассистентовое плацебо

Только для ХМЛ-шиза и товарищей по палате
Код не тестировал, писала чурбыня так что все вопросы к ней

Обновление 9 апреля 4:58 по Московскому

  • Убрал ненужное двоеточие на 21 строке
  • Исправил проёбанные скобки

Нужно добавить ["\n\n{{user}}:", "\n\n{{char}}:"] в начало Custom Stopping Strings таверны (см. картинки ниже) конкретно в таком порядке, скрипт по умолчанию удаляет чара когда перенаправляет запрос на апи

Для установки зависимостей прописываем npm i express express-http-proxy

const express = require('express');
const proxy = require('express-http-proxy');
const app = express();
app.use(express.json());
const PORT = 3000;

const apiBaseUrl = 'https://krazyxki-v-1488abed.hf.space'; // Адрес вашей прокси или куктропиков ( https://api.anthropic.com )

app.use((req, res, next) => {
  if (req.url.endsWith('messages')) {
    const messages = req.body.messages;
    const userName = req.body.stop_sequences[3]; // "\n\n{{user}}:"
    const charName = req.body.stop_sequences[4]; // "\n\n{{char}}:"

    req.body.stop_sequences.splice(4, 1); // Убираем "\n\n{{char}}:" из стоп-токенов

    const chatHistory = // Собираем из истории чата огромный префил
      messages[1].content + // Первое сообщение ассистента от роли ассистента, "\n\n{{char}}:" в начало не добавляем
      messages.slice(2).map(message => {
        const prefix = message.role === 'user' ? userName : charName;
        return `${prefix} ${message.content}`;
      }).join('') +
      (messages[messages.length - 1].role === 'assistant' ? '' : charName); // Если префила нет пихаем "\n\n{{char}}:" в конец

    req.body.messages = [
      messages[0], // Оставляем первую мессагу хумана как есть
      {
        role: 'assistant',
        content: chatHistory
      }
    ];

    console.log('Claude Request:', req.body);
  }
  next();
});

app.use('/', proxy(apiBaseUrl, {
  proxyReqOptDecorator: function(proxyReqOpts, srcReq) {
    proxyReqOpts.headers['Host'] = new URL(apiBaseUrl).host;
    return proxyReqOpts;
  },
  proxyReqBodyDecorator: function(bodyContent, srcReq) {
    return JSON.stringify(srcReq.body);
  }
}));

app.listen(PORT, () => {
  console.log(`Claude proxy: http://127.0.0.1:${PORT}/`);
});
Edit
Pub: 08 Apr 2024 22:21 UTC
Edit: 09 Apr 2024 01:58 UTC
Views: 971