mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-04-22 06:02:07 +02:00
use strict formatting for ollama
This commit is contained in:
parent
78db1255e8
commit
666b45a194
4 changed files with 43 additions and 34 deletions
|
@ -62,7 +62,7 @@ export class Agent {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (init_message) {
|
if (init_message) {
|
||||||
this.handleMessage('system', init_message);
|
this.handleMessage('MINECRAFT', init_message);
|
||||||
} else {
|
} else {
|
||||||
this.bot.chat('Hello world! I am ' + this.name);
|
this.bot.chat('Hello world! I am ' + this.name);
|
||||||
this.bot.emit('finished_executing');
|
this.bot.emit('finished_executing');
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import Anthropic from '@anthropic-ai/sdk';
|
import Anthropic from '@anthropic-ai/sdk';
|
||||||
|
import { strictFormat } from '../utils/text.js';
|
||||||
import { getKey } from '../utils/keys.js';
|
import { getKey } from '../utils/keys.js';
|
||||||
|
|
||||||
export class Claude {
|
export class Claude {
|
||||||
|
@ -15,36 +16,7 @@ export class Claude {
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendRequest(turns, systemMessage) {
|
async sendRequest(turns, systemMessage) {
|
||||||
let prev_role = null;
|
const messages = strictFormat(turns);
|
||||||
let messages = [];
|
|
||||||
let filler = {role: 'user', content: '_'};
|
|
||||||
for (let msg of turns) {
|
|
||||||
if (msg.role === 'system') {
|
|
||||||
msg.role = 'user';
|
|
||||||
msg.content = 'SYSTEM: ' + msg.content;
|
|
||||||
}
|
|
||||||
if (msg.role === prev_role && msg.role === 'assistant') {
|
|
||||||
// insert empty user message to separate assistant messages
|
|
||||||
messages.push(filler);
|
|
||||||
messages.push(msg);
|
|
||||||
}
|
|
||||||
else if (msg.role === prev_role) {
|
|
||||||
// combine new message with previous message instead of adding a new one
|
|
||||||
messages[messages.length-1].content += '\n' + msg.content;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
messages.push(msg);
|
|
||||||
}
|
|
||||||
prev_role = msg.role;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (messages.length > 0 && messages[0].role !== 'user') {
|
|
||||||
messages.unshift(filler); // anthropic requires user message to start
|
|
||||||
}
|
|
||||||
if (messages.length === 0) {
|
|
||||||
messages.push(filler);
|
|
||||||
}
|
|
||||||
|
|
||||||
let res = null;
|
let res = null;
|
||||||
try {
|
try {
|
||||||
console.log('Awaiting anthropic api response...')
|
console.log('Awaiting anthropic api response...')
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { strictFormat } from '../utils/text.js';
|
||||||
|
|
||||||
export class Local {
|
export class Local {
|
||||||
constructor(model_name, url) {
|
constructor(model_name, url) {
|
||||||
this.model_name = model_name;
|
this.model_name = model_name;
|
||||||
|
@ -8,8 +10,8 @@ export class Local {
|
||||||
|
|
||||||
async sendRequest(turns, systemMessage) {
|
async sendRequest(turns, systemMessage) {
|
||||||
let model = this.model_name || 'llama3';
|
let model = this.model_name || 'llama3';
|
||||||
let messages = [{'role': 'system', 'content': systemMessage}].concat(turns);
|
let messages = strictFormat(turns);
|
||||||
|
messages.unshift({role: 'system', content: systemMessage});
|
||||||
let res = null;
|
let res = null;
|
||||||
try {
|
try {
|
||||||
console.log(`Awaiting local response... (model: ${model})`)
|
console.log(`Awaiting local response... (model: ${model})`)
|
||||||
|
|
|
@ -25,3 +25,38 @@ export function toSinglePrompt(turns, system=null, stop_seq='***', model_nicknam
|
||||||
prompt += model_nickname + ": ";
|
prompt += model_nickname + ": ";
|
||||||
return prompt;
|
return prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensures stricter turn order for anthropic/llama models
|
||||||
|
// combines repeated messages from the same role, separates repeat assistant messages with filler user messages
|
||||||
|
export function strictFormat(turns) {
|
||||||
|
let prev_role = null;
|
||||||
|
let messages = [];
|
||||||
|
let filler = {role: 'user', content: '_'};
|
||||||
|
for (let msg of turns) {
|
||||||
|
if (msg.role === 'system') {
|
||||||
|
msg.role = 'user';
|
||||||
|
msg.content = 'SYSTEM: ' + msg.content;
|
||||||
|
}
|
||||||
|
if (msg.role === prev_role && msg.role === 'assistant') {
|
||||||
|
// insert empty user message to separate assistant messages
|
||||||
|
messages.push(filler);
|
||||||
|
messages.push(msg);
|
||||||
|
}
|
||||||
|
else if (msg.role === prev_role) {
|
||||||
|
// combine new message with previous message instead of adding a new one
|
||||||
|
messages[messages.length-1].content += '\n' + msg.content;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
messages.push(msg);
|
||||||
|
}
|
||||||
|
prev_role = msg.role;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (messages.length > 0 && messages[0].role !== 'user') {
|
||||||
|
messages.unshift(filler); // anthropic requires user message to start
|
||||||
|
}
|
||||||
|
if (messages.length === 0) {
|
||||||
|
messages.push(filler);
|
||||||
|
}
|
||||||
|
return messages;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue