Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
3a2f1d56
Commit
3a2f1d56
authored
May 04, 2024
by
Timothy J. Baek
Browse files
fix: promptTemplate infinite loop
parent
a341cfe3
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
6 additions
and
17 deletions
+6
-17
src/lib/utils/index.ts
src/lib/utils/index.ts
+6
-17
No files found.
src/lib/utils/index.ts
View file @
3a2f1d56
...
...
@@ -472,29 +472,18 @@ export const blobToFile = (blob, fileName) => {
return
file
;
};
// promptTemplate replaces any occurrences of the following in the template with the prompt
// {{prompt}} will be replaced with the prompt
// {{prompt:start:<length>}} will be replaced with the first <length> characters of the prompt
// {{prompt:end:<length>}} will be replaced with the last <length> characters of the prompt
// Character length is used as we don't have the ability to tokenize the prompt
export
const
promptTemplate
=
(
template
:
string
,
prompt
:
string
)
=>
{
template
=
template
.
replace
(
/{{prompt}}/g
,
prompt
);
// Replace all instances of {{prompt:start:<length>}} with the first <length> characters of the prompt
const
startRegex
=
/{{prompt:start:
(\d
+
)
}}/g
;
let
startMatch
:
RegExpMatchArray
|
null
;
while
((
startMatch
=
startRegex
.
exec
(
template
))
!==
null
)
{
const
length
=
parseInt
(
startMatch
[
1
]);
template
=
template
.
replace
(
startMatch
[
0
],
prompt
.
substring
(
0
,
length
));
}
template
=
template
.
replace
(
/{{prompt:start:
(\d
+
)
}}/g
,
(
match
,
length
)
=>
prompt
.
substring
(
0
,
parseInt
(
length
))
);
// Replace all instances of {{prompt:end:<length>}} with the last <length> characters of the prompt
const
endRegex
=
/{{prompt:end:
(\d
+
)
}}/g
;
let
endMatch
:
RegExpMatchArray
|
null
;
while
((
endMatch
=
endRegex
.
exec
(
template
))
!==
null
)
{
const
length
=
parseInt
(
endMatch
[
1
]);
template
=
template
.
replace
(
endMatch
[
0
],
prompt
.
substring
(
prompt
.
length
-
length
));
}
template
=
template
.
replace
(
/{{prompt:end:
(\d
+
)
}}/g
,
(
match
,
length
)
=>
prompt
.
slice
(
-
parseInt
(
length
))
);
return
template
;
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment