35 config.
provider = absl::AsciiStrToLower(absl::GetFlag(FLAGS_ai_provider));
36 config.
model = absl::GetFlag(FLAGS_ai_model);
39 config.
ollama_host = absl::GetFlag(FLAGS_ollama_host);
43 const char* env_key = std::getenv(
"GEMINI_API_KEY");
48 const char* env_key = std::getenv(
"ANTHROPIC_API_KEY");
53 const char* openai_key = std::getenv(
"OPENAI_API_KEY");
58 if (config.
model.empty()) {
59 const char* env_model = std::getenv(
"OLLAMA_MODEL");
61 config.
model = env_model;
116 std::string provider = absl::AsciiStrToLower(config.
provider);
117 if (provider.empty() || provider ==
"auto") {
118 return absl::InvalidArgumentError(
119 "CreateAIServiceStrict requires an explicit provider (not 'auto')");
122 if (provider ==
"mock") {
123 return std::make_unique<MockAIService>();
126 if (provider ==
"ollama") {
129 if (!config.
model.empty()) {
131 }
else if (
const char* env_model = std::getenv(
"OLLAMA_MODEL")) {
132 ollama_config.
model = env_model;
135 return std::make_unique<OllamaAIService>(ollama_config);
138 if (provider ==
"gemini-cli" || provider ==
"local-gemini") {
139 return std::make_unique<LocalGeminiCliService>(
140 config.
model.empty() ?
"gemini-2.5-flash" : config.
model);
144 if (provider ==
"gemini") {
146 return absl::FailedPreconditionError(
147 "Gemini API key not provided. Set --gemini_api_key or "
151 if (!config.
model.empty()) {
154 gemini_config.
prompt_version = absl::GetFlag(FLAGS_prompt_version);
156 absl::GetFlag(FLAGS_use_function_calling);
158 return std::make_unique<GeminiAIService>(gemini_config);
160 if (provider ==
"anthropic") {
162 return absl::FailedPreconditionError(
163 "Anthropic API key not provided. Set --anthropic_api_key or "
164 "ANTHROPIC_API_KEY.");
167 if (!config.
model.empty()) {
170 anthropic_config.
prompt_version = absl::GetFlag(FLAGS_prompt_version);
172 absl::GetFlag(FLAGS_use_function_calling);
174 return std::make_unique<AnthropicAIService>(anthropic_config);
176 if (provider ==
"openai") {
178 return absl::FailedPreconditionError(
179 "OpenAI API key not provided. Set OPENAI_API_KEY.");
182 if (!config.
model.empty()) {
185 openai_config.
prompt_version = absl::GetFlag(FLAGS_prompt_version);
187 absl::GetFlag(FLAGS_use_function_calling);
189 return std::make_unique<OpenAIAIService>(openai_config);
192 if (provider ==
"gemini" || provider ==
"anthropic") {
193 return absl::FailedPreconditionError(
194 "AI support not available: rebuild with YAZE_WITH_JSON=ON");
198 return absl::InvalidArgumentError(
199 absl::StrFormat(
"Unknown AI provider: %s", config.
provider));