|
import os |
|
from fastapi import FastAPI, Response, Request |
|
from fastapi.responses import RedirectResponse |
|
|
|
from g4f.image import images_dir |
|
import g4f.api |
|
import g4f.Provider |
|
|
|
import demo |
|
from demo.BackendApi import BackendApi |
|
g4f.Provider.__map__["Feature"] = BackendApi |
|
|
|
|
|
g4f.models.demo_models |
|
from g4f.image import copy_images |
|
|
|
def create_app(): |
|
g4f.debug.logging = True |
|
g4f.api.AppConfig.gui = True |
|
g4f.api.AppConfig.demo = True |
|
|
|
app = FastAPI() |
|
|
|
|
|
app.add_middleware( |
|
g4f.api.CORSMiddleware, |
|
allow_origin_regex=".*", |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
api = g4f.api.Api(app) |
|
|
|
api.register_routes() |
|
api.register_authorization() |
|
api.register_validation_exception_handler() |
|
|
|
@app.get("/download/{filename}", response_class=RedirectResponse) |
|
async def download(filename, request: Request): |
|
filename = os.path.basename(filename) |
|
if "." not in filename: |
|
target = os.path.join(images_dir, filename) |
|
filename = f"{filename}.jpg" |
|
target = os.path.join(images_dir, filename) |
|
if not os.path.exists(target): |
|
url = str(request.query_params).split("url=", 1)[1] |
|
if url: |
|
source_url = url.replace("%2F", "/").replace("%3A", ":").replace("%3F", "?") |
|
await copy_images( |
|
[source_url], |
|
target=target, |
|
ssl=False, |
|
headers=demo.headers if source_url.startswith(BackendApi.url) else None) |
|
if not os.path.exists(target): |
|
return Response(status_code=404) |
|
return RedirectResponse(f"/images/{filename}") |
|
|
|
gui_app = g4f.api.WSGIMiddleware(g4f.api.get_gui_app(g4f.api.AppConfig.demo)) |
|
app.mount("/", gui_app) |
|
|
|
return app |
|
|
|
app = create_app() |