33 config.
provider = absl::AsciiStrToLower(absl::GetFlag(FLAGS_ai_provider));
34 config.
model = absl::GetFlag(FLAGS_ai_model);
36 config.
ollama_host = absl::GetFlag(FLAGS_ollama_host);
40 const char* env_key = std::getenv(
"GEMINI_API_KEY");
45 const char* openai_key = std::getenv(
"OPENAI_API_KEY");
50 if (config.
model.empty()) {
51 const char* env_model = std::getenv(
"OLLAMA_MODEL");
53 config.
model = env_model;
103 std::string provider = absl::AsciiStrToLower(config.
provider);
104 if (provider.empty() || provider ==
"auto") {
105 return absl::InvalidArgumentError(
106 "CreateAIServiceStrict requires an explicit provider (not 'auto')");
109 if (provider ==
"mock") {
110 return std::make_unique<MockAIService>();
113 if (provider ==
"ollama") {
116 if (!config.
model.empty()) {
118 }
else if (
const char* env_model = std::getenv(
"OLLAMA_MODEL")) {
119 ollama_config.
model = env_model;
122 return std::make_unique<OllamaAIService>(ollama_config);
125 if (provider ==
"gemini-cli" || provider ==
"local-gemini") {
126 return std::make_unique<LocalGeminiCliService>(
127 config.
model.empty() ?
"gemini-2.5-flash" : config.
model);
131 if (provider ==
"gemini") {
133 return absl::FailedPreconditionError(
134 "Gemini API key not provided. Set --gemini_api_key or "
138 if (!config.
model.empty()) {
141 gemini_config.
prompt_version = absl::GetFlag(FLAGS_prompt_version);
143 absl::GetFlag(FLAGS_use_function_calling);
145 return std::make_unique<GeminiAIService>(gemini_config);
147 if (provider ==
"openai") {
149 return absl::FailedPreconditionError(
150 "OpenAI API key not provided. Set OPENAI_API_KEY.");
153 if (!config.
model.empty()) {
156 openai_config.
prompt_version = absl::GetFlag(FLAGS_prompt_version);
158 absl::GetFlag(FLAGS_use_function_calling);
160 return std::make_unique<OpenAIAIService>(openai_config);
163 if (provider ==
"gemini") {
164 return absl::FailedPreconditionError(
165 "Gemini support not available: rebuild with YAZE_WITH_JSON=ON");
169 return absl::InvalidArgumentError(
170 absl::StrFormat(
"Unknown AI provider: %s", config.
provider));