FENST4R's picture
Update app.py
acedc46 verified
import gradio as gr
import requests
import json
# ====== API BASE URL ======
NEIROST4R_BASE = {
"ai_v1": "https://fenst4r.life/api/ai",
"ai_v2": "https://fenst4r.life/api/ai_v2",
"ai_v3": "https://fenst4r.life/api/ai_v3",
"ai_v4": "http://fenst4r.life/api/ai_v4",
"ai_v5": "http://fenst4r.life/api/ai_v5"
}
NEBLORA_BASE = {
"chatgpt": "http://neblora.fenst4r.life:5400/gpt",
"llama": "http://neblora.fenst4r.life:5500/llama",
"draw": "http://neblora.fenst4r.life:4000/draw",
"v2draw": "http://neblora.fenst4r.life:4000/v2draw",
"analyze_image": "http://neblora.fenst4r.life:4848/analyze-image",
"tts": "http://neblora.fenst4r.life:4949/tts",
"stt": "http://neblora.fenst4r.life:5000/stt",
"file": "https://fenst4r.life/api/file"
}
HEADERS_JSON = {"Content-Type": "application/json"}
# ====== NEIROST4R CALL ======
def call_neirost4r(api_version, message, profile="friendly", flags=None):
if flags is None:
flags = {}
url = NEIROST4R_BASE.get(api_version)
if not url:
return "Unknown NEIROST4R API version"
headers = HEADERS_JSON.copy()
# v4 и v5 требуют User-Agent
if api_version in ["ai_v4", "ai_v5"]:
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
data = {"message": message, "profile": profile}
if api_version in ["ai_v2", "ai_v3", "ai_v4", "ai_v5"]:
data["flags"] = flags
try:
response = requests.post(url, headers=headers, data=json.dumps(data), timeout=600)
return response.json()
except Exception as e:
return {"error": str(e)}
# ====== NEBLORA CALL ======
def call_neblora(endpoint, text, model=None):
url = NEBLORA_BASE.get(endpoint)
if not url:
return "Unknown Neblora endpoint"
data = {"text": text}
if model:
data["model"] = model
try:
response = requests.post(url, headers=HEADERS_JSON, data=json.dumps(data), timeout=30)
return response.json()
except Exception as e:
return {"error": str(e)}
# ====== Gradio Interface ======
def generate_response(api_type, endpoint, text, profile, model, flags_json):
flags = {}
if flags_json.strip():
try:
flags = json.loads(flags_json)
except:
return "Flags must be valid JSON"
if api_type == "NEIROST4R":
return call_neirost4r(endpoint, text, profile=profile, flags=flags)
else:
return call_neblora(endpoint, text, model=model)
with gr.Blocks() as demo:
gr.Markdown("## NEIROST4R + Neblora Unified Interface")
with gr.Row():
api_type = gr.Radio(["NEIROST4R", "Neblora"], label="Выберите API")
endpoint = gr.Dropdown(choices=[
"ai_v1","ai_v2","ai_v3","ai_v4","ai_v5",
"chatgpt","llama","draw","v2draw","analyze_image","tts","stt","file"
], label="Endpoint / Модель")
text_input = gr.Textbox(label="Введите текст", lines=4)
profile_input = gr.Textbox(label="Profile (для NEIROST4R)", value="friendly")
model_input = gr.Textbox(label="Model (для Neblora, если нужно)", value="")
flags_input = gr.Textbox(label="Flags JSON (для NEIROST4R)", value="{}", lines=4)
output = gr.JSON(label="Ответ")
submit_btn = gr.Button("Отправить")
submit_btn.click(
generate_response,
inputs=[api_type, endpoint, text_input, profile_input, model_input, flags_input],
outputs=output
)
# ====== Файлы ======
file_input = gr.File(label="Загрузите файлы", file_types=[".txt", ".json"])
file_url = gr.Textbox(label="Ссылка на загруженный файл")
def upload_file(file):
if not file:
return "Нет файла"
try:
with open(file.name, "rb") as f:
files = {"file": f}
resp = requests.post(NEBLORA_BASE["file"], files=files)
return resp.json()
except Exception as e:
return {"error": str(e)}
file_btn = gr.Button("Загрузить")
file_btn.click(upload_file, inputs=file_input, outputs=file_url)
demo.launch()