Skip to content

Commit 5a3ab93

Browse files
authored
[ai] Add client info to headers for OpenAI classes (#33820)
* Add client info to headers for OpenAI classes * Remove unused argument * Change '/' delimeter to space * Only log client header, create constant for header field name * Create constant in azure-ai-generative to avoid ImportError from azure-ai-resources
1 parent 1fcd424 commit 5a3ab93

File tree

7 files changed

+34
-4
lines changed

7 files changed

+34
-4
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# ---------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# ---------------------------------------------------------
4+
5+
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# ---------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# ---------------------------------------------------------
4+
5+
USER_AGENT_HEADER_KEY = "Client-User-Agent"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import time
77
from typing import Any, Dict, List, Optional
88

9+
from azure.ai.resources.constants._common import USER_AGENT_HEADER_KEY
10+
from azure.ai.generative._user_agent import USER_AGENT
911
from azure.ai.generative.index._utils.logging import get_logger
1012
from packaging import version
1113

@@ -77,11 +79,13 @@ def __init__(
7779
api_key=self.api_key,
7880
api_version=self.api_version,
7981
azure_endpoint=self.api_base,
82+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
8083
)
8184
else:
8285
client = openai.OpenAI(
8386
api_key=self.api_key,
8487
base_url=self.api_base,
88+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
8589
)
8690

8791
self.embedding_client = client.embeddings

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
from typing import Dict, Optional, Union
99

1010
from azure.core.credentials import TokenCredential
11+
from azure.ai.generative.constants._common import USER_AGENT_HEADER_KEY
1112
from azure.ai.generative.index._utils.connections import (
1213
connection_to_credential,
1314
get_connection_by_id_v2,
1415
get_connection_credential,
1516
)
1617
from azure.ai.generative.index._utils.logging import get_logger
18+
from azure.ai.generative._user_agent import USER_AGENT
1719

1820
try:
1921
from azure.ai.resources.entities import BaseConnection
@@ -171,6 +173,7 @@ def init_llm(model_config: dict, **kwargs):
171173
openai_api_type=model_config.get("api_type"),
172174
openai_api_version=model_config.get("api_version"),
173175
max_retries=model_config.get("max_retries", 3),
176+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
174177
**kwargs
175178
) # type: ignore
176179
if model_config.get("temperature", None) is not None:
@@ -185,6 +188,7 @@ def init_llm(model_config: dict, **kwargs):
185188
model_kwargs=model_kwargs,
186189
openai_api_key=model_config.get("api_key"),
187190
max_retries=model_config.get("max_retries", 3),
191+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
188192
**kwargs
189193
) # type: ignore
190194
if model_config.get("temperature", None) is not None:
@@ -197,6 +201,7 @@ def init_llm(model_config: dict, **kwargs):
197201
max_tokens=model_config.get("max_tokens"),
198202
model_kwargs=model_kwargs,
199203
openai_api_key=model_config.get("api_key"),
204+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
200205
**kwargs
201206
) # type: ignore
202207
if model_config.get("temperature", None) is not None:

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
from typing import Dict, List, Tuple, Any, Union, Optional
1515
from collections import defaultdict
1616
from azure.ai.resources.entities import BaseConnection
17+
from azure.ai.generative.constants._common import USER_AGENT_HEADER_KEY
1718
from azure.identity import DefaultAzureCredential
1819
from azure.ai.generative._telemetry import ActivityType, monitor_with_activity, ActivityLogger
1920
from azure.core.tracing.decorator import distributed_trace
21+
from azure.ai.generative._user_agent import USER_AGENT
2022
except ImportError as e:
2123
print("In order to use qa, please install the 'qa_generation' extra of azure-ai-generative")
2224
raise e
@@ -64,13 +66,15 @@ def _completion_with_retries(*args, **kwargs):
6466
client = AzureOpenAI(
6567
azure_endpoint = kwargs["api_base"],
6668
api_key=kwargs["api_key"],
67-
api_version=kwargs["api_version"]
69+
api_version=kwargs["api_version"],
70+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
6871
)
6972
response = client.chat.completions.create(messages=kwargs["messages"], model=kwargs["deployment_id"], temperature=kwargs["temperature"], max_tokens=kwargs["max_tokens"])
7073
else:
7174
from openai import OpenAI
7275
client = OpenAI(
73-
api_key=kwargs["api_key"],
76+
api_key=kwargs["api_key"],
77+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
7478
)
7579
response = client.chat.completions.create(messages=kwargs["messages"], model=kwargs["model"], temperature=kwargs["temperature"], max_tokens=kwargs["max_tokens"])
7680
return response.choices[0].message.content, dict(response.usage)
@@ -97,13 +101,15 @@ async def _completion_with_retries_async(*args, **kwargs):
97101
client = AsyncAzureOpenAI(
98102
azure_endpoint = kwargs["api_base"],
99103
api_key=kwargs["api_key"],
100-
api_version=kwargs["api_version"]
104+
api_version=kwargs["api_version"],
105+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
101106
)
102107
response = await client.chat.completions.create(messages=kwargs["messages"], model=kwargs["deployment_id"], temperature=kwargs["temperature"], max_tokens=kwargs["max_tokens"])
103108
else:
104109
from openai import AsyncOpenAI
105110
client = AsyncOpenAI(
106-
api_key=kwargs["api_key"],
111+
api_key=kwargs["api_key"],
112+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
107113
)
108114
response = await client.chat.completions.create(messages=kwargs["messages"], model=kwargs["model"], temperature=kwargs["temperature"], max_tokens=kwargs["max_tokens"])
109115
return response.choices[0].message.content, dict(response.usage)

sdk/ai/azure-ai-resources/azure/ai/resources/_index/_embeddings/openai.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import time
77
from typing import Any, Dict, List, Optional
88

9+
from azure.ai.resources.constants._common import USER_AGENT_HEADER_KEY
10+
from azure.ai.resources._user_agent import USER_AGENT
911
from azure.ai.resources._index._utils.logging import get_logger
1012
from packaging import version
1113

@@ -76,11 +78,13 @@ def __init__(
7678
api_key=self.api_key,
7779
api_version=self.api_version,
7880
azure_endpoint=self.api_base,
81+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
7982
)
8083
else:
8184
client = openai.OpenAI(
8285
api_key=self.api_key,
8386
base_url=self.api_base,
87+
default_headers={USER_AGENT_HEADER_KEY: USER_AGENT},
8488
)
8589

8690
self.embedding_client = client.embeddings

sdk/ai/azure-ai-resources/azure/ai/resources/constants/_common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
DEFAULT_OPEN_AI_CONNECTION_NAME = "Default_AzureOpenAI"
77
DEFAULT_CONTENT_SAFETY_CONNECTION_NAME = "Default_AzureAIContentSafety"
8+
USER_AGENT_HEADER_KEY = "Client-User-Agent"
89

910
class AssetTypes:
1011
"""AssetTypes is an enumeration of values for the asset types of a data.

0 commit comments

Comments
 (0)