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
8b1e2ce2
"...resnet50_tensorflow.git" did not exist on "4c76404934075fca05355b4174fbde77bda6e5fb"
Commit
8b1e2ce2
authored
Jun 10, 2024
by
Timothy J. Baek
Browse files
feat: code format
parent
fb0f106a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
93 additions
and
1 deletion
+93
-1
backend/apps/webui/routers/utils.py
backend/apps/webui/routers/utils.py
+17
-0
src/lib/apis/utils/index.ts
src/lib/apis/utils/index.ts
+33
-0
src/lib/components/common/CodeEditor.svelte
src/lib/components/common/CodeEditor.svelte
+41
-1
src/lib/components/workspace/Tools/CodeEditor.svelte
src/lib/components/workspace/Tools/CodeEditor.svelte
+2
-0
No files found.
backend/apps/webui/routers/utils.py
View file @
8b1e2ce2
...
@@ -7,6 +7,8 @@ from pydantic import BaseModel
...
@@ -7,6 +7,8 @@ from pydantic import BaseModel
from
fpdf
import
FPDF
from
fpdf
import
FPDF
import
markdown
import
markdown
import
black
from
apps.webui.internal.db
import
DB
from
apps.webui.internal.db
import
DB
from
utils.utils
import
get_admin_user
from
utils.utils
import
get_admin_user
...
@@ -26,6 +28,21 @@ async def get_gravatar(
...
@@ -26,6 +28,21 @@ async def get_gravatar(
return
get_gravatar_url
(
email
)
return
get_gravatar_url
(
email
)
class
CodeFormatRequest
(
BaseModel
):
code
:
str
@
router
.
post
(
"/code/format"
)
async
def
format_code
(
request
:
CodeFormatRequest
):
try
:
formatted_code
=
black
.
format_str
(
request
.
code
,
mode
=
black
.
Mode
())
return
{
"code"
:
formatted_code
}
except
black
.
NothingChanged
:
return
{
"code"
:
request
.
code
}
except
Exception
as
e
:
raise
HTTPException
(
status_code
=
400
,
detail
=
str
(
e
))
class
MarkdownForm
(
BaseModel
):
class
MarkdownForm
(
BaseModel
):
md
:
str
md
:
str
...
...
src/lib/apis/utils/index.ts
View file @
8b1e2ce2
...
@@ -22,6 +22,39 @@ export const getGravatarUrl = async (email: string) => {
...
@@ -22,6 +22,39 @@ export const getGravatarUrl = async (email: string) => {
return
res
;
return
res
;
};
};
export
const
formatPythonCode
=
async
(
code
:
string
)
=>
{
let
error
=
null
;
const
res
=
await
fetch
(
`
${
WEBUI_API_BASE_URL
}
/utils/code/format`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
body
:
JSON
.
stringify
({
code
:
code
})
})
.
then
(
async
(
res
)
=>
{
if
(
!
res
.
ok
)
throw
await
res
.
json
();
return
res
.
json
();
})
.
catch
((
err
)
=>
{
console
.
log
(
err
);
error
=
err
;
if
(
err
.
detail
)
{
error
=
err
.
detail
;
}
return
null
;
});
if
(
error
)
{
throw
error
;
}
return
res
;
};
export
const
downloadChatAsPDF
=
async
(
chat
:
object
)
=>
{
export
const
downloadChatAsPDF
=
async
(
chat
:
object
)
=>
{
let
error
=
null
;
let
error
=
null
;
...
...
src/lib/components/common/CodeEditor.svelte
View file @
8b1e2ce2
...
@@ -6,10 +6,15 @@
...
@@ -6,10 +6,15 @@
import { acceptCompletion } from '@codemirror/autocomplete';
import { acceptCompletion } from '@codemirror/autocomplete';
import { indentWithTab } from '@codemirror/commands';
import { indentWithTab } from '@codemirror/commands';
import { indentUnit } from '@codemirror/language';
import { python } from '@codemirror/lang-python';
import { python } from '@codemirror/lang-python';
import { oneDark } from '@codemirror/theme-one-dark';
import { oneDark } from '@codemirror/theme-one-dark';
import { onMount } from 'svelte';
import { onMount, createEventDispatcher } from 'svelte';
import { formatPythonCode } from '$lib/apis/utils';
import { toast } from 'svelte-sonner';
const dispatch = createEventDispatcher();
export let boilerplate = '';
export let boilerplate = '';
export let value = '';
export let value = '';
...
@@ -19,10 +24,31 @@
...
@@ -19,10 +24,31 @@
let isDarkMode = false;
let isDarkMode = false;
let editorTheme = new Compartment();
let editorTheme = new Compartment();
const formatPythonCodeHandler = async () => {
if (codeEditor) {
console.log('formatPythonCodeHandler');
const res = await formatPythonCode(value).catch((error) => {
toast.error(error);
return null;
});
if (res && res.code) {
const formattedCode = res.code;
codeEditor.dispatch({
changes: [{ from: 0, to: codeEditor.state.doc.length, insert: formattedCode }]
});
return true;
}
return false;
}
};
let extensions = [
let extensions = [
basicSetup,
basicSetup,
keymap.of([{ key: 'Tab', run: acceptCompletion }, indentWithTab]),
keymap.of([{ key: 'Tab', run: acceptCompletion }, indentWithTab]),
python(),
python(),
indentUnit.of(' '),
placeholder('Enter your code here...'),
placeholder('Enter your code here...'),
EditorView.updateListener.of((e) => {
EditorView.updateListener.of((e) => {
if (e.docChanged) {
if (e.docChanged) {
...
@@ -78,8 +104,22 @@
...
@@ -78,8 +104,22 @@
attributeFilter: ['class']
attributeFilter: ['class']
});
});
// Add a keyboard shortcut to format the code when Ctrl/Cmd + S is pressed
// Override the default browser save functionality
const handleSave = (e) => {
if ((e.ctrlKey || e.metaKey) && e.key === 's') {
e.preventDefault();
formatPythonCodeHandler();
dispatch('save');
}
};
document.addEventListener('keydown', handleSave);
return () => {
return () => {
observer.disconnect();
observer.disconnect();
document.removeEventListener('keydown', handleSave);
};
};
});
});
</script>
</script>
...
...
src/lib/components/workspace/Tools/CodeEditor.svelte
View file @
8b1e2ce2
...
@@ -7,6 +7,8 @@
...
@@ -7,6 +7,8 @@
# Use Sphinx-style docstrings to document your tools, they will be used for generating tools specifications
# Use Sphinx-style docstrings to document your tools, they will be used for generating tools specifications
# Please refer to function_calling_filter_pipeline.py file from pipelines project for an example
# Please refer to function_calling_filter_pipeline.py file from pipelines project for an example
# Tip: Use Ctrl/Cmd + S to format the code
from datetime import datetime
from datetime import datetime
import requests
import requests
...
...
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