NeuralPlus 0.2.0
A small C++17 SDK for AI clients, sessions, tools, and tracing
Loading...
Searching...
No Matches
providers.hpp
Go to the documentation of this file.
1// Copyright 2026 Aniket Kulkarni
2// SPDX-License-Identifier: Apache-2.0
3
6
7#pragma once
8
10#include "neuralplus/export.hpp"
12#include "neuralplus/types.hpp"
13
14#include <memory>
15#include <optional>
16#include <string>
17#include <vector>
18
19namespace neuralplus {
20
24struct NEURALPLUS_API OpenAIConfig {
26 explicit OpenAIConfig(std::string model_id);
27
30
32 std::optional<std::string> api_key;
33
35 std::string base_url{"https://api.openai.com/v1"};
36
38 std::string organization;
39
41 std::string project;
42
44 std::vector<HttpHeader> extra_headers;
45};
46
50struct NEURALPLUS_API AnthropicConfig {
52 explicit AnthropicConfig(std::string model_id);
53
56
58 std::optional<std::string> api_key;
59
61 std::string base_url{"https://api.anthropic.com"};
62
64 std::string api_version{"2023-06-01"};
65
67 std::size_t default_max_output_tokens{1024};
68
70 std::vector<HttpHeader> extra_headers;
71};
72
76struct NEURALPLUS_API GeminiConfig {
78 explicit GeminiConfig(std::string model_id);
79
82
84 std::optional<std::string> api_key;
85
87 std::string base_url{"https://generativelanguage.googleapis.com/v1beta"};
88
90 std::vector<HttpHeader> extra_headers;
91};
92
96struct NEURALPLUS_API OpenAICompatibleConfig {
98 OpenAICompatibleConfig(std::string model_id, std::string base_url);
99
102
104 std::optional<std::string> api_key;
105
107 std::optional<std::string> api_key_environment;
108
110 std::string base_url;
111
113 std::vector<HttpHeader> extra_headers;
114};
115
117class NEURALPLUS_API OpenAIClient final : public AIClient {
118public:
120 explicit OpenAIClient(OpenAIConfig config,
121 const ClientOptions& options = {});
122 ~OpenAIClient() override;
123
124private:
125 OpenAIClient(const OpenAIClient&) = delete;
126 OpenAIClient& operator=(const OpenAIClient&) = delete;
127
128 AIResponse generate_once(const AIRequest& request) override;
129
130 class Impl;
131 std::unique_ptr<Impl> impl_;
132};
133
135class NEURALPLUS_API AnthropicClient final : public AIClient {
136public:
139 const ClientOptions& options = {});
140 ~AnthropicClient() override;
141
142private:
143 AnthropicClient(const AnthropicClient&) = delete;
144 AnthropicClient& operator=(const AnthropicClient&) = delete;
145
146 AIResponse generate_once(const AIRequest& request) override;
147
148 class Impl;
149 std::unique_ptr<Impl> impl_;
150};
151
153class NEURALPLUS_API GeminiClient final : public AIClient {
154public:
156 explicit GeminiClient(GeminiConfig config,
157 const ClientOptions& options = {});
158 ~GeminiClient() override;
159
160private:
161 GeminiClient(const GeminiClient&) = delete;
162 GeminiClient& operator=(const GeminiClient&) = delete;
163
164 AIResponse generate_once(const AIRequest& request) override;
165
166 class Impl;
167 std::unique_ptr<Impl> impl_;
168};
169
171class NEURALPLUS_API OpenAICompatibleClient final : public AIClient {
172public:
175 const ClientOptions& options = {});
176 ~OpenAICompatibleClient() override;
177
178private:
180 OpenAICompatibleClient& operator=(const OpenAICompatibleClient&) = delete;
181
182 AIResponse generate_once(const AIRequest& request) override;
183
184 class Impl;
185 std::unique_ptr<Impl> impl_;
186};
187
189[[nodiscard]] NEURALPLUS_API std::unique_ptr<AIClient>
190make_client(OpenAIConfig config, const ClientOptions& options = {});
191
193[[nodiscard]] NEURALPLUS_API std::unique_ptr<AIClient>
194make_client(AnthropicConfig config, const ClientOptions& options = {});
195
197[[nodiscard]] NEURALPLUS_API std::unique_ptr<AIClient>
198make_client(GeminiConfig config, const ClientOptions& options = {});
199
201[[nodiscard]] NEURALPLUS_API std::unique_ptr<AIClient>
203 const ClientOptions& options = {});
204
205} // namespace neuralplus
Definition client.hpp:61
Anthropic Messages API client.
Definition providers.hpp:135
AnthropicClient(AnthropicConfig config, const ClientOptions &options={})
Creates an Anthropic Messages API client.
Google Gemini generateContent API client.
Definition providers.hpp:153
GeminiClient(GeminiConfig config, const ClientOptions &options={})
Creates a Google Gemini generateContent client.
OpenAI Responses API client.
Definition providers.hpp:117
OpenAIClient(OpenAIConfig config, const ClientOptions &options={})
Creates an OpenAI Responses API client.
Generic OpenAI-compatible Chat Completions client.
Definition providers.hpp:171
OpenAICompatibleClient(OpenAICompatibleConfig config, const ClientOptions &options={})
Creates an OpenAI-compatible Chat Completions client.
NEURALPLUS_API std::unique_ptr< AIClient > make_client(OpenAIConfig config, const ClientOptions &options={})
Creates an OpenAI client. Credentials resolve as explicit value, environment, error.
Immutable snapshot passed to one provider round.
Definition types.hpp:372
Normalized response returned by both one provider round and the full tool loop.
Definition types.hpp:393
Definition providers.hpp:50
ModelDescriptor model
Model ID, capabilities, limits, and data-driven provider options.
Definition providers.hpp:55
std::optional< std::string > api_key
Explicit API key. When empty, ANTHROPIC_API_KEY is read once.
Definition providers.hpp:58
std::vector< HttpHeader > extra_headers
Additional or replacement headers; mark credential values sensitive.
Definition providers.hpp:70
AnthropicConfig(std::string model_id)
Creates Anthropic configuration for model_id.
Dependencies and behavior shared by all AIClient implementations.
Definition client.hpp:25
Definition providers.hpp:76
std::vector< HttpHeader > extra_headers
Additional or replacement headers; mark credential values sensitive.
Definition providers.hpp:90
ModelDescriptor model
Model ID, capabilities, limits, and data-driven provider options.
Definition providers.hpp:81
std::optional< std::string > api_key
Explicit key, otherwise GEMINI_API_KEY then GOOGLE_API_KEY is read once.
Definition providers.hpp:84
GeminiConfig(std::string model_id)
Creates Gemini configuration for model_id.
Data-driven model description; no C++ subclass is needed per model name.
Definition types.hpp:315
Definition providers.hpp:96
ModelDescriptor model
Model ID, capabilities, limits, and data-driven provider options.
Definition providers.hpp:101
OpenAICompatibleConfig(std::string model_id, std::string base_url)
Creates compatible-server configuration for a model and server root.
std::vector< HttpHeader > extra_headers
Additional or replacement headers; mark credential values sensitive.
Definition providers.hpp:113
std::string base_url
Server root, normally including /v1.
Definition providers.hpp:110
std::optional< std::string > api_key_environment
Optional environment-variable name used when api_key is absent.
Definition providers.hpp:107
std::optional< std::string > api_key
Optional explicit bearer token.
Definition providers.hpp:104
Definition providers.hpp:24
std::string organization
Optional OpenAI organization identifier.
Definition providers.hpp:38
std::vector< HttpHeader > extra_headers
Additional or replacement headers; mark credential values sensitive.
Definition providers.hpp:44
std::optional< std::string > api_key
Explicit API key. When empty, OPENAI_API_KEY is read once.
Definition providers.hpp:32
OpenAIConfig(std::string model_id)
Creates OpenAI configuration for model_id.
std::string project
Optional OpenAI project identifier.
Definition providers.hpp:41
ModelDescriptor model
Model ID, capabilities, limits, and data-driven provider options.
Definition providers.hpp:29