Spaces:
Running
Running
Updated space. #3
Browse files- app.py +23 -1
- requirements.txt +4 -3
app.py
CHANGED
@@ -4,6 +4,7 @@ from sse_starlette.sse import EventSourceResponse
|
|
4 |
from typing import (List, Tuple, Optional)
|
5 |
from fastapi import FastAPI, Request
|
6 |
import gradio as gr
|
|
|
7 |
import threading
|
8 |
import requests
|
9 |
import argparse
|
@@ -21,7 +22,7 @@ import os
|
|
21 |
# --- === CONFIG === ---
|
22 |
|
23 |
ENV_HANDLE = "env"#or "url on env"
|
24 |
-
IMAGE_HANDLE = "
|
25 |
API_BASE = "env"# or "openai"
|
26 |
api_key = os.environ['API_API_KEY']
|
27 |
oai_api_key = os.environ['OPENAI_API_KEY']
|
@@ -422,6 +423,27 @@ def handleMultimodalData(model, role, data):
|
|
422 |
return {"role": role, "content": [{"type": "text", "text": "\n\n".join(handler)}] + result}
|
423 |
else:
|
424 |
return {"role": role, "content": [{"type": "text", "text": data.get('text', '')}] + result}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
elif isinstance(data, str):
|
426 |
return {"role": role, "content": data}
|
427 |
else:
|
|
|
4 |
from typing import (List, Tuple, Optional)
|
5 |
from fastapi import FastAPI, Request
|
6 |
import gradio as gr
|
7 |
+
import mimetypes
|
8 |
import threading
|
9 |
import requests
|
10 |
import argparse
|
|
|
22 |
# --- === CONFIG === ---
|
23 |
|
24 |
ENV_HANDLE = "env"#or "url on env"
|
25 |
+
IMAGE_HANDLE = "base64"# or "url"
|
26 |
API_BASE = "env"# or "openai"
|
27 |
api_key = os.environ['API_API_KEY']
|
28 |
oai_api_key = os.environ['OPENAI_API_KEY']
|
|
|
423 |
return {"role": role, "content": [{"type": "text", "text": "\n\n".join(handler)}] + result}
|
424 |
else:
|
425 |
return {"role": role, "content": [{"type": "text", "text": data.get('text', '')}] + result}
|
426 |
+
elif isinstance(data, Tuple):
|
427 |
+
file_path = data[0]
|
428 |
+
mime_type, _ = mimetypes.guess_type(file_path)
|
429 |
+
content = getattr(data, 'text', str(data))
|
430 |
+
|
431 |
+
if mime_type and mime_type.startswith("image/") and model in vision_models:
|
432 |
+
if IMAGE_HANDLE == "base64":
|
433 |
+
with open(file_path, "rb") as image_file:
|
434 |
+
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
|
435 |
+
return {"role": role, "content": [{"type": "image_url", "image_url": {"url": "data:" + mime_type + ";base64," + encoded_image}}]}
|
436 |
+
else:
|
437 |
+
return {"role": role, "content": [{"type": "image_url", "image_url": {"url": file_path}}]}
|
438 |
+
elif mime_type and (mime_type.startswith("text/") or mime_type.startswith("application/")):
|
439 |
+
try:
|
440 |
+
with open(file_path, "rb") as data_file:
|
441 |
+
file_content = data_file.read().decode('utf-8')
|
442 |
+
return {"role": role, "content": [{"type": "text", "text": "<|file_start|>" + os.path.basename(file_path) + "\n" + file_content + "<|file_end|>"}]}
|
443 |
+
except UnicodeDecodeError:
|
444 |
+
return {"role": role, "content": [{"type": "text", "text": content}]}
|
445 |
+
else:
|
446 |
+
return {"role": role, "content": content}
|
447 |
elif isinstance(data, str):
|
448 |
return {"role": role, "content": data}
|
449 |
else:
|
requirements.txt
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
-
uvicorn==0.27.1
|
2 |
-
starlette==0.37.2
|
3 |
sse-starlette==2.1.2
|
|
|
4 |
requests==2.31.0
|
5 |
-
|
|
|
|
|
|
|
|
|
|
1 |
sse-starlette==2.1.2
|
2 |
+
starlette==0.37.2
|
3 |
requests==2.31.0
|
4 |
+
mimetype==0.1.5
|
5 |
+
uvicorn==0.27.1
|
6 |
+
aiohttp==3.8.5
|