Guitar
CommitMessageGenerator.h
Go to the documentation of this file.
1 #ifndef COMMITMESSAGEGENERATOR_H
2 #define COMMITMESSAGEGENERATOR_H
3 
4 #include <ai/AiApiBridge.h>
5 #include <ai/GenerativeAI.h>
6 #include "Git.h"
7 #include <string>
8 
10 private:
12 public:
13  constexpr static int max_diff_size = 200000; // 適当
14 
15  struct CommitPair {
16  std::string a = "HEAD";
17  std::string b;
18  CommitPair() = default;
19  CommitPair(std::string const &a, std::string const &b)
20  : a(a)
21  , b(b)
22  {
23  }
24  };
25 
26  struct Request {
27  std::string diff;
28  std::string status_s_u;
29  std::string hint;
30  int max_message_count = 5; // 生成するコミットメッセージ候補の数
31  Request(std::string const &diff, std::string const &status_s_u, const std::string &hint)
32  : diff(diff)
34  , hint(hint)
35  {
36  }
37  };
38 
39  class Result {
40  public:
41  bool error = false;
42  std::string error_status;
43  std::string error_message;
44  std::vector<std::string> messages;
45  Result() = default;
46  Result(std::vector<std::string> const &messages)
48  {
49  }
50  };
51 
54  : request_(request)
55  {
56  api_.set_ai_model(model);
57  api_.set_system_role("You are an experienced engineer.");
58  }
60  {
61  api_.set_ai_model(model);
62  }
63 
64  static Result parse_response(GenerativeAI::Model model, const AiResult &result);
65  std::string generatePrompt() const;
66  static bool accept_file_diff(const std::string &filename, const std::string &mimetype);
67  static std::string make_diff(const std::string &gitcommand, const std::string &dir, CommitPair const &commits);
68 #ifdef APP_GUITAR
69  static std::string make_diff(GitRunner g, CommitPair const &commits);
70 #endif
71 
73  {
74  std::string prompt = generatePrompt();
75  if (0) {
76  fprintf(stderr, "%s\n", prompt.c_str());
77  fflush(stderr);
78  }
79  return api_.request(prompt);
80  }
81 };
82 
83 #endif // COMMITMESSAGEGENERATOR_H
Definition: AiApiBridge.h:284
void set_ai_model(GenerativeAI::Model model)
使用するAIモデルを設定する。
Definition: AiApiBridge.cpp:670
void set_system_role(std::string const &role)
Definition: AiApiBridge.cpp:675
AiResult request(GenerativeAI::EndPoint::Type eptype, std::string const &prompt, const Query2Request &req)
指定されたエンドポイントタイプに対してプロンプトを送信し、AIの応答を取得する。
Definition: AiApiBridge.cpp:772
Definition: CommitMessageGenerator.h:39
std::vector< std::string > messages
Definition: CommitMessageGenerator.h:44
bool error
Definition: CommitMessageGenerator.h:41
std::string error_status
Definition: CommitMessageGenerator.h:42
std::string error_message
Definition: CommitMessageGenerator.h:43
Result(std::vector< std::string > const &messages)
Definition: CommitMessageGenerator.h:46
Definition: CommitMessageGenerator.h:9
static bool accept_file_diff(const std::string &filename, const std::string &mimetype)
ファイルのdiffをAIに送るべきか判定する。
Definition: CommitMessageGenerator.cpp:128
CommitMessageGenerator(GenerativeAI::Model const &model, CommitMessageGenerator::Request const &request)
Definition: CommitMessageGenerator.h:53
AiResult request()
Definition: CommitMessageGenerator.h:72
constexpr static int max_diff_size
Definition: CommitMessageGenerator.h:13
void set_ai_model(GenerativeAI::Model model)
Definition: CommitMessageGenerator.h:59
CommitMessageGenerator::Request request_
Definition: CommitMessageGenerator.h:52
AiApiBridge api_
Definition: CommitMessageGenerator.h:11
static std::string make_diff(const std::string &gitcommand, const std::string &dir, CommitPair const &commits)
コミット差分を取得する。
Definition: CommitMessageGenerator.cpp:169
std::string generatePrompt() const
diffからAIへ送るプロンプト文字列を生成する。
Definition: CommitMessageGenerator.cpp:76
static Result parse_response(GenerativeAI::Model model, const AiResult &result)
AIレスポンスのJSON文字列を解析してコミットメッセージ候補を取り出す。
Definition: CommitMessageGenerator.cpp:29
Definition: GitRunner.h:13
std::string filename(std::string const &path)
Definition: misc.cpp:149
AIレスポンスの解析結果を保持する内部構造体
Definition: AiApiBridge.h:234
Definition: CommitMessageGenerator.h:15
CommitPair(std::string const &a, std::string const &b)
Definition: CommitMessageGenerator.h:19
std::string b
Definition: CommitMessageGenerator.h:17
std::string a
Definition: CommitMessageGenerator.h:16
Definition: CommitMessageGenerator.h:26
int max_message_count
Definition: CommitMessageGenerator.h:30
Request(std::string const &diff, std::string const &status_s_u, const std::string &hint)
Definition: CommitMessageGenerator.h:31
std::string diff
Definition: CommitMessageGenerator.h:27
std::string status_s_u
Definition: CommitMessageGenerator.h:28
std::string hint
Definition: CommitMessageGenerator.h:29
Definition: GenerativeAI.h:95