Coverage for intelligence_toolkit/tests/unit/AI/test_openai_configuration.py: 100%

85 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-16 13:41 -0300

1# Copyright (c) 2024 Microsoft Corporation. All rights reserved. 

2# Licensed under the MIT license. See LICENSE file in the project. 

3# 

4import os 

5from unittest.mock import patch 

6 

7import pytest 

8 

9from intelligence_toolkit.AI.defaults import ( 

10 DEFAULT_AZ_AUTH_TYPE, 

11 DEFAULT_EMBEDDING_MODEL, 

12 DEFAULT_EMBEDDING_MODEL_AZURE, 

13 DEFAULT_LLM_MAX_TOKENS, 

14 DEFAULT_LLM_MODEL, 

15 DEFAULT_OPENAI_VERSION, 

16 DEFAULT_TEMPERATURE, 

17) 

18from intelligence_toolkit.AI.openai_configuration import OpenAIConfiguration 

19 

20 

21@pytest.fixture 

22def clean_env(monkeypatch): 

23 """Remove all OpenAI-related environment variables for clean testing.""" 

24 env_vars = [ 

25 "OPENAI_TYPE", 

26 "AZURE_AUTH_TYPE", 

27 "AZURE_OPENAI_VERSION", 

28 "OPENAI_API_MODEL", 

29 "OPENAI_EMBEDDING_MODEL", 

30 "AZURE_OPENAI_ENDPOINT", 

31 "OPENAI_API_KEY", 

32 ] 

33 for var in env_vars: 

34 monkeypatch.delenv(var, raising=False) 

35 

36 

37def test_openai_configuration_initialization_defaults(clean_env): 

38 config = OpenAIConfiguration() 

39 

40 assert config.api_key == "" 

41 assert config.model == DEFAULT_LLM_MODEL 

42 assert config.api_base is None # Empty string becomes None via _non_blank 

43 assert config.api_version == DEFAULT_OPENAI_VERSION 

44 assert config.temperature == DEFAULT_TEMPERATURE 

45 assert config.max_tokens == DEFAULT_LLM_MAX_TOKENS 

46 assert config.az_auth_type == DEFAULT_AZ_AUTH_TYPE 

47 assert config.api_type == "OpenAI" 

48 assert config.embedding_model == DEFAULT_EMBEDDING_MODEL 

49 

50 

51def test_openai_configuration_initialization_with_config(): 

52 config_dict = { 

53 "api_key": "test_key_123", 

54 "model": "gpt-4", 

55 "api_base": "https://test.openai.azure.com", 

56 "api_version": "2023-05-15", 

57 "temperature": 0.7, 

58 "max_tokens": 2000, 

59 "az_auth_type": "Managed Identity", 

60 "api_type": "Azure OpenAI", 

61 "embedding_model": "text-embedding-ada-002", 

62 } 

63 

64 config = OpenAIConfiguration(config_dict) 

65 

66 assert config.api_key == "test_key_123" 

67 assert config.model == "gpt-4" 

68 assert config.api_base == "https://test.openai.azure.com" 

69 assert config.api_version == "2023-05-15" 

70 assert config.temperature == 0.7 

71 assert config.max_tokens == 2000 

72 assert config.az_auth_type == "Managed Identity" 

73 assert config.api_type == "Azure OpenAI" 

74 assert config.embedding_model == "text-embedding-ada-002" 

75 

76 

77def test_openai_configuration_from_environment(monkeypatch): 

78 monkeypatch.setenv("OPENAI_TYPE", "Azure OpenAI") 

79 monkeypatch.setenv("AZURE_AUTH_TYPE", "Managed Identity") 

80 monkeypatch.setenv("AZURE_OPENAI_VERSION", "2024-02-01") 

81 monkeypatch.setenv("OPENAI_API_MODEL", "gpt-4-turbo") 

82 monkeypatch.setenv("OPENAI_EMBEDDING_MODEL", "text-embedding-3-large") 

83 monkeypatch.setenv("AZURE_OPENAI_ENDPOINT", "https://my-resource.openai.azure.com/") 

84 monkeypatch.setenv("OPENAI_API_KEY", "env_api_key") 

85 

86 config = OpenAIConfiguration() 

87 

88 assert config.api_type == "Azure OpenAI" 

89 assert config.az_auth_type == "Managed Identity" 

90 assert config.api_version == "2024-02-01" 

91 assert config.model == "gpt-4-turbo" 

92 assert config.embedding_model == "text-embedding-3-large" 

93 assert config.api_base == "https://my-resource.openai.azure.com" 

94 assert config.api_key == "env_api_key" 

95 

96 

97def test_openai_configuration_api_base_trailing_slash_removal(): 

98 config_dict = { 

99 "api_base": "https://test.openai.azure.com/", 

100 } 

101 

102 config = OpenAIConfiguration(config_dict) 

103 assert config.api_base == "https://test.openai.azure.com" 

104 

105 

106def test_openai_configuration_api_base_no_trailing_slash(): 

107 config_dict = { 

108 "api_base": "https://test.openai.azure.com", 

109 } 

110 

111 config = OpenAIConfiguration(config_dict) 

112 assert config.api_base == "https://test.openai.azure.com" 

113 

114 

115def test_openai_configuration_blank_api_base(): 

116 config_dict = { 

117 "api_base": " ", 

118 } 

119 

120 config = OpenAIConfiguration(config_dict) 

121 assert config.api_base is None 

122 

123 

124def test_openai_configuration_blank_api_version(): 

125 config_dict = { 

126 "api_version": " ", 

127 } 

128 

129 config = OpenAIConfiguration(config_dict) 

130 assert config.api_version is None 

131 

132 

133def test_openai_configuration_azure_embedding_model_default(monkeypatch): 

134 monkeypatch.setenv("OPENAI_TYPE", "Azure OpenAI") 

135 monkeypatch.delenv("OPENAI_EMBEDDING_MODEL", raising=False) 

136 

137 config = OpenAIConfiguration() 

138 assert config.embedding_model == DEFAULT_EMBEDDING_MODEL_AZURE 

139 

140 

141def test_openai_configuration_openai_embedding_model_default(clean_env, monkeypatch): 

142 monkeypatch.setenv("OPENAI_TYPE", "OpenAI") 

143 

144 config = OpenAIConfiguration() 

145 assert config.embedding_model == DEFAULT_EMBEDDING_MODEL 

146 

147 

148def test_openai_configuration_properties_are_accessible(): 

149 config = OpenAIConfiguration() 

150 

151 # Test that all properties are accessible 

152 _ = config.api_key 

153 _ = config.model 

154 _ = config.api_base 

155 _ = config.api_version 

156 _ = config.temperature 

157 _ = config.max_tokens 

158 _ = config.embedding_model 

159 _ = config.api_type 

160 _ = config.az_auth_type