| from typing import List, Dict, Any, AsyncGenerator |
| from app.core.llm.client import llm_client |
| from app.models.requests import CompletionRequest |
| from app.models.responses import CompletionResponse, Usage |
| from app.utils.errors import LLMResponseError |
|
|
| class CompletionService: |
| async def process_completion(self, request: CompletionRequest) -> CompletionResponse: |
| try: |
| provider=llm_client.get_provider(request.provider) |
| response_data=await provider.completion( |
| prompt=request.prompt, |
| system_prompt=request.system_prompt, |
| model=request.model, |
| temperature=request.temperature, |
| max_tokens=request.max_tokens |
| ) |
| return CompletionResponse( |
| id=response_data["id"], |
| text=response_data["text"], |
| model=response_data["model"], |
| provider=response_data["provider"], |
| usage=Usage(**response_data["usage"]) if response_data.get("usage") else None |
| ) |
| except Exception as e: |
| raise LLMResponseError( |
| message=f"Failed to process chat: {str(e)}", |
| detail=str(e) |
| ) |
|
|
| completion_service = CompletionService() |