fix: r1 and blank user persona handling

This commit is contained in:
Severian
2025-02-05 07:16:46 +08:00
parent b6df5d196f
commit b5d7532a84
3 changed files with 42 additions and 32 deletions

View File

@@ -1,3 +1,8 @@
# Sucker # Sucker
Check package.json for commands, I can't be bothered. Check package.json for commands, I can't be bothered.
### Changelog
- 1.1: Fix for R1 handling change, blank user persona bug
- 1.0: Yup.

View File

@@ -52,7 +52,7 @@ function safeReplace(text: string, old: string, newStr: string): string {
function extractCardData(messages: Message[]): CardData { function extractCardData(messages: Message[]): CardData {
const content0 = messages[0].content; const content0 = messages[0].content;
const content1 = messages[1].content; const content1 = messages[2].content;
const userName = extractPersonaName(content0, 0); const userName = extractPersonaName(content0, 0);
const charName = extractPersonaName(content0, 1); const charName = extractPersonaName(content0, 1);
@@ -67,41 +67,41 @@ function extractCardData(messages: Message[]): CardData {
first_mes: content1, first_mes: content1,
}; };
if (personaMatches.length >= 2) { // blank user persona handling, or at least an attempt
const secondPersonaIdx = personaMatches[1].index!; let secondPersonaIdx =
const startDesc = secondPersonaIdx + "'s Persona:".length; personaMatches[personaMatches.length >= 2 ? 1 : 0]?.index;
const remaining = content0.slice(startDesc); const startDesc = secondPersonaIdx + "'s Persona:".length;
const remaining = content0.slice(startDesc);
const scenarioMarker = remaining.match(/Scenario of the roleplay:/); const scenarioMarker = remaining.match(/Scenario of the roleplay:/);
const exampleMarker = remaining.match(/Example conversations between/); const exampleMarker = remaining.match(/Example conversations between/);
let endIdx = remaining.length; let endIdx = remaining.length;
if (scenarioMarker) endIdx = Math.min(endIdx, scenarioMarker.index!); if (scenarioMarker) endIdx = Math.min(endIdx, scenarioMarker.index!);
if (exampleMarker) endIdx = Math.min(endIdx, exampleMarker.index!); if (exampleMarker) endIdx = Math.min(endIdx, exampleMarker.index!);
cardData.description = remaining.slice(0, endIdx).trim(); cardData.description = remaining.slice(0, endIdx).trim();
if (scenarioMarker) { if (scenarioMarker) {
const scenarioStart = scenarioMarker.index! + scenarioMarker[0].length; const scenarioStart = scenarioMarker.index! + scenarioMarker[0].length;
const scenarioRemaining = remaining.slice(scenarioStart); const scenarioRemaining = remaining.slice(scenarioStart);
const exampleInScenarioMarker = scenarioRemaining.match( const exampleInScenarioMarker = scenarioRemaining.match(
/Example conversations between/ /Example conversations between/
); );
const scenarioEnd = exampleInScenarioMarker const scenarioEnd = exampleInScenarioMarker
? exampleInScenarioMarker.index! ? exampleInScenarioMarker.index!
: scenarioRemaining.length; : scenarioRemaining.length;
cardData.scenario = scenarioRemaining.slice(0, scenarioEnd).trim(); cardData.scenario = scenarioRemaining.slice(0, scenarioEnd).trim();
} }
if (exampleMarker) { if (exampleMarker) {
const exampleStart = exampleMarker.index!; const exampleStart = exampleMarker.index!;
const rawExampleStr = remaining.slice(exampleStart).trim(); const rawExampleStr = remaining.slice(exampleStart).trim();
const colonIdx = rawExampleStr.indexOf(":"); const colonIdx = rawExampleStr.indexOf(":");
cardData.mes_example = cardData.mes_example =
colonIdx !== -1 colonIdx !== -1
? rawExampleStr.slice(colonIdx + 1).trim() ? rawExampleStr.slice(colonIdx + 1).trim()
: rawExampleStr.trim(); : rawExampleStr.trim();
}
} }
for (const field in cardData) { for (const field in cardData) {

View File

@@ -186,7 +186,12 @@ export default function Home() {
<main className="min-h-screen bg-background text-foreground"> <main className="min-h-screen bg-background text-foreground">
<div className="container mx-auto px-4 py-8"> <div className="container mx-auto px-4 py-8">
<div className="flex justify-between items-center mb-4"> <div className="flex justify-between items-center mb-4">
<h1 className="text-3xl font-bold">Sucker</h1> <div>
<h1 className="text-3xl font-bold">Sucker v1.1</h1>
<p className="text-sm text-muted-foreground">
Fixed R1 handling change, blank user persona bug.
</p>
</div>
<Button <Button
onClick={fetchCards} onClick={fetchCards}
variant="outline" variant="outline"