Spaces:
Running
Running
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
|