Update app.py
Browse files
app.py
CHANGED
@@ -14,18 +14,14 @@ CACHE_DIR = "/home/user/cache"
|
|
14 |
os.makedirs(CACHE_DIR, exist_ok=True)
|
15 |
|
16 |
# 减少内存占用
|
17 |
-
# os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:32"
|
18 |
-
# torch.set_num_threads(1)
|
19 |
os.environ["OMP_NUM_THREADS"] = "2"
|
20 |
os.environ["TOKENIZERS_PARALLELISM"] = "false" # 防止tokenizer内存泄漏
|
21 |
|
22 |
-
# 全局变量
|
23 |
index = None
|
24 |
metadata = None
|
25 |
|
26 |
-
|
27 |
-
return {"response": f"Echo: {message}"} # 输出需与 API 响应格式一致
|
28 |
-
|
29 |
def load_resources():
|
30 |
"""加载所有必要资源(768维专用)"""
|
31 |
# 清理残留锁文件
|
@@ -128,7 +124,7 @@ def predict(vector):
|
|
128 |
print(error_msg)
|
129 |
return "处理错误,请重试或联系管理员"
|
130 |
|
131 |
-
#
|
132 |
with gr.Blocks() as demo:
|
133 |
gr.Markdown("## 🛍 电商智能客服系统 (768维专用)")
|
134 |
gr.Markdown("**使用CLIP-vit-large-patch14模型 | 向量维度: 768**")
|
@@ -148,53 +144,28 @@ with gr.Blocks() as demo:
|
|
148 |
inputs=vector_input,
|
149 |
outputs=output
|
150 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
|
152 |
# 启动应用
|
153 |
if __name__ == "__main__":
|
154 |
-
# 预加载资源
|
155 |
if index is None or metadata is None:
|
156 |
-
|
157 |
-
try:
|
158 |
-
load_resources()
|
159 |
-
except Exception as e:
|
160 |
-
print(f"⛔ 资源加载失败: {str(e)}")
|
161 |
-
sys.exit(1)
|
162 |
-
|
163 |
-
# 确保缓存目录存在
|
164 |
-
# import pathlib
|
165 |
-
# pathlib.Path(CACHE_DIR).mkdir(parents=True, exist_ok=True)
|
166 |
-
|
167 |
-
try:
|
168 |
-
dummy_vector = [0.1] * 768
|
169 |
-
predict([dummy_vector])
|
170 |
-
except:
|
171 |
-
pass
|
172 |
|
|
|
173 |
print("="*50)
|
174 |
print("Space启动完成 | 准备接收请求")
|
175 |
print(f"索引维度: {index.d if index else '未加载'}")
|
176 |
print(f"元数据记录: {len(metadata) if metadata is not None else 0}")
|
177 |
print("="*50)
|
178 |
|
179 |
-
#
|
180 |
-
# demo = gr.Interface(
|
181 |
-
# fn=respond,
|
182 |
-
# inputs="text",
|
183 |
-
# outputs="json",
|
184 |
-
# api_name="predict",
|
185 |
-
# live=False
|
186 |
-
# )
|
187 |
-
|
188 |
-
with gr.Blocks() as app:
|
189 |
-
input_text = gr.Textbox(label="Input")
|
190 |
-
output_text = gr.JSON(label="Output")
|
191 |
-
input_text.change(
|
192 |
-
fn=respond,
|
193 |
-
inputs=input_text,
|
194 |
-
outputs=output_text,
|
195 |
-
api_name="predict" # 显式声明 API 名称
|
196 |
-
)
|
197 |
-
|
198 |
demo.launch(
|
199 |
server_name="0.0.0.0",
|
200 |
server_port=7860,
|
|
|
14 |
os.makedirs(CACHE_DIR, exist_ok=True)
|
15 |
|
16 |
# 减少内存占用
|
|
|
|
|
17 |
os.environ["OMP_NUM_THREADS"] = "2"
|
18 |
os.environ["TOKENIZERS_PARALLELISM"] = "false" # 防止tokenizer内存泄漏
|
19 |
|
20 |
+
# 全局变量
|
21 |
index = None
|
22 |
metadata = None
|
23 |
|
24 |
+
# 加载资源函数(保持不变)
|
|
|
|
|
25 |
def load_resources():
|
26 |
"""加载所有必要资源(768维专用)"""
|
27 |
# 清理残留锁文件
|
|
|
124 |
print(error_msg)
|
125 |
return "处理错误,请重试或联系管理员"
|
126 |
|
127 |
+
# **合并后的 Blocks 实例**
|
128 |
with gr.Blocks() as demo:
|
129 |
gr.Markdown("## 🛍 电商智能客服系统 (768维专用)")
|
130 |
gr.Markdown("**使用CLIP-vit-large-patch14模型 | 向量维度: 768**")
|
|
|
144 |
inputs=vector_input,
|
145 |
outputs=output
|
146 |
)
|
147 |
+
|
148 |
+
# 显式暴露 API 端点
|
149 |
+
gr.Interface(
|
150 |
+
fn=predict,
|
151 |
+
inputs=vector_input,
|
152 |
+
outputs=output,
|
153 |
+
api_name="predict" # 显式声明 API 名称
|
154 |
+
)
|
155 |
|
156 |
# 启动应用
|
157 |
if __name__ == "__main__":
|
|
|
158 |
if index is None or metadata is None:
|
159 |
+
load_resources()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
|
161 |
+
# 验证 API 是否生成
|
162 |
print("="*50)
|
163 |
print("Space启动完成 | 准备接收请求")
|
164 |
print(f"索引维度: {index.d if index else '未加载'}")
|
165 |
print(f"元数据记录: {len(metadata) if metadata is not None else 0}")
|
166 |
print("="*50)
|
167 |
|
168 |
+
# 启动应用(确保 API 暴露)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
demo.launch(
|
170 |
server_name="0.0.0.0",
|
171 |
server_port=7860,
|