Refactor investor and company management API with FastAPI integration

- Updated README.md to reflect new features and architecture.
- Implemented company management routes in app/api/companies.py.
- Enhanced main FastAPI application in app/main.py to include company routes and query processing.
- Improved querying capabilities in app/services/querying.py with natural language processing for investor searches.
- Updated requirements.txt to include necessary dependencies for FastAPI and related libraries.
- Added comprehensive error handling and response formatting for API endpoints.
This commit is contained in:
bolade
2025-09-03 10:32:19 +01:00
parent 84cbb888e6
commit edd0ae910b
9 changed files with 968 additions and 3612 deletions
+33 -9
View File
@@ -1,23 +1,36 @@
import io
import pandas as pd
from api import investors
from api import companies, investors
from db.db import db_dependency, init_database
from fastapi import FastAPI, File, UploadFile
from py_schemas import InvestorList
from pydantic import BaseModel
from services.openrouter import InvestorProcessor
from services.querying import QueryProcessor
app = FastAPI()
app.include_router(investors.router)
init_database()
# Request models
class QueryRequest(BaseModel):
question: str
class Config:
json_schema_extra = {
"example": {
"question": "Show me growth stage fintech investors in the US with check sizes over $1 million"
}
}
@app.get("/")
def read_root():
def health():
return {"Hello": "World"}
@app.post("/parse-csv")
@app.post("/parse-csv", tags=["CSV Upload"], response_model=list[dict])
async def parse_csv(db: db_dependency, file: UploadFile = File(...)):
# Read uploaded CSV with pandas
content = await file.read()
@@ -28,16 +41,27 @@ async def parse_csv(db: db_dependency, file: UploadFile = File(...)):
results = await processor.process_csv(df)
# Convert Pydantic objects to dictionaries
return {"results": [r.dict() for r in results]}
return [r.model_dump() for r in results]
@app.post("/query")
async def query_investors(db: db_dependency, question: str):
@app.post("/query", response_model=InvestorList, tags=["Querying"])
async def query_investors(db: db_dependency, request: QueryRequest):
"""
Query investors using natural language.
Supports queries like:
- "Show me seed stage investors"
- "Find fintech investors in Silicon Valley"
- "Growth stage investors with $5M+ check sizes"
- "Healthcare investors in Europe"
"""
processor = QueryProcessor(sql_session=db)
results = processor.process_query(question)
return {"results": results}
results = processor.process_query(request.question)
return results
app.include_router(investors.router)
app.include_router(companies.router)
if __name__ == "__main__":
import uvicorn