prompty 0.1.37__py3-none-any.whl → 0.1.39__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
prompty/azure/executor.py CHANGED
@@ -1,10 +1,12 @@
1
+ import json
1
2
  import azure.identity
2
3
  import importlib.metadata
3
4
  from typing import AsyncIterator, Iterator
4
- from openai import AzureOpenAI, AsyncAzureOpenAI
5
+ from openai import APIResponse, AzureOpenAI, AsyncAzureOpenAI
5
6
 
6
- from prompty.tracer import Tracer
7
+ from prompty.tracer import Tracer, sanitize
7
8
  from ..core import AsyncPromptyStream, Prompty, PromptyStream
9
+ from openai.types.chat.chat_completion import ChatCompletion
8
10
  from ..invoker import Invoker, InvokerFactory
9
11
 
10
12
  VERSION = importlib.metadata.version("prompty")
@@ -86,7 +88,21 @@ class AzureOpenAIExecutor(Invoker):
86
88
  **self.parameters,
87
89
  }
88
90
  trace("inputs", args)
89
- response = client.chat.completions.create(**args)
91
+
92
+ if "stream" in args and args["stream"] == True:
93
+ response = client.chat.completions.create(**args)
94
+ else:
95
+ raw: APIResponse = client.chat.completions.with_raw_response.create(
96
+ **args
97
+ )
98
+ response = ChatCompletion.model_validate_json(raw.text)
99
+
100
+ for k, v in raw.headers.raw:
101
+ trace(k.decode("utf-8"), v.decode("utf-8"))
102
+
103
+ trace("request_id", raw.request_id)
104
+ trace("retries_taken", raw.retries_taken)
105
+
90
106
  trace("result", response)
91
107
 
92
108
  elif self.api == "completion":
@@ -171,7 +187,20 @@ class AzureOpenAIExecutor(Invoker):
171
187
  **self.parameters,
172
188
  }
173
189
  trace("inputs", args)
174
- response = await client.chat.completions.create(**args)
190
+
191
+ if "stream" in args and args["stream"] == True:
192
+ response = await client.chat.completions.create(**args)
193
+ else:
194
+ raw: APIResponse = await client.chat.completions.with_raw_response.create(
195
+ **args
196
+ )
197
+ response = ChatCompletion.model_validate_json(raw.text)
198
+ for k, v in raw.headers.raw:
199
+ trace(k.decode("utf-8"), v.decode("utf-8"))
200
+
201
+ trace("request_id", raw.request_id)
202
+ trace("retries_taken", raw.retries_taken)
203
+
175
204
  trace("result", response)
176
205
 
177
206
  elif self.api == "completion":
@@ -182,6 +211,7 @@ class AzureOpenAIExecutor(Invoker):
182
211
  **self.parameters,
183
212
  }
184
213
  trace("inputs", args)
214
+
185
215
  response = await client.completions.create(**args)
186
216
  trace("result", response)
187
217
 
prompty/core.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import os
4
4
  from pathlib import Path
5
5
 
6
- from .tracer import Tracer, to_dict
6
+ from .tracer import Tracer, to_dict, sanitize
7
7
  from pydantic import BaseModel, Field, FilePath
8
8
  from typing import AsyncIterator, Iterator, List, Literal, Dict, Callable, Set, Tuple
9
9
 
@@ -88,10 +88,7 @@ class ModelSettings(BaseModel):
88
88
  serialize_as_any=serialize_as_any,
89
89
  )
90
90
 
91
- d["configuration"] = {
92
- k: "*" * len(v) if "key" in k.lower() or "secret" in k.lower() else v
93
- for k, v in d["configuration"].items()
94
- }
91
+ d["configuration"] = {k: sanitize(k, v) for k, v in d["configuration"].items()}
95
92
  return d
96
93
 
97
94
 
prompty/tracer.py CHANGED
@@ -16,9 +16,9 @@ from typing import Any, Callable, Dict, Iterator, List
16
16
  # clean up key value pairs for sensitive values
17
17
  def sanitize(key: str, value: Any) -> Any:
18
18
  if isinstance(value, str) and any(
19
- [s in key.lower() for s in ["key", "token", "secret", "password", "credential"]]
19
+ [s in key.lower() for s in ["key", "secret", "password", "credential"]]
20
20
  ):
21
- return len(str(value)) * "*"
21
+ return 10 * "*"
22
22
  elif isinstance(value, dict):
23
23
  return {k: sanitize(k, v) for k, v in value.items()}
24
24
  else:
