File size: 7,743 Bytes
0690950 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
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) |