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