prompty 0.1.40__py3-none-any.whl → 0.1.44__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/__init__.py +35 -31
- prompty/azure/__init__.py +2 -2
- prompty/azure/executor.py +23 -19
- prompty/azure/processor.py +18 -7
- prompty/azure_beta/__init__.py +2 -2
- prompty/azure_beta/executor.py +26 -17
- prompty/cli.py +10 -10
- prompty/core.py +45 -40
- prompty/invoker.py +51 -37
- prompty/openai/__init__.py +2 -2
- prompty/openai/executor.py +6 -2
- prompty/openai/processor.py +9 -6
- prompty/parsers.py +21 -17
- prompty/renderers.py +18 -7
- prompty/serverless/__init__.py +2 -2
- prompty/serverless/executor.py +32 -16
- prompty/serverless/processor.py +11 -7
- prompty/tracer.py +41 -32
- prompty/utils.py +20 -15
- {prompty-0.1.40.dist-info → prompty-0.1.44.dist-info}/METADATA +1 -1
- prompty-0.1.44.dist-info/RECORD +24 -0
- prompty-0.1.40.dist-info/RECORD +0 -24
- {prompty-0.1.40.dist-info → prompty-0.1.44.dist-info}/WHEEL +0 -0
- {prompty-0.1.40.dist-info → prompty-0.1.44.dist-info}/entry_points.txt +0 -0
- {prompty-0.1.40.dist-info → prompty-0.1.44.dist-info}/licenses/LICENSE +0 -0
prompty/__init__.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import traceback
|
2
|
+
import typing
|
2
3
|
from pathlib import Path
|
3
|
-
from typing import
|
4
|
-
|
5
|
-
from .invoker import InvokerFactory, NoOp
|
4
|
+
from typing import Union
|
5
|
+
|
6
6
|
from .core import (
|
7
7
|
ModelSettings,
|
8
8
|
Prompty,
|
@@ -10,23 +10,27 @@ from .core import (
|
|
10
10
|
TemplateSettings,
|
11
11
|
param_hoisting,
|
12
12
|
)
|
13
|
+
from .invoker import InvokerFactory
|
14
|
+
from .parsers import PromptyChatParser
|
15
|
+
from .renderers import Jinja2Renderer
|
16
|
+
from .tracer import trace
|
13
17
|
from .utils import (
|
14
18
|
load_global_config,
|
15
19
|
load_global_config_async,
|
16
|
-
load_prompty_async,
|
17
20
|
load_prompty,
|
21
|
+
load_prompty_async,
|
18
22
|
)
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
InvokerFactory.add_renderer("jinja2", Jinja2Renderer)
|
25
|
+
InvokerFactory.add_parser("prompty.chat", PromptyChatParser)
|
22
26
|
|
23
27
|
|
24
28
|
@trace(description="Create a headless prompty object for programmatic use.")
|
25
29
|
def headless(
|
26
30
|
api: str,
|
27
|
-
content: str
|
28
|
-
configuration:
|
29
|
-
parameters:
|
31
|
+
content: Union[str, list[str], dict],
|
32
|
+
configuration: dict[str, typing.Any] = {},
|
33
|
+
parameters: dict[str, typing.Any] = {},
|
30
34
|
connection: str = "default",
|
31
35
|
) -> Prompty:
|
32
36
|
"""Create a headless prompty object for programmatic use.
|
@@ -81,9 +85,9 @@ def headless(
|
|
81
85
|
@trace(description="Create a headless prompty object for programmatic use.")
|
82
86
|
async def headless_async(
|
83
87
|
api: str,
|
84
|
-
content: str
|
85
|
-
configuration:
|
86
|
-
parameters:
|
88
|
+
content: Union[str, list[str], dict],
|
89
|
+
configuration: dict[str, typing.Any] = {},
|
90
|
+
parameters: dict[str, typing.Any] = {},
|
87
91
|
connection: str = "default",
|
88
92
|
) -> Prompty:
|
89
93
|
"""Create a headless prompty object for programmatic use.
|
@@ -188,17 +192,17 @@ def _load_raw_prompty(attributes: dict, content: str, p: Path, global_config: di
|
|
188
192
|
else:
|
189
193
|
outputs = {}
|
190
194
|
|
191
|
-
|
192
|
-
**attributes,
|
195
|
+
prompty = Prompty(
|
193
196
|
model=model,
|
194
197
|
inputs=inputs,
|
195
198
|
outputs=outputs,
|
196
199
|
template=template,
|
197
200
|
content=content,
|
198
201
|
file=p,
|
202
|
+
**attributes
|
199
203
|
)
|
200
204
|
|
201
|
-
return
|
205
|
+
return prompty
|
202
206
|
|
203
207
|
|
204
208
|
@trace(description="Load a prompty file.")
|
@@ -311,7 +315,7 @@ async def load_async(prompty_file: str, configuration: str = "default") -> Promp
|
|
311
315
|
@trace(description="Prepare the inputs for the prompt.")
|
312
316
|
def prepare(
|
313
317
|
prompt: Prompty,
|
314
|
-
inputs:
|
318
|
+
inputs: dict[str, typing.Any] = {},
|
315
319
|
):
|
316
320
|
"""Prepare the inputs for the prompt.
|
317
321
|
|
@@ -345,7 +349,7 @@ def prepare(
|
|
345
349
|
@trace(description="Prepare the inputs for the prompt.")
|
346
350
|
async def prepare_async(
|
347
351
|
prompt: Prompty,
|
348
|
-
inputs:
|
352
|
+
inputs: dict[str, typing.Any] = {},
|
349
353
|
):
|
350
354
|
"""Prepare the inputs for the prompt.
|
351
355
|
|
@@ -379,9 +383,9 @@ async def prepare_async(
|
|
379
383
|
@trace(description="Run the prepared Prompty content against the model.")
|
380
384
|
def run(
|
381
385
|
prompt: Prompty,
|
382
|
-
content: dict
|
383
|
-
configuration:
|
384
|
-
parameters:
|
386
|
+
content: Union[dict, list, str],
|
387
|
+
configuration: dict[str, typing.Any] = {},
|
388
|
+
parameters: dict[str, typing.Any] = {},
|
385
389
|
raw: bool = False,
|
386
390
|
):
|
387
391
|
"""Run the prepared Prompty content.
|
@@ -431,9 +435,9 @@ def run(
|
|
431
435
|
@trace(description="Run the prepared Prompty content against the model.")
|
432
436
|
async def run_async(
|
433
437
|
prompt: Prompty,
|
434
|
-
content: dict
|
435
|
-
configuration:
|
436
|
-
parameters:
|
438
|
+
content: Union[dict, list, str],
|
439
|
+
configuration: dict[str, typing.Any] = {},
|
440
|
+
parameters: dict[str, typing.Any] = {},
|
437
441
|
raw: bool = False,
|
438
442
|
):
|
439
443
|
"""Run the prepared Prompty content.
|
@@ -483,9 +487,9 @@ async def run_async(
|
|
483
487
|
@trace(description="Execute a prompty")
|
484
488
|
def execute(
|
485
489
|
prompt: Union[str, Prompty],
|
486
|
-
configuration:
|
487
|
-
parameters:
|
488
|
-
inputs:
|
490
|
+
configuration: dict[str, typing.Any] = {},
|
491
|
+
parameters: dict[str, typing.Any] = {},
|
492
|
+
inputs: dict[str, typing.Any] = {},
|
489
493
|
raw: bool = False,
|
490
494
|
config_name: str = "default",
|
491
495
|
):
|
@@ -517,7 +521,7 @@ def execute(
|
|
517
521
|
>>> inputs = {"name": "John Doe"}
|
518
522
|
>>> result = prompty.execute("prompts/basic.prompty", inputs=inputs)
|
519
523
|
"""
|
520
|
-
if isinstance(prompt, str):
|
524
|
+
if isinstance(prompt, (str, Path)):
|
521
525
|
path = Path(prompt)
|
522
526
|
if not path.is_absolute():
|
523
527
|
# get caller's path (take into account trace frame)
|
@@ -537,9 +541,9 @@ def execute(
|
|
537
541
|
@trace(description="Execute a prompty")
|
538
542
|
async def execute_async(
|
539
543
|
prompt: Union[str, Prompty],
|
540
|
-
configuration:
|
541
|
-
parameters:
|
542
|
-
inputs:
|
544
|
+
configuration: dict[str, typing.Any] = {},
|
545
|
+
parameters: dict[str, typing.Any] = {},
|
546
|
+
inputs: dict[str, typing.Any] = {},
|
543
547
|
raw: bool = False,
|
544
548
|
config_name: str = "default",
|
545
549
|
):
|
@@ -571,7 +575,7 @@ async def execute_async(
|
|
571
575
|
>>> inputs = {"name": "John Doe"}
|
572
576
|
>>> result = await prompty.execute_async("prompts/basic.prompty", inputs=inputs)
|
573
577
|
"""
|
574
|
-
if isinstance(prompt, str):
|
578
|
+
if isinstance(prompt, (str, Path)):
|
575
579
|
path = Path(prompt)
|
576
580
|
if not path.is_absolute():
|
577
581
|
# get caller's path (take into account trace frame)
|
prompty/azure/__init__.py
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
from prompty.invoker import InvokerException
|
3
3
|
|
4
4
|
try:
|
5
|
-
from .executor import AzureOpenAIExecutor
|
6
|
-
from .processor import AzureOpenAIProcessor
|
5
|
+
from .executor import AzureOpenAIExecutor # noqa
|
6
|
+
from .processor import AzureOpenAIProcessor # noqa
|
7
7
|
except ImportError:
|
8
8
|
raise InvokerException(
|
9
9
|
"Error registering AzureOpenAIExecutor and AzureOpenAIProcessor", "azure"
|
prompty/azure/executor.py
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
import json
|
2
|
-
import azure.identity
|
3
1
|
import importlib.metadata
|
4
|
-
|
5
|
-
from
|
2
|
+
import typing
|
3
|
+
from collections.abc import AsyncIterator, Iterator
|
6
4
|
|
7
|
-
|
8
|
-
from
|
5
|
+
import azure.identity
|
6
|
+
from openai import APIResponse, AsyncAzureOpenAI, AzureOpenAI
|
9
7
|
from openai.types.chat.chat_completion import ChatCompletion
|
8
|
+
|
9
|
+
from prompty.tracer import Tracer
|
10
|
+
|
11
|
+
from ..core import AsyncPromptyStream, Prompty, PromptyStream
|
10
12
|
from ..invoker import Invoker, InvokerFactory
|
11
13
|
|
12
14
|
VERSION = importlib.metadata.version("prompty")
|
@@ -29,7 +31,10 @@ class AzureOpenAIExecutor(Invoker):
|
|
29
31
|
if "api_key" not in self.kwargs:
|
30
32
|
# managed identity if client id
|
31
33
|
if "client_id" in self.kwargs:
|
32
|
-
default_credential
|
34
|
+
default_credential: typing.Union[
|
35
|
+
azure.identity.ManagedIdentityCredential,
|
36
|
+
azure.identity.DefaultAzureCredential,
|
37
|
+
] = azure.identity.ManagedIdentityCredential(
|
33
38
|
client_id=self.kwargs.pop("client_id"),
|
34
39
|
)
|
35
40
|
# default credential
|
@@ -48,7 +53,7 @@ class AzureOpenAIExecutor(Invoker):
|
|
48
53
|
self.deployment = self.prompty.model.configuration["azure_deployment"]
|
49
54
|
self.parameters = self.prompty.model.parameters
|
50
55
|
|
51
|
-
def invoke(self, data:
|
56
|
+
def invoke(self, data: typing.Any) -> typing.Union[str, PromptyStream]:
|
52
57
|
"""Invoke the Azure OpenAI API
|
53
58
|
|
54
59
|
Parameters
|
@@ -89,12 +94,11 @@ class AzureOpenAIExecutor(Invoker):
|
|
89
94
|
}
|
90
95
|
trace("inputs", args)
|
91
96
|
|
92
|
-
if "stream" in args and args["stream"]
|
97
|
+
if "stream" in args and args["stream"]:
|
93
98
|
response = client.chat.completions.create(**args)
|
94
99
|
else:
|
95
|
-
raw
|
96
|
-
|
97
|
-
)
|
100
|
+
raw = client.chat.completions.with_raw_response.create(**args)
|
101
|
+
|
98
102
|
response = ChatCompletion.model_validate_json(raw.text)
|
99
103
|
|
100
104
|
for k, v in raw.headers.raw:
|
@@ -135,7 +139,7 @@ class AzureOpenAIExecutor(Invoker):
|
|
135
139
|
**self.parameters,
|
136
140
|
}
|
137
141
|
trace("inputs", args)
|
138
|
-
response = client.images.generate
|
142
|
+
response = client.images.generate(**args)
|
139
143
|
trace("result", response)
|
140
144
|
|
141
145
|
# stream response
|
@@ -148,7 +152,7 @@ class AzureOpenAIExecutor(Invoker):
|
|
148
152
|
else:
|
149
153
|
return response
|
150
154
|
|
151
|
-
async def invoke_async(self, data: str) -> str:
|
155
|
+
async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]:
|
152
156
|
"""Invoke the Prompty Chat Parser (Async)
|
153
157
|
|
154
158
|
Parameters
|
@@ -188,13 +192,13 @@ class AzureOpenAIExecutor(Invoker):
|
|
188
192
|
}
|
189
193
|
trace("inputs", args)
|
190
194
|
|
191
|
-
if "stream" in args and args["stream"]
|
195
|
+
if "stream" in args and args["stream"]:
|
192
196
|
response = await client.chat.completions.create(**args)
|
193
197
|
else:
|
194
|
-
raw: APIResponse =
|
195
|
-
**args
|
198
|
+
raw: APIResponse = (
|
199
|
+
await client.chat.completions.with_raw_response.create(**args)
|
196
200
|
)
|
197
|
-
response = ChatCompletion.model_validate_json(raw.text)
|
201
|
+
response = ChatCompletion.model_validate_json(raw.text())
|
198
202
|
for k, v in raw.headers.raw:
|
199
203
|
trace(k.decode("utf-8"), v.decode("utf-8"))
|
200
204
|
|
@@ -234,7 +238,7 @@ class AzureOpenAIExecutor(Invoker):
|
|
234
238
|
**self.parameters,
|
235
239
|
}
|
236
240
|
trace("inputs", args)
|
237
|
-
response = await client.images.generate
|
241
|
+
response = await client.images.generate(**args)
|
238
242
|
trace("result", response)
|
239
243
|
|
240
244
|
# stream response
|
prompty/azure/processor.py
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
1
|
+
import typing
|
2
|
+
from collections.abc import AsyncIterator, Iterator
|
3
|
+
|
4
|
+
from openai.types.chat.chat_completion import ChatCompletion
|
2
5
|
from openai.types.completion import Completion
|
6
|
+
from openai.types.create_embedding_response import CreateEmbeddingResponse
|
3
7
|
from openai.types.images_response import ImagesResponse
|
4
|
-
|
8
|
+
|
5
9
|
from ..core import AsyncPromptyStream, Prompty, PromptyStream, ToolCall
|
6
10
|
from ..invoker import Invoker, InvokerFactory
|
7
|
-
from openai.types.create_embedding_response import CreateEmbeddingResponse
|
8
11
|
|
9
12
|
|
10
13
|
@InvokerFactory.register_processor("azure")
|
@@ -17,7 +20,15 @@ class AzureOpenAIProcessor(Invoker):
|
|
17
20
|
def __init__(self, prompty: Prompty) -> None:
|
18
21
|
super().__init__(prompty)
|
19
22
|
|
20
|
-
def invoke(self, data:
|
23
|
+
def invoke(self, data: typing.Any) -> typing.Union[
|
24
|
+
str,
|
25
|
+
list[typing.Union[str, None]],
|
26
|
+
list[ToolCall],
|
27
|
+
list[float],
|
28
|
+
list[list[float]],
|
29
|
+
PromptyStream,
|
30
|
+
None,
|
31
|
+
]:
|
21
32
|
"""Invoke the OpenAI/Azure API
|
22
33
|
|
23
34
|
Parameters
|
@@ -71,7 +82,7 @@ class AzureOpenAIProcessor(Invoker):
|
|
71
82
|
for chunk in data:
|
72
83
|
if (
|
73
84
|
len(chunk.choices) == 1
|
74
|
-
and chunk.choices[0].delta.content
|
85
|
+
and chunk.choices[0].delta.content is not None
|
75
86
|
):
|
76
87
|
content = chunk.choices[0].delta.content
|
77
88
|
yield content
|
@@ -80,7 +91,7 @@ class AzureOpenAIProcessor(Invoker):
|
|
80
91
|
else:
|
81
92
|
return data
|
82
93
|
|
83
|
-
async def invoke_async(self, data: str) -> str:
|
94
|
+
async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]:
|
84
95
|
"""Invoke the Prompty Chat Parser (Async)
|
85
96
|
|
86
97
|
Parameters
|
@@ -134,7 +145,7 @@ class AzureOpenAIProcessor(Invoker):
|
|
134
145
|
async for chunk in data:
|
135
146
|
if (
|
136
147
|
len(chunk.choices) == 1
|
137
|
-
and chunk.choices[0].delta.content
|
148
|
+
and chunk.choices[0].delta.content is not None
|
138
149
|
):
|
139
150
|
content = chunk.choices[0].delta.content
|
140
151
|
yield content
|
prompty/azure_beta/__init__.py
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
from prompty.invoker import InvokerException
|
3
3
|
|
4
4
|
try:
|
5
|
-
from .executor import AzureOpenAIBetaExecutor
|
6
5
|
# Reuse the common Azure OpenAI Processor
|
7
|
-
from ..azure.processor import AzureOpenAIProcessor
|
6
|
+
from ..azure.processor import AzureOpenAIProcessor # noqa
|
7
|
+
from .executor import AzureOpenAIBetaExecutor # noqa
|
8
8
|
except ImportError:
|
9
9
|
raise InvokerException(
|
10
10
|
"Error registering AzureOpenAIBetaExecutor and AzureOpenAIProcessor", "azure_beta"
|
prompty/azure_beta/executor.py
CHANGED
@@ -1,15 +1,19 @@
|
|
1
|
-
import azure.identity
|
2
1
|
import importlib.metadata
|
3
|
-
|
4
|
-
|
2
|
+
import re
|
3
|
+
import typing
|
4
|
+
from collections.abc import AsyncIterator, Iterator
|
5
|
+
from datetime import datetime
|
6
|
+
|
7
|
+
import azure.identity
|
8
|
+
from openai import AsyncAzureOpenAI, AzureOpenAI
|
5
9
|
|
6
10
|
from prompty.tracer import Tracer
|
11
|
+
|
7
12
|
from ..core import AsyncPromptyStream, Prompty, PromptyStream
|
8
13
|
from ..invoker import Invoker, InvokerFactory
|
9
|
-
import re
|
10
|
-
from datetime import datetime
|
11
14
|
|
12
|
-
|
15
|
+
|
16
|
+
def extract_date(data: str) -> typing.Union[datetime, None]:
|
13
17
|
"""Extract date from a string
|
14
18
|
|
15
19
|
Parameters
|
@@ -24,17 +28,18 @@ def extract_date(data: str) -> datetime:
|
|
24
28
|
"""
|
25
29
|
|
26
30
|
# Regular expression to find dates in the format YYYY-MM-DD
|
27
|
-
date_pattern = re.compile(r
|
31
|
+
date_pattern = re.compile(r"\b\d{4}-\d{2}-\d{2}\b")
|
28
32
|
match = date_pattern.search(data)
|
29
33
|
if match:
|
30
34
|
date_str = match.group(0)
|
31
35
|
# Validate the date format
|
32
36
|
try:
|
33
|
-
return datetime.strptime(date_str,
|
37
|
+
return datetime.strptime(date_str, "%Y-%m-%d")
|
34
38
|
except ValueError:
|
35
39
|
pass
|
36
40
|
return None
|
37
41
|
|
42
|
+
|
38
43
|
def is_structured_output_available(api_version: str) -> bool:
|
39
44
|
"""Check if the structured output API is available for the given API version
|
40
45
|
|
@@ -55,10 +60,11 @@ def is_structured_output_available(api_version: str) -> bool:
|
|
55
60
|
api_version_date = extract_date(api_version)
|
56
61
|
|
57
62
|
# Check if the API version are on or after the threshold date
|
58
|
-
if api_version_date >= threshold_api_version_date:
|
63
|
+
if api_version_date is not None and api_version_date >= threshold_api_version_date:
|
59
64
|
return True
|
60
65
|
return False
|
61
66
|
|
67
|
+
|
62
68
|
VERSION = importlib.metadata.version("prompty")
|
63
69
|
|
64
70
|
|
@@ -79,7 +85,10 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
79
85
|
if "api_key" not in self.kwargs:
|
80
86
|
# managed identity if client id
|
81
87
|
if "client_id" in self.kwargs:
|
82
|
-
default_credential
|
88
|
+
default_credential: typing.Union[
|
89
|
+
azure.identity.ManagedIdentityCredential,
|
90
|
+
azure.identity.DefaultAzureCredential,
|
91
|
+
] = azure.identity.ManagedIdentityCredential(
|
83
92
|
client_id=self.kwargs.pop("client_id"),
|
84
93
|
)
|
85
94
|
# default credential
|
@@ -99,7 +108,7 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
99
108
|
self.deployment = self.prompty.model.configuration["azure_deployment"]
|
100
109
|
self.parameters = self.prompty.model.parameters
|
101
110
|
|
102
|
-
def invoke(self, data:
|
111
|
+
def invoke(self, data: typing.Any) -> typing.Any:
|
103
112
|
"""Invoke the Azure OpenAI API
|
104
113
|
|
105
114
|
Parameters
|
@@ -133,13 +142,13 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
133
142
|
|
134
143
|
if self.api == "chat":
|
135
144
|
# We can only verify the API version as the model and its version are not part of prompty configuration
|
136
|
-
# Should be gpt-4o and 2024-08-06 or later
|
145
|
+
# Should be gpt-4o and 2024-08-06 or later
|
137
146
|
choose_beta = is_structured_output_available(self.api_version)
|
138
147
|
if choose_beta:
|
139
148
|
trace("signature", "AzureOpenAI.beta.chat.completions.parse")
|
140
149
|
else:
|
141
150
|
trace("signature", "AzureOpenAI.chat.completions.create")
|
142
|
-
|
151
|
+
|
143
152
|
args = {
|
144
153
|
"model": self.deployment,
|
145
154
|
"messages": data if isinstance(data, list) else [data],
|
@@ -147,7 +156,7 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
147
156
|
}
|
148
157
|
trace("inputs", args)
|
149
158
|
if choose_beta:
|
150
|
-
response = client.beta.chat.completions.parse(**args)
|
159
|
+
response: typing.Any = client.beta.chat.completions.parse(**args)
|
151
160
|
else:
|
152
161
|
response = client.chat.completions.create(**args)
|
153
162
|
trace("result", response)
|
@@ -182,7 +191,7 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
182
191
|
**self.parameters,
|
183
192
|
}
|
184
193
|
trace("inputs", args)
|
185
|
-
response = client.images.generate
|
194
|
+
response = client.images.generate(**args)
|
186
195
|
trace("result", response)
|
187
196
|
|
188
197
|
# stream response
|
@@ -195,7 +204,7 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
195
204
|
else:
|
196
205
|
return response
|
197
206
|
|
198
|
-
async def invoke_async(self, data: str) -> str:
|
207
|
+
async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]:
|
199
208
|
"""Invoke the Prompty Chat Parser (Async)
|
200
209
|
|
201
210
|
Parameters
|
@@ -267,7 +276,7 @@ class AzureOpenAIBetaExecutor(Invoker):
|
|
267
276
|
**self.parameters,
|
268
277
|
}
|
269
278
|
trace("inputs", args)
|
270
|
-
response = await client.images.generate
|
279
|
+
response = await client.images.generate(**args)
|
271
280
|
trace("result", response)
|
272
281
|
|
273
282
|
# stream response
|
prompty/cli.py
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
import os
|
2
|
-
import json
|
3
|
-
import click
|
4
1
|
import importlib
|
5
|
-
|
6
|
-
|
2
|
+
import json
|
3
|
+
import os
|
7
4
|
from pathlib import Path
|
5
|
+
from typing import Any, Optional
|
6
|
+
|
7
|
+
import click
|
8
|
+
from dotenv import load_dotenv
|
8
9
|
from pydantic import BaseModel
|
9
10
|
|
10
11
|
import prompty
|
11
|
-
from prompty.tracer import
|
12
|
-
from dotenv import load_dotenv
|
12
|
+
from prompty.tracer import PromptyTracer, Tracer, console_tracer, trace
|
13
13
|
|
14
14
|
|
15
15
|
def normalize_path(p, create_dir=False) -> Path:
|
@@ -47,9 +47,9 @@ def chat_mode(prompt_path: str):
|
|
47
47
|
W = "\033[0m" # white (normal)
|
48
48
|
R = "\033[31m" # red
|
49
49
|
G = "\033[32m" # green
|
50
|
-
O = "\033[33m" # orange
|
50
|
+
#O = "\033[33m" # orange
|
51
51
|
B = "\033[34m" # blue
|
52
|
-
P = "\033[35m" # purple
|
52
|
+
#P = "\033[35m" # purple
|
53
53
|
print(f"Executing {str(prompt_path)} in chat mode...")
|
54
54
|
p = prompty.load(str(prompt_path))
|
55
55
|
if "chat_history" not in p.sample:
|
@@ -81,7 +81,7 @@ def chat_mode(prompt_path: str):
|
|
81
81
|
|
82
82
|
|
83
83
|
@trace
|
84
|
-
def execute(prompt_path: str, inputs: Optional[
|
84
|
+
def execute(prompt_path: str, inputs: Optional[dict[str, Any]] = None, raw=False):
|
85
85
|
p = prompty.load(prompt_path)
|
86
86
|
|
87
87
|
inputs = inputs or {}
|