| from fastapi import FastAPI, HTTPException, UploadFile, File, Security, status |
| from fastapi.security.api_key import APIKeyHeader |
| from environs import Env |
| import json |
|
|
| |
| from coresugg import ConversationPayload as ConversationPayloadSugg, create_conversation_starter_prompt, generate_conversation_starters, NUMBER_OF_MESSAGES_FOR_CONTEXT as NUMBER_OF_MESSAGES_FOR_CONTEXT_SUGG |
| from corechat import ConversationPayload as ConversationPayloadChat, get_conversation_suggestions, NUMBER_OF_MESSAGES_FOR_CONTEXT as NUMBER_OF_MESSAGES_FOR_CONTEXT_CHAT |
|
|
| |
| env = Env() |
| API_KEY = env.str("API_KEY", "koottu123456abcDEF") |
| api_key_header = APIKeyHeader(name="X-API-KEY", auto_error=False) |
|
|
| app = FastAPI() |
|
|
| async def get_api_key(api_key_header: str = Security(api_key_header)): |
| if api_key_header == API_KEY: |
| return api_key_header |
| else: |
| raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid API Key") |
|
|
| |
| @app.post("/integration") |
| def integration(payload: ConversationPayloadSugg, api_key: str = Security(get_api_key)): |
| from_user_questions = payload.FromUserKavasQuestions[-NUMBER_OF_MESSAGES_FOR_CONTEXT_SUGG:] |
| to_user_questions = payload.ToUserKavasQuestions[-NUMBER_OF_MESSAGES_FOR_CONTEXT_SUGG:] |
| ai_prompt = create_conversation_starter_prompt(from_user_questions + to_user_questions, payload.Chatmood) |
| conversation_starters = generate_conversation_starters(ai_prompt) |
| return {"conversation_starters": conversation_starters} |
|
|
| |
| @app.post("/chat_integration") |
| def chat_integration(payload: ConversationPayloadChat, api_key: str = Security(get_api_key)): |
| last_chat_messages = payload.LastChatMessages[-NUMBER_OF_MESSAGES_FOR_CONTEXT_CHAT:] |
| suggestions = get_conversation_suggestions(last_chat_messages) |
| return {"version": "1.0.0-alpha", "suggested_responses": suggestions} |
|
|
| |
| @app.post("/upload") |
| async def upload_file(file: UploadFile = File(...), api_key: str = Security(get_api_key)): |
| if file.content_type != 'application/json': |
| raise HTTPException(status_code=400, detail="Invalid file type. Please upload a JSON file.") |
|
|
| data = await file.read() |
| try: |
| json_data = json.loads(data) |
| except json.JSONDecodeError: |
| raise HTTPException(status_code=400, detail="Invalid JSON format.") |
|
|
| if "FromUserKavasQuestions" in json_data and "Chatmood" in json_data: |
| prompt = create_conversation_starter_prompt( |
| json_data["FromUserKavasQuestions"], |
| json_data["Chatmood"] |
| ) |
| starter_suggestion = generate_conversation_starters(prompt) |
| return {"conversation_starter": starter_suggestion} |
| elif "LastChatMessages" in json_data: |
| last_chat_messages = json_data["LastChatMessages"][-NUMBER_OF_MESSAGES_FOR_CONTEXT_CHAT:] |
| response = { |
| "version": "1.0.0-alpha", |
| "suggested_responses": get_conversation_suggestions(last_chat_messages) |
| } |
| return response |
| else: |
| raise HTTPException(status_code=400, detail="Invalid JSON structure.") |
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|