examples.api_example
Using GitHubSearchEngine in an API.
First, build a simple API using FastAPI. The API handles indexing a repo, and searching through an indexed repo.
1import os
2from contextlib import asynccontextmanager
3
4from fastapi import FastAPI
5from pydantic import BaseModel
6
7from github_search_engine.github_search_engine import GithubSearchEngine
8
9
10search_engine: GithubSearchEngine | None = None
11
12
13class Repository(BaseModel):
14 owner: str
15 repository_name: str
16
17
18@asynccontextmanager
19async def lifespan(app: FastAPI):
20 global search_engine
21 github_access_token = os.environ["GITHUB_PAT"]
22 search_engine = GithubSearchEngine(
23 github_access_token, qdrant_location=":memory:"
24 )
25 yield
26 del search_engine
27
28
29api = FastAPI(lifespan=lifespan)
30
31
32@api.post("/index")
33async def index(repository: Repository):
34 await search_engine.index_repository(
35 repository.owner,
36 repository.repository_name,
37 )
38 return {"message": "Repository indexed"}
39
40
41@api.get("/search")
42async def search(owner: str, repository: str, query: str):
43 results = search_engine.search(owner, repository, query)
44 summary = search_engine.summarise_results(results, owner, repository, query)
45 return summary
Then, we can launch the API with uvicorn.
1import uvicorn
2
3
4if __name__ == "__main__":
5 uvicorn.run("github_search_engine._api.api:api", host="0.0.0.0", port=8000)