update endpoints
This commit is contained in:
+62
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user