Guitar
GenerativeAI.h
Go to the documentation of this file.
1 #ifndef GENERATIVEAI_H
2 #define GENERATIVEAI_H
3 
4 #include <string>
5 #include <variant>
6 #include <vector>
7 
8 namespace GenerativeAI {
9 
10 struct Unknown {
11  std::string id() const { return "-"; }
12  std::string description() const { return "-"; }
13  std::string envname() const { return {}; }
14 };
15 
16 struct OpenAI {
17  std::string id() const { return "openai"; }
18  std::string description() const { return "OpenAI; GPT"; }
19  std::string envname() const { return "OPENAI_API_KEY"; }
20 };
21 
22 struct Anthropic {
23  std::string id() const { return "anthropic"; }
24  std::string description() const { return "Anthropic; Claude"; }
25  std::string envname() const { return "ANTHROPIC_API_KEY"; }
26 };
27 
28 struct Google {
29  std::string id() const { return "google"; }
30  std::string description() const { return "Google; Gemini"; }
31  std::string envname() const { return "GOOGLE_API_KEY"; }
32 };
33 
34 struct DeepSeek {
35  std::string id() const { return "deepseek"; }
36  std::string description() const { return "DeepSeek"; }
37  std::string envname() const { return "DEEPSEEK_API_KEY"; }
38 };
39 
40 struct OpenRouter {
41  std::string id() const { return "openrouter"; }
42  std::string description() const { return "OpenRouter"; }
43  std::string envname() const { return "OPENROUTER_API_KEY"; }
44 };
45 
46 struct Ollama {
47  std::string id() const { return "ollama"; }
48  std::string description() const { return "Ollama (experimental)"; }
49  std::string envname() const { return {}; }
50 };
51 
52 typedef std::variant<
53  Unknown,
54  OpenAI,
55  Anthropic,
56  Google,
57  DeepSeek,
58  OpenRouter,
59  Ollama // experimental
61 
62 static inline std::vector<Provider> all_providers()
63 {
64  return {
65  Unknown{},
66  OpenAI{},
67  Anthropic{},
68  Google{},
69  DeepSeek{},
70  OpenRouter{},
71  Ollama{} // experimental
72  };
73 }
74 
75 struct Credential {
76  std::string api_key;
77 };
78 
79 struct Model {
81  std::string long_name_;
82  std::string model_name_;
83  std::string host_;
84  std::string port_;
85  Model() = default;
86  explicit Model(Provider const &provider, std::string const &model_uri);
87  void operator = (std::string const &) = delete;
88 
89  void parse_model(std::string const &name);
90 
91  std::string long_name() const
92  {
93  return long_name_;
94  }
95 
96  std::string model_name() const
97  {
98  return model_name_;
99  }
100 
101  std::string host() const
102  {
103  return host_;
104  }
105 
106  std::string port() const
107  {
108  return port_;
109  }
110 
111  static Model from_name(std::string const &name);
112  static std::string default_model();
113 };
114 
115 struct Request {
116  std::string endpoint_url;
117  std::string model;
118  std::vector<std::string> header;
119 };
120 
121 static inline std::string provider_id(Provider const &provider)
122 {
123  return std::visit([](auto const &p) { return p.id(); }, provider);
124 }
125 
126 static inline std::string provider_description(Provider const &provider)
127 {
128  return std::visit([](auto const &p) { return p.description(); }, provider);
129 }
130 
131 static inline std::string env_name(Provider const &provider)
132 {
133  return std::visit([](auto const &p) { return p.envname(); }, provider);
134 }
135 
136 Request make_request(Provider const &provider, Model const &model, Credential const &auth);
137 
138 std::vector<Model> available_models();
139 
140 } // namespace GenerativeAI
141 
142 #endif // GENERATIVEAI_H
Definition: GenerativeAI.cpp:9
std::variant< Unknown, OpenAI, Anthropic, Google, DeepSeek, OpenRouter, Ollama > Provider
Definition: GenerativeAI.h:60
static std::string provider_description(Provider const &provider)
Definition: GenerativeAI.h:126
static std::vector< Provider > all_providers()
Definition: GenerativeAI.h:62
Request make_request(Provider const &provider, const Model &model, Credential const &cred)
Definition: GenerativeAI.cpp:175
static std::string env_name(Provider const &provider)
Definition: GenerativeAI.h:131
std::vector< Model > available_models()
Definition: GenerativeAI.cpp:11
static std::string provider_id(Provider const &provider)
Definition: GenerativeAI.h:121
Definition: GenerativeAI.h:22
std::string description() const
Definition: GenerativeAI.h:24
std::string id() const
Definition: GenerativeAI.h:23
std::string envname() const
Definition: GenerativeAI.h:25
Definition: GenerativeAI.h:75
std::string api_key
Definition: GenerativeAI.h:76
Definition: GenerativeAI.h:34
std::string description() const
Definition: GenerativeAI.h:36
std::string envname() const
Definition: GenerativeAI.h:37
std::string id() const
Definition: GenerativeAI.h:35
Definition: GenerativeAI.h:28
std::string envname() const
Definition: GenerativeAI.h:31
std::string description() const
Definition: GenerativeAI.h:30
std::string id() const
Definition: GenerativeAI.h:29
Definition: GenerativeAI.h:79
std::string port_
Definition: GenerativeAI.h:84
std::string model_name() const
Definition: GenerativeAI.h:96
static Model from_name(std::string const &name)
Definition: GenerativeAI.cpp:66
void operator=(std::string const &)=delete
std::string host() const
Definition: GenerativeAI.h:101
static std::string default_model()
Definition: GenerativeAI.cpp:27
std::string long_name() const
Definition: GenerativeAI.h:91
void parse_model(std::string const &name)
Definition: GenerativeAI.cpp:38
std::string model_name_
Definition: GenerativeAI.h:82
Provider provider
Definition: GenerativeAI.h:80
std::string host_
Definition: GenerativeAI.h:83
std::string port() const
Definition: GenerativeAI.h:106
std::string long_name_
Definition: GenerativeAI.h:81
Definition: GenerativeAI.h:46
std::string envname() const
Definition: GenerativeAI.h:49
std::string id() const
Definition: GenerativeAI.h:47
std::string description() const
Definition: GenerativeAI.h:48
Definition: GenerativeAI.h:16
std::string envname() const
Definition: GenerativeAI.h:19
std::string description() const
Definition: GenerativeAI.h:18
std::string id() const
Definition: GenerativeAI.h:17
Definition: GenerativeAI.h:40
std::string description() const
Definition: GenerativeAI.h:42
std::string envname() const
Definition: GenerativeAI.h:43
std::string id() const
Definition: GenerativeAI.h:41
Definition: GenerativeAI.h:115
std::string model
Definition: GenerativeAI.h:117
std::vector< std::string > header
Definition: GenerativeAI.h:118
std::string endpoint_url
Definition: GenerativeAI.h:116
Definition: GenerativeAI.h:10
std::string envname() const
Definition: GenerativeAI.h:13
std::string description() const
Definition: GenerativeAI.h:12
std::string id() const
Definition: GenerativeAI.h:11