feat: add file type fine tune
This commit is contained in:
parent
b6e9350e73
commit
3fcc446cce
3 changed files with 66 additions and 22 deletions
|
@ -7,7 +7,7 @@ import (
|
||||||
"git.wh64.net/muffin/goMuffin/utils"
|
"git.wh64.net/muffin/goMuffin/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const MUFFIN_VERSION = "0.0.0-souffle_canary.250525a"
|
const MUFFIN_VERSION = "0.0.0-madeleine_canary.250525a-muffin-ai"
|
||||||
|
|
||||||
var updatedString string = utils.RegexpDecimals.FindAllStringSubmatch(MUFFIN_VERSION, -1)[3][0]
|
var updatedString string = utils.RegexpDecimals.FindAllStringSubmatch(MUFFIN_VERSION, -1)[3][0]
|
||||||
|
|
||||||
|
|
2
main.go
2
main.go
|
@ -56,7 +56,7 @@ func main() {
|
||||||
command.Root("export", "머핀봇의 데이터를 추출합니다.", scripts.ExportData,
|
command.Root("export", "머핀봇의 데이터를 추출합니다.", scripts.ExportData,
|
||||||
types.OptionData{
|
types.OptionData{
|
||||||
Name: "type",
|
Name: "type",
|
||||||
Desc: "파일형식을 지정합니다. (json, txt(txt는 머핀 데이터만 적용))",
|
Desc: "파일형식을 지정합니다. (json, jsonl, finetune)",
|
||||||
Type: types.STRING,
|
Type: types.STRING,
|
||||||
},
|
},
|
||||||
types.OptionData{
|
types.OptionData{
|
||||||
|
|
|
@ -17,7 +17,7 @@ import (
|
||||||
"go.mongodb.org/mongo-driver/v2/bson"
|
"go.mongodb.org/mongo-driver/v2/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
var date time.Time = time.Now()
|
type role string
|
||||||
|
|
||||||
type textJSONLData struct {
|
type textJSONLData struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
|
@ -29,6 +29,26 @@ type learnJSONLData struct {
|
||||||
Result string `json:"result"`
|
Result string `json:"result"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type fineTuneMessageData struct {
|
||||||
|
Role role `json:"role"`
|
||||||
|
Content string `json:"content"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type fineTuneJSONLData struct {
|
||||||
|
Messages []fineTuneMessageData `json:"messages"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var date time.Time = time.Now()
|
||||||
|
|
||||||
|
var (
|
||||||
|
system role = "system"
|
||||||
|
user role = "user"
|
||||||
|
assistant role = "assistant"
|
||||||
|
)
|
||||||
|
|
||||||
|
const SYSTEM_PROMPT = "당신은 머핀AI입니다. 질문을 최대한 분석하지 말고, 간단히하며, 고급 개념은 대답할 수 없습니다. " +
|
||||||
|
"모르면 모른다고 말해도 괜찮습니다. 말투는 친근하되 존댓말을 사용하여야 합니다. 그리고 대답을 길게 하지 말아야 합니다. 그리고 약간 엉뚱한 면이 있어야 합니다."
|
||||||
|
|
||||||
func getDate() string {
|
func getDate() string {
|
||||||
year := strconv.Itoa(date.Year())
|
year := strconv.Itoa(date.Year())
|
||||||
month := strconv.Itoa(int(date.Month()))
|
month := strconv.Itoa(int(date.Month()))
|
||||||
|
@ -90,11 +110,9 @@ func saveFileToJSON(path, name string, data any) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func saveFileToJSONL(path, name string, data any) error {
|
func saveFileToJSONL[T any](path, name string, data []T) error {
|
||||||
var content string
|
var content string
|
||||||
|
|
||||||
switch data := data.(type) {
|
|
||||||
case []textJSONLData:
|
|
||||||
for _, data := range data {
|
for _, data := range data {
|
||||||
bytes, err := json.Marshal(data)
|
bytes, err := json.Marshal(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -102,15 +120,6 @@ func saveFileToJSONL(path, name string, data any) error {
|
||||||
}
|
}
|
||||||
content += string(bytes) + "\n"
|
content += string(bytes) + "\n"
|
||||||
}
|
}
|
||||||
case []learnJSONLData:
|
|
||||||
for _, data := range data {
|
|
||||||
bytes, err := json.Marshal(data)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
content += string(bytes) + "\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create(fmt.Sprintf("%s/%s.jsonl", path, name))
|
f, err := os.Create(fmt.Sprintf("%s/%s.jsonl", path, name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -137,8 +146,8 @@ func ExportData(n *commando.Node) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if fileType != "json" && fileType != "jsonl" {
|
if fileType != "json" && fileType != "jsonl" && fileType != "finetune" {
|
||||||
return fmt.Errorf("파일 형식은 txt또는 json또는 jsonl이여야 해요")
|
return fmt.Errorf("파일 형식은 txt또는 json또는 jsonl, finetune이여야 해요")
|
||||||
}
|
}
|
||||||
|
|
||||||
refined, err := option.ParseBool(*n.MustGetOpt("refined"), n)
|
refined, err := option.ParseBool(*n.MustGetOpt("refined"), n)
|
||||||
|
@ -213,6 +222,33 @@ func ExportData(n *commando.Node) error {
|
||||||
ch <- err
|
ch <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
} else if fileType == "finetune" {
|
||||||
|
var newData []fineTuneJSONLData
|
||||||
|
|
||||||
|
for _, data := range data {
|
||||||
|
newData = append(newData, fineTuneJSONLData{
|
||||||
|
[]fineTuneMessageData{
|
||||||
|
{
|
||||||
|
Role: system,
|
||||||
|
Content: SYSTEM_PROMPT,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Role: user,
|
||||||
|
Content: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Role: assistant,
|
||||||
|
Content: data.Text,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
err = saveFileToJSONL(path, "muffin-fine-tune", newData)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("머핀 데이터 추출 완료")
|
fmt.Println("머핀 데이터 추출 완료")
|
||||||
|
@ -222,6 +258,10 @@ func ExportData(n *commando.Node) error {
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
|
||||||
|
if fileType == "finetune" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var data []databases.Text
|
var data []databases.Text
|
||||||
|
|
||||||
cur, err := databases.Database.Texts.Find(context.TODO(), bson.D{
|
cur, err := databases.Database.Texts.Find(context.TODO(), bson.D{
|
||||||
|
@ -272,6 +312,10 @@ func ExportData(n *commando.Node) error {
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
|
||||||
|
if fileType == "finetune" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var data []databases.Learn
|
var data []databases.Learn
|
||||||
|
|
||||||
cur, err := databases.Database.Learns.Find(context.TODO(), bson.D{{}})
|
cur, err := databases.Database.Learns.Find(context.TODO(), bson.D{{}})
|
||||||
|
|
Loading…
Reference in a new issue