EQ3A2A's picture
Upload folder using huggingface_hub
d195d4f
raw
history blame
3.72 kB
import json
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Optional, List, Dict, Union
from factool.factool import Factool
foundation_model = 'gpt-4'
factool_instance = Factool(foundation_model)
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["https://chat.openai.com"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class FactCheckRequest(BaseModel):
prompt: str
response: str
entry_point: Optional[str]
class FactCheckResponse(BaseModel):
fact_check_result: List[Dict[str, Union[str, List[str]]]]
fact_checks = {}
@app.post("/fact_check_kbqa")
async def fact_check_kbqa(request_data: FactCheckRequest):
request_obj = FactCheckRequest(**request_data.dict())
fact_check_result = await factool_instance.run_for_plugin([{'prompt': request_obj.prompt, 'response': request_obj.response, 'category': 'kbqa'}])
fact_check_id = len(fact_checks) + 1
fact_checks[fact_check_id] = fact_check_result
return JSONResponse(content={"fact_check_id": fact_check_id, "fact_check_result": fact_check_result})
@app.post("/fact_check_code")
async def fact_check_code(request_data: FactCheckRequest):
request_obj = FactCheckRequest(**request_data.dict())
fact_check_result = await factool_instance.run_for_plugin([{'prompt': request_obj.prompt, 'response': request_obj.response, 'category': 'code', 'entry_point': request_obj.entry_point}])
fact_check_id = len(fact_checks) + 1
fact_checks[fact_check_id] = fact_check_result
return JSONResponse(content={"fact_check_id": fact_check_id, "fact_check_result": fact_check_result})
@app.post("/fact_check_math")
async def fact_check_math(request_data: FactCheckRequest):
request_obj = FactCheckRequest(**request_data.dict())
fact_check_result = await factool_instance.run_for_plugin([{'prompt': request_obj.prompt, 'response': request_obj.response, 'category': 'math'}])
fact_check_id = len(fact_checks) + 1
fact_checks[fact_check_id] = fact_check_result
return JSONResponse(content={"fact_check_id": fact_check_id, "fact_check_result": fact_check_result})
@app.post("/fact_check_scientific_literature")
async def fact_check_scientific_literature(request_data: FactCheckRequest):
request_obj = FactCheckRequest(**request_data.dict())
fact_check_result = await factool_instance.run_for_plugin([{'prompt': request_obj.prompt, 'response': request_obj.response, 'category': 'scientific'}])
fact_check_id = len(fact_checks) + 1
fact_checks[fact_check_id] = fact_check_result
return JSONResponse(content={"fact_check_id": fact_check_id, "fact_check_result": fact_check_result})
@app.get("/get_fact_check/{fact_check_id}")
async def get_fact_check(fact_check_id: int):
if fact_check_id in fact_checks:
fact_check_result = fact_checks[fact_check_id]
return JSONResponse(content={"fact_check_id": fact_check_id, "fact_check_result": fact_check_result})
else:
return JSONResponse(content={"error": "Fact check not found"})
@app.get("/logo.png")
async def plugin_logo():
filename = "logo.png"
return FileResponse(filename, media_type="image/png")
@app.get("/.well-known/ai-plugin.json")
async def read_plugin_manifest():
return FileResponse(".well-known/ai-plugin.json")
@app.get("/openapi.yaml")
async def openapi_spec():
return FileResponse("./openapi.yaml")
def main():
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=5003, log_level="info")
if __name__ == "__main__":
main()