From dbbfe852e23aea51cc6c7e601f3789aa921f1e5a Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Tue, 17 Jun 2025 17:22:27 -0700 Subject: [PATCH] Added llm providers entrypoint --- src/backend/main.py | 27 ++++++-------- src/backend/routes/providers.py | 63 +++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 src/backend/routes/providers.py diff --git a/src/backend/main.py b/src/backend/main.py index e578c26..3b4c4ee 100644 --- a/src/backend/main.py +++ b/src/backend/main.py @@ -81,15 +81,16 @@ from utils.helpers import filter_and_paginate # Import route modules # ============================= from routes import ( + admin, auth, candidates, - resumes, - jobs, chat, - users, employers, - admin, - system + jobs, + providers, + resumes, + system, + users, ) # ============================= @@ -238,22 +239,20 @@ api_router = APIRouter(prefix="/api/1.0") # ============================ # Include all route modules # ============================ +api_router.include_router(admin.router) api_router.include_router(auth.router) api_router.include_router(candidates.router) -api_router.include_router(resumes.router) -api_router.include_router(jobs.router) api_router.include_router(chat.router) -api_router.include_router(users.router) api_router.include_router(employers.router) -api_router.include_router(admin.router) +api_router.include_router(jobs.router) +api_router.include_router(providers.router) +api_router.include_router(resumes.router) api_router.include_router(system.router) +api_router.include_router(users.router) # ============================ # Health Check and Info Endpoints # ============================ -async def get_redis() -> redis.Redis: - """Dependency to get Redis client""" - return redis_manager.get_client() @app.get("/health") async def health_check( @@ -284,10 +283,6 @@ async def health_check( "version": redis_info.get("redis_version", "unknown"), "uptime": redis_info.get("uptime_in_seconds", 0), "memory_used": redis_info.get("used_memory_human", "unknown") - }, - "application": { - "active_requests": database._active_requests, - "shutting_down": database.is_shutting_down } } diff --git a/src/backend/routes/providers.py b/src/backend/routes/providers.py new file mode 100644 index 0000000..c222a2f --- /dev/null +++ b/src/backend/routes/providers.py @@ -0,0 +1,63 @@ +from typing import Optional +from fastapi import APIRouter, HTTPException + +from utils.llm_proxy import LLMProvider, get_llm + + +router = APIRouter(prefix="/providers", tags=["providers"]) + +@router.get("/models") +async def list_models(provider: Optional[str] = None): + """List available models for a provider""" + try: + llm = get_llm() + + provider_enum = None + if provider: + try: + provider_enum = LLMProvider(provider.lower()) + except ValueError: + raise HTTPException( + status_code=400, + detail=f"Unsupported provider: {provider}" + ) + + models = await llm.list_models(provider_enum) + return { + "provider": provider_enum.value if provider_enum else llm.default_provider.value, + "models": models + } + + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + +@router.get("") +async def list_providers(): + """List all configured providers""" + llm = get_llm() + return { + "providers": [provider.value for provider in llm._initialized_providers], + "default": llm.default_provider.value + } + +@router.post("/{provider}/set-default") +async def set_default_provider(provider: str): + """Set the default provider""" + try: + llm = get_llm() + provider_enum = LLMProvider(provider.lower()) + llm.set_default_provider(provider_enum) + return {"message": f"Default provider set to {provider}", "default": provider} + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + +# Health check endpoint +@router.get("/health") +async def health_check(): + """Health check endpoint""" + llm = get_llm() + return { + "status": "healthy", + "providers_configured": len(llm._initialized_providers), + "default_provider": llm.default_provider.value + }