unique_toolkit 0.5.41__py3-none-any.whl → 0.5.43__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.
- unique_toolkit/language_model/__init__.py +3 -0
- unique_toolkit/language_model/prompt.py +124 -0
- unique_toolkit/language_model/schemas.py +5 -2
- {unique_toolkit-0.5.41.dist-info → unique_toolkit-0.5.43.dist-info}/METADATA +9 -1
- {unique_toolkit-0.5.41.dist-info → unique_toolkit-0.5.43.dist-info}/RECORD +7 -6
- {unique_toolkit-0.5.41.dist-info → unique_toolkit-0.5.43.dist-info}/LICENSE +0 -0
- {unique_toolkit-0.5.41.dist-info → unique_toolkit-0.5.43.dist-info}/WHEEL +0 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
from string import Template
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
from unique_toolkit.language_model.schemas import (
|
5
|
+
LanguageModelSystemMessage,
|
6
|
+
LanguageModelUserMessage,
|
7
|
+
)
|
8
|
+
|
9
|
+
|
10
|
+
class Prompt:
|
11
|
+
"""
|
12
|
+
A class for handling templated prompts that can be formatted into LanguageModelSystemMessage and LanguageModelUserMessage.
|
13
|
+
|
14
|
+
This class wraps a string template and provides methods to format it with variables and
|
15
|
+
convert it into different types of language model messages. It uses Python's string.Template
|
16
|
+
for variable substitution.
|
17
|
+
|
18
|
+
Usage:
|
19
|
+
# Create a prompt with a template and set variables
|
20
|
+
prompt = Prompt("Hello, ${name}!", name="World")
|
21
|
+
|
22
|
+
# Substitute the template with variables and return the formatted content
|
23
|
+
content = prompt.substitute(name="World")
|
24
|
+
|
25
|
+
# Get the formatted content
|
26
|
+
content = prompt.content # Returns "Hello, World!"
|
27
|
+
|
28
|
+
# Get the template
|
29
|
+
template = prompt.template
|
30
|
+
|
31
|
+
# Convert to language model messages
|
32
|
+
system_msg = prompt.to_system_msg()
|
33
|
+
user_msg = prompt.to_user_msg()
|
34
|
+
user_msg_with_images = prompt.to_user_msg_with_images(images=["IMAGE_IN_BASE64"])
|
35
|
+
|
36
|
+
Properties:
|
37
|
+
template: Returns the underlying template string
|
38
|
+
content: Returns the current formatted content string
|
39
|
+
|
40
|
+
Methods:
|
41
|
+
substitute(**kwargs): Substitutes the template with the given variables
|
42
|
+
to_user_msg(): Converts the prompt to a LanguageModelUserMessage
|
43
|
+
to_user_msg_with_images(images): Converts the prompt to a LanguageModelUserMessage with images
|
44
|
+
"""
|
45
|
+
|
46
|
+
def __init__(self, template: str, **kwargs):
|
47
|
+
self._template = Template(template)
|
48
|
+
self._content = self._template.template
|
49
|
+
if kwargs:
|
50
|
+
self._content = self._template.substitute(**kwargs)
|
51
|
+
|
52
|
+
@property
|
53
|
+
def template(self):
|
54
|
+
"""
|
55
|
+
Returns the template string.
|
56
|
+
|
57
|
+
Returns:
|
58
|
+
str: The template string.
|
59
|
+
"""
|
60
|
+
return self._template
|
61
|
+
|
62
|
+
@property
|
63
|
+
def content(self):
|
64
|
+
"""
|
65
|
+
Returns the formatted content string.
|
66
|
+
|
67
|
+
Returns:
|
68
|
+
str: The formatted content string.
|
69
|
+
"""
|
70
|
+
return self._content
|
71
|
+
|
72
|
+
def substitute(self, **kwargs: Any) -> str:
|
73
|
+
"""
|
74
|
+
Substitutes the template with the given kwargs. Raises KeyError if a required parameter is missing.
|
75
|
+
|
76
|
+
Args:
|
77
|
+
**kwargs: Keyword arguments to substitute into the template.
|
78
|
+
|
79
|
+
Returns:
|
80
|
+
str: The substituted template string.
|
81
|
+
|
82
|
+
Raises:
|
83
|
+
KeyError: If a required parameter in the template is missing from kwargs.
|
84
|
+
"""
|
85
|
+
self._content = self._template.substitute(**kwargs)
|
86
|
+
return self._content
|
87
|
+
|
88
|
+
def to_system_msg(self) -> LanguageModelSystemMessage:
|
89
|
+
"""
|
90
|
+
Returns a LanguageModelSystemMessage with the content of the prompt.
|
91
|
+
|
92
|
+
Returns:
|
93
|
+
LanguageModelSystemMessage: The formatted prompt.
|
94
|
+
"""
|
95
|
+
return LanguageModelSystemMessage(content=self._content)
|
96
|
+
|
97
|
+
def to_user_msg(self) -> LanguageModelUserMessage:
|
98
|
+
"""
|
99
|
+
Returns a LanguageModelUserMessage with the content of the prompt.
|
100
|
+
|
101
|
+
Returns:
|
102
|
+
LanguageModelUserMessage: The formatted prompt.
|
103
|
+
"""
|
104
|
+
return LanguageModelUserMessage(content=self._content)
|
105
|
+
|
106
|
+
def to_user_msg_with_images(self, images: list[str]) -> LanguageModelUserMessage:
|
107
|
+
"""
|
108
|
+
Returns a LanguageModelUserMessage with the content of the prompt and the images.
|
109
|
+
|
110
|
+
Args:
|
111
|
+
images: List of images in base64 format.
|
112
|
+
|
113
|
+
Returns:
|
114
|
+
LanguageModelUserMessage: The formatted prompt with images.
|
115
|
+
"""
|
116
|
+
return LanguageModelUserMessage(
|
117
|
+
content=[
|
118
|
+
{"type": "text", "text": self._content},
|
119
|
+
*[
|
120
|
+
{"type": "image_url", "imageUrl": {"url": image}}
|
121
|
+
for image in images
|
122
|
+
],
|
123
|
+
]
|
124
|
+
)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import json
|
2
|
+
import math
|
2
3
|
from enum import StrEnum
|
3
4
|
from typing import Any, Optional, Self
|
4
5
|
from uuid import uuid4
|
@@ -212,8 +213,10 @@ class LanguageModelTokenLimits(BaseModel):
|
|
212
213
|
if not self.fraction_input:
|
213
214
|
self.fraction_input = 0.4
|
214
215
|
|
215
|
-
self.token_limit_input = self.fraction_input * self.token_limit
|
216
|
-
self.token_limit_output = (
|
216
|
+
self.token_limit_input = math.floor(self.fraction_input * self.token_limit)
|
217
|
+
self.token_limit_output = math.floor(
|
218
|
+
(1 - self.fraction_input) * self.token_limit
|
219
|
+
)
|
217
220
|
return self
|
218
221
|
|
219
222
|
raise ValueError(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: unique_toolkit
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.43
|
4
4
|
Summary:
|
5
5
|
License: Proprietary
|
6
6
|
Author: Martin Fadler
|
@@ -100,6 +100,14 @@ All notable changes to this project will be documented in this file.
|
|
100
100
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
101
101
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
102
102
|
|
103
|
+
|
104
|
+
|
105
|
+
## [0.5.43] - 2024-12-13
|
106
|
+
- Add `Prompt` class to handle templated prompts that can be formatted into LanguageModelSystemMessage and LanguageModelUserMessage.
|
107
|
+
|
108
|
+
## [0.5.42] - 2024-12-11
|
109
|
+
- Update `LanguageModelTokenLimits` with fix avoiding floats for token
|
110
|
+
|
103
111
|
## [0.5.41] - 2024-12-11
|
104
112
|
- Update `LanguageModelTokenLimits` includes a fraction_input now to always have input/output token limits available.
|
105
113
|
|
@@ -35,12 +35,13 @@ unique_toolkit/evaluators/hallucination/service.py,sha256=k8qro5Lw4Ak58m4HYp3G4H
|
|
35
35
|
unique_toolkit/evaluators/hallucination/utils.py,sha256=507BsX1mFTEne1-LdRCNMgBj-IXSFvBj1t3BPe1UkGs,7639
|
36
36
|
unique_toolkit/evaluators/output_parser.py,sha256=eI72qkzK1dZyUvnfP2SOAQCGBj_-PwX5wy_aLPMsJMY,883
|
37
37
|
unique_toolkit/evaluators/schemas.py,sha256=Jaue6Uhx75X1CyHKWj8sT3RE1JZXTqoLtfLt2xQNCX8,2507
|
38
|
-
unique_toolkit/language_model/__init__.py,sha256=
|
38
|
+
unique_toolkit/language_model/__init__.py,sha256=hgk5yiFF4SpIcE2QSoki9YknFxmcKnq2LCJ1cK9de9I,1830
|
39
39
|
unique_toolkit/language_model/infos.py,sha256=kQK6F3r8xTN7oT6b39J7rxW-Y4iPXjx_Fr9bCOVQdm0,12509
|
40
|
-
unique_toolkit/language_model/
|
40
|
+
unique_toolkit/language_model/prompt.py,sha256=JSawaLjQg3VR-E2fK8engFyJnNdk21zaO8pPIodzN4Q,3991
|
41
|
+
unique_toolkit/language_model/schemas.py,sha256=MBwEAFnnCYjSpbZDUYLrqkCc-0bsarsepSQEj1v6YEY,6991
|
41
42
|
unique_toolkit/language_model/service.py,sha256=brNCPRA0XxgqHi2rI5i2lyFCkUiw4MNMe1VaR3UgWmY,15500
|
42
43
|
unique_toolkit/language_model/utils.py,sha256=bPQ4l6_YO71w-zaIPanUUmtbXC1_hCvLK0tAFc3VCRc,1902
|
43
|
-
unique_toolkit-0.5.
|
44
|
-
unique_toolkit-0.5.
|
45
|
-
unique_toolkit-0.5.
|
46
|
-
unique_toolkit-0.5.
|
44
|
+
unique_toolkit-0.5.43.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
|
45
|
+
unique_toolkit-0.5.43.dist-info/METADATA,sha256=Fyf1RYuO_XRaoF0SLEvAQRxKCYOWzIA2AaXgJhUmZNk,15022
|
46
|
+
unique_toolkit-0.5.43.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
47
|
+
unique_toolkit-0.5.43.dist-info/RECORD,,
|
File without changes
|
File without changes
|