Guitar
GenerativeAI.h
Go to the documentation of this file.
1 #ifndef GENERATIVEAI_H
2 #define GENERATIVEAI_H
3 
4 #include <string>
5 #include <vector>
6 
7 namespace GenerativeAI {
8 
9 enum class AI {
10  Unknown,
11  OpenAI,
12  Anthropic,
13  Google,
14  DeepSeek,
15  OpenRouter,
16  Ollama, // experimental
17  LMStudio // experimental
18 };
19 
20 template <typename T> class AbstractVisitor {
21 public:
22  virtual ~AbstractVisitor() = default;
23 
24  virtual T case_Unknown() = 0;
25  virtual T case_OpenAI() = 0;
26  virtual T case_Anthropic() = 0;
27  virtual T case_Google() = 0;
28  virtual T case_DeepSeek() = 0;
29  virtual T case_OpenRouter() = 0;
30  virtual T case_Ollama() = 0;
31  virtual T case_LMStudio() = 0;
32 
33  T visit(AI provider)
34  {
35  switch (provider) {
36  case AI::Unknown: return case_Unknown();
37  case AI::OpenAI: return case_OpenAI();
38  case AI::Anthropic: return case_Anthropic();
39  case AI::Google: return case_Google();
40  case AI::DeepSeek: return case_DeepSeek();
41  case AI::OpenRouter: return case_OpenRouter();
42  case AI::Ollama: return case_Ollama();
43  case AI::LMStudio: return case_LMStudio();
44  }
45  return case_Unknown();
46  }
47 };
48 
49 struct ProviderInfo {
51  std::string tag;
52  std::string description;
53  std::string env_name;
54 };
55 
56 std::vector<ProviderInfo> const &provider_table();
57 ProviderInfo const *provider_info(AI ai);
58 
59 struct Credential {
60  std::string api_key;
61 };
62 
63 struct Model {
64  ProviderInfo const *provider_info_ = nullptr;
65  std::string long_name_;
66  std::string model_name_;
67  std::string host_;
68  std::string port_;
71  {}
72  Model(AI provider, const std::string &model_uri);
73  void operator = (std::string const &) = delete;
74 
75  void parse_model(std::string const &name);
76 
77  AI provider_id() const
78  {
80  }
81 
82  std::string long_name() const
83  {
84  return long_name_;
85  }
86 
87  std::string model_name() const
88  {
89  return model_name_;
90  }
91 
92  std::string host() const
93  {
94  return host_;
95  }
96 
97  std::string port() const
98  {
99  return port_;
100  }
101 
102  static Model from_name(std::string const &name);
103  static std::string default_model();
104 };
105 
106 struct Request {
107  std::string endpoint_url;
108  std::string model_name;
109  std::vector<std::string> header;
110 };
111 
112 Request make_request(AI provider, Model const &model, Credential const &auth);
113 
114 std::vector<Model> const &ai_model_presets();
115 
116 } // namespace GenerativeAI
117 
118 #endif // GENERATIVEAI_H
Definition: GenerativeAI.h:20
T visit(AI provider)
Definition: GenerativeAI.h:33
virtual ~AbstractVisitor()=default
Definition: GenerativeAI.cpp:8
Request make_request(AI provider, const Model &model, Credential const &cred)
Definition: GenerativeAI.cpp:207
const std::vector< ProviderInfo > & provider_table()
Definition: GenerativeAI.cpp:10
AI
Definition: GenerativeAI.h:9
std::vector< Model > const & ai_model_presets()
Definition: GenerativeAI.cpp:25
const ProviderInfo * provider_info(AI ai)
Definition: GenerativeAI.cpp:44
Definition: GenerativeAI.h:59
std::string api_key
Definition: GenerativeAI.h:60
Definition: GenerativeAI.h:63
std::string port_
Definition: GenerativeAI.h:68
std::string model_name() const
Definition: GenerativeAI.h:87
static Model from_name(std::string const &name)
Definition: GenerativeAI.cpp:101
void operator=(std::string const &)=delete
std::string host() const
Definition: GenerativeAI.h:92
ProviderInfo const * provider_info_
Definition: GenerativeAI.h:64
static std::string default_model()
Definition: GenerativeAI.cpp:56
std::string long_name() const
Definition: GenerativeAI.h:82
void parse_model(std::string const &name)
Definition: GenerativeAI.cpp:67
std::string model_name_
Definition: GenerativeAI.h:66
AI provider_id() const
Definition: GenerativeAI.h:77
std::string host_
Definition: GenerativeAI.h:67
std::string port() const
Definition: GenerativeAI.h:97
Model()
Definition: GenerativeAI.h:69
std::string long_name_
Definition: GenerativeAI.h:65
Definition: GenerativeAI.h:49
std::string tag
Definition: GenerativeAI.h:51
AI provider
Definition: GenerativeAI.h:50
std::string env_name
Definition: GenerativeAI.h:53
std::string description
Definition: GenerativeAI.h:52
Definition: GenerativeAI.h:106
std::vector< std::string > header
Definition: GenerativeAI.h:109
std::string endpoint_url
Definition: GenerativeAI.h:107
std::string model_name
Definition: GenerativeAI.h:108