Spaces:
Running
Running
File size: 6,777 Bytes
fb5b6b9 9508bbf f04c960 fb5b6b9 9508bbf f04c960 fb5b6b9 cf590c1 fb5b6b9 cf590c1 fb5b6b9 9508bbf fb5b6b9 9508bbf f04c960 9508bbf cf590c1 fb5b6b9 9508bbf cf590c1 fb5b6b9 9508bbf cf590c1 fb5b6b9 cf590c1 9508bbf f04c960 |
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 |
from fastapi import APIRouter, Request, HTTPException
from service_config import ServiceConfig
import datetime
import json
router = APIRouter()
service_config = ServiceConfig()
service_config.load()
def get_utc_now():
return datetime.datetime.utcnow().isoformat()
@router.get("/list")
def list_projects():
return service_config.projects
@router.post("/add")
async def add_project(request: Request):
data = await request.json()
project_name = data.get("project_name")
if not project_name:
raise HTTPException(status_code=400, detail="project_name cannot be empty")
if project_name in service_config.projects:
raise HTTPException(status_code=400, detail="Project already exists")
service_config.projects[project_name] = {
"enabled": False,
"versions": [],
"last_updated": get_utc_now()
}
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"Project {project_name} added"}
@router.post("/update")
async def update_project(request: Request):
data = await request.json()
project_name = data.get("project_name")
client_last_updated = data.get("client_last_updated")
project = service_config.projects.get(project_name)
if not project:
raise HTTPException(status_code=404, detail="Project not found")
if project["last_updated"] != client_last_updated:
raise HTTPException(status_code=409, detail="This record has been updated by another user. Please reload.")
# örnek update: sadece enable/disable flag güncelliyoruz
project["enabled"] = data.get("enabled", project["enabled"])
project["last_updated"] = get_utc_now()
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"Project {project_name} updated"}
@router.post("/publish")
async def publish_project(request: Request):
data = await request.json()
project_name = data.get("project_name")
client_last_updated = data.get("client_last_updated")
project = service_config.projects.get(project_name)
if not project:
raise HTTPException(status_code=404, detail="Project not found")
if project["last_updated"] != client_last_updated:
raise HTTPException(status_code=409, detail="This record has been updated by another user. Please reload.")
latest_version = project["versions"][-1] if project["versions"] else None
if not latest_version:
raise HTTPException(status_code=400, detail="No version exists to publish")
llm = latest_version.get("llm", {})
if not llm.get("repo_id"):
raise HTTPException(status_code=400, detail="repo_id is required")
if llm.get("use_fine_tune") and not llm.get("fine_tune_zip"):
raise HTTPException(status_code=400, detail="fine_tune_zip is required when use_fine_tune is true")
latest_version["published"] = True
latest_version["last_updated"] = get_utc_now()
project["last_updated"] = get_utc_now()
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"Project {project_name} version published"}
@router.post("/add_intent")
async def add_intent(request: Request):
data = await request.json()
project_name = data.get("project_name")
version_number = data.get("version_number")
intent = data.get("intent")
client_last_updated = data.get("client_last_updated")
project = service_config.projects.get(project_name)
if not project:
raise HTTPException(status_code=404, detail="Project not found")
if project["last_updated"] != client_last_updated:
raise HTTPException(status_code=409, detail="This record has been updated by another user. Please reload.")
version = next((v for v in project["versions"] if v["version_number"] == version_number), None)
if not version:
raise HTTPException(status_code=404, detail="Version not found")
if any(i["name"] == intent["name"] for i in version.get("intents", [])):
raise HTTPException(status_code=400, detail="Intent already exists")
version.setdefault("intents", []).append(intent)
version["last_updated"] = get_utc_now()
project["last_updated"] = get_utc_now()
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"Intent {intent['name']} added to project {project_name}, version {version_number}"}
@router.post("/delete_intent")
async def delete_intent(request: Request):
data = await request.json()
project_name = data.get("project_name")
version_number = data.get("version_number")
intent_name = data.get("intent_name")
client_last_updated = data.get("client_last_updated")
project = service_config.projects.get(project_name)
if not project:
raise HTTPException(status_code=404, detail="Project not found")
if project["last_updated"] != client_last_updated:
raise HTTPException(status_code=409, detail="This record has been updated by another user. Please reload.")
version = next((v for v in project["versions"] if v["version_number"] == version_number), None)
if not version:
raise HTTPException(status_code=404, detail="Version not found")
version["intents"] = [i for i in version.get("intents", []) if i["name"] != intent_name]
version["last_updated"] = get_utc_now()
project["last_updated"] = get_utc_now()
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"Intent {intent_name} deleted from project {project_name}, version {version_number}"}
@router.post("/add_api")
async def add_api(request: Request):
data = await request.json()
api_name = data.get("api_name")
api_def = data.get("api_def")
if api_name in service_config.apis:
raise HTTPException(status_code=400, detail="API already exists")
service_config.apis[api_name] = api_def
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"API {api_name} added"}
@router.post("/delete_api")
async def delete_api(request: Request):
data = await request.json()
api_name = data.get("api_name")
if api_name not in service_config.apis:
raise HTTPException(status_code=404, detail="API not found")
del service_config.apis[api_name]
with open(service_config.config_path, "w", encoding="utf-8") as f:
json.dump(service_config, f, indent=2)
return {"message": f"API {api_name} deleted"}
|