in src/ai/helpers/config_environment_helpers.cs [17:95]
public static Dictionary<string, string> GetEnvironment(INamedValues values)
{
var env = new Dictionary<string, string>();
env.Add("AZURE_SUBSCRIPTION_ID", ReadConfig(values, "subscription"));
#if USE_PYTHON_HUB_PROJECT_CONNECTION_OR_RELATED
env.Add("AZURE_RESOURCE_GROUP", ReadConfig(values, "group"));
env.Add("AZURE_AI_PROJECT_NAME", ReadConfig(values, "project"));
env.Add("AZURE_AI_RESOURCE_NAME", ReadConfig(values, "resource"));
#endif
var endpointType = ReadConfig(values, "chat.endpoint.type");
var endpointTypeIsInference = endpointType == "inference";
if (endpointTypeIsInference)
{
env.Add("OPENAI_API_KEY", ReadConfig(values, "chat.key"));
env.Add("OPENAI_BASE_URL", ReadConfig(values, "chat.endpoint"));
env.Add("OPENAI_MODEL_NAME", ReadConfig(values, "chat.model"));
env.Add("AZURE_AI_CHAT_API_KEY", ReadConfig(values, "chat.key"));
env.Add("AZURE_AI_CHAT_ENDPOINT", ReadConfig(values, "chat.endpoint"));
env.Add("AZURE_AI_CHAT_MODEL", ReadConfig(values, "chat.model"));
}
else
{
env.Add("AZURE_OPENAI_KEY", ReadConfig(values, "chat.key"));
env.Add("AZURE_OPENAI_API_KEY", ReadConfig(values, "chat.key"));
env.Add("AZURE_OPENAI_API_VERSION", ChatCommand.GetOpenAIClientVersionNumber());
env.Add("AZURE_OPENAI_ENDPOINT", ReadConfig(values, "chat.endpoint"));
env.Add("AZURE_OPENAI_CHAT_DEPLOYMENT", ReadConfig(values, "chat.deployment"));
env.Add("AZURE_OPENAI_REALTIME_DEPLOYMENT", ReadConfig(values, "chat.realtime.model.deployment.name") ?? ReadConfig(values, "chat.deployment"));
env.Add("AZURE_OPENAI_EMBEDDING_DEPLOYMENT", ReadConfig(values, "search.embedding.model.deployment.name"));
env.Add("AZURE_OPENAI_CHAT_MODEL", ReadConfig(values, "chat.model"));
env.Add("AZURE_OPENAI_REALTIME_MODEL", ReadConfig(values, "chat.realtime.model.name") ?? ReadConfig(values, "chat.model"));
env.Add("AZURE_OPENAI_EMBEDDING_MODEL", ReadConfig(values, "search.embedding.model.name"));
}
env.Add("AZURE_AI_SEARCH_ENDPOINT", ReadConfig(values, "search.endpoint"));
env.Add("AZURE_AI_SEARCH_INDEX_NAME", ReadConfig(values, "search.index.name"));
env.Add("AZURE_AI_SEARCH_KEY", ReadConfig(values, "search.key"));
env.Add("AZURE_AI_SPEECH_ENDPOINT", ReadConfig(values, "speech.endpoint"));
env.Add("AZURE_AI_SPEECH_KEY", ReadConfig(values, "speech.key"));
env.Add("AZURE_AI_SPEECH_REGION", ReadConfig(values, "speech.region"));
// Assistants API
env.Add("ASSISTANT_ID", ReadConfig(values, "assistant.id"));
env.Add("VECTOR_STORE_ID", ReadConfig(values, "vector.store.id"));
// Cognitive Search SDK (non-standard, will be removed at some point)
env.Add("AZURE_COGNITIVE_SEARCH_TARGET", env["AZURE_AI_SEARCH_ENDPOINT"]);
env.Add("AZURE_COGNITIVE_SEARCH_KEY", env["AZURE_AI_SEARCH_KEY"]);
// Add a few environment variables that `ai` doesn't "control", but will re-populate into the environment
env.Add("AZURE_CLIENT_ID", null);
env.Add("AZURE_TENANT_ID", null);
env.Add("AZURE_OPENAI_SYSTEM_PROMPT", null);
env.TryAdd("OPENAI_API_KEY", null);
env.TryAdd("OPENAI_BASE_URL", null);
env.TryAdd("OPENAI_MODEL_NAME", null);
env.TryAdd("OPENAI_ORG_ID", null);
env.Add("AZURE_AI_INFERENCE_CHAT_API_KEY", null);
env.Add("AZURE_AI_INFERENCE_CHAT_ENDPOINT", null);
// For each key, if it's already in the environment, use that value instead
foreach (var key in env.Keys.ToList())
{
var value = Environment.GetEnvironmentVariable(key);
if (!string.IsNullOrEmpty(value))
{
env[key] = value;
}
}
return env.Where(x => !string.IsNullOrEmpty(x.Value)).ToDictionary(x => x.Key, x => x.Value);
}