mirror of
https://github.com/sstent/AICyclingCoach.git
synced 2026-01-27 01:22:27 +00:00
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select
|
|
from typing import List
|
|
|
|
from app.database import get_db
|
|
from app.models.prompt import Prompt
|
|
from app.schemas.prompt import Prompt as PromptSchema, PromptCreate, PromptUpdate
|
|
from app.services.prompt_manager import PromptManager
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/", response_model=List[PromptSchema])
|
|
async def read_prompts(db: AsyncSession = Depends(get_db)):
|
|
"""Get all prompts."""
|
|
result = await db.execute(select(Prompt))
|
|
return result.scalars().all()
|
|
|
|
|
|
@router.get("/{prompt_id}", response_model=PromptSchema)
|
|
async def read_prompt(prompt_id: int, db: AsyncSession = Depends(get_db)):
|
|
"""Get a specific prompt by ID."""
|
|
prompt = await db.get(Prompt, prompt_id)
|
|
if not prompt:
|
|
raise HTTPException(status_code=404, detail="Prompt not found")
|
|
return prompt
|
|
|
|
|
|
@router.post("/", response_model=PromptSchema)
|
|
async def create_prompt(
|
|
prompt: PromptCreate,
|
|
db: AsyncSession = Depends(get_db)
|
|
):
|
|
"""Create a new prompt version."""
|
|
prompt_manager = PromptManager(db)
|
|
new_prompt = await prompt_manager.create_prompt_version(
|
|
action_type=prompt.action_type,
|
|
prompt_text=prompt.prompt_text,
|
|
model=prompt.model
|
|
)
|
|
return new_prompt
|
|
|
|
|
|
@router.get("/active/{action_type}")
|
|
async def get_active_prompt(
|
|
action_type: str,
|
|
db: AsyncSession = Depends(get_db)
|
|
):
|
|
"""Get the active prompt for a specific action type."""
|
|
prompt_manager = PromptManager(db)
|
|
prompt_text = await prompt_manager.get_active_prompt(action_type)
|
|
if not prompt_text:
|
|
raise HTTPException(status_code=404, detail=f"No active prompt found for {action_type}")
|
|
return {"action_type": action_type, "prompt_text": prompt_text}
|
|
|
|
|
|
@router.get("/history/{action_type}", response_model=List[PromptSchema])
|
|
async def get_prompt_history(
|
|
action_type: str,
|
|
db: AsyncSession = Depends(get_db)
|
|
):
|
|
"""Get the version history for a specific action type."""
|
|
prompt_manager = PromptManager(db)
|
|
prompts = await prompt_manager.get_prompt_history(action_type)
|
|
return prompts
|
|
|
|
|
|
@router.post("/{prompt_id}/activate")
|
|
async def activate_prompt_version(
|
|
prompt_id: int,
|
|
db: AsyncSession = Depends(get_db)
|
|
):
|
|
"""Activate a specific prompt version."""
|
|
prompt_manager = PromptManager(db)
|
|
success = await prompt_manager.activate_prompt_version(prompt_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Prompt not found")
|
|
return {"message": "Prompt version activated successfully"} |