Skip to content

Commit

Permalink
refactor: project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
sspzoa committed Sep 30, 2024
1 parent 4e21b7d commit 9a66a0a
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 43 deletions.
Empty file added app/__init__.py
Empty file.
11 changes: 11 additions & 0 deletions app/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import os
from pathlib import Path
from dotenv import load_dotenv
from openai import OpenAI

BASE_DIR = Path(__file__).resolve().parent.parent
ENV_FILE = BASE_DIR / ".env"

load_dotenv(ENV_FILE)

client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
47 changes: 4 additions & 43 deletions app/main.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,11 @@
import os
from pathlib import Path

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from dotenv import load_dotenv
from openai import OpenAI

BASE_DIR = Path(__file__).resolve().parent.parent
ENV_FILE = BASE_DIR / ".env"

load_dotenv(ENV_FILE)

client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
from fastapi import FastAPI
from app.routes import ping, generate

app = FastAPI(
title="Deening API",
description="Best Recipe Service powered by AI.",
version="0.1.0"
)

class Prompt(BaseModel):
prompt: str

class PingResponse(BaseModel):
message: str

class GeneratedResponse(BaseModel):
generated_text: str

class ErrorResponse(BaseModel):
error: str

@app.get("/ping", response_model=PingResponse)
async def ping():
return {"message": "pong"}

@app.post("/generate", response_model=GeneratedResponse, responses={400: {"model": ErrorResponse}})
async def generate(prompt: Prompt):
try:
response = client.chat.completions.create(
model="chatgpt-4o-latest",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt.prompt}
]
)
return {"generated_text": response.choices[0].message.content}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
app.include_router(ping.router)
app.include_router(generate.router)
1 change: 1 addition & 0 deletions app/routes/__init__py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import ping, generate
28 changes: 28 additions & 0 deletions app/routes/generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from app.config import client

router = APIRouter()

class Prompt(BaseModel):
prompt: str

class GeneratedResponse(BaseModel):
generated_text: str

class ErrorResponse(BaseModel):
error: str

@router.post("/generate", response_model=GeneratedResponse, responses={400: {"model": ErrorResponse}})
async def generate(prompt: Prompt):
try:
response = client.chat.completions.create(
model="chatgpt-4o-latest",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt.prompt}
]
)
return {"generated_text": response.choices[0].message.content}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
11 changes: 11 additions & 0 deletions app/routes/ping.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from fastapi import APIRouter
from pydantic import BaseModel

router = APIRouter()

class PingResponse(BaseModel):
message: str

@router.get("/ping", response_model=PingResponse)
async def ping():
return {"message": "pong"}

0 comments on commit 9a66a0a

Please sign in to comment.