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
OpenDAS
ollama
Commits
c5bafaff
Commit
c5bafaff
authored
Jun 23, 2023
by
Bruce MacDonald
Browse files
package server with client
parent
f0eee3fa
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
183 additions
and
5 deletions
+183
-5
.gitignore
.gitignore
+2
-1
client/package-lock.json
client/package-lock.json
+126
-0
client/package.json
client/package.json
+3
-0
client/permissions-plugin.ts
client/permissions-plugin.ts
+24
-0
client/src/index.ts
client/src/index.ts
+13
-0
client/webpack.plugins.ts
client/webpack.plugins.ts
+9
-0
server/build.py
server/build.py
+5
-3
server/server.py
server/server.py
+1
-1
No files found.
.gitignore
View file @
c5bafaff
...
...
@@ -2,4 +2,5 @@
.vscode
*.spec
*/build
*/dist
\ No newline at end of file
*/dist
client/resources/server
\ No newline at end of file
client/package-lock.json
View file @
c5bafaff
...
...
@@ -24,12 +24,15 @@
"@electron-forge/maker-zip"
:
"^6.2.1"
,
"@electron-forge/plugin-auto-unpack-natives"
:
"^6.2.1"
,
"@electron-forge/plugin-webpack"
:
"^6.2.1"
,
"@types/chmodr"
:
"^1.0.0"
,
"@types/react"
:
"^18.2.14"
,
"@types/react-dom"
:
"^18.2.6"
,
"@typescript-eslint/eslint-plugin"
:
"^5.60.0"
,
"@typescript-eslint/parser"
:
"^5.60.0"
,
"@vercel/webpack-asset-relocator-loader"
:
"^1.7.3"
,
"babel-loader"
:
"^9.1.2"
,
"chmodr"
:
"^1.2.0"
,
"copy-webpack-plugin"
:
"^11.0.0"
,
"css-loader"
:
"^6.8.1"
,
"electron"
:
"25.2.0"
,
"eslint"
:
"^8.43.0"
,
...
...
@@ -2295,6 +2298,15 @@
"@types/responselike"
:
"^1.0.0"
}
},
"node_modules/@types/chmodr"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@types/chmodr/-/chmodr-1.0.0.tgz"
,
"integrity"
:
"sha512-S+X+Gy8V1uijitezjzXuan5vHbjllKgnC6q4VrD30HF2WRF6oIwQ/Wfjzvn5tGIIsl4VtRnBQbzqyzBo02juhw=="
,
"dev"
:
true
,
"dependencies"
:
{
"@types/node"
:
"*"
}
},
"node_modules/@types/connect"
:
{
"version"
:
"3.4.35"
,
"resolved"
:
"https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz"
,
...
...
@@ -3935,6 +3947,12 @@
"url"
:
"https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chmodr"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/chmodr/-/chmodr-1.2.0.tgz"
,
"integrity"
:
"sha512-Y5uI7Iq/Az6HgJEL6pdw7THVd7jbVOTPwsmcPOBjQL8e3N+pz872kzK5QxYGEy21iRys+iHWV0UZQXDFJo1hyA=="
,
"dev"
:
true
},
"node_modules/chokidar"
:
{
"version"
:
"3.5.3"
,
"resolved"
:
"https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
,
...
...
@@ -4288,6 +4306,114 @@
"integrity"
:
"sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
,
"dev"
:
true
},
"node_modules/copy-webpack-plugin"
:
{
"version"
:
"11.0.0"
,
"resolved"
:
"https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz"
,
"integrity"
:
"sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="
,
"dev"
:
true
,
"dependencies"
:
{
"fast-glob"
:
"^3.2.11"
,
"glob-parent"
:
"^6.0.1"
,
"globby"
:
"^13.1.1"
,
"normalize-path"
:
"^3.0.0"
,
"schema-utils"
:
"^4.0.0"
,
"serialize-javascript"
:
"^6.0.0"
},
"engines"
:
{
"node"
:
">= 14.15.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/webpack"
},
"peerDependencies"
:
{
"webpack"
:
"^5.1.0"
}
},
"node_modules/copy-webpack-plugin/node_modules/ajv"
:
{
"version"
:
"8.12.0"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz"
,
"integrity"
:
"sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="
,
"dev"
:
true
,
"dependencies"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"json-schema-traverse"
:
"^1.0.0"
,
"require-from-string"
:
"^2.0.2"
,
"uri-js"
:
"^4.2.2"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/epoberezkin"
}
},
"node_modules/copy-webpack-plugin/node_modules/ajv-keywords"
:
{
"version"
:
"5.1.0"
,
"resolved"
:
"https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz"
,
"integrity"
:
"sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="
,
"dev"
:
true
,
"dependencies"
:
{
"fast-deep-equal"
:
"^3.1.3"
},
"peerDependencies"
:
{
"ajv"
:
"^8.8.2"
}
},
"node_modules/copy-webpack-plugin/node_modules/globby"
:
{
"version"
:
"13.2.0"
,
"resolved"
:
"https://registry.npmjs.org/globby/-/globby-13.2.0.tgz"
,
"integrity"
:
"sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ=="
,
"dev"
:
true
,
"dependencies"
:
{
"dir-glob"
:
"^3.0.1"
,
"fast-glob"
:
"^3.2.11"
,
"ignore"
:
"^5.2.0"
,
"merge2"
:
"^1.4.1"
,
"slash"
:
"^4.0.0"
},
"engines"
:
{
"node"
:
"^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/copy-webpack-plugin/node_modules/json-schema-traverse"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
,
"integrity"
:
"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
,
"dev"
:
true
},
"node_modules/copy-webpack-plugin/node_modules/schema-utils"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz"
,
"integrity"
:
"sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw=="
,
"dev"
:
true
,
"dependencies"
:
{
"@types/json-schema"
:
"^7.0.9"
,
"ajv"
:
"^8.9.0"
,
"ajv-formats"
:
"^2.1.1"
,
"ajv-keywords"
:
"^5.1.0"
},
"engines"
:
{
"node"
:
">= 12.13.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/webpack"
}
},
"node_modules/copy-webpack-plugin/node_modules/slash"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"
,
"integrity"
:
"sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="
,
"dev"
:
true
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/core-util-is"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
,
...
...
client/package.json
View file @
c5bafaff
...
...
@@ -27,12 +27,15 @@
"@electron-forge/maker-zip"
:
"^6.2.1"
,
"@electron-forge/plugin-auto-unpack-natives"
:
"^6.2.1"
,
"@electron-forge/plugin-webpack"
:
"^6.2.1"
,
"@types/chmodr"
:
"^1.0.0"
,
"@types/react"
:
"^18.2.14"
,
"@types/react-dom"
:
"^18.2.6"
,
"@typescript-eslint/eslint-plugin"
:
"^5.60.0"
,
"@typescript-eslint/parser"
:
"^5.60.0"
,
"@vercel/webpack-asset-relocator-loader"
:
"^1.7.3"
,
"babel-loader"
:
"^9.1.2"
,
"chmodr"
:
"^1.2.0"
,
"copy-webpack-plugin"
:
"^11.0.0"
,
"css-loader"
:
"^6.8.1"
,
"electron"
:
"25.2.0"
,
"eslint"
:
"^8.43.0"
,
...
...
client/permissions-plugin.ts
0 → 100644
View file @
c5bafaff
import
chmodr
from
'
chmodr
'
import
*
as
path
from
'
path
'
interface
PluginOptions
{
resourcePath
:
string
}
class
PermissionsPlugin
{
options
:
PluginOptions
constructor
(
options
:
PluginOptions
)
{
this
.
options
=
options
}
apply
(
compiler
:
any
)
{
compiler
.
hooks
.
afterEmit
.
tap
(
'
PermissionsPlugin
'
,
()
=>
{
chmodr
(
path
.
join
(
this
.
options
.
resourcePath
),
0o755
,
err
=>
{
// this fails on the first call to suppress the error
})
})
}
}
export
default
PermissionsPlugin
client/src/index.ts
View file @
c5bafaff
import
{
app
,
BrowserWindow
}
from
'
electron
'
import
{
spawn
}
from
'
child_process
'
import
*
as
path
from
'
path
'
// This allows TypeScript to pick up the magic constants that's auto-generated by Forge's Webpack
// plugin that tells the Electron app where to look for the Webpack-bundled app code (depending on
// whether you're running in development or production).
...
...
@@ -24,6 +26,17 @@ const createWindow = (): void => {
transparent
:
true
,
})
// Start the executable
let
pyExecutable
=
path
.
join
(
__dirname
,
'
../renderer/resources/server
'
)
console
.
log
(
`Starting
${
pyExecutable
}
`
)
let
pyProcess
=
spawn
(
pyExecutable
)
pyProcess
.
stdout
.
on
(
'
data
'
,
data
=>
{
console
.
log
(
`server:
${
data
}
`
)
})
pyProcess
.
stderr
.
on
(
'
data
'
,
data
=>
{
console
.
error
(
`server:
${
data
}
`
)
})
// and load the index.html of the app.
mainWindow
.
loadURL
(
MAIN_WINDOW_WEBPACK_ENTRY
)
...
...
client/webpack.plugins.ts
View file @
c5bafaff
import
type
IForkTsCheckerWebpackPlugin
from
'
fork-ts-checker-webpack-plugin
'
import
*
as
path
from
'
path
'
import
PermissionsPlugin
from
'
./permissions-plugin
'
// eslint-disable-next-line @typescript-eslint/no-var-requires
const
ForkTsCheckerWebpackPlugin
:
typeof
IForkTsCheckerWebpackPlugin
=
require
(
'
fork-ts-checker-webpack-plugin
'
)
const
CopyWebpackPlugin
=
require
(
'
copy-webpack-plugin
'
)
export
const
plugins
=
[
new
ForkTsCheckerWebpackPlugin
({
logger
:
'
webpack-infrastructure
'
,
}),
new
CopyWebpackPlugin
({
patterns
:
[{
from
:
'
resources
'
,
to
:
'
resources
'
}],
}),
new
PermissionsPlugin
({
resourcePath
:
'
.webpack/renderer/resources/server
'
,
}),
]
server/build.py
View file @
c5bafaff
import
site
import
os
import
shutil
from
PyInstaller.__main__
import
run
as
pyi_run
#
Get the directory of site-packages and llama_cpp
#
the llama_cpp directory is not included if not explicitly added
site_packages_dir
=
site
.
getsitepackages
()[
0
]
llama_cpp_dir
=
os
.
path
.
join
(
site_packages_dir
,
"llama_cpp"
)
# Prepare the arguments for PyInstaller
args
=
[
"server.py"
,
"--paths"
,
...
...
@@ -16,5 +16,7 @@ args = [
"--onefile"
,
]
#
G
enerate the .spec file and run PyInstaller
#
g
enerate the .spec file and run PyInstaller
pyi_run
(
args
)
shutil
.
copy2
(
"dist/server"
,
"../client/resources/server"
)
server/server.py
View file @
c5bafaff
...
...
@@ -2,7 +2,7 @@ import json
import
os
from
llama_cpp
import
Llama
from
flask
import
Flask
,
Response
,
stream_with_context
,
request
from
flask_cors
import
CORS
,
cross_origin
from
flask_cors
import
CORS
app
=
Flask
(
__name__
)
CORS
(
app
)
# enable CORS for all routes
...
...
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