prompty 0.1.18__py2.py3-none-any.whl → 0.1.19__py2.py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- prompty/azure/executor.py +57 -32
- prompty/openai/executor.py +57 -33
- prompty/serverless/executor.py +75 -28
- prompty/tracer.py +39 -9
- {prompty-0.1.18.dist-info → prompty-0.1.19.dist-info}/METADATA +1 -1
- {prompty-0.1.18.dist-info → prompty-0.1.19.dist-info}/RECORD +9 -9
- {prompty-0.1.18.dist-info → prompty-0.1.19.dist-info}/WHEEL +0 -0
- {prompty-0.1.18.dist-info → prompty-0.1.19.dist-info}/entry_points.txt +0 -0
- {prompty-0.1.18.dist-info → prompty-0.1.19.dist-info}/licenses/LICENSE +0 -0
prompty/azure/executor.py
CHANGED
@@ -2,6 +2,8 @@ import azure.identity
|
|
2
2
|
import importlib.metadata
|
3
3
|
from typing import Iterator
|
4
4
|
from openai import AzureOpenAI
|
5
|
+
|
6
|
+
from prompty.tracer import Tracer
|
5
7
|
from ..core import Invoker, InvokerFactory, Prompty, PromptyStream
|
6
8
|
|
7
9
|
VERSION = importlib.metadata.version("prompty")
|
@@ -14,18 +16,18 @@ class AzureOpenAIExecutor(Invoker):
|
|
14
16
|
|
15
17
|
def __init__(self, prompty: Prompty) -> None:
|
16
18
|
super().__init__(prompty)
|
17
|
-
kwargs = {
|
19
|
+
self.kwargs = {
|
18
20
|
key: value
|
19
21
|
for key, value in self.prompty.model.configuration.items()
|
20
22
|
if key != "type"
|
21
23
|
}
|
22
24
|
|
23
25
|
# no key, use default credentials
|
24
|
-
if "api_key" not in kwargs:
|
26
|
+
if "api_key" not in self.kwargs:
|
25
27
|
# managed identity if client id
|
26
|
-
if "client_id" in kwargs:
|
28
|
+
if "client_id" in self.kwargs:
|
27
29
|
default_credential = azure.identity.ManagedIdentityCredential(
|
28
|
-
client_id=kwargs.pop("client_id"),
|
30
|
+
client_id=self.kwargs.pop("client_id"),
|
29
31
|
)
|
30
32
|
# default credential
|
31
33
|
else:
|
@@ -33,20 +35,12 @@ class AzureOpenAIExecutor(Invoker):
|
|
33
35
|
exclude_shared_token_cache_credential=True
|
34
36
|
)
|
35
37
|
|
36
|
-
kwargs["azure_ad_token_provider"] = (
|
38
|
+
self.kwargs["azure_ad_token_provider"] = (
|
37
39
|
azure.identity.get_bearer_token_provider(
|
38
40
|
default_credential, "https://cognitiveservices.azure.com/.default"
|
39
41
|
)
|
40
42
|
)
|
41
43
|
|
42
|
-
self.client = AzureOpenAI(
|
43
|
-
default_headers={
|
44
|
-
"User-Agent": f"prompty/{VERSION}",
|
45
|
-
"x-ms-useragent": f"prompty/{VERSION}",
|
46
|
-
},
|
47
|
-
**kwargs,
|
48
|
-
)
|
49
|
-
|
50
44
|
self.api = self.prompty.model.api
|
51
45
|
self.deployment = self.prompty.model.configuration["azure_deployment"]
|
52
46
|
self.parameters = self.prompty.model.parameters
|
@@ -64,29 +58,60 @@ class AzureOpenAIExecutor(Invoker):
|
|
64
58
|
any
|
65
59
|
The response from the Azure OpenAI API
|
66
60
|
"""
|
67
|
-
if self.api == "chat":
|
68
|
-
response = self.client.chat.completions.create(
|
69
|
-
model=self.deployment,
|
70
|
-
messages=data if isinstance(data, list) else [data],
|
71
|
-
**self.parameters,
|
72
|
-
)
|
73
61
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
62
|
+
with Tracer.start("AzureOpenAI") as trace:
|
63
|
+
trace("type", "LLM")
|
64
|
+
trace("signature", "AzureOpenAI.ctor")
|
65
|
+
trace("description", "Azure OpenAI Constructor")
|
66
|
+
trace("inputs", self.kwargs)
|
67
|
+
client = AzureOpenAI(
|
68
|
+
default_headers={
|
69
|
+
"User-Agent": f"prompty/{VERSION}",
|
70
|
+
"x-ms-useragent": f"prompty/{VERSION}",
|
71
|
+
},
|
72
|
+
**self.kwargs,
|
79
73
|
)
|
74
|
+
trace("result", client)
|
80
75
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
76
|
+
with Tracer.start("create") as trace:
|
77
|
+
trace("type", "LLM")
|
78
|
+
trace("description", "Azure OpenAI Client")
|
79
|
+
|
80
|
+
if self.api == "chat":
|
81
|
+
trace("signature", "AzureOpenAI.chat.completions.create")
|
82
|
+
args = {
|
83
|
+
"model": self.deployment,
|
84
|
+
"messages": data if isinstance(data, list) else [data],
|
85
|
+
**self.parameters,
|
86
|
+
}
|
87
|
+
trace("inputs", args)
|
88
|
+
response = client.chat.completions.create(**args)
|
89
|
+
trace("result", response)
|
90
|
+
|
91
|
+
elif self.api == "completion":
|
92
|
+
trace("signature", "AzureOpenAI.completions.create")
|
93
|
+
args = {
|
94
|
+
"prompt": data.item,
|
95
|
+
"model": self.deployment,
|
96
|
+
**self.parameters,
|
97
|
+
}
|
98
|
+
trace("inputs", args)
|
99
|
+
response = client.completions.create(**args)
|
100
|
+
trace("result", response)
|
101
|
+
|
102
|
+
elif self.api == "embedding":
|
103
|
+
trace("signature", "AzureOpenAI.embeddings.create")
|
104
|
+
args = {
|
105
|
+
"input": data if isinstance(data, list) else [data],
|
106
|
+
"model": self.deployment,
|
107
|
+
**self.parameters,
|
108
|
+
}
|
109
|
+
trace("inputs", args)
|
110
|
+
response = client.embeddings.create(**args)
|
111
|
+
trace("result", response)
|
87
112
|
|
88
|
-
|
89
|
-
|
113
|
+
elif self.api == "image":
|
114
|
+
raise NotImplementedError("Azure OpenAI Image API is not implemented yet")
|
90
115
|
|
91
116
|
# stream response
|
92
117
|
if isinstance(response, Iterator):
|
prompty/openai/executor.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import importlib.metadata
|
2
2
|
from openai import OpenAI
|
3
3
|
from typing import Iterator
|
4
|
+
|
5
|
+
from prompty.tracer import Tracer
|
4
6
|
from ..core import Invoker, InvokerFactory, Prompty, PromptyStream
|
5
7
|
|
6
8
|
VERSION = importlib.metadata.version("prompty")
|
@@ -12,20 +14,12 @@ class OpenAIExecutor(Invoker):
|
|
12
14
|
|
13
15
|
def __init__(self, prompty: Prompty) -> None:
|
14
16
|
super().__init__(prompty)
|
15
|
-
kwargs = {
|
17
|
+
self.kwargs = {
|
16
18
|
key: value
|
17
19
|
for key, value in self.prompty.model.configuration.items()
|
18
20
|
if key != "type"
|
19
21
|
}
|
20
22
|
|
21
|
-
self.client = OpenAI(
|
22
|
-
default_headers={
|
23
|
-
"User-Agent": f"prompty/{VERSION}",
|
24
|
-
"x-ms-useragent": f"prompty/{VERSION}",
|
25
|
-
},
|
26
|
-
**kwargs,
|
27
|
-
)
|
28
|
-
|
29
23
|
self.api = self.prompty.model.api
|
30
24
|
self.deployment = self.prompty.model.configuration["azure_deployment"]
|
31
25
|
self.parameters = self.prompty.model.parameters
|
@@ -43,32 +37,62 @@ class OpenAIExecutor(Invoker):
|
|
43
37
|
any
|
44
38
|
The response from the OpenAI API
|
45
39
|
"""
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
40
|
+
with Tracer.start("OpenAI") as trace:
|
41
|
+
trace("type", "LLM")
|
42
|
+
trace("signature", "OpenAI.ctor")
|
43
|
+
trace("description", "OpenAI Constructor")
|
44
|
+
trace("inputs", self.kwargs)
|
45
|
+
client = OpenAI(
|
46
|
+
default_headers={
|
47
|
+
"User-Agent": f"prompty/{VERSION}",
|
48
|
+
"x-ms-useragent": f"prompty/{VERSION}",
|
49
|
+
},
|
50
|
+
**self.kwargs,
|
51
51
|
)
|
52
|
+
trace("result", client)
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
model=self.deployment,
|
57
|
-
**self.parameters,
|
58
|
-
)
|
54
|
+
with Tracer.start("create") as trace:
|
55
|
+
trace("type", "LLM")
|
56
|
+
trace("description", "OpenAI Prompty Execution Invoker")
|
59
57
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
58
|
+
if self.api == "chat":
|
59
|
+
trace("signature", "OpenAI.chat.completions.create")
|
60
|
+
args = {
|
61
|
+
"model": self.deployment,
|
62
|
+
"messages": data if isinstance(data, list) else [data],
|
63
|
+
**self.parameters,
|
64
|
+
}
|
65
|
+
trace("inputs", args)
|
66
|
+
response = client.chat.completions.create(**args)
|
67
|
+
|
68
|
+
elif self.api == "completion":
|
69
|
+
trace("signature", "OpenAI.completions.create")
|
70
|
+
args = {
|
71
|
+
"prompt": data.item,
|
72
|
+
"model": self.deployment,
|
73
|
+
**self.parameters,
|
74
|
+
}
|
75
|
+
trace("inputs", args)
|
76
|
+
response = client.completions.create(**args)
|
77
|
+
|
78
|
+
elif self.api == "embedding":
|
79
|
+
trace("signature", "OpenAI.embeddings.create")
|
80
|
+
args = {
|
81
|
+
"input": data if isinstance(data, list) else [data],
|
82
|
+
"model": self.deployment,
|
83
|
+
**self.parameters,
|
84
|
+
}
|
85
|
+
trace("inputs", args)
|
86
|
+
response = client.embeddings.create(**args)
|
66
87
|
|
67
|
-
|
68
|
-
|
88
|
+
elif self.api == "image":
|
89
|
+
raise NotImplementedError("OpenAI Image API is not implemented yet")
|
69
90
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
91
|
+
# stream response
|
92
|
+
if isinstance(response, Iterator):
|
93
|
+
stream = PromptyStream("AzureOpenAIExecutor", response)
|
94
|
+
trace("result", stream)
|
95
|
+
return stream
|
96
|
+
else:
|
97
|
+
trace("result", response)
|
98
|
+
return response
|
prompty/serverless/executor.py
CHANGED
@@ -9,6 +9,8 @@ from azure.ai.inference.models import (
|
|
9
9
|
StreamingChatCompletions,
|
10
10
|
AsyncStreamingChatCompletions,
|
11
11
|
)
|
12
|
+
|
13
|
+
from prompty.tracer import Tracer
|
12
14
|
from ..core import Invoker, InvokerFactory, Prompty, PromptyStream, AsyncPromptyStream
|
13
15
|
|
14
16
|
VERSION = importlib.metadata.version("prompty")
|
@@ -29,6 +31,22 @@ class ServerlessExecutor(Invoker):
|
|
29
31
|
# api type
|
30
32
|
self.api = self.prompty.model.api
|
31
33
|
|
34
|
+
def _response(self, response: any) -> any:
|
35
|
+
# stream response
|
36
|
+
if isinstance(response, Iterator):
|
37
|
+
if isinstance(response, StreamingChatCompletions):
|
38
|
+
stream = PromptyStream("ServerlessExecutor", response)
|
39
|
+
return stream
|
40
|
+
elif isinstance(response, AsyncStreamingChatCompletions):
|
41
|
+
stream = AsyncPromptyStream("ServerlessExecutor", response)
|
42
|
+
return stream
|
43
|
+
else:
|
44
|
+
stream = PromptyStream("ServerlessExecutor", response)
|
45
|
+
|
46
|
+
return stream
|
47
|
+
else:
|
48
|
+
return response
|
49
|
+
|
32
50
|
def invoke(self, data: any) -> any:
|
33
51
|
"""Invoke the Serverless SDK
|
34
52
|
|
@@ -42,16 +60,38 @@ class ServerlessExecutor(Invoker):
|
|
42
60
|
any
|
43
61
|
The response from the Serverless SDK
|
44
62
|
"""
|
63
|
+
|
64
|
+
cargs = {
|
65
|
+
"endpoint": self.endpoint,
|
66
|
+
"credential": AzureKeyCredential(self.key),
|
67
|
+
}
|
68
|
+
|
45
69
|
if self.api == "chat":
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
70
|
+
with Tracer.start("ChatCompletionsClient") as trace:
|
71
|
+
trace("type", "LLM")
|
72
|
+
trace("signature", "azure.ai.inference.ChatCompletionsClient.ctor")
|
73
|
+
trace("description", "Azure Unified Inference SDK Chat Completions Client")
|
74
|
+
trace("inputs", cargs)
|
75
|
+
client = ChatCompletionsClient(
|
76
|
+
user_agent=f"prompty/{VERSION}",
|
77
|
+
**cargs,
|
78
|
+
)
|
79
|
+
trace("result", client)
|
80
|
+
|
81
|
+
with Tracer.start("complete") as trace:
|
82
|
+
trace("type", "LLM")
|
83
|
+
trace("signature", "azure.ai.inference.ChatCompletionsClient.complete")
|
84
|
+
trace("description", "Azure Unified Inference SDK Chat Completions Client")
|
85
|
+
eargs = {
|
86
|
+
"model": self.model,
|
87
|
+
"messages": data if isinstance(data, list) else [data],
|
88
|
+
**self.prompty.model.parameters,
|
89
|
+
}
|
90
|
+
trace("inputs", eargs)
|
91
|
+
r = client.complete(**eargs)
|
92
|
+
trace("result", r)
|
93
|
+
|
94
|
+
response = self._response(r)
|
55
95
|
|
56
96
|
elif self.api == "completion":
|
57
97
|
raise NotImplementedError(
|
@@ -59,26 +99,33 @@ class ServerlessExecutor(Invoker):
|
|
59
99
|
)
|
60
100
|
|
61
101
|
elif self.api == "embedding":
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
102
|
+
with Tracer.start("EmbeddingsClient") as trace:
|
103
|
+
trace("type", "LLM")
|
104
|
+
trace("signature", "azure.ai.inference.EmbeddingsClient.ctor")
|
105
|
+
trace("description", "Azure Unified Inference SDK Embeddings Client")
|
106
|
+
trace("inputs", cargs)
|
107
|
+
client = EmbeddingsClient(
|
108
|
+
user_agent=f"prompty/{VERSION}",
|
109
|
+
**cargs,
|
110
|
+
)
|
111
|
+
trace("result", client)
|
112
|
+
|
113
|
+
with Tracer.start("complete") as trace:
|
114
|
+
trace("type", "LLM")
|
115
|
+
trace("signature", "azure.ai.inference.ChatCompletionsClient.complete")
|
116
|
+
trace("description", "Azure Unified Inference SDK Chat Completions Client")
|
117
|
+
eargs = {
|
118
|
+
"model": self.model,
|
119
|
+
"input": data if isinstance(data, list) else [data],
|
120
|
+
**self.prompty.model.parameters,
|
121
|
+
}
|
122
|
+
trace("inputs", eargs)
|
123
|
+
r = client.complete(**eargs)
|
124
|
+
trace("result", r)
|
125
|
+
|
126
|
+
response = self._response(r)
|
71
127
|
|
72
128
|
elif self.api == "image":
|
73
129
|
raise NotImplementedError("Azure OpenAI Image API is not implemented yet")
|
74
130
|
|
75
|
-
|
76
|
-
if isinstance(response, Iterator):
|
77
|
-
if isinstance(response, StreamingChatCompletions):
|
78
|
-
return PromptyStream("ServerlessExecutor", response)
|
79
|
-
elif isinstance(response, AsyncStreamingChatCompletions):
|
80
|
-
return AsyncPromptyStream("ServerlessExecutor", response)
|
81
|
-
return PromptyStream("ServerlessExecutor", response)
|
82
|
-
else:
|
83
|
-
|
84
|
-
return response
|
131
|
+
return response
|
prompty/tracer.py
CHANGED
@@ -11,6 +11,18 @@ from functools import wraps, partial
|
|
11
11
|
from typing import Any, Callable, Dict, Iterator, List
|
12
12
|
|
13
13
|
|
14
|
+
# clean up key value pairs for sensitive values
|
15
|
+
def sanitize(key: str, value: Any) -> Any:
|
16
|
+
if isinstance(value, str) and any(
|
17
|
+
[s in key.lower() for s in ["key", "token", "secret", "password", "credential"]]
|
18
|
+
):
|
19
|
+
return len(str(value)) * "*"
|
20
|
+
elif isinstance(value, dict):
|
21
|
+
return {k: sanitize(k, v) for k, v in value.items()}
|
22
|
+
else:
|
23
|
+
return value
|
24
|
+
|
25
|
+
|
14
26
|
class Tracer:
|
15
27
|
_tracers: Dict[str, Callable[[str], Iterator[Callable[[str, Any], None]]]] = {}
|
16
28
|
|
@@ -31,7 +43,11 @@ class Tracer:
|
|
31
43
|
traces = [
|
32
44
|
stack.enter_context(tracer(name)) for tracer in cls._tracers.values()
|
33
45
|
]
|
34
|
-
yield lambda key, value: [
|
46
|
+
yield lambda key, value: [
|
47
|
+
# normalize and sanitize any trace values
|
48
|
+
trace(key, sanitize(key, to_dict(value)))
|
49
|
+
for trace in traces
|
50
|
+
]
|
35
51
|
|
36
52
|
|
37
53
|
def to_dict(obj: Any) -> Dict[str, Any]:
|
@@ -94,7 +110,9 @@ def _results(result: Any) -> dict:
|
|
94
110
|
return to_dict(result) if result is not None else "None"
|
95
111
|
|
96
112
|
|
97
|
-
def _trace_sync(
|
113
|
+
def _trace_sync(
|
114
|
+
func: Callable = None, *, description: str = None, type: str = None
|
115
|
+
) -> Callable:
|
98
116
|
description = description or ""
|
99
117
|
|
100
118
|
@wraps(func)
|
@@ -105,6 +123,9 @@ def _trace_sync(func: Callable = None, *, description: str = None) -> Callable:
|
|
105
123
|
if description and description != "":
|
106
124
|
trace("description", description)
|
107
125
|
|
126
|
+
if type and type != "":
|
127
|
+
trace("type", type)
|
128
|
+
|
108
129
|
inputs = _inputs(func, args, kwargs)
|
109
130
|
trace("inputs", inputs)
|
110
131
|
|
@@ -118,7 +139,7 @@ def _trace_sync(func: Callable = None, *, description: str = None) -> Callable:
|
|
118
139
|
"exception": {
|
119
140
|
"type": type(e).__name__,
|
120
141
|
"message": str(e),
|
121
|
-
"args": e.args,
|
142
|
+
"args": to_dict(e.args),
|
122
143
|
}
|
123
144
|
},
|
124
145
|
)
|
@@ -129,7 +150,9 @@ def _trace_sync(func: Callable = None, *, description: str = None) -> Callable:
|
|
129
150
|
return wrapper
|
130
151
|
|
131
152
|
|
132
|
-
def _trace_async(
|
153
|
+
def _trace_async(
|
154
|
+
func: Callable = None, *, description: str = None, type: str = None
|
155
|
+
) -> Callable:
|
133
156
|
description = description or ""
|
134
157
|
|
135
158
|
@wraps(func)
|
@@ -140,6 +163,9 @@ def _trace_async(func: Callable = None, *, description: str = None) -> Callable:
|
|
140
163
|
if description and description != "":
|
141
164
|
trace("description", description)
|
142
165
|
|
166
|
+
if type and type != "":
|
167
|
+
trace("type", type)
|
168
|
+
|
143
169
|
inputs = _inputs(func, args, kwargs)
|
144
170
|
trace("inputs", inputs)
|
145
171
|
try:
|
@@ -152,7 +178,7 @@ def _trace_async(func: Callable = None, *, description: str = None) -> Callable:
|
|
152
178
|
"exception": {
|
153
179
|
"type": type(e).__name__,
|
154
180
|
"message": str(e),
|
155
|
-
"args": e.args,
|
181
|
+
"args": to_dict(e.args),
|
156
182
|
}
|
157
183
|
},
|
158
184
|
)
|
@@ -163,13 +189,15 @@ def _trace_async(func: Callable = None, *, description: str = None) -> Callable:
|
|
163
189
|
return wrapper
|
164
190
|
|
165
191
|
|
166
|
-
def trace(
|
192
|
+
def trace(
|
193
|
+
func: Callable = None, *, description: str = None, type: str = None
|
194
|
+
) -> Callable:
|
167
195
|
if func is None:
|
168
|
-
return partial(trace, description=description)
|
196
|
+
return partial(trace, description=description, type=type)
|
169
197
|
|
170
198
|
wrapped_method = _trace_async if inspect.iscoroutinefunction(func) else _trace_sync
|
171
199
|
|
172
|
-
return wrapped_method(func, description=description)
|
200
|
+
return wrapped_method(func, description=description, type=type)
|
173
201
|
|
174
202
|
|
175
203
|
class PromptyTracer:
|
@@ -280,6 +308,8 @@ class PromptyTracer:
|
|
280
308
|
def console_tracer(name: str) -> Iterator[Callable[[str, Any], None]]:
|
281
309
|
try:
|
282
310
|
print(f"Starting {name}")
|
283
|
-
yield lambda key, value: print(
|
311
|
+
yield lambda key, value: print(
|
312
|
+
f"{key}:\n{json.dumps(to_dict(value), indent=4)}"
|
313
|
+
)
|
284
314
|
finally:
|
285
315
|
print(f"Ending {name}")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: prompty
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.19
|
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
|
Requires-Dist: pyyaml>=6.0.1
|
@@ -1,20 +1,20 @@
|
|
1
|
-
prompty-0.1.
|
2
|
-
prompty-0.1.
|
3
|
-
prompty-0.1.
|
4
|
-
prompty-0.1.
|
1
|
+
prompty-0.1.19.dist-info/METADATA,sha256=PnyGMOsBjZ6U9t76hJ3xQNFUULeE1nr7ef8MWz9SJgA,8916
|
2
|
+
prompty-0.1.19.dist-info/WHEEL,sha256=CuZGaXTwoRLAOVv0AcE3bCTxO5ejVuBEJkUBe9C-kvk,94
|
3
|
+
prompty-0.1.19.dist-info/entry_points.txt,sha256=9y1lKPWUpPWRJzUslcVH-gMwbNoa2PzjyoZsKYLQqyw,45
|
4
|
+
prompty-0.1.19.dist-info/licenses/LICENSE,sha256=KWSC4z9cfML_t0xThoQYjzTdcZQj86Y_mhXdatzU-KM,1052
|
5
5
|
prompty/__init__.py,sha256=XTUgJ3xT7HYJieuWW5PBItey0BWneg3G7iBBjIeNJZU,11628
|
6
6
|
prompty/azure/__init__.py,sha256=ptGajCh68s_tugPv45Y4GJCyBToNFCExUzUh9yIBIfo,292
|
7
|
-
prompty/azure/executor.py,sha256=
|
7
|
+
prompty/azure/executor.py,sha256=M52n_hxxT57-_VdGYK-pXoELT0CDwnJaxN3xNNabgp8,4210
|
8
8
|
prompty/azure/processor.py,sha256=e9CcKG665zvCLPeJfS91FM6c_W_6YY0mVENxinCo19A,2253
|
9
9
|
prompty/cli.py,sha256=k8Rxm41fMFNvmnsX737UiN6v-7756tpoJPN4rPXMNcU,3726
|
10
10
|
prompty/core.py,sha256=VzhOp2tulAKAF0I_5ULlII6QZ0thN1FRtPqPhwDpjPY,17226
|
11
11
|
prompty/openai/__init__.py,sha256=16LxFrG_qGMg_Nx_BTMkCZupPEADsi8Gj234uFiXoZo,273
|
12
|
-
prompty/openai/executor.py,sha256=
|
12
|
+
prompty/openai/executor.py,sha256=tpX2vkPIJKM4XqEU0KzahgALcR_IBRrY_ca-woST-uc,3314
|
13
13
|
prompty/openai/processor.py,sha256=Cw-_O_r9B5QqiCsfIglI5lcJgKCStkse2iIDbPWxfhg,2169
|
14
14
|
prompty/parsers.py,sha256=4mmIn4SVNs8B0R1BufanqUJk8v4r0OEEo8yx6UOxQpA,4670
|
15
15
|
prompty/renderers.py,sha256=RSHFQFx7AtKLUfsMLCXR0a56Mb7DL1NJNgjUqgg3IqU,776
|
16
16
|
prompty/serverless/__init__.py,sha256=NPqoFATEMQ96G8OQkVcGxUWU4llIQCwxfJePPo8YFY8,279
|
17
|
-
prompty/serverless/executor.py,sha256=
|
17
|
+
prompty/serverless/executor.py,sha256=jbTnYE2aq8oS5PWcZ96NhhjL-gU1a_tlUoB449QqHaY,4648
|
18
18
|
prompty/serverless/processor.py,sha256=pft1XGbPzo0MzQMbAt1VxsLsvRrjQO3B8MXEE2PfSA0,1982
|
19
|
-
prompty/tracer.py,sha256=
|
20
|
-
prompty-0.1.
|
19
|
+
prompty/tracer.py,sha256=dtF7rlJVNkl30m5ZE_9nROGW6Nmm8vGSSWS6p3M3MXI,10436
|
20
|
+
prompty-0.1.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|