12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from open_webui.routers.images import (
- load_b64_image_data,
- upload_image,
- )
- from fastapi import (
- APIRouter,
- Depends,
- HTTPException,
- Request,
- UploadFile,
- )
- from open_webui.routers.files import upload_file_handler
- import mimetypes
- import base64
- import io
- def get_image_url_from_base64(request, base64_image_string, metadata, user):
- if "data:image/png;base64" in base64_image_string:
- image_url = ""
- # Extract base64 image data from the line
- image_data, content_type = load_b64_image_data(base64_image_string)
- if image_data is not None:
- image_url = upload_image(
- request,
- image_data,
- content_type,
- metadata,
- user,
- )
- return image_url
- return None
- def load_b64_audio_data(b64_str):
- try:
- if "," in b64_str:
- header, b64_data = b64_str.split(",", 1)
- else:
- b64_data = b64_str
- header = "data:audio/wav;base64"
- audio_data = base64.b64decode(b64_data)
- content_type = (
- header.split(";")[0].split(":")[1] if ";" in header else "audio/wav"
- )
- return audio_data, content_type
- except Exception as e:
- print(f"Error decoding base64 audio data: {e}")
- return None, None
- def upload_audio(request, audio_data, content_type, metadata, user):
- audio_format = mimetypes.guess_extension(content_type)
- file = UploadFile(
- file=io.BytesIO(audio_data),
- filename=f"generated-{audio_format}", # will be converted to a unique ID on upload_file
- headers={
- "content-type": content_type,
- },
- )
- file_item = upload_file_handler(
- request,
- file=file,
- metadata=metadata,
- process=False,
- user=user,
- )
- url = request.app.url_path_for("get_file_content_by_id", id=file_item.id)
- return url
- def get_audio_url_from_base64(request, base64_audio_string, metadata, user):
- if "data:audio/wav;base64" in base64_audio_string:
- audio_url = ""
- # Extract base64 audio data from the line
- audio_data, content_type = load_b64_audio_data(base64_audio_string)
- if audio_data is not None:
- audio_url = upload_audio(
- request,
- audio_data,
- content_type,
- metadata,
- user,
- )
- return audio_url
- return None
- def get_file_url_from_base64(request, base64_file_string, metadata, user):
- if "data:image/png;base64" in base64_file_string:
- return get_image_url_from_base64(request, base64_file_string, metadata, user)
- elif "data:audio/wav;base64" in base64_file_string:
- return get_audio_url_from_base64(request, base64_file_string, metadata, user)
- return None
|