summaryrefslogtreecommitdiff
path: root/models/card.go
blob: 24226d39e220f7499e244f097c553a1e9c8bbd74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package models

import "strings"

// https://github.com/malfoyslastname/character-card-spec-v2/blob/main/spec_v2.md
// what a bloat; trim to Role->Msg pair and first msg
type CharCardSpec struct {
	Name           string `json:"name"`
	Description    string `json:"description"`
	Personality    string `json:"personality"`
	FirstMes       string `json:"first_mes"`
	Avatar         string `json:"avatar"`
	Chat           string `json:"chat"`
	MesExample     string `json:"mes_example"`
	Scenario       string `json:"scenario"`
	CreateDate     string `json:"create_date"`
	Talkativeness  string `json:"talkativeness"`
	Fav            bool   `json:"fav"`
	Creatorcomment string `json:"creatorcomment"`
	Spec           string `json:"spec"`
	SpecVersion    string `json:"spec_version"`
	Tags           []any  `json:"tags"`
}

func (c *CharCardSpec) Simplify(userName, fpath string) *CharCard {
	fm := strings.ReplaceAll(strings.ReplaceAll(c.FirstMes, "{{char}}", c.Name), "{{user}}", userName)
	sysPr := strings.ReplaceAll(strings.ReplaceAll(c.Description, "{{char}}", c.Name), "{{user}}", userName)
	return &CharCard{
		SysPrompt: sysPr,
		FirstMsg:  fm,
		Role:      c.Name,
		FilePath:  fpath,
	}
}

type CharCard struct {
	SysPrompt string
	FirstMsg  string
	Role      string
	FilePath  string
}