5
5
6
6
from llama_index .llms import ChatMessage , MessageRole
7
7
from llama_index .llms .llama_utils import (
8
- DEFAULT_SYSTEM_PROMPT ,
9
8
completion_to_prompt ,
10
9
messages_to_prompt ,
11
10
)
@@ -29,7 +28,6 @@ class AbstractPromptStyle(abc.ABC):
29
28
series of messages into a prompt.
30
29
"""
31
30
32
- @abc .abstractmethod
33
31
def __init__ (self , * args : Any , ** kwargs : Any ) -> None :
34
32
logger .debug ("Initializing prompt_style=%s" , self .__class__ .__name__ )
35
33
@@ -52,15 +50,6 @@ def completion_to_prompt(self, completion: str) -> str:
52
50
return prompt
53
51
54
52
55
- class AbstractPromptStyleWithSystemPrompt (AbstractPromptStyle , abc .ABC ):
56
- _DEFAULT_SYSTEM_PROMPT = DEFAULT_SYSTEM_PROMPT
57
-
58
- def __init__ (self , default_system_prompt : str | None ) -> None :
59
- super ().__init__ ()
60
- logger .debug ("Got default_system_prompt='%s'" , default_system_prompt )
61
- self .default_system_prompt = default_system_prompt
62
-
63
-
64
53
class DefaultPromptStyle (AbstractPromptStyle ):
65
54
"""Default prompt style that uses the defaults from llama_utils.
66
55
@@ -83,7 +72,7 @@ def _completion_to_prompt(self, completion: str) -> str:
83
72
return ""
84
73
85
74
86
- class Llama2PromptStyle (AbstractPromptStyleWithSystemPrompt ):
75
+ class Llama2PromptStyle (AbstractPromptStyle ):
87
76
"""Simple prompt style that just uses the default llama_utils functions.
88
77
89
78
It transforms the sequence of messages into a prompt that should look like:
@@ -94,18 +83,14 @@ class Llama2PromptStyle(AbstractPromptStyleWithSystemPrompt):
94
83
```
95
84
"""
96
85
97
- def __init__ (self , default_system_prompt : str | None = None ) -> None :
98
- # If no system prompt is given, the default one of the implementation is used.
99
- super ().__init__ (default_system_prompt = default_system_prompt )
100
-
101
86
def _messages_to_prompt (self , messages : Sequence [ChatMessage ]) -> str :
102
- return messages_to_prompt (messages , self . default_system_prompt )
87
+ return messages_to_prompt (messages )
103
88
104
89
def _completion_to_prompt (self , completion : str ) -> str :
105
- return completion_to_prompt (completion , self . default_system_prompt )
90
+ return completion_to_prompt (completion )
106
91
107
92
108
- class TagPromptStyle (AbstractPromptStyleWithSystemPrompt ):
93
+ class TagPromptStyle (AbstractPromptStyle ):
109
94
"""Tag prompt style (used by Vigogne) that uses the prompt style `<|ROLE|>`.
110
95
111
96
It transforms the sequence of messages into a prompt that should look like:
@@ -119,37 +104,8 @@ class TagPromptStyle(AbstractPromptStyleWithSystemPrompt):
119
104
FIXME: should we add surrounding `<s>` and `</s>` tags, like in llama2?
120
105
"""
121
106
122
- def __init__ (self , default_system_prompt : str | None = None ) -> None :
123
- # We have to define a default system prompt here as the LLM will not
124
- # use the default llama_utils functions.
125
- default_system_prompt = default_system_prompt or self ._DEFAULT_SYSTEM_PROMPT
126
- super ().__init__ (default_system_prompt )
127
- self .system_prompt : str = default_system_prompt
128
-
129
107
def _messages_to_prompt (self , messages : Sequence [ChatMessage ]) -> str :
130
- messages = list (messages )
131
- if messages [0 ].role != MessageRole .SYSTEM :
132
- logger .info (
133
- "Adding system_promt='%s' to the given messages as there are none given in the session" ,
134
- self .system_prompt ,
135
- )
136
- messages = [
137
- ChatMessage (content = self .system_prompt , role = MessageRole .SYSTEM ),
138
- * messages ,
139
- ]
140
- return self ._format_messages_to_prompt (messages )
141
-
142
- def _completion_to_prompt (self , completion : str ) -> str :
143
- return (
144
- f"<|system|>: { self .system_prompt .strip ()} \n "
145
- f"<|user|>: { completion .strip ()} \n "
146
- "<|assistant|>: "
147
- )
148
-
149
- @staticmethod
150
- def _format_messages_to_prompt (messages : list [ChatMessage ]) -> str :
151
108
"""Format message to prompt with `<|ROLE|>: MSG` style."""
152
- assert messages [0 ].role == MessageRole .SYSTEM
153
109
prompt = ""
154
110
for message in messages :
155
111
role = message .role
@@ -161,19 +117,24 @@ def _format_messages_to_prompt(messages: list[ChatMessage]) -> str:
161
117
prompt += "<|assistant|>: "
162
118
return prompt
163
119
120
+ def _completion_to_prompt (self , completion : str ) -> str :
121
+ return self ._messages_to_prompt (
122
+ [ChatMessage (content = completion , role = MessageRole .USER )]
123
+ )
124
+
164
125
165
126
def get_prompt_style (
166
127
prompt_style : Literal ["default" , "llama2" , "tag" ] | None
167
- ) -> type [ AbstractPromptStyle ] :
128
+ ) -> AbstractPromptStyle :
168
129
"""Get the prompt style to use from the given string.
169
130
170
131
:param prompt_style: The prompt style to use.
171
132
:return: The prompt style to use.
172
133
"""
173
134
if prompt_style is None or prompt_style == "default" :
174
- return DefaultPromptStyle
135
+ return DefaultPromptStyle ()
175
136
elif prompt_style == "llama2" :
176
- return Llama2PromptStyle
137
+ return Llama2PromptStyle ()
177
138
elif prompt_style == "tag" :
178
- return TagPromptStyle
139
+ return TagPromptStyle ()
179
140
raise ValueError (f"Unknown prompt_style='{ prompt_style } '" )
0 commit comments