update endpoints

This commit is contained in:
Ayomide
2025-07-10 19:00:01 +01:00
parent 350f21637c
commit 5e093fb212
3 changed files with 394 additions and 30 deletions
+62 -3
View File
@@ -4,6 +4,7 @@ from pydantic import BaseModel
from typing import Optional, List
import json
from datetime import datetime
from pathlib import Path
from .vector_store import VectorStore
from .brand_style import BrandStyle
from .config import Config
@@ -18,6 +19,10 @@ app = FastAPI(title="Marketing Assistant AI", version="0.1.0")
vector_store = VectorStore()
brand_style = BrandStyle()
# Create user_queries directory
user_queries_path = Path("data/user_queries")
user_queries_path.mkdir(parents=True, exist_ok=True)
# CORS
app.add_middleware(
CORSMiddleware,
@@ -26,22 +31,63 @@ app.add_middleware(
allow_headers=["*"],
)
# Models
class CampaignRequest(BaseModel):
prompt: str
content_type: str = "general"
tone: Optional[str] = None
class Campaign(BaseModel):
content: str
content_type: str
metadata: dict = {}
class UserFeedback(BaseModel):
query_id: str
rating: int # 1-5 scale
comments: Optional[str] = None
used_output: bool = False
modifications_made: Optional[str] = None
# Helper function to log user queries
def log_user_query(request: CampaignRequest, generated_copy: str = None, success: bool = None):
"""Log user query to data/user_queries/"""
query_id = f"query_{datetime.now().strftime('%Y%m%d_%H%M%S_%f')}"
query_log = {
"query_id": query_id,
"timestamp": datetime.now().isoformat(),
"user_input": {
"prompt": request.prompt,
"content_type": request.content_type,
"tone": request.tone
},
"status": "completed" if success else "failed" if success is False else "processing",
"generated_output": generated_copy,
"success": success
}
# Save to user_queries folder
query_file = user_queries_path / f"{query_id}.json"
with open(query_file, 'w') as f:
json.dump(query_log, f, indent=2)
return query_id
# Routes
@app.post("/generate")
async def generate_copy(request: CampaignRequest):
"""Generate marketing copy based on prompt and brand guidelines"""
query_id = None
try:
# Log the initial query
query_id = log_user_query(request)
# Get similar content from vector store
similar = vector_store.search(request.prompt, request.content_type)
@@ -68,6 +114,9 @@ async def generate_copy(request: CampaignRequest):
generated_copy = response.choices[0].message.content
# Update query log with success
log_user_query(request, generated_copy, True)
# Store the generated copy for future reference
new_campaign = {
"content": generated_copy,
@@ -75,16 +124,23 @@ async def generate_copy(request: CampaignRequest):
"metadata": {
"prompt": request.prompt,
"tone": request.tone,
"generated_at": datetime.now().isoformat()
"generated_at": datetime.now().isoformat(),
"query_id": query_id
}
}
# Add to vector store for future similarity searches
vector_store.add_campaign(new_campaign)
return {"result": generated_copy}
return {
"result": generated_copy,
"query_id": query_id
}
except Exception as e:
# Log the error
if query_id:
log_user_query(request, str(e), False)
print(f"Error in generate_copy: {str(e)}") # For debugging
raise HTTPException(status_code=500, detail=str(e))
@@ -112,11 +168,13 @@ async def search_campaigns(query: str, limit: int = 5):
print(f"Error in search_campaigns: {str(e)}") # For debugging
raise HTTPException(status_code=500, detail=str(e))
@app.get("/")
async def root():
"""Health check endpoint"""
return {"message": "Marketing Assistant AI is running", "version": "0.1.0"}
@app.get("/health")
async def health_check():
"""Detailed health check"""
@@ -126,6 +184,7 @@ async def health_check():
"timestamp": datetime.now().isoformat()
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
uvicorn.run(app, host="0.0.0.0", port=8000)