| | 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() |