|
import gradio as gr |
|
import os |
|
from pathlib import Path |
|
from modules import script_callbacks, extra_networks, prompt_parser |
|
from fastapi import FastAPI, Body, Request |
|
from scripts.storage import storage |
|
from scripts.get_extensions import get_extensions |
|
from scripts.get_token_counter import get_token_counter |
|
from scripts.get_i18n import get_i18n |
|
from scripts.get_translate_apis import get_translate_apis |
|
from scripts.translate import translate |
|
from scripts.history import history |
|
|
|
VERSION = '0.0.1' |
|
|
|
def on_app_started(_: gr.Blocks, app: FastAPI): |
|
st = storage() |
|
hi = history() |
|
|
|
@app.get("/physton_prompt/get_version") |
|
async def _get_version(): |
|
return {"version": VERSION} |
|
|
|
@app.get("/physton_prompt/get_config") |
|
async def _get_config(): |
|
return { |
|
'i18n': get_i18n(True), |
|
'translate_apis': get_translate_apis(True), |
|
} |
|
|
|
@app.get("/physton_prompt/get_extensions") |
|
async def _get_extensions(): |
|
return {"extends": get_extensions()} |
|
|
|
@app.post("/physton_prompt/token_counter") |
|
async def _token_counter(request: Request): |
|
data = await request.json() |
|
if 'text' not in data or 'steps' not in data: |
|
return {"success": False, "message": "text or steps is required"} |
|
return get_token_counter(data['text'], data['steps']) |
|
|
|
@app.get("/physton_prompt/get_data") |
|
async def _get_data(key: str): |
|
return {"data": st.get(key)} |
|
|
|
@app.get("/physton_prompt/get_datas") |
|
async def _get_datas(keys: str): |
|
keys = keys.split(',') |
|
datas = {} |
|
for key in keys: |
|
datas[key] = st.get(key) |
|
return {"datas": datas} |
|
|
|
@app.post("/physton_prompt/set_data") |
|
async def _set_data(request: Request): |
|
data = await request.json() |
|
if 'key' not in data or 'data' not in data: |
|
return {"success": False, "message": "key or data is required"} |
|
st.set(data['key'], data['data']) |
|
return {"success": True} |
|
|
|
@app.post("/physton_prompt/set_datas") |
|
async def _set_datas(request: Request): |
|
data = await request.json() |
|
if not isinstance(data, dict): |
|
return {"success": False, "message": "data is not dict"} |
|
for key in data: |
|
st.set(key, data[key]) |
|
return {"success": True} |
|
|
|
@app.get("/physton_prompt/get_data_list_item") |
|
async def _get_data_list_item(key: str, index: int): |
|
return {"item": st.list_get(key, index)} |
|
|
|
@app.post("/physton_prompt/push_data_list") |
|
async def _push_data_list(request: Request): |
|
data = await request.json() |
|
if 'key' not in data or 'item' not in data: |
|
return {"success": False, "message": "key or item is required"} |
|
st.list_push(data['key'], data['item']) |
|
return {"success": True} |
|
|
|
@app.post("/physton_prompt/pop_data_list") |
|
async def _pop_data_list(request: Request): |
|
data = await request.json() |
|
if 'key' not in data: |
|
return {"success": False, "message": "key is required"} |
|
return {"success": True, 'item': st.list_pop(data['key'])} |
|
|
|
@app.post("/physton_prompt/shift_data_list") |
|
async def _shift_data_list(request: Request): |
|
data = await request.json() |
|
if 'key' not in data: |
|
return {"success": False, "message": "key is required"} |
|
return {"success": True, 'item': st.list_shift(data['key'])} |
|
|
|
@app.post("/physton_prompt/remove_data_list") |
|
async def _remove_data_list(request: Request): |
|
data = await request.json() |
|
if 'key' not in data or 'index' not in data: |
|
return {"success": False, "message": "key or index is required"} |
|
st.list_remove(data['key'], data['index']) |
|
return {"success": True} |
|
|
|
@app.post("/physton_prompt/clear_data_list") |
|
async def _clear_data_list(request: Request): |
|
data = await request.json() |
|
if 'key' not in data: |
|
return {"success": False, "message": "key is required"} |
|
st.list_clear(data['key']) |
|
return {"success": True} |
|
|
|
@app.get("/physton_prompt/get_histories") |
|
async def _get_histories(type: str): |
|
return {"histories": hi.get_histoies(type)} |
|
|
|
@app.get("/physton_prompt/get_favorites") |
|
async def _get_favorites(type: str): |
|
return {"favorites": hi.get_favorites(type)} |
|
|
|
@app.post("/physton_prompt/push_history") |
|
async def _push_history(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'tags' not in data or 'prompt' not in data: |
|
return {"success": False, "message": "type or tags or prompt is required"} |
|
hi.push_history(data['type'], data['tags'], data['prompt'], data.get('name', '')) |
|
return {"success": True} |
|
|
|
@app.get("/physton_prompt/get_latest_history") |
|
async def _get_latest_history(type: str): |
|
return {"history": hi.get_latest_history(type)} |
|
|
|
@app.post("/physton_prompt/set_history") |
|
async def _set_history(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data or 'tags' not in data or 'prompt' not in data or 'name' not in data: |
|
return {"success": False, "message": "type or id or tags or prompt is required"} |
|
return {"success": hi.set_history(data['type'], data['id'], data['tags'], data['prompt'], data['name'])} |
|
|
|
@app.post("/physton_prompt/set_history_name") |
|
async def _set_history_name(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data or 'name' not in data: |
|
return {"success": False, "message": "type or id or name is required"} |
|
return {"success": hi.set_history_name(data['type'], data['id'], data['name'])} |
|
|
|
@app.post("/physton_prompt/set_favorite_name") |
|
async def _set_favorite_name(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data or 'name' not in data: |
|
return {"success": False, "message": "type or id or name is required"} |
|
return {"success": hi.set_favorite_name(data['type'], data['id'], data['name'])} |
|
|
|
@app.post("/physton_prompt/dofavorite") |
|
async def _dofavorite(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data: |
|
return {"success": False, "message": "type or id is required"} |
|
return {"success": hi.dofavorite(data['type'], data['id'])} |
|
|
|
@app.post("/physton_prompt/unfavorite") |
|
async def _unfavorite(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data: |
|
return {"success": False, "message": "type or id is required"} |
|
return {"success": hi.unfavorite(data['type'], data['id'])} |
|
|
|
@app.post("/physton_prompt/delete_history") |
|
async def _delete_history(request: Request): |
|
data = await request.json() |
|
if 'type' not in data or 'id' not in data: |
|
return {"success": False, "message": "type or id is required"} |
|
return {"success": hi.remove_history(data['type'], data['id'])} |
|
|
|
@app.post("/physton_prompt/delete_histories") |
|
async def _delete_histories(request: Request): |
|
data = await request.json() |
|
if 'type' not in data: |
|
return {"success": False, "message": "type is required"} |
|
return {"success": hi.remove_histories(data['type'])} |
|
|
|
@app.post("/physton_prompt/translate") |
|
async def _translate(text: str = Body(...), from_lang: str = Body(...), to_lang: str = Body(...), api: str = Body(...), api_config: dict = Body(...)): |
|
return translate(text, from_lang, to_lang, api, api_config) |
|
|
|
script_callbacks.on_app_started(on_app_started) |