data
Browse files- .DS_Store +0 -0
- starvector/.DS_Store +0 -0
- starvector/serve/.DS_Store +0 -0
- starvector/serve/vllm_api_gradio/gradio_web_server.py +35 -4
.DS_Store
CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
|
|
starvector/.DS_Store
CHANGED
Binary files a/starvector/.DS_Store and b/starvector/.DS_Store differ
|
|
starvector/serve/.DS_Store
CHANGED
Binary files a/starvector/serve/.DS_Store and b/starvector/serve/.DS_Store differ
|
|
starvector/serve/vllm_api_gradio/gradio_web_server.py
CHANGED
@@ -8,6 +8,13 @@ import requests
|
|
8 |
from starvector.serve.conversation import default_conversation
|
9 |
from starvector.serve.constants import LOGDIR, CLIP_QUERY_LENGTH
|
10 |
from starvector.serve.util import (build_logger, server_error_msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
logger = build_logger("gradio_web_server", "gradio_web_server.log")
|
13 |
headers = {"User-Agent": "StarVector Client"}
|
@@ -20,6 +27,11 @@ priority = {
|
|
20 |
"starvector-1b": "aaaaaaa",
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
23 |
def get_conv_log_filename():
|
24 |
t = datetime.datetime.now()
|
25 |
name = os.path.join(LOGDIR, f"{t.year}-{t.month:02d}-{t.day:02d}-conv.json")
|
@@ -108,6 +120,22 @@ def clear_history(request: gr.Request):
|
|
108 |
state = default_conversation.copy()
|
109 |
return (state, None, None) + (disable_btn,) * 7
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
def send_data(state, image, image_process_mode, text_caption, task, request: gr.Request):
|
112 |
logger.info(f"send_data. ip: {request.client.host}.")
|
113 |
if task == 'Image2SVG':
|
@@ -115,11 +143,15 @@ def send_data(state, image, image_process_mode, text_caption, task, request: gr.
|
|
115 |
state.skip_next = True
|
116 |
return (state, None, None, image) + (no_change_btn,) * 7
|
117 |
|
|
|
|
|
|
|
|
|
118 |
# Reset the conversation state when a new image is uploaded
|
119 |
state = default_conversation.copy()
|
120 |
|
121 |
-
|
122 |
-
|
123 |
state.append_message(state.roles[0], image_message)
|
124 |
state.append_message(state.roles[1], "β")
|
125 |
state.skip_next = False
|
@@ -130,9 +162,8 @@ def send_data(state, image, image_process_mode, text_caption, task, request: gr.
|
|
130 |
state.skip_next = True
|
131 |
return (state, None, None, image) + (no_change_btn,) * 7
|
132 |
|
133 |
-
# Reset
|
134 |
state = default_conversation.copy()
|
135 |
-
|
136 |
state.append_message(state.roles[0], text_caption)
|
137 |
state.append_message(state.roles[1], "β")
|
138 |
state.skip_next = False
|
|
|
8 |
from starvector.serve.conversation import default_conversation
|
9 |
from starvector.serve.constants import LOGDIR, CLIP_QUERY_LENGTH
|
10 |
from starvector.serve.util import (build_logger, server_error_msg)
|
11 |
+
import boto3
|
12 |
+
import hashlib
|
13 |
+
from io import BytesIO
|
14 |
+
|
15 |
+
# Configure your S3 bucket and key prefix (you can also use environment variables)
|
16 |
+
S3_BUCKET_NAME = os.getenv("S3_BUCKET_NAME", "your-bucket-name")
|
17 |
+
S3_KEY_PREFIX = os.getenv("S3_KEY_PREFIX", "uploads")
|
18 |
|
19 |
logger = build_logger("gradio_web_server", "gradio_web_server.log")
|
20 |
headers = {"User-Agent": "StarVector Client"}
|
|
|
27 |
"starvector-1b": "aaaaaaa",
|
28 |
}
|
29 |
|
30 |
+
|
31 |
+
# Configure your S3 bucket and key prefix (you can also use environment variables)
|
32 |
+
S3_BUCKET_NAME = os.getenv("S3_BUCKET_NAME", "your-bucket-name")
|
33 |
+
S3_KEY_PREFIX = os.getenv("S3_KEY_PREFIX", "starvector_uploads")
|
34 |
+
|
35 |
def get_conv_log_filename():
|
36 |
t = datetime.datetime.now()
|
37 |
name = os.path.join(LOGDIR, f"{t.year}-{t.month:02d}-{t.day:02d}-conv.json")
|
|
|
120 |
state = default_conversation.copy()
|
121 |
return (state, None, None) + (disable_btn,) * 7
|
122 |
|
123 |
+
def upload_image_to_s3(image, bucket_name=S3_BUCKET_NAME, key_prefix=S3_KEY_PREFIX):
|
124 |
+
"""
|
125 |
+
Upload a PIL Image to S3.
|
126 |
+
"""
|
127 |
+
s3 = boto3.client("s3")
|
128 |
+
buffer = BytesIO()
|
129 |
+
# Save image to buffer; adjust format as needed (e.g., "PNG" or "JPEG")
|
130 |
+
image.save(buffer, format="JPEG")
|
131 |
+
buffer.seek(0)
|
132 |
+
# Create a unique S3 key using a timestamp
|
133 |
+
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
134 |
+
img_md5 = str(hashlib.md5(buffer.getvalue()).hexdigest())
|
135 |
+
s3_key = f"{key_prefix}/image_{img_md5}.jpeg"
|
136 |
+
s3.upload_fileobj(buffer, bucket_name, s3_key)
|
137 |
+
return s3_key
|
138 |
+
|
139 |
def send_data(state, image, image_process_mode, text_caption, task, request: gr.Request):
|
140 |
logger.info(f"send_data. ip: {request.client.host}.")
|
141 |
if task == 'Image2SVG':
|
|
|
143 |
state.skip_next = True
|
144 |
return (state, None, None, image) + (no_change_btn,) * 7
|
145 |
|
146 |
+
# Upload the image to S3
|
147 |
+
s3_key = upload_image_to_s3(image)
|
148 |
+
logger.info(f"Image uploaded to S3 at key: {s3_key}")
|
149 |
+
|
150 |
# Reset the conversation state when a new image is uploaded
|
151 |
state = default_conversation.copy()
|
152 |
|
153 |
+
# Prepare image message (you can also include the S3 URL or key if needed)
|
154 |
+
image_message = (image, image_process_mode)
|
155 |
state.append_message(state.roles[0], image_message)
|
156 |
state.append_message(state.roles[1], "β")
|
157 |
state.skip_next = False
|
|
|
162 |
state.skip_next = True
|
163 |
return (state, None, None, image) + (no_change_btn,) * 7
|
164 |
|
165 |
+
# Reset conversation for text inputs too
|
166 |
state = default_conversation.copy()
|
|
|
167 |
state.append_message(state.roles[0], text_caption)
|
168 |
state.append_message(state.roles[1], "β")
|
169 |
state.skip_next = False
|