Skip to content

Commit 543d6b8

Browse files
committed
Updates for PR feedback
1 parent d3061cb commit 543d6b8

File tree

4 files changed

+154
-29
lines changed

4 files changed

+154
-29
lines changed

instrumentation-genai/opentelemetry-instrumentation-openai-v2/src/opentelemetry/instrumentation/openai_v2/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,8 @@ def get_llm_request_attributes(
248248

249249
# Add encoding format if specified
250250
if "encoding_format" in kwargs:
251-
attributes["gen_ai.request.encoding_formats"] = kwargs[
252-
"encoding_format"
251+
attributes["gen_ai.request.encoding_formats"] = [
252+
kwargs["encoding_format"]
253253
]
254254

255255
set_server_address_and_port(client_instance, attributes)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
interactions:
2+
- request:
3+
body: |-
4+
{
5+
"input": "This is a test for embeddings with encoding format",
6+
"model": "text-embedding-3-small",
7+
"encoding_format": "base64"
8+
}
9+
headers:
10+
accept:
11+
- application/json
12+
accept-encoding:
13+
- gzip, deflate
14+
authorization:
15+
- Bearer test_openai_api_key
16+
connection:
17+
- keep-alive
18+
content-length:
19+
- '127'
20+
content-type:
21+
- application/json
22+
host:
23+
- api.openai.com
24+
user-agent:
25+
- OpenAI/Python 1.26.0
26+
x-stainless-arch:
27+
- arm64
28+
x-stainless-async:
29+
- 'false'
30+
x-stainless-lang:
31+
- python
32+
x-stainless-os:
33+
- Linux
34+
x-stainless-package-version:
35+
- 1.26.0
36+
x-stainless-runtime:
37+
- CPython
38+
x-stainless-runtime-version:
39+
- 3.9.2
40+
method: POST
41+
uri: https://api.openai.com/v1/embeddings
42+
response:
43+
body:
44+
string: |-
45+
{
46+
"object": "list",
47+
"data": [
48+
{
49+
"object": "embedding",
50+
"index": 0,
51+
"embedding": "DK6fO8qEirxr7OE8SQSPvXpWIry659e8mJ5BPUKZiTxZdqM76WvmPDaVLT0xwge86TEXvU+lObzFhka8XkUfvNgvd7yb1d08OC0NuzMvyTshVB07MPgsvc7umDzYWhU9SjeBPBQdz7wB2Yu8gYuCPbZ9ST1078a8c4rZvDwyrrxnsRs8BRj8vNv2nrz3bA88HFZZvMXnCT2xSeC8Pp/vOuVimzyN/1K8kc5OvXAk9bvH6AA8UgsePWdMrrxvgQ69+Z8BvEE0HD2w4Ei9FbEEPUY9Zzyd0qq7ZbROvA6Azjx0Ho+8vbKpPITGyLsC3bW7mAMvPTXHKL3QIYu6mNRmvNYnozx078a6l295vQyuHz1frra6bYhrvP/bPj1O17Q8KCSQvJKcUzzXjBA9m9XduwBFVrwJSDs7RTk9vSS6gb2m2Tm8UXfoPL+6/bxyggW9mnDwOxBS/Tx6u4+94JMfvIIqv7xvgQ69/d7xvH1XGb08lxu9H7y9vBvtwTtOdnG8G1IvvJU4Xb06ZCm7+NUmPJg5VLzP8kI8y4i0u35fbbta2xC6arKSvGUVkjwU56m7Y0eNvT7ON7xc3Ae9C39Xu5drT7w4yJ88kmKEPVtEKLwLf1c86ZYEvdP3Y7ujDug7jf/SvHuJFLxWED89LyqovB2FIb1i6fy8IbkKulupFb0O5bu8UXdovOqaLrzeXIO8XNwHPRAYLj36o6u9gYsCvQjfo72zRi083S07vbmCaj1KbaY6oWsBvfaeCjz9Q1+8PgTdvKtHcjwVUMG9qqQLPQhEkTwW7308dLkhvAJ88jtoUFi9v+UbPGIUG73BHDi9H/LivEI4xrypEFY9MWHEu2N9MjmyQgM9NQF4PDsuhDrC6jy7kwFBvBfoID0tLds6o9QYvRVMF7x3VSu8PcqNvPM4przCu/S5kmIEvfVvwjqrqLW892yPvZJiBDvwAQq9mDnUvBAYLj3/2z68HBwKPCMmzLyLMU49mNRmPCGKwjycaRM9wuo8uwJCo7ypENY8r9yePQbiVjvgyUQ8cOolvXIhQj0B2Qu9CRIWPbkd/bzvCGe8tBAIPYTGyLxgsuA8Bd6sPFrbEL1BNBy9RzYKvdPBvrxkSze8e172PKPUmLzAGA48OMgfO3ZRgTv3ByI9fiUevYWQI7xS3FU8izHOvIbDlbyxSeA8nAhQPZg51DyuDpq9KvIUvAt/17zHuTi93sx3PUc2iryjOQa77GzdvNHvjztJo0s8HByKPE3TCrzGVEs7xFf+uyW+q7zT9+M8c+scvVDUAbqHYlI9nAhQu2AXTrx+X+08aRqzO/k+Pr31CtU8dO9GOuEy3DyS/ZY8W6kVvP48Ar1MP9W8c1AKve5pqrymqnE9YnmIPO02uDc6ms66l9C8PAKnkLya0bO6ptWPPFUMlbxMBYY8z1ewO0ptJrqD+EO9c8B+O0nZ8LzellI8L4+VPFWnJ70zL0k9oaGmvCpXgrz0axi7KvKUPK6pLL0xwoe9DuW7O43JLT3C5pK89j3HN052cbxbDgO8saojvfY5HTuoRnu7UXdovQJCIz3uaao8JLoBvbkdfTwTtDc80/fjO7GqIz3rZIm8XHcaPUQ1kzvLUg89FB1PPSj1R71rh/Q8ljGAvSW+Kz1XeVY9GVXiujsDZryx5HI8n2oKu51x5zw4Z1y9MPgsvDD4rDyrR3K8njtCPNBb2rpu7Vi8AnzyOeH8Nj1SQUO9kv2WPH28Bj0Ae/u8XqqMPPrdertGA5g8cyXsvPXULz20Slc9RTm9u6Q9sLwyKx+8RDUTvQwTjTyvd7E7qj+evOkG+bwQs8C8ogo+PWvs4TzIhz29TnJHPeaVjTvb9h49rq3WPBVMl7x7iZS7OfsRvGrot7xPQMw8/QmQPW+BDr0PFIQ8sniovEmjy7yqpAu9OAJvPKaq8bu24ja8Q6HdPIstpDx2wfW8DK4fvf1DXzw3/sQ8tXkfvI4yxbzChc872L+CvJ0MejsNfKS8eIgdOkOdMzmOkwg9IbkKPbewOz1WEL88M5Q2vYbDFb371h29BagHPA4b4Twbt5w8AQ8xPKcIgrxWdSw5h5h3PIpjSbq85KS86ALPvEai1DwvYE09SaPLPIJZB72xD5G6ua2IvGJOarxREnu9jpOIPN3IzbyhBhS7Qc8uPWVPYT2V/g086WvmPBGBRbxmfqm8Hx2BvO1lAD3S87m862SJPAp7LTveMWW56WvmvJloHDyuSOk8V3lWvFupFb3q/5u9WrDyO7lIm7x6VqK8CBlzPQsaarzP8kI7gYuCvRkbE71+igu8aOtqu1cU6TsVTJe8EeYyvfOdEz1iTuo8OMgfvDyXm7vTIgI8wksAPcK79LyhPDm9nXFnvJPLG72SnNO7xecJPQB7+zr3QfG8o3NVvKmraL0A4Oi8fI0+vYKPrDzwAQq9ecJsvLmCajy3FSk9KvKUvC33tTuhBpS91CYsvY4yxTzFvGs9e4mUvOJhJL02lS28EFL9PIHBJ7xhSsC8V3lWPSSPY7uP/B88b4GOPDP5o7yyQoM8oDgPvJdrz7zT9+O87mmqu+T5A73tZQC9gfv2uuZq77xzUAo+VnWsvE48Ir0yKx89HriTu6M5Br3vMwW8H1dQvWCyYLwVTBc8x1j1vJPLm7yBi4K8ZuMWPZ0M+ryMmmW8+zuLPFfewzxOoY8842n4PFQ+kDxAZhe9MV2avAcVybyY1OY7jJrlPIdi0rwB2Qu9iv5bPD83zzt/xNo7yoQKvSosZD1g4Si9DhvhvMa1jjy5fsC8zb9QvFZ1rLxFOb07ExmlPNVZnrzA6cW9CH7gvJeal7wYUbi8jf9SvGgWCT3YlGQ7aIZ9u6zbJ7zZ+dG7wYGlPDJlbjyOMkW8ukzFPO8IZ7wCfPI8MC5SvCAhq7t1vcs84saRPB3qjrnWwrW8CnutPPY5nTpjfbK8elaiPPgLTL3QvJ08FB3PPK2lAj1GPWe8O8kWvePKOztiTmo8c1CKPGKzVz3dkig9wOlFvTpkKT2mD986TAkwvIrINj0W7/28eyQnvYT87brnmTc8mnBwO4GLAr371h08KixkvKVwojyMmuW8A+HfO9sw7rtBNBw8xFd+PDb6GjxREvu86WvmOwbi1jw+BF28tn1JvHBPkzlOcsc80/djPNSLmbtmGTy9brezOw+vFjw+BN08CneDvNhaFb3mlQ09NGK7PDf+xDyKme68HFbZPLUUMjw3YzI9mDnUvC33NT2oRvs8O574uiGO7Lsjhw+8723UvPaeirsCeMg801zRuxyM/jvdkig7EkugPBbv/bugct47D6+WvGJO6rsGER88C39XO/pC6Dybnzg7VUK6O/M4pjwlIxk8CH5gvCGKwjsKdwM9SQQPvf1D37yH/eS7toHzvJ4FHbysrN88KcNMvSMmzLv3QfG42fnRPLQQiDxInyG7+AvMvBKwjTtyIUK8pabHu+DJRLyCj6w88qTwvOT5AzyF9ZC8bekuPHZRAb16u4+8wksAvKBy3rjHgxO9TAWGvKOp+jmuSGk6Ov+7vO02uDu5SJs8l5qXvZxpEzzqNcG8CnstPKM5hrwMSTK7zb9QPKHXS71GotQ8jJY7vexs3bxDZ447wksAvJX+Dby5HX28JPAmPEZohbwX6KC8RZqAPKaq8Tv/QCw9nZyFvC/FOruLLaS70e8Pvd3IzbwI36M8+t36uzZfiDzEHS89RAbLPPMCATymD187ak0lOyYnQzt3HwY9gSYVu64OGr3ezPe5PQAzvdkoGrzezPc8YrPXPH6KC7yWMYA7850TvP+lmTySYoQ8ZRWSPOtos7zn/qQ8Rj1nu7mtCLxm4xY8fI2+vFGiBrzO7pi776N5OmgWibyV02+8BRh8unwoUTv3ojS9st2VvFILHjydnIU8lzWqu1faGby651c8Oy4EPNJYJ7wO5Tu76wPGvC8qKLylcKK6o9hCO/nZUDwRHFg83vcVvaejFD0GER89JIs5vHmMRzwXg7O8gWBkvIBYEDzkM1O8tErXu4JZh7y3sLu8PzMlPePKO7y85KQ6H431PBNT9DuEJww9KFq1OfM8UDxfrja7c4rZO0TQpbwFfem7H/JiPKYP3zxxU707qEb7u1d51rt8KFE8FlRrPaBy3rzvo/m8gFiQPLewO73k+QM9K1ssPFytPzxQ1AE8wrv0vNLzObyRzk48NstSvBdNjjyUNDO8vB50vc2FAb01x6g79wciPe0Ak7vVWR48CnstvCos5LwJrai99weivIuSkTxcTPy80YoiPMlRmDy0gPy7Ca0oPNVZnrxasPI89NCFO1JBw7w7A+a4ntbUvHhdfzzRiqK8d1UrPbdLzrxUE/K8rq1WPMGBJbyNLhs85ceIPSfxnTye1lS9axuquVES+7uuc4e8QTQcvGNHDTuzq5q8F02OvCG5irwD4V88hl6oPOH8trycaRO8kv2WO4L0GT1/xFq6QwKhPGJO6rwJ4828GfB0vFN0NT01LJa7c8D+O4zFA7wCp5A83CkRvW2IazrkM1M5o6n6uI1kwLy5gmo83S07Pdn5UTy5Hf27WRE2vGsXAD3kmMC88qTwPA9KqTtUPpC7MmVuPA6287sl9FC8/UPfPBO0t7x+igu9mnBwPKULNbvuaSo9q0fyO2fnQL2ZzYm8p6MUPWnkDT3Zw6w6Z+dAPbBFNj0ovyI9rHa6uhYanDz3pl68x4OTO5X+jbxJo0u9v0oJvdkomrtAO3k8MWHEvIQnjLwuXKM8H411uBmAgLxOdnE8njtCveGXybo1kYO8yh8dPSOHjzz93nG8OGfcvKgMLL1n50C8RmgFPC2SyDzellK6dFS0OhJPyjsZVWI8MWHEO5pwcLxmfim9/QkQvEo3AbzEghw9G+1BPHcfBrtDPHC8BNqCPdbCtTxREvu88aBGvXAkdTqYA687v+UbOuGXyby8SZI8URJ7vAEPMT3szSC89p6KvQPh3zyWZ6U8uHqWu9z6SDy05Wm9IvPZu/UKVTzdyM28pnTMvHMl7LvH6IC8zfV1PLOrGr2/H+s8sniou5X+Db25fkC8dYemPGIUm7wTtDe8LfOLPAkSlrzeXIO7v0oJPOtoszwtksg80r0UOgp7LTyabMa87NFKvAsa6jxBoGa8IIaYvB8dAT1aFeC8tID8uxhROL2pq2g8wuq8O1gNDLtOdvE8jPuoPBSCvDuSYoQ8elaiPF9N8zrAsyA9qavoPEbYebqcCFA825XbORu3HD2eoC87xYZGvYb5Oru7Gso8J5DavG5SxjyBJpU78m5LPIn6sTuBxdG8bIAXu/emXjya0TM7oaGmvPemXj3S87k7GbrPO95cg7wtksi8tRQyu+zNoDzTIoI8Ov+7vInEjDxnTC482cMsPD6f7zwghpg7v0oJvf3ecTyPNm+9QaBmvEBmlzwB2Ys8WA2MuhtSrzyxSeC8KPXHu1Z1LDykoh08LyooPTJlbrzxzw47nQx6O/vWHb1I1UY7MsaxPEo3Ab1LOys8PcoNPGJO6rzcxCO9VD4QPQtFiLxX3kM87NFKOwh+YDySN+a8A+FfuiqRUbz52VC7KFo1PfRrGDz1b8I8+m0GPGuH9LvgLrK7LyoovSfGfzzGtQ48IIaYvGYZPLy6sTI9rkhpO0w/1TplsKQ8kpzTPAbiVr0Ae3s7aBYJPEo3gbzZ+dG8VnGCvE48IjxeSck88zxQPXOKWTuD+EO71vhau0KZCTuuSGm8a+xhPDqaTj0ZVWI7txWpvNb4Wrx5J9o8WrDyulfewzxjRw297ZulvH+ONTypq2g8QGYXO/pthryvQYy7fMNjvJrRs7xPpTm6WtsQPci94ruE/O28xeuzPKYP3ztiTuo8Qc8uvCS6gTwLGmq8cIU4vBVMlzzoY5I8Pp/vvOH4DL2AWBC8PzOluTWRAzzvo/k8ybYFvKM5Bj3eMeU76v8bOyS6gbxxUz27786Xu6mr6LwE2gK8SzsrvD2bxTzZw6w6nGmTPFLcVT0TU3S8EbfqPIRh2zxmGTw88aBGvJ9qCrsyKx+8j2ENvbDgSDqbOku8IiIivMKFT722gXO8bSP+u/ShvTypdcO8Sm0mO4X1kLyv3B48l295O/TQBT0vKig8YxjFOzbLUj0TfpK8HSA0vKgMLDzlxwg8c4pZu70Xl7zraLM8ptk5vbQQiLyxD5G5hZAjPd4xZbvellK8kpzTPHdVqzw2X4i8rECVvFtEKDxwJHU6zSCUO3G4KrvrZIm6bYhrPD83T7xVQrq7eL7CvEABqjxfE6Q8EFL9PNz6yLzblds8ntZUOQtFCDxUPpA83jFlPP7XFL34OhQ9OfsRu4qZbrytpYK8RZqAvFeve7sST0q8ST7evGexG7yacHC7F4Mzvd0tuzxkSzc8+qfVOgu1/DzI7Cq9CH7gO1gNDD3qmi69723Uuo4yRTyxqiM9qRBWvNP34zwZgAA9mWicvB/y4jyHYlK81pPturJCg7veMWU8wBiOPDPKWz36p9U8UXfoPKbVj7ydcee8iv7bN80glDyeBZ08lgI4vMAYDr37Ows9BhGfvGqDSjpqTaU72JRkPZnNCbxi6fw7SzsrPNEltbxmfqk86pouPaQHC7uY/4S8X01zO8jsqjrvbdS7+HA5vB0gtDuAXLq8ciFCPTRekTtg4ag8LyooPGGrA72VOF09imPJO6DTIbwhVJ29hGFbO4HF0Tv1CtU8CxrqO4X1ELxs5YQ8cLSAunwo0bw0XhE9+DqUvGCy4Drb9p485JjAvDpkqbsvYE08TW4dPWKvrbwHerY88QW0vBm2Jby1FDI7/jwCO9BbWrxV3Uw9XbFpvI3/Uru35uA7cbgqPRvtQTr2PUc8CRIWvRxW2Tsqx/Y8nQz6OwYRnzxk5sk8ISl/POEyXD0PSqm63yqIu/RrmLjTXFG9h2JSO3UiObyhawG9hfWQvJLS+DxJPt48v0qJPFF3aDzqNUE8jcmtPFtEqLzWXci7Y+Ifu9wpkbzun888MPisux5TJjwCfPI8gcGnvJbMEjuhBpQ8P5iSPEBml7sZ8PQ8e7+5PIz7qLwBdB69ee0KPOlr5jzOJD69oHLeuydWizxaek28VHjfvJc1qjuuqay79aXnPGtRzzzVvou8t7C7OrnjLTlLcVA8blLGu5EzvLwARda7blLGvKIKvrt9W0O9THV6vH76f7zyCV48yL3iu2kas7ttiOs8aLVFu1FzPj3raLM8coKFvJGYqTuM+6i8dx+GOgh+YD296M68ST5eOgWoB7sSSyA9mAMvu52cBTwIRJG8oaEmvMjsqryvEsQ738WaPGpNpTxygoW8dLmhvHiIHTzQkX88iV+fvP3e8Tq7ew08nZyFvCcrbb3YvwK97TY4PIb5ujvQW1q83sz3u+/OFz1dsWk89aVnvIGLAr3sMg68fMPjPIFgZDzwAQq7WaxIuoGLgrkBdB48xlChvOH4jLyBJhU8pqrxPIfHv7v63fq8KSg6vdtbjLsahKq8C7X8OjD4rLx3Vau8axcAvUGgZruMxQM976N5uzP5Izx6uw+9qRBWu3QeDzyXNSq81PAGPW1OHDx/xNq8HeoOvW1OnLzrZIm8kpzTPCpXgjwhVJ28NZGDO3bwPb2s2ye7Hu44vBZU67yz4T+7hyiDPGLp/LuYOdQ7paZHPF17RLyMmmW8Hx0BO3nCbLzmMCC9w0+qvIBcurxpf6A8e+6BvHRUtDwG4ta8fVtDvPY9x7zn/iQ9U3ALPYD3TDvTknY6F02OuiIiorxbDgM9HPFrPP1D3zwn8R296jVBPKaq8TuurVY7KPXHPLOrmjx1vUu8eYxHPH/EWjwwLtI8kC8SvEx1ejw0XhE8yh+dujto0zwR4gi94JMfPT7ON7ymqvE8XbHpPE528Ty546282JRkPByMfjw0/U09xFd+vJrRM7tFOb080CGLPKl1Q70kKva86GOSPOc0SjulcCK8RgMYPDvJFrrkzuW8Ps63vCgkkDwWGhy9mJ5BO1qwcjwvZPc8DRe3vIz7qLyKme48/g26PBjsSjq5rQg82PWnuofHP7ww9AK6EFJ9PPg6lLyaNiG8uR39vBlV4rwEdZW7ogq+PCqR0bw2lS2962gzPZ2cBT2abMa8brezNy3zi7xfeJG9J/EdvBeDMzuAXDq9/d5xPN9grTshVB29ylnsui0tW7o1kYM81fQwPMDpxby54y08"
52+
}
53+
],
54+
"model": "text-embedding-3-small",
55+
"usage": {
56+
"prompt_tokens": 9,
57+
"total_tokens": 9
58+
}
59+
}
60+
headers:
61+
CF-RAY:
62+
- 939c1836de294a26-NRT
63+
Connection:
64+
- keep-alive
65+
Content-Type:
66+
- application/json
67+
Date:
68+
- Sat, 03 May 2025 01:48:10 GMT
69+
Server:
70+
- cloudflare
71+
Set-Cookie: test_set_cookie
72+
Transfer-Encoding:
73+
- chunked
74+
X-Content-Type-Options:
75+
- nosniff
76+
access-control-allow-origin:
77+
- '*'
78+
access-control-expose-headers:
79+
- X-Request-ID
80+
alt-svc:
81+
- h3=":443"; ma=86400
82+
cf-cache-status:
83+
- DYNAMIC
84+
content-length:
85+
- '8414'
86+
openai-model:
87+
- text-embedding-3-small
88+
openai-organization: test_openai_org_id
89+
openai-processing-ms:
90+
- '82'
91+
openai-version:
92+
- '2020-10-01'
93+
strict-transport-security:
94+
- max-age=31536000; includeSubDomains; preload
95+
via:
96+
- envoy-router-698696864c-zvnz4
97+
x-envoy-upstream-service-time:
98+
- '52'
99+
x-ratelimit-limit-requests:
100+
- '5000'
101+
x-ratelimit-limit-tokens:
102+
- '5000000'
103+
x-ratelimit-remaining-requests:
104+
- '4999'
105+
x-ratelimit-remaining-tokens:
106+
- '4999987'
107+
x-ratelimit-reset-requests:
108+
- 12ms
109+
x-ratelimit-reset-tokens:
110+
- 0s
111+
x-request-id:
112+
- req_f9b3fad2c1ee8d52c777edfa84b4cfff
113+
status:
114+
code: 200
115+
message: OK
116+
version: 1

instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/test_async_embeddings.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,33 @@ async def test_async_embeddings_token_metrics(
189189
assert input_token_point.sum == response.usage.prompt_tokens
190190

191191

192+
@pytest.mark.asyncio
193+
@pytest.mark.vcr()
194+
async def test_async_embeddings_with_encoding_format(
195+
span_exporter, metric_reader, async_openai_client, instrument_no_content
196+
):
197+
"""Test creating embeddings with different encoding format"""
198+
model_name = "text-embedding-3-small"
199+
input_text = "This is a test for embeddings with encoding format"
200+
encoding_format = "base64"
201+
202+
response = await async_openai_client.embeddings.create(
203+
model=model_name,
204+
input=input_text,
205+
encoding_format=encoding_format,
206+
)
207+
208+
# Verify spans
209+
spans = span_exporter.get_finished_spans()
210+
assert len(spans) == 1
211+
assert_embedding_attributes(spans[0], model_name, response)
212+
213+
# Verify encoding_format attribute is set correctly
214+
assert spans[0].attributes["gen_ai.request.encoding_formats"] == (
215+
encoding_format,
216+
)
217+
218+
192219
def assert_embedding_attributes(
193220
span: ReadableSpan,
194221
request_model: str,
@@ -202,7 +229,6 @@ def assert_embedding_attributes(
202229
response_id=None, # Embeddings don't have a response ID
203230
response_model=response.model,
204231
input_tokens=response.usage.prompt_tokens,
205-
output_tokens=None, # Embeddings don't have separate output tokens
206232
operation_name="embeddings",
207233
server_address="api.openai.com",
208234
)
@@ -230,9 +256,9 @@ def assert_all_attributes(
230256
response_id: str = None,
231257
response_model: str = None,
232258
input_tokens: Optional[int] = None,
233-
output_tokens: Optional[int] = None,
234259
operation_name: str = "embeddings",
235260
server_address: str = "api.openai.com",
261+
server_port: int = 443,
236262
):
237263
"""Assert common attributes on the span"""
238264
assert span.name == f"{operation_name} {request_model}"
@@ -271,17 +297,9 @@ def assert_all_attributes(
271297
else:
272298
assert GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS not in span.attributes
273299

274-
if output_tokens:
275-
assert (
276-
output_tokens
277-
== span.attributes[GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS]
278-
)
279-
else:
280-
assert (
281-
GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS not in span.attributes
282-
)
283-
284300
assert server_address == span.attributes[ServerAttributes.SERVER_ADDRESS]
301+
if server_port != 443 and server_port > 0:
302+
assert server_port == span.attributes[ServerAttributes.SERVER_PORT]
285303

286304

287305
def assert_log_parent(log, span):

instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/test_embeddings.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,8 @@ def test_embeddings_with_encoding_format(
157157
assert_embedding_attributes(spans[0], model_name, response)
158158

159159
# Verify encoding_format attribute is set correctly
160-
assert (
161-
spans[0].attributes["gen_ai.request.encoding_formats"]
162-
== encoding_format
160+
assert spans[0].attributes["gen_ai.request.encoding_formats"] == (
161+
encoding_format,
163162
)
164163

165164

@@ -335,7 +334,6 @@ def assert_embedding_attributes(
335334
response_id=None, # Embeddings don't have a response ID
336335
response_model=response.model,
337336
input_tokens=response.usage.prompt_tokens,
338-
output_tokens=None, # Embeddings don't have separate output tokens
339337
operation_name="embeddings",
340338
server_address="api.openai.com",
341339
)
@@ -363,9 +361,9 @@ def assert_all_attributes(
363361
response_id: str = None,
364362
response_model: str = None,
365363
input_tokens: Optional[int] = None,
366-
output_tokens: Optional[int] = None,
367364
operation_name: str = "embeddings",
368365
server_address: str = "api.openai.com",
366+
server_port: int = 443,
369367
):
370368
"""Assert common attributes on the span"""
371369
assert span.name == f"{operation_name} {request_model}"
@@ -404,18 +402,11 @@ def assert_all_attributes(
404402
else:
405403
assert GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS not in span.attributes
406404

407-
if output_tokens:
408-
assert (
409-
output_tokens
410-
== span.attributes[GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS]
411-
)
412-
else:
413-
assert (
414-
GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS not in span.attributes
415-
)
416-
417405
assert server_address == span.attributes[ServerAttributes.SERVER_ADDRESS]
418406

407+
if server_port != 443 and server_port > 0:
408+
assert server_port == span.attributes[ServerAttributes.SERVER_PORT]
409+
419410

420411
def assert_log_parent(log, span):
421412
"""Assert that the log record has the correct parent span context"""

0 commit comments

Comments
 (0)