mirror of
https://github.com/matatonic/openedai-speech
synced 2025-06-26 18:16:32 +00:00
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import PlainTextResponse
|
|
|
|
class OpenAIStub(FastAPI):
|
|
def __init__(self, **kwargs) -> None:
|
|
super().__init__(**kwargs)
|
|
self.models = {}
|
|
|
|
self.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"]
|
|
)
|
|
|
|
@self.get('/v1/billing/usage')
|
|
@self.get('/v1/dashboard/billing/usage')
|
|
async def handle_billing_usage():
|
|
return { 'total_usage': 0 }
|
|
|
|
@self.get("/", response_class=PlainTextResponse)
|
|
@self.head("/", response_class=PlainTextResponse)
|
|
@self.options("/", response_class=PlainTextResponse)
|
|
async def root():
|
|
return PlainTextResponse(content="", status_code=200 if self.models else 503)
|
|
|
|
@self.get("/health")
|
|
async def health():
|
|
return {"status": "ok" if self.models else "unk" }
|
|
|
|
@self.get("/v1/models")
|
|
async def get_model_list():
|
|
return self.model_list()
|
|
|
|
@self.get("/v1/models/{model}")
|
|
async def get_model_info(model_id: str):
|
|
return self.model_info(model_id)
|
|
|
|
def register_model(self, name: str, model: str = None) -> None:
|
|
self.models[name] = model if model else name
|
|
|
|
def deregister_model(self, name: str) -> None:
|
|
if name in self.models:
|
|
del self.models[name]
|
|
|
|
def model_info(self, model: str) -> dict:
|
|
result = {
|
|
"id": model,
|
|
"object": "model",
|
|
"created": 0,
|
|
"owned_by": "user"
|
|
}
|
|
return result
|
|
|
|
def model_list(self) -> dict:
|
|
if not self.models:
|
|
return {}
|
|
|
|
result = {
|
|
"object": "list",
|
|
"data": [ self.model_info(model) for model in list(set(self.models.keys() | self.models.values())) if model ]
|
|
}
|
|
|
|
return result
|