[C++] 308 FLTK : ChatGPTアプリの製作 その35 md→json変換 その2

[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT API(gpt-3.5-turbo), NO IDE]

昨日ChatGPTに書いてもらったコードを叩き台にして手を入れ主要な部分を作成しました。

細かいところで色々ややこしかったので、coutデバッグの痕跡を残したままアップしておきます。前半のwhile文はこちらの意図が伝わってなかったのか大分修正しました。後半のfor文が完璧だったのはさすがです。

あとはmdファイルの生成日時をファイル名の先頭に付けたら完成になります。

これでiPadやスマートフォンでのやりとりもChatGPTアプリで閲覧できるようになります。

変換jsonファイルの内容確認
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <nlohmann/json.hpp>

using namespace std;
using json = nlohmann::json;

int main() {
    ifstream ifs("test.md");
    string line;
    vector<string> user_messages;
    vector<string> assistant_messages;
    bool is_user = false;
    string assistant_msg;
    string user_msg;

    cout << "初期化通過" << endl;

    while (getline(ifs, line)) {
        cout << "while通過" << endl;

        if (line.empty()) {
            if (is_user) {
                is_user = false;
            }
            cout << "empty通過" << endl;
        } else if (line[0] == '>') { // user
            if (assistant_msg != ""){
                assistant_messages.push_back(assistant_msg);
                cout << "assistantベクター追加" << endl;
                assistant_msg = "";
            }

            is_user = true;
            cout << "user : " << line.substr(2) << endl;
            string user_msg = line.substr(2) + "\n";
            user_messages.push_back(user_msg);
        } else {
            if (is_user) {
                cout << "user2行目以降 : " << line << endl;
                user_msg += line + "\n";
                cout << "user文字列追加" << endl;

            } else {
                if (user_msg != ""){
                    user_messages.push_back(user_msg);
                    cout << "userベクター追加" << endl;
                    user_msg = "";
                }

                cout << "assistant : " << line << endl;
                assistant_msg += line + "\n";
                cout << "assistant文字列追加" << endl;
            }
        }
    }
    assistant_messages.push_back(assistant_msg);
    cout << "assistantベクター最終追加" << endl;

    cout << "getline通過" << endl;

    json root;
    json messages = json::array();
    for (int i = 0; i < user_messages.size(); i++) {
        json message;
        message["content"] = user_messages[i];
        message["role"] = "user";
        messages.push_back(message);
        message["content"] = assistant_messages[i];
        message["role"] = "assistant";
        messages.push_back(message);
    }
    root["messages"] = messages;
    root["model"] = "gpt-3.5-turbo";
    root["temperature"] = 0.0;

    ofstream ofs("output.json");
    ofs << root.dump(4);

    return 0;
}