from fastapi import FastAPI, HTTPException from pydantic import BaseModel import requests import json app = FastAPI() # Define the request model class ChatRequest(BaseModel): system_prompt: str user_query: str model: str = "gemini-1.5-pro-latest" temperature: float = 1.0 top_p: float = 0.8 max_tokens: int = 4000 # Define the URL and headers url = "https://chat.typegpt.net/api/openai/v1/chat/completions" headers = { "Accept": "application/json, text/event-stream", "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0", } @app.post("/chat") async def chat(request: ChatRequest): # Define the payload payload = { "messages": [ { "role": "system", "content": request.system_prompt }, { "role": "user", "content": request.user_query } ], "stream": True, "model": request.model, "temperature": request.temperature, "top_p": request.top_p, "max_tokens": request.max_tokens } # Make the POST request with streaming try: with requests.post(url, headers=headers, data=json.dumps(payload), stream=True) as response: # Check if the request was successful if response.status_code == 200: result = "" # Stream the response for line in response.iter_lines(): if line: # Decode the line decoded_line = line.decode('utf-8') # Check if the line starts with "data: " if decoded_line.startswith("data: "): # Extract the JSON part json_data = decoded_line[6:] # Remove "data: " prefix # Parse the JSON try: parsed_data = json.loads(json_data) # Check if 'choices' and 'delta' exist and append the content if 'choices' in parsed_data and len(parsed_data['choices']) > 0: content = parsed_data['choices'][0]['delta'].get('content', '') if content: result += content except json.JSONDecodeError: continue return {"response": result} else: raise HTTPException(status_code=response.status_code, detail=response.text) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8083)