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
04e2b6e2
Commit
04e2b6e2
authored
Aug 14, 2024
by
Timothy J. Baek
Browse files
chore: format
parent
9f0c9d97
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
107 additions
and
100 deletions
+107
-100
src/lib/components/chat/Messages/ResponseMessage.svelte
src/lib/components/chat/Messages/ResponseMessage.svelte
+2
-2
src/lib/utils/katex-extension.ts
src/lib/utils/katex-extension.ts
+105
-98
No files found.
src/lib/components/chat/Messages/ResponseMessage.svelte
View file @
04e2b6e2
...
@@ -159,7 +159,7 @@
...
@@ -159,7 +159,7 @@
const res = await synthesizeOpenAISpeech(
const res = await synthesizeOpenAISpeech(
localStorage.token,
localStorage.token,
$settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice
$settings?.audio?.tts?.defaultVoice === $config.audio.tts.voice
? $settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice
?
(
$settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice
)
: $config?.audio?.tts?.voice,
: $config?.audio?.tts?.voice,
sentence
sentence
).catch((error) => {
).catch((error) => {
...
@@ -766,7 +766,7 @@
...
@@ -766,7 +766,7 @@
100
100
) / 100
) / 100
} tokens` ?? 'N/A'
} tokens` ?? 'N/A'
}<br/>
}<br/>
prompt_token/s: ${
prompt_token/s: ${
Math.round(
Math.round(
((message.info.prompt_eval_count ?? 0) /
((message.info.prompt_eval_count ?? 0) /
...
...
src/lib/utils/katex-extension.ts
View file @
04e2b6e2
import
katex
from
'
katex
'
;
import
katex
from
'
katex
'
;
const
DELIMITER_LIST
=
[
const
DELIMITER_LIST
=
[
{
left
:
'
$$
'
,
right
:
'
$$
'
,
display
:
false
},
{
left
:
'
$$
'
,
right
:
'
$$
'
,
display
:
false
},
{
left
:
'
$
'
,
right
:
'
$
'
,
display
:
false
},
{
left
:
'
$
'
,
right
:
'
$
'
,
display
:
false
},
{
left
:
'
\\
pu{
'
,
right
:
'
}
'
,
display
:
false
},
{
left
:
'
\\
pu{
'
,
right
:
'
}
'
,
display
:
false
},
{
left
:
'
\\
ce{
'
,
right
:
'
}
'
,
display
:
false
},
{
left
:
'
\\
ce{
'
,
right
:
'
}
'
,
display
:
false
},
{
left
:
'
\\
(
'
,
right
:
'
\\
)
'
,
display
:
false
},
{
left
:
'
\\
(
'
,
right
:
'
\\
)
'
,
display
:
false
},
{
left
:
'
(
'
,
right
:
'
)
'
,
display
:
false
},
{
left
:
'
(
'
,
right
:
'
)
'
,
display
:
false
},
{
left
:
'
\\
[
'
,
right
:
'
\\
]
'
,
display
:
true
},
{
left
:
'
\\
[
'
,
right
:
'
\\
]
'
,
display
:
true
},
{
left
:
'
[
'
,
right
:
'
]
'
,
display
:
true
}
{
left
:
'
[
'
,
right
:
'
]
'
,
display
:
true
}
]
]
;
// const DELIMITER_LIST = [
// const DELIMITER_LIST = [
// { left: '$$', right: '$$', display: false },
// { left: '$$', right: '$$', display: false },
...
@@ -23,109 +23,116 @@ let inlinePatterns = [];
...
@@ -23,109 +23,116 @@ let inlinePatterns = [];
let
blockPatterns
=
[];
let
blockPatterns
=
[];
function
escapeRegex
(
string
)
{
function
escapeRegex
(
string
)
{
return
string
.
replace
(
/
[
-
\/\\
^$*+?.()|[
\]
{}
]
/g
,
'
\\
$&
'
);
return
string
.
replace
(
/
[
-
\/\\
^$*+?.()|[
\]
{}
]
/g
,
'
\\
$&
'
);
}
}
function
generateRegexRules
(
delimiters
)
{
function
generateRegexRules
(
delimiters
)
{
delimiters
.
forEach
(
delimiter
=>
{
delimiters
.
forEach
((
delimiter
)
=>
{
const
{
left
,
right
}
=
delimiter
;
const
{
left
,
right
}
=
delimiter
;
// Ensure regex-safe delimiters
// Ensure regex-safe delimiters
const
escapedLeft
=
escapeRegex
(
left
);
const
escapedLeft
=
escapeRegex
(
left
);
const
escapedRight
=
escapeRegex
(
right
);
const
escapedRight
=
escapeRegex
(
right
);
// Inline pattern - Capture group $1, token content, followed by end delimiter and normal punctuation marks.
// Inline pattern - Capture group $1, token content, followed by end delimiter and normal punctuation marks.
// Example: $text$
// Example: $text$
inlinePatterns
.
push
(
`
${
escapedLeft
}
((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n
${
escapedRight
}
]))
${
escapedRight
}
`
);
inlinePatterns
.
push
(
`
${
escapedLeft
}
((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n
${
escapedRight
}
]))
${
escapedRight
}
`
// Block pattern - Starts and ends with the delimiter on new lines. Example:
);
// $$\ncontent here\n$$
blockPatterns
.
push
(
`
${
escapedLeft
}
\n((?:\\\\[^]|[^\\\\])+?)\n
${
escapedRight
}
`
);
// Block pattern - Starts and ends with the delimiter on new lines. Example:
});
// $$\ncontent here\n$$
blockPatterns
.
push
(
`
${
escapedLeft
}
\n((?:\\\\[^]|[^\\\\])+?)\n
${
escapedRight
}
`
);
const
inlineRule
=
new
RegExp
(
`^(
${
inlinePatterns
.
join
(
'
|
'
)}
)(?=[\\s?!.,:?!。,:]|$)`
,
'
u
'
);
});
const
blockRule
=
new
RegExp
(
`^(
${
blockPatterns
.
join
(
'
|
'
)}
)(?:\n|$)`
,
'
u
'
);
const
inlineRule
=
new
RegExp
(
`^(
${
inlinePatterns
.
join
(
'
|
'
)}
)(?=[\\s?!.,:?!。,:]|$)`
,
'
u
'
);
return
{
inlineRule
,
blockRule
};
const
blockRule
=
new
RegExp
(
`^(
${
blockPatterns
.
join
(
'
|
'
)}
)(?:\n|$)`
,
'
u
'
);
return
{
inlineRule
,
blockRule
};
}
}
const
{
inlineRule
,
blockRule
}
=
generateRegexRules
(
DELIMITER_LIST
);
const
{
inlineRule
,
blockRule
}
=
generateRegexRules
(
DELIMITER_LIST
);
export
default
function
(
options
=
{})
{
return
{
export
default
function
(
options
=
{})
{
extensions
:
[
return
{
inlineKatex
(
options
,
createRenderer
(
options
,
false
)),
extensions
:
[
blockKatex
(
options
,
createRenderer
(
options
,
true
))
inlineKatex
(
options
,
createRenderer
(
options
,
false
)),
]
blockKatex
(
options
,
createRenderer
(
options
,
true
)),
};
],
};
}
}
function
createRenderer
(
options
,
newlineAfter
)
{
function
createRenderer
(
options
,
newlineAfter
)
{
return
(
token
)
=>
katex
.
renderToString
(
token
.
text
,
{
...
options
,
displayMode
:
token
.
displayMode
})
+
(
newlineAfter
?
'
\n
'
:
''
);
return
(
token
)
=>
katex
.
renderToString
(
token
.
text
,
{
...
options
,
displayMode
:
token
.
displayMode
})
+
(
newlineAfter
?
'
\n
'
:
''
);
}
}
function
inlineKatex
(
options
,
renderer
)
{
function
inlineKatex
(
options
,
renderer
)
{
const
ruleReg
=
inlineRule
;
const
ruleReg
=
inlineRule
;
return
{
return
{
name
:
'
inlineKatex
'
,
name
:
'
inlineKatex
'
,
level
:
'
inline
'
,
level
:
'
inline
'
,
start
(
src
)
{
start
(
src
)
{
let
index
;
let
index
;
let
indexSrc
=
src
;
let
indexSrc
=
src
;
while
(
indexSrc
)
{
while
(
indexSrc
)
{
index
=
indexSrc
.
indexOf
(
'
$
'
);
index
=
indexSrc
.
indexOf
(
'
$
'
);
if
(
index
===
-
1
)
{
if
(
index
===
-
1
)
{
return
;
return
;
}
}
const
f
=
index
===
0
||
indexSrc
.
charAt
(
index
-
1
)
===
'
'
;
const
f
=
index
===
0
||
indexSrc
.
charAt
(
index
-
1
)
===
'
'
;
if
(
f
)
{
if
(
f
)
{
const
possibleKatex
=
indexSrc
.
substring
(
index
);
const
possibleKatex
=
indexSrc
.
substring
(
index
);
if
(
possibleKatex
.
match
(
ruleReg
))
{
if
(
possibleKatex
.
match
(
ruleReg
))
{
return
index
;
return
index
;
}
}
}
}
indexSrc
=
indexSrc
.
substring
(
index
+
1
).
replace
(
/^
\$
+/
,
''
);
indexSrc
=
indexSrc
.
substring
(
index
+
1
).
replace
(
/^
\$
+/
,
''
);
}
}
},
},
tokenizer
(
src
,
tokens
)
{
tokenizer
(
src
,
tokens
)
{
const
match
=
src
.
match
(
ruleReg
);
const
match
=
src
.
match
(
ruleReg
);
if
(
match
)
{
if
(
match
)
{
const
text
=
match
.
slice
(
2
).
filter
((
item
)
=>
item
).
find
((
item
)
=>
item
.
trim
());
const
text
=
match
.
slice
(
2
)
return
{
.
filter
((
item
)
=>
item
)
type
:
'
inlineKatex
'
,
.
find
((
item
)
=>
item
.
trim
());
raw
:
match
[
0
],
text
:
text
,
return
{
};
type
:
'
inlineKatex
'
,
}
raw
:
match
[
0
],
},
text
:
text
renderer
,
};
};
}
},
renderer
};
}
}
function
blockKatex
(
options
,
renderer
)
{
function
blockKatex
(
options
,
renderer
)
{
return
{
return
{
name
:
'
blockKatex
'
,
name
:
'
blockKatex
'
,
level
:
'
block
'
,
level
:
'
block
'
,
tokenizer
(
src
,
tokens
)
{
tokenizer
(
src
,
tokens
)
{
const
match
=
src
.
match
(
blockRule
);
const
match
=
src
.
match
(
blockRule
);
if
(
match
)
{
if
(
match
)
{
const
text
=
match
.
slice
(
2
).
filter
((
item
)
=>
item
).
find
((
item
)
=>
item
.
trim
());
const
text
=
match
.
slice
(
2
)
return
{
.
filter
((
item
)
=>
item
)
type
:
'
blockKatex
'
,
.
find
((
item
)
=>
item
.
trim
());
raw
:
match
[
0
],
text
:
text
,
return
{
};
type
:
'
blockKatex
'
,
}
raw
:
match
[
0
],
},
text
:
text
renderer
,
};
};
}
},
renderer
};
}
}
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