Spaces:
Runtime error
Runtime error
feat: Add Panel app code
Browse files- .gitignore +162 -0
- CODE_OF_CONDUCT.md +127 -0
- Dockerfile +3 -0
- LICENSE +28 -0
- README.md +23 -2
- app.py +48 -0
- apt.txt +5 -0
- environment.yml +13 -0
- setup.py +43 -0
- start +9 -0
.gitignore
ADDED
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Byte-compiled / optimized / DLL files
|
2 |
+
__pycache__/
|
3 |
+
*.py[cod]
|
4 |
+
*$py.class
|
5 |
+
|
6 |
+
# C extensions
|
7 |
+
*.so
|
8 |
+
|
9 |
+
# Distribution / packaging
|
10 |
+
.Python
|
11 |
+
build/
|
12 |
+
develop-eggs/
|
13 |
+
dist/
|
14 |
+
downloads/
|
15 |
+
eggs/
|
16 |
+
.eggs/
|
17 |
+
lib/
|
18 |
+
lib64/
|
19 |
+
parts/
|
20 |
+
sdist/
|
21 |
+
var/
|
22 |
+
wheels/
|
23 |
+
share/python-wheels/
|
24 |
+
*.egg-info/
|
25 |
+
.installed.cfg
|
26 |
+
*.egg
|
27 |
+
MANIFEST
|
28 |
+
|
29 |
+
# PyInstaller
|
30 |
+
# Usually these files are written by a python script from a template
|
31 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
32 |
+
*.manifest
|
33 |
+
*.spec
|
34 |
+
|
35 |
+
# Installer logs
|
36 |
+
pip-log.txt
|
37 |
+
pip-delete-this-directory.txt
|
38 |
+
|
39 |
+
# Unit test / coverage reports
|
40 |
+
htmlcov/
|
41 |
+
.tox/
|
42 |
+
.nox/
|
43 |
+
.coverage
|
44 |
+
.coverage.*
|
45 |
+
.cache
|
46 |
+
nosetests.xml
|
47 |
+
coverage.xml
|
48 |
+
*.cover
|
49 |
+
*.py,cover
|
50 |
+
.hypothesis/
|
51 |
+
.pytest_cache/
|
52 |
+
cover/
|
53 |
+
|
54 |
+
# Translations
|
55 |
+
*.mo
|
56 |
+
*.pot
|
57 |
+
|
58 |
+
# Django stuff:
|
59 |
+
*.log
|
60 |
+
local_settings.py
|
61 |
+
db.sqlite3
|
62 |
+
db.sqlite3-journal
|
63 |
+
|
64 |
+
# Flask stuff:
|
65 |
+
instance/
|
66 |
+
.webassets-cache
|
67 |
+
|
68 |
+
# Scrapy stuff:
|
69 |
+
.scrapy
|
70 |
+
|
71 |
+
# Sphinx documentation
|
72 |
+
docs/_build/
|
73 |
+
|
74 |
+
# PyBuilder
|
75 |
+
.pybuilder/
|
76 |
+
target/
|
77 |
+
|
78 |
+
# Jupyter Notebook
|
79 |
+
.ipynb_checkpoints
|
80 |
+
|
81 |
+
# IPython
|
82 |
+
profile_default/
|
83 |
+
ipython_config.py
|
84 |
+
|
85 |
+
# pyenv
|
86 |
+
# For a library or package, you might want to ignore these files since the code is
|
87 |
+
# intended to run in multiple environments; otherwise, check them in:
|
88 |
+
# .python-version
|
89 |
+
|
90 |
+
# pipenv
|
91 |
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
92 |
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
93 |
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
94 |
+
# install all needed dependencies.
|
95 |
+
#Pipfile.lock
|
96 |
+
|
97 |
+
# poetry
|
98 |
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
99 |
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
100 |
+
# commonly ignored for libraries.
|
101 |
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
102 |
+
#poetry.lock
|
103 |
+
|
104 |
+
# pdm
|
105 |
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
106 |
+
#pdm.lock
|
107 |
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
108 |
+
# in version control.
|
109 |
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
110 |
+
.pdm.toml
|
111 |
+
.pdm-python
|
112 |
+
.pdm-build/
|
113 |
+
|
114 |
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
115 |
+
__pypackages__/
|
116 |
+
|
117 |
+
# Celery stuff
|
118 |
+
celerybeat-schedule
|
119 |
+
celerybeat.pid
|
120 |
+
|
121 |
+
# SageMath parsed files
|
122 |
+
*.sage.py
|
123 |
+
|
124 |
+
# Environments
|
125 |
+
.env
|
126 |
+
.venv
|
127 |
+
env/
|
128 |
+
venv/
|
129 |
+
ENV/
|
130 |
+
env.bak/
|
131 |
+
venv.bak/
|
132 |
+
|
133 |
+
# Spyder project settings
|
134 |
+
.spyderproject
|
135 |
+
.spyproject
|
136 |
+
|
137 |
+
# Rope project settings
|
138 |
+
.ropeproject
|
139 |
+
|
140 |
+
# mkdocs documentation
|
141 |
+
/site
|
142 |
+
|
143 |
+
# mypy
|
144 |
+
.mypy_cache/
|
145 |
+
.dmypy.json
|
146 |
+
dmypy.json
|
147 |
+
|
148 |
+
# Pyre type checker
|
149 |
+
.pyre/
|
150 |
+
|
151 |
+
# pytype static type analyzer
|
152 |
+
.pytype/
|
153 |
+
|
154 |
+
# Cython debug symbols
|
155 |
+
cython_debug/
|
156 |
+
|
157 |
+
# PyCharm
|
158 |
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
159 |
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
160 |
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
161 |
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
162 |
+
#.idea/
|
CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Contributor Covenant Code of Conduct
|
2 |
+
|
3 |
+
## Our Pledge
|
4 |
+
|
5 |
+
We as members, contributors, and leaders pledge to make participation in our
|
6 |
+
community a harassment-free experience for everyone, regardless of age, body
|
7 |
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
8 |
+
identity and expression, level of experience, education, socio-economic status,
|
9 |
+
nationality, personal appearance, race, religion, or sexual identity
|
10 |
+
and orientation.
|
11 |
+
|
12 |
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
13 |
+
diverse, inclusive, and healthy community.
|
14 |
+
|
15 |
+
## Our Standards
|
16 |
+
|
17 |
+
Examples of behavior that contributes to a positive environment for our
|
18 |
+
community include:
|
19 |
+
|
20 |
+
* Demonstrating empathy and kindness toward other people
|
21 |
+
* Being respectful of differing opinions, viewpoints, and experiences
|
22 |
+
* Giving and gracefully accepting constructive feedback
|
23 |
+
* Accepting responsibility and apologizing to those affected by our mistakes,
|
24 |
+
and learning from the experience
|
25 |
+
* Focusing on what is best not just for us as individuals, but for the
|
26 |
+
overall community
|
27 |
+
|
28 |
+
Examples of unacceptable behavior include:
|
29 |
+
|
30 |
+
* The use of sexualized language or imagery, and sexual attention or
|
31 |
+
advances of any kind
|
32 |
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
33 |
+
* Public or private harassment
|
34 |
+
* Publishing others' private information, such as a physical or email
|
35 |
+
address, without their explicit permission
|
36 |
+
* Other conduct which could reasonably be considered inappropriate in a
|
37 |
+
professional setting
|
38 |
+
|
39 |
+
## Enforcement Responsibilities
|
40 |
+
|
41 |
+
Maintainers are responsible for clarifying and enforcing our standards of
|
42 |
+
acceptable behavior and will take appropriate and fair corrective action in
|
43 |
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
44 |
+
or harmful.
|
45 |
+
|
46 |
+
Maintainers have the right and responsibility to remove, edit, or reject
|
47 |
+
comments, commits, code, wiki edits, issues, and other contributions that are
|
48 |
+
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
49 |
+
decisions when appropriate.
|
50 |
+
|
51 |
+
## Scope
|
52 |
+
|
53 |
+
This Code of Conduct applies within all community spaces, and also applies when
|
54 |
+
an individual is officially representing the community in public spaces.
|
55 |
+
Examples of representing our community include using an official e-mail address,
|
56 |
+
posting via an official social media account, or acting as an appointed
|
57 |
+
representative at an online or offline event.
|
58 |
+
|
59 |
+
## Enforcement
|
60 |
+
|
61 |
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
62 |
+
reported to the maintainers responsible for enforcement anonymously in a form [here](https://form.jotform.us/70666109215151).
|
63 |
+
All complaints will be reviewed and investigated promptly and fairly.
|
64 |
+
|
65 |
+
All maintainers are obligated to respect the privacy and security of the
|
66 |
+
reporter of any incident.
|
67 |
+
|
68 |
+
## Enforcement Guidelines
|
69 |
+
|
70 |
+
Maintainers will follow these Community Impact Guidelines in determining
|
71 |
+
the consequences for any action they deem in violation of this Code of Conduct:
|
72 |
+
|
73 |
+
### 1. Correction
|
74 |
+
|
75 |
+
**Community Impact**: Use of inappropriate language or other behavior deemed
|
76 |
+
unprofessional or unwelcome in the community.
|
77 |
+
|
78 |
+
**Consequence**: A private, written warning from maintainers, providing
|
79 |
+
clarity around the nature of the violation and an explanation of why the
|
80 |
+
behavior was inappropriate. A public apology may be requested.
|
81 |
+
|
82 |
+
### 2. Warning
|
83 |
+
|
84 |
+
**Community Impact**: A violation through a single incident or series
|
85 |
+
of actions.
|
86 |
+
|
87 |
+
**Consequence**: A warning with consequences for continued behavior. No
|
88 |
+
interaction with the people involved, including unsolicited interaction with
|
89 |
+
those enforcing the Code of Conduct, for a specified period of time. This
|
90 |
+
includes avoiding interactions in community spaces as well as external channels
|
91 |
+
like social media. Violating these terms may lead to a temporary or
|
92 |
+
permanent ban.
|
93 |
+
|
94 |
+
### 3. Temporary Ban
|
95 |
+
|
96 |
+
**Community Impact**: A serious violation of community standards, including
|
97 |
+
sustained inappropriate behavior.
|
98 |
+
|
99 |
+
**Consequence**: A temporary ban from any sort of interaction or public
|
100 |
+
communication with the community for a specified period of time. No public or
|
101 |
+
private interaction with the people involved, including unsolicited interaction
|
102 |
+
with those enforcing the Code of Conduct, is allowed during this period.
|
103 |
+
Violating these terms may lead to a permanent ban.
|
104 |
+
|
105 |
+
### 4. Permanent Ban
|
106 |
+
|
107 |
+
**Community Impact**: Demonstrating a pattern of violation of community
|
108 |
+
standards, including sustained inappropriate behavior, harassment of an
|
109 |
+
individual, or aggression toward or disparagement of classes of individuals.
|
110 |
+
|
111 |
+
**Consequence**: A permanent ban from any sort of public interaction within
|
112 |
+
the community.
|
113 |
+
|
114 |
+
## Attribution
|
115 |
+
|
116 |
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
117 |
+
version 2.0, available at
|
118 |
+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
119 |
+
|
120 |
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
121 |
+
enforcement ladder](https://github.com/mozilla/diversity).
|
122 |
+
|
123 |
+
[homepage]: https://www.contributor-covenant.org
|
124 |
+
|
125 |
+
For answers to common questions about this code of conduct, see the FAQ at
|
126 |
+
https://www.contributor-covenant.org/faq. Translations are available at
|
127 |
+
https://www.contributor-covenant.org/translations.
|
Dockerfile
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
FROM ghcr.io/uw-ssec/base-image:latest
|
2 |
+
|
3 |
+
CMD ["panel", "serve", "app.py", "--address", "0.0.0.0", "--port", "7860", "--allow-websocket-origin", "*"]
|
LICENSE
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
BSD 3-Clause License
|
2 |
+
|
3 |
+
Copyright (c) 2024, UW Scientific Software Engineering Center
|
4 |
+
|
5 |
+
Redistribution and use in source and binary forms, with or without
|
6 |
+
modification, are permitted provided that the following conditions are met:
|
7 |
+
|
8 |
+
1. Redistributions of source code must retain the above copyright notice, this
|
9 |
+
list of conditions and the following disclaimer.
|
10 |
+
|
11 |
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
12 |
+
this list of conditions and the following disclaimer in the documentation
|
13 |
+
and/or other materials provided with the distribution.
|
14 |
+
|
15 |
+
3. Neither the name of the copyright holder nor the names of its
|
16 |
+
contributors may be used to endorse or promote products derived from
|
17 |
+
this software without specific prior written permission.
|
18 |
+
|
19 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
22 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
23 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
24 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
25 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
26 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
27 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
---
|
2 |
-
title: Olmo Chat
|
3 |
emoji: 📚
|
4 |
colorFrom: yellow
|
5 |
colorTo: pink
|
@@ -8,4 +8,25 @@ pinned: false
|
|
8 |
license: bsd-3-clause
|
9 |
---
|
10 |
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
+
title: Olmo Chat Demo
|
3 |
emoji: 📚
|
4 |
colorFrom: yellow
|
5 |
colorTo: pink
|
|
|
8 |
license: bsd-3-clause
|
9 |
---
|
10 |
|
11 |
+
## Olmo Chat Demonstration
|
12 |
+
|
13 |
+
This is a demonstration of the Olmo Chat application.
|
14 |
+
It is a simple chat application that allows users to interact with the [OLMo-7B-Instruct-GGUF](https://huggingface.co/ssec-uw/OLMo-7B-Instruct-GGUF) model.
|
15 |
+
|
16 |
+
This application is built using the following technologies:
|
17 |
+
|
18 |
+
- [Panel](https://panel.holoviz.org/)
|
19 |
+
- [LangChain v0.1](https://python.langchain.com/v0.1/)
|
20 |
+
- [llama-cpp-python](https://github.com/abetlen/llama-cpp-python)
|
21 |
+
|
22 |
+
## Contact
|
23 |
+
|
24 |
+
For errors in this application, contact Don, landungs at uw dot edu.
|
25 |
+
|
26 |
+
## Acknowledgement
|
27 |
+
|
28 |
+
We would like to thank the hardworking folks at [Allen AI](https://huggingface.co/allenai) for providing the original model.
|
29 |
+
|
30 |
+
Additionally, the work to convert and quantize the model was done by the
|
31 |
+
[University of Washington Scientific Software Engineering Center (SSEC)](https://escience.washington.edu/software-engineering/ssec/),
|
32 |
+
as part of the [Schmidt Futures Virtual Institute for Scientific Software (VISS)](https://www.schmidtsciences.org/viss/).
|
app.py
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import panel as pn
|
2 |
+
from langchain.llms import LlamaCpp
|
3 |
+
from langchain_core.callbacks import CallbackManager
|
4 |
+
from langchain_core.prompts import PromptTemplate
|
5 |
+
|
6 |
+
from setup import OLMO_MODEL
|
7 |
+
|
8 |
+
template = """<|user|>{contents}<|user|>"""
|
9 |
+
prompt = PromptTemplate.from_template(template)
|
10 |
+
|
11 |
+
pn.extension(design="bootstrap", sizing_mode="stretch_width")
|
12 |
+
|
13 |
+
model_path = OLMO_MODEL
|
14 |
+
model_name = "OLMo"
|
15 |
+
model_avatar = "🌳"
|
16 |
+
|
17 |
+
def callback(contents, user, instance):
|
18 |
+
callback_handler = pn.chat.langchain.PanelCallbackHandler(instance, user=model_name, avatar=model_avatar)
|
19 |
+
# Not return the result at the end of the generation
|
20 |
+
# this prevents the model from repeating the result
|
21 |
+
callback_handler.on_llm_end = lambda response, *args, **kwargs: None
|
22 |
+
# Callbacks support token-wise streaming
|
23 |
+
callback_manager = CallbackManager([callback_handler])
|
24 |
+
llm = LlamaCpp(
|
25 |
+
model_path=str(model_path),
|
26 |
+
callback_manager=callback_manager,
|
27 |
+
temperature=0.8,
|
28 |
+
max_tokens=512,
|
29 |
+
verbose=False,
|
30 |
+
echo=False
|
31 |
+
)
|
32 |
+
llm_chain = prompt | llm
|
33 |
+
llm_chain.invoke({"contents": contents})
|
34 |
+
|
35 |
+
chat_interface = pn.chat.ChatInterface(callback=callback)
|
36 |
+
|
37 |
+
# create dashboard
|
38 |
+
main = pn.WidgetBox(
|
39 |
+
f"##### {model_avatar} Chat with {model_name} with the interface below!",
|
40 |
+
pn.Column(chat_interface, height=500, scroll=True)
|
41 |
+
)
|
42 |
+
|
43 |
+
title = f"{model_name} Chat Demo"
|
44 |
+
pn.template.BootstrapTemplate(
|
45 |
+
title=title,
|
46 |
+
main=main,
|
47 |
+
main_max_width="min(50%, 698px)",
|
48 |
+
).servable(title=title)
|
apt.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
build-essential
|
2 |
+
git
|
3 |
+
ncdu
|
4 |
+
curl
|
5 |
+
vim
|
environment.yml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: olmo-app
|
2 |
+
channels:
|
3 |
+
- conda-forge
|
4 |
+
- defaults
|
5 |
+
dependencies:
|
6 |
+
- python=3.11
|
7 |
+
- ipykernel
|
8 |
+
- langchain>=0.1.20
|
9 |
+
- libopenblas
|
10 |
+
- panel
|
11 |
+
- pip
|
12 |
+
- pip:
|
13 |
+
- llama-cpp-python>=0.2.70 -C cmake.args="-DLLAMA_BLAS=ON;-DLLAMA_BLAS_VENDOR=OpenBLAS"
|
setup.py
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from pathlib import Path
|
3 |
+
from urllib.request import urlretrieve
|
4 |
+
|
5 |
+
HOME_DIR = Path.home()
|
6 |
+
APP_CACHE = HOME_DIR / "olmo_demo"
|
7 |
+
|
8 |
+
OLMO_MODEL_FILE = os.environ.get("OLMO_MODEL_FILE", "OLMo-7B-Instruct-Q4_K_M.gguf")
|
9 |
+
OLMO_MODEL = APP_CACHE / OLMO_MODEL_FILE
|
10 |
+
|
11 |
+
def download_olmo_model(model_file: str | None = None, force=False) -> Path:
|
12 |
+
"""Download the OLMO model from the Hugging Face model hub.
|
13 |
+
|
14 |
+
Parameters
|
15 |
+
----------
|
16 |
+
model_file : str | None, optional
|
17 |
+
The name of the model file to download, by default None
|
18 |
+
force : bool, optional
|
19 |
+
Whether to force the download even if the file already exists, by default False
|
20 |
+
|
21 |
+
Returns
|
22 |
+
-------
|
23 |
+
pathlib.Path
|
24 |
+
The path to the downloaded model file
|
25 |
+
"""
|
26 |
+
if not OLMO_MODEL.exists() or force:
|
27 |
+
if model_file is None:
|
28 |
+
model_file = OLMO_MODEL_FILE
|
29 |
+
olmo_model = OLMO_MODEL
|
30 |
+
else:
|
31 |
+
olmo_model = APP_CACHE / model_file
|
32 |
+
olmo_model_url = f"https://huggingface.co/ssec-uw/OLMo-7B-Instruct-GGUF/resolve/main/{model_file}"
|
33 |
+
print(f"Downloading model from {olmo_model_url} to {olmo_model}")
|
34 |
+
urlretrieve(olmo_model_url, olmo_model)
|
35 |
+
print("Download complete!")
|
36 |
+
return olmo_model
|
37 |
+
else:
|
38 |
+
print(f"Model already exists at {OLMO_MODEL}")
|
39 |
+
return OLMO_MODEL
|
40 |
+
|
41 |
+
if __name__ == "__main__":
|
42 |
+
APP_CACHE.mkdir(parents=True, exist_ok=True)
|
43 |
+
download_olmo_model()
|
start
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash -l
|
2 |
+
|
3 |
+
# ==== ONLY EDIT WITHIN THIS BLOCK =====
|
4 |
+
|
5 |
+
python ${HOME}/setup.py
|
6 |
+
|
7 |
+
# ==== ONLY EDIT WITHIN THIS BLOCK =====
|
8 |
+
|
9 |
+
exec "$@"
|