public static Dictionary GetEnvironment()

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);
        }