systex_app.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import datetime
  2. from json import loads
  3. import time
  4. from typing import List
  5. from fastapi import FastAPI
  6. from fastapi.middleware.cors import CORSMiddleware
  7. import pandas as pd
  8. from pydantic import BaseModel
  9. import uvicorn
  10. from dotenv import load_dotenv
  11. import os
  12. from supabase.client import Client, create_client
  13. from langchain.callbacks import get_openai_callback
  14. from ai_agent import main
  15. load_dotenv()
  16. URI = os.getenv("SUPABASE_URI")
  17. supabase_url = os.environ.get("SUPABASE_URL")
  18. supabase_key = os.environ.get("SUPABASE_KEY")
  19. supabase: Client = create_client(supabase_url, supabase_key)
  20. app = FastAPI()
  21. app.add_middleware(
  22. CORSMiddleware,
  23. allow_origins=["*"],
  24. allow_credentials=True,
  25. allow_methods=["*"],
  26. allow_headers=["*"],
  27. )
  28. @app.get("/agents")
  29. def agent(question: str):
  30. start = time.time()
  31. with get_openai_callback() as cb:
  32. answer = main(question)
  33. processing_time = time.time() - start
  34. save_history(question, answer, cb, processing_time)
  35. return {"answer": answer}
  36. def save_history(question, answer, cb, processing_time):
  37. # reference = [doc.dict() for doc in reference]
  38. record = {
  39. 'Question': question,
  40. 'Answer': answer,
  41. 'Total_Tokens': cb.total_tokens,
  42. 'Total_Cost': cb.total_cost,
  43. 'Processing_time': processing_time,
  44. }
  45. response = (
  46. supabase.table("agent_records")
  47. .insert(record)
  48. .execute()
  49. )
  50. class history_output(BaseModel):
  51. Question: str
  52. Answer: str
  53. Total_Tokens: int
  54. Total_Cost: float
  55. Processing_time: float
  56. Time: datetime.datetime
  57. @app.get('/history', response_model=List[history_output])
  58. async def get_history():
  59. response = supabase.table("agent_records").select("*").execute()
  60. df = pd.DataFrame(response.data)
  61. # engine = create_engine(URI, echo=True)
  62. # df = pd.read_sql_table("systex_records", engine.connect())
  63. # df.fillna('', inplace=True)
  64. result = df.to_json(orient='index', force_ascii=False)
  65. result = loads(result)
  66. return result.values()
  67. if __name__ == "__main__":
  68. uvicorn.run("systex_app:app", host='0.0.0.0', reload=True, port=8080)