Skip to content

Commit 5d3d896

Browse files
author
Varun Puri
committed
Replace browser UI with Basic Streamlit UI Implementation
1 parent 3e6d647 commit 5d3d896

File tree

5 files changed

+93
-269
lines changed

5 files changed

+93
-269
lines changed

browser/browser.py

Lines changed: 93 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,97 @@
1-
import subprocess
2-
import sys
1+
2+
import streamlit as st
3+
4+
from build.builder import (
5+
_initialize_model,
6+
_initialize_tokenizer,
7+
BuilderArgs,
8+
TokenizerArgs,
9+
)
10+
from build.model import Transformer
11+
from build.utils import device_sync, set_precision
12+
from cli import add_arguments_for_verb, arg_init, check_args, logger
13+
14+
from generate import GeneratorArgs
15+
from api.api import *
16+
317

418

519
def main(args):
20+
builder_args = BuilderArgs.from_args(args)
21+
speculative_builder_args = BuilderArgs.from_speculative_args(args)
22+
tokenizer_args = TokenizerArgs.from_args(args)
23+
generator_args = GeneratorArgs.from_args(args)
24+
generator_args.chat_mode = False
25+
26+
@st.cache_resource
27+
def initialize_generator() -> OpenAIAPIGenerator:
28+
return OpenAIAPIGenerator(
29+
builder_args,
30+
speculative_builder_args,
31+
tokenizer_args,
32+
generator_args,
33+
args.profile,
34+
args.quantize,
35+
args.draft_quantize,
36+
)
37+
38+
gen = initialize_generator()
39+
40+
tokens_generated = 0
41+
st.title("TorchChat")
42+
43+
# Initialize chat history
44+
if "messages" not in st.session_state:
45+
st.session_state.messages = []
46+
47+
# Display chat messages from history on app rerun
48+
for message in st.session_state.messages:
49+
with st.chat_message(message["role"]):
50+
st.markdown(message["content"])
51+
52+
# Accept user input
53+
if prompt := st.chat_input("What is up?"):
54+
# Add user message to chat history
55+
st.session_state.messages.append({"role": "user", "content": prompt})
56+
# Display user message in chat message container
57+
with st.chat_message("user"):
58+
st.markdown(prompt)
59+
60+
# Display assistant response in chat message container
61+
with st.chat_message("assistant"), st.status("Generating... ", expanded=True) as status:
62+
63+
req = CompletionRequest(
64+
model = gen.builder_args.checkpoint_path,
65+
prompt = prompt,
66+
temperature = generator_args.temperature,
67+
messages = [],
68+
)
69+
70+
def unwrap(completion_generator):
71+
start = time.time()
72+
tokcount = 0
73+
for chunk_response in completion_generator:
74+
content = chunk_response.choices[0].delta.content
75+
if not gen.is_llama3_model or content not in set(gen.tokenizer.special_tokens.keys()):
76+
yield content
77+
if content == gen.tokenizer.eos_id():
78+
yield "."
79+
tokcount+=1
80+
status.update(label="Done, averaged {:.2f} tokens/second".format(tokcount/(time.time()-start)), state="complete")
81+
82+
response = st.write_stream(unwrap(gen.completion(req)))
83+
84+
# Add assistant response to chat history
85+
st.session_state.messages.append({"role": "assistant", "content": response})
86+
87+
88+
689

7-
# Directory Containing the server file "chat_in_browser.py"
8-
server_dir = "browser"
9-
10-
# Look for port from cmd args. Default to 5000 if not found.
11-
port = 5000
12-
i = 2
13-
while i < len(sys.argv):
14-
if sys.argv[i] == "--port":
15-
if i + 1 < len(sys.argv):
16-
# Extract the value and remove '--port' and the value from sys.argv
17-
port = sys.argv[i + 1]
18-
del sys.argv[i : i + 2]
19-
break
20-
else:
21-
i += 1
22-
23-
# Construct arguments for the flask app minus 'browser' command
24-
# plus '--chat'
25-
args_plus_chat = ["'{}'".format(s) for s in sys.argv[1:] if s != "browser"] + [
26-
'"--chat"'
27-
]
28-
formatted_args = ", ".join(args_plus_chat)
29-
command = [
30-
"flask",
31-
"--app",
32-
f"{server_dir}/chat_in_browser:create_app(" + formatted_args + ")",
33-
"run",
34-
"--port",
35-
f"{port}",
36-
]
37-
subprocess.run(command)
90+
if __name__ == "__main__":
91+
parser = argparse.ArgumentParser(description="torchchat generate CLI")
92+
verb = "generate"
93+
add_arguments_for_verb(parser, verb)
94+
args = parser.parse_args()
95+
check_args(args, verb)
96+
args = arg_init(args)
97+
main(args)

browser/chat_in_browser.py

Lines changed: 0 additions & 107 deletions
This file was deleted.

browser/static/css/style.css

Lines changed: 0 additions & 96 deletions
This file was deleted.

browser/templates/chat.html

Lines changed: 0 additions & 27 deletions
This file was deleted.

cli.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,6 @@ def add_arguments_for_verb(parser, verb: str):
261261
default=default_model_dir,
262262
help=f"The directory to store downloaded model artifacts. Default: {default_model_dir}",
263263
)
264-
parser.add_argument(
265-
"--port",
266-
type=int,
267-
default=5000,
268-
help="Port for the web server in browser mode",
269-
)
270264

271265

272266
def arg_init(args):

0 commit comments

Comments
 (0)