File size: 1,066 Bytes
64c80f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
import requests
from pydantic import BaseModel
from tools_config import select_tools, run_tools, get_fundamentals, get_performance, get_recent_dividends_rate
from rag_config import vectorstore_config, weaviate_client_config, close_weaviate_client, retrievers
from contextlib import asynccontextmanager
from chain import final_chain

@asynccontextmanager
async def lifespan(app: FastAPI):
    app.state.weaviate_client = weaviate_client_config()
    app.state.retrievers = retrievers(app.state.weaviate_client)
    yield
    close_weaviate_client(app.state.weaviate_client)

app = FastAPI(title="Agent_LLM_API", lifespan=lifespan)

class Query(BaseModel):
    question: str
    ticker: str

@app.get("/")
def root():
    return RedirectResponse(url="/docs")

@app.post("/query")
def query(query: Query, request: Request):
    response = final_chain((request.app.state.retrievers)).invoke({
        "question": query.question,
        "ticker": query.ticker
    })
    return response