Skip to content

Commit 3bc8de1

Browse files
authored
Use openai v1 env var in data index (#34064)
* use openai v1 env var * use the correct pkg_version in _mlindex.py * change in _models.py * update changelog * update changelogs
1 parent 00582a8 commit 3bc8de1

File tree

11 files changed

+62
-64
lines changed

11 files changed

+62
-64
lines changed

sdk/ai/azure-ai-generative/CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
### Other Changes
1010

1111
- Switched evaluate() function to run on promptflow engine
12+
- Use openai v1 environment variable
1213

1314
## 1.0.0b3 (2024-01-30)
1415

@@ -19,7 +20,8 @@
1920
## 1.0.0b2 (2023-11-30)
2021

2122
### Features Added
22-
- Added new format to export data to in qa generator.
23+
24+
- Added new format to export data to in qa generator.
2325

2426
### Other Changes
2527

@@ -28,6 +30,7 @@
2830
## 1.0.0b1 (2023-11-10)
2931

3032
### Features Added
33+
3134
- Try use langchain VectorStore and fallback to vendor.
3235
- Add azure-search-documents 11.4.0b11 and above support.
3336
- Invoke OpenAI with dynamic batch size.

sdk/ai/azure-ai-generative/azure/ai/generative/index/_build_mlindex.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from pathlib import Path
66
from typing import Dict, Optional, Union
7+
from packaging import version
78

89
import yaml # type: ignore[import]
910

@@ -89,10 +90,16 @@ def build_index(
8990
"endpoint": aoai_connection["properties"]["target"]
9091
}
9192
else:
93+
import openai
94+
api_key = "OPENAI_API_KEY"
95+
api_base = "OPENAI_API_BASE"
96+
if version.parse(openai.version.VERSION) >= version.parse("1.0.0"):
97+
api_key = "AZURE_OPENAI_KEY"
98+
api_base = "AZURE_OPENAI_ENDPOINT"
9299
connection_args = {
93100
"connection_type": "environment",
94-
"connection": {"key": "OPENAI_API_KEY"},
95-
"endpoint": os.getenv("OPENAI_API_BASE"),
101+
"connection": {"key": api_key},
102+
"endpoint": os.getenv(api_base),
96103
}
97104
embedder = EmbeddingsContainer.from_uri(
98105
uri=embeddings_model,

sdk/ai/azure-ai-generative/azure/ai/generative/index/_embeddings/__init__.py

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -32,53 +32,6 @@
3232

3333
logger = get_logger(__name__)
3434

35-
36-
def _args_to_openai_embedder(arguments: dict):
37-
import openai
38-
from azure.ai.generative.index._langchain.vendor.embeddings.openai import OpenAIEmbeddings
39-
from azure.ai.generative.index._utils.logging import langchain_version
40-
41-
arguments = init_open_ai_from_config(arguments, credential=None)
42-
43-
if langchain_version > "0.0.154":
44-
embedder = OpenAIEmbeddings(
45-
openai_api_base=arguments.get("api_base", openai.api_base if hasattr(openai, "api_base") else openai.base_url),
46-
openai_api_type=arguments.get("api_type", openai.api_type),
47-
openai_api_version=arguments.get("api_version", openai.api_version),
48-
openai_api_key=arguments.get("api_key", openai.api_key),
49-
max_retries=100, # TODO: Make this configurable
50-
)
51-
else:
52-
if hasattr(openai, "api_base"):
53-
openai.api_base = arguments.get("api_base", openai.api_base)
54-
else:
55-
openai.base_url = arguments.get("api_base", openai.base_url)
56-
openai.api_type = arguments.get("api_type", openai.api_type)
57-
openai.api_version = arguments.get("api_version", openai.api_version)
58-
embedder = OpenAIEmbeddings(
59-
openai_api_key=arguments.get("api_key", openai.api_key),
60-
max_retries=100, # TODO: Make this configurable
61-
)
62-
63-
if "model_name" in arguments:
64-
embedder.model = arguments["model_name"]
65-
66-
if "model" in arguments:
67-
embedder.model = arguments["model"]
68-
69-
# Embeddings endpoint for AOAI uses deployment name and no model name.
70-
if "deployment" in arguments and hasattr(embedder, "deployment"):
71-
embedder.deployment = arguments["deployment"]
72-
73-
if "batch_size" in arguments:
74-
embedder.chunk_size = int(arguments["batch_size"])
75-
76-
if "embedding_ctx_length" in arguments:
77-
embedder.embedding_ctx_length = arguments["embedding_ctx_length"]
78-
79-
return embedder
80-
81-
8235
def get_langchain_embeddings(embedding_kind: str, arguments: dict, credential: Optional[TokenCredential] = None) -> Union[OpenAIEmbedder, Embedder]:
8336
"""Get an instance of Embedder from the given arguments."""
8437
if "open_ai" in embedding_kind:

sdk/ai/azure-ai-generative/azure/ai/generative/index/_mlindex.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,10 +634,16 @@ def from_documents(
634634
else embeddings_connection["properties"]["target"], # type: ignore[index]
635635
}
636636
else:
637+
import openai
638+
api_key = "OPENAI_API_KEY"
639+
api_base = "OPENAI_API_BASE"
640+
if pkg_version.parse(openai.version.VERSION) >= pkg_version.parse("1.0.0"):
641+
api_key = "AZURE_OPENAI_KEY"
642+
api_base = "AZURE_OPENAI_ENDPOINT"
637643
connection_args = {
638644
"connection_type": "environment",
639-
"connection": {"key": "OPENAI_API_KEY"},
640-
"endpoint": os.getenv("OPENAI_API_BASE"),
645+
"connection": {"key": api_key},
646+
"endpoint": os.getenv(api_base),
641647
}
642648
if os.getenv("OPENAI_API_TYPE"):
643649
connection_args["api_type"] = os.getenv("OPENAI_API_TYPE")

sdk/ai/azure-ai-generative/azure/ai/generative/index/_models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,17 @@ def init_open_ai_from_config(config: dict, credential: Optional[TokenCredential]
129129
config["api_type"] = "azure_ad"
130130
except Exception as e:
131131
if "OPENAI_API_KEY" in os.environ:
132-
logger.warning(f"Failed to get credential for ACS with {e}, falling back to env vars.")
132+
logger.warning(f"Failed to get credential for ACS with {e}, falling back to openai 0.x env vars.")
133133
config["api_key"] = os.environ["OPENAI_API_KEY"]
134134
config["api_type"] = os.environ.get("OPENAI_API_TYPE", "azure")
135135
config["api_base"] = os.environ.get("OPENAI_API_BASE", openai.api_base if hasattr(openai, "api_base") else openai.base_url)
136136
config["api_version"] = os.environ.get("OPENAI_API_VERSION", openai.api_version)
137+
elif "AZURE_OPENAI_KEY" in os.environ:
138+
logger.warning(f"Failed to get credential for ACS with {e}, falling back to openai 1.x env vars.")
139+
config["api_key"] = os.environ["AZURE_OPENAI_KEY"]
140+
config["api_type"] = os.environ.get("OPENAI_API_TYPE", "azure")
141+
config["azure_endpoint"] = os.environ.get("AZURE_OPENAI_ENDPOINT")
142+
config["api_version"] = os.environ.get("OPENAI_API_VERSION", openai.api_version)
137143
else:
138144
raise e
139145

sdk/ai/azure-ai-generative/azure/ai/generative/synthetic/qa.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import time
1212
from enum import Enum
1313
from functools import lru_cache
14+
from packaging import version
1415
from typing import Dict, List, Tuple, Any, Union, Optional
1516
from collections import defaultdict
1617
from azure.ai.resources.entities import BaseConnection
@@ -155,13 +156,19 @@ class QADataGenerator:
155156
_PARSING_ERR_FIRST_LINE = "Parsing error: First line must be a question"
156157

157158
def __init__(self, model_config: Dict, **kwargs: Any):
158-
"""Initialize QADataGenerator using Azure OpenAI details."""
159+
"""Initialize QADataGenerator using Azure OpenAI details."""
160+
import openai
161+
api_key = "OPENAI_API_KEY"
162+
api_base = "OPENAI_API_BASE"
163+
if version.parse(openai.version.VERSION) >= version.parse("1.0.0"):
164+
api_key = "AZURE_OPENAI_KEY"
165+
api_base = "AZURE_OPENAI_ENDPOINT"
159166
self._chat_completion_params = dict(
160167
# AOAI connection params
161168
api_type=model_config["api_type"] if "api_type" in model_config else os.getenv("OPENAI_API_TYPE", "azure"),
162169
api_version=model_config["api_version"] if "api_version" in model_config else os.getenv("OPENAI_API_VERSION", _DEFAULT_AOAI_VERSION),
163-
api_base=model_config["api_base"] if "api_base" in model_config else os.getenv("OPENAI_API_BASE"),
164-
api_key=model_config["api_key"] if "api_key" in model_config else os.getenv("OPENAI_API_KEY"),
170+
api_base=model_config["api_base"] if "api_base" in model_config else os.getenv(api_base),
171+
api_key=model_config["api_key"] if "api_key" in model_config else os.getenv(api_key),
165172

166173
# AOAI model params
167174
deployment_id=model_config["deployment"],

sdk/ai/azure-ai-generative/samples/ai_samples_evaluate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def sample_chat(question):
4747
},
4848
model_config={
4949
"api_version": "2023-05-15",
50-
"api_base": os.getenv("OPENAI_API_BASE"),
50+
"api_base": os.getenv("AZURE_OPENAI_ENDPOINT"),
5151
"api_type": "azure",
52-
"api_key": os.getenv("OPENAI_API_KEY"),
52+
"api_key": os.getenv("AZURE_OPENAI_KEY"),
5353
"deployment_id": os.getenv("AZURE_OPENAI_EVALUATION_DEPLOYMENT")
5454
},
5555
tracking_uri=client.tracking_uri,

sdk/ai/azure-ai-generative/tests/conftest.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from azure.ai.generative.synthetic.qa import QADataGenerator
88

99
import pytest
10+
from packaging import version
1011
from devtools_testutils import (
1112
FakeTokenCredential,
1213
add_body_key_sanitizer,
@@ -128,6 +129,8 @@ def sanitized_environment_variables(
128129
"AI_TEST_STORAGE_ACCOUNT_SECONDARY_KEY": fake_datastore_key,
129130
"OPENAI_API_BASE": "fake_openai_api_base",
130131
"OPENAI_API_KEY": "fake_openai_api_key",
132+
"AZURE_OPENAI_ENDPOINT": "fake_openai_api_base",
133+
"AZURE_OPENAI_KEY": "fake_openai_api_key",
131134
"AI_OPENAI_COMPLETION_DEPLOYMENT_NAME": "fake_completion_deployment_name",
132135
"AI_OPENAI_COMPLETION_MODEL_NAME": "fake_completion_model_name"
133136
}
@@ -160,12 +163,14 @@ def e2e_project_name(sanitized_environment_variables: Dict[str, str]) -> str:
160163
@pytest.fixture()
161164
def e2e_openai_api_base(sanitized_environment_variables: Dict[str, str]) -> str:
162165
"""Return the OpenAI API Base to use for end-to-end tests"""
163-
return sanitized_environment_variables["OPENAI_API_BASE"]
166+
import openai
167+
return sanitized_environment_variables["OPENAI_API_BASE"] if version.parse(openai.version.VERSION) >= version.parse("1.0.0") else sanitized_environment_variables["AZURE_OPENAI_ENDPOINT"]
164168

165169
@pytest.fixture()
166170
def e2e_openai_api_key(sanitized_environment_variables: Dict[str, str]) -> str:
167171
"""Return the OpenAI API Key to use for end-to-end tests"""
168-
return sanitized_environment_variables["OPENAI_API_KEY"]
172+
import openai
173+
return sanitized_environment_variables["OPENAI_API_KEY"] if version.parse(openai.version.VERSION) >= version.parse("1.0.0") else sanitized_environment_variables["AZURE_OPENAI_KEY"]
169174

170175
@pytest.fixture()
171176
def e2e_openai_completion_deployment_name(sanitized_environment_variables: Dict[str, str]) -> str:

sdk/ai/azure-ai-resources/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
### Other Changes
1212

13+
- Use openai v1 environment variable
14+
1315
## 1.0.0b3 (2024-01-30)
1416

1517
### Features Added

sdk/ai/azure-ai-resources/azure/ai/resources/_index/_models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,16 @@ def init_open_ai_from_config(config: dict, credential: Optional[TokenCredential]
117117
config["api_type"] = "azure_ad"
118118
except Exception as e:
119119
if "OPENAI_API_KEY" in os.environ:
120-
logger.warning(f"Failed to get credential for ACS with {e}, falling back to env vars.")
120+
logger.warning(f"Failed to get credential for ACS with {e}, falling back to openai 0.x env vars.")
121121
config["api_key"] = os.environ["OPENAI_API_KEY"]
122122
config["api_type"] = os.environ.get("OPENAI_API_TYPE", "azure")
123123
config["api_base"] = os.environ.get("OPENAI_API_BASE", openai.api_base if hasattr(openai, "api_base") else openai.base_url)
124124
config["api_version"] = os.environ.get("OPENAI_API_VERSION", openai.api_version)
125+
elif "AZURE_OPENAI_KEY" in os.environ:
126+
logger.warning(f"Failed to get credential for ACS with {e}, falling back to openai 1.x env vars.")
127+
config["api_key"] = os.environ["AZURE_OPENAI_KEY"]
128+
config["azure_endpoint"] = os.environ.get("AZURE_OPENAI_ENDPOINT")
129+
config["api_version"] = os.environ.get("OPENAI_API_VERSION", openai.api_version)
125130
else:
126131
raise e
127132

0 commit comments

Comments
 (0)