@@ -134,7 +134,17 @@ def _trace_sync(
134
134
  @wraps(func)
135
135
  def wrapper(*args, **kwargs):
136
136
  name, signature = _name(func, args)
137
+ altname: str = None
138
+ # special case
139
+ if "name" in okwargs:
140
+ altname = name
141
+ name = okwargs["name"]
142
+ del okwargs["name"]
143
+
137
144
  with Tracer.start(name) as trace:
145
+ if altname != None:
146
+ trace("function", altname)
147
+
138
148
  trace("signature", signature)
139
149
 
140
150
  # support arbitrary keyword
@@ -178,10 +188,20 @@ def _trace_async(
178
188
  @wraps(func)
179
189
  async def wrapper(*args, **kwargs):
180
190
  name, signature = _name(func, args)
191
+ altname: str = None
192
+ # special case
193
+ if "name" in okwargs:
194
+ altname = name
195
+ name = okwargs["name"]
196
+ del okwargs["name"]
197
+
181
198
  with Tracer.start(name) as trace:
199
+ if altname != None:
200
+ trace("function", altname)
201
+
182
202
  trace("signature", signature)
183
203
 
184
- # support arbitrary keyword
204
+ # support arbitrary keyword
185
205
  # arguments for trace decorator
186
206
  for k, v in okwargs.items():
187
207
  trace(k, to_dict(v))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prompty
3
- Version: 0.1.37
3
+ Version: 0.1.39
4
4
  Summary: Prompty is a new asset class and format for LLM prompts that aims to provide observability, understandability, and portability for developers. It includes spec, tooling, and a runtime. This Prompty runtime supports Python
5
5
  Author-Email: Seth Juarez <seth.juarez@microsoft.com>
6
6
  License: MIT
@@ -1,15 +1,15 @@
1
- prompty-0.1.37.dist-info/METADATA,sha256=q2jDy8mc-b5UPlsKAkel1SzCP8XPwspLr0mfcZA5OlQ,9164
2
- prompty-0.1.37.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
- prompty-0.1.37.dist-info/entry_points.txt,sha256=a3i7Kvf--3DOkkv9VQpstwaNKgsnXwDGaPL18lPpKeI,60
4
- prompty-0.1.37.dist-info/licenses/LICENSE,sha256=KWSC4z9cfML_t0xThoQYjzTdcZQj86Y_mhXdatzU-KM,1052
1
+ prompty-0.1.39.dist-info/METADATA,sha256=MIUpA37K8Wo4wUD7xtK6oIeLFJj5uuZT-5rM18LbI5w,9164
2
+ prompty-0.1.39.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
+ prompty-0.1.39.dist-info/entry_points.txt,sha256=a3i7Kvf--3DOkkv9VQpstwaNKgsnXwDGaPL18lPpKeI,60
4
+ prompty-0.1.39.dist-info/licenses/LICENSE,sha256=KWSC4z9cfML_t0xThoQYjzTdcZQj86Y_mhXdatzU-KM,1052
5
5
  prompty/__init__.py,sha256=HCAvInBgNcIDO54rR4-RDIF4KUmGVQ2TRam_dS7xHEk,16561
6
6
  prompty/azure/__init__.py,sha256=WI8qeNWfxqggj21bznL-mxGUS-v67bUrunX0Lf2hsI8,295
7
- prompty/azure/executor.py,sha256=RJXMB0W7KcVvQ7l3xJaau7YM8PqOCQwuN4IwIe0sTLg,7930
7
+ prompty/azure/executor.py,sha256=LZG0U5AZB4H6CDfZxlsvcUnmq0LnTxMEFgLd9nzHAgc,9126
8
8
  prompty/azure/processor.py,sha256=-CWc_1h4xdb0nyHwUkaI40NtzTxxenCXkgjJTh76AOk,5079
9
9
  prompty/azure_beta/__init__.py,sha256=QF4qcILpsryBLl1nvc1AhRzkKI2uqc6OAU_fA3LISNE,361
10
10
  prompty/azure_beta/executor.py,sha256=PIPfeOTLk9YEM80adktL2zxpa51gO4itlQzUDoq0QVg,9896
11
11
  prompty/cli.py,sha256=k8Rxm41fMFNvmnsX737UiN6v-7756tpoJPN4rPXMNcU,3726
12
- prompty/core.py,sha256=EvkXV_mH7Mj1skT21XMZ4VX-Jlwx6AF-WEJ9yPc50AE,13061
12
+ prompty/core.py,sha256=haX415_MciCn6K0zU4nZ394ZaJemZe9-iOsdRbe9G6A,12985
13
13
  prompty/invoker.py,sha256=O77E5iQ1552wQXxL8FhZGERbCi_0O3mDTd5Ozqw-O-E,8593
14
14
  prompty/openai/__init__.py,sha256=hbBhgCwB_uSq-1NWL02yiOiNkyi39-G-AyVlTSgKTkU,276
15
15
  prompty/openai/executor.py,sha256=qkFSMA-pWlA1c602Dx5aR1cFEOnYsUUp_E7P3zFhSPs,3644
@@ -19,6 +19,6 @@ prompty/renderers.py,sha256=80HNtCp3osgaLfhKxkG4j1kiRhJ727ITzT_yL5JLjEQ,1104
19
19
  prompty/serverless/__init__.py,sha256=xoXOTRXO8C631swNKaa-ek5_R3X-87bJpTm0z_Rsg6A,282
20
20
  prompty/serverless/executor.py,sha256=PUDJsYcJLQx9JSTh-R3HdJd0ehEC6w2Ch5OEqz52uVI,8395
21
21
  prompty/serverless/processor.py,sha256=ZSL9y8JC-G4qbtWOSbQAqEcFMWEaLskyOr5VjLthelU,3660
22
- prompty/tracer.py,sha256=7z9IsJgOyE3tJkRIAhbo3QRSKrjFjH0-ZoN5fKIT_9w,11181
22
+ prompty/tracer.py,sha256=VcrXkM71VO45xWY2b7H2AdCp5bSsCtcAv1m00ycf7XM,11678
23
23
  prompty/utils.py,sha256=jm7HEzOGk3zz8d5aquXK3zWIQWuDpBpJTzlz5sswtdg,2836
24
- prompty-0.1.37.dist-info/RECORD,,
24
+ prompty-0.1.39.dist-info/RECORD,,