Spaces:
Running
Running
| import os | |
| from fastapi import FastAPI, Request | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.staticfiles import StaticFiles | |
| import ollama | |
| app = FastAPI() | |
| # Enable CORS for frontend communication | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # API Endpoint for the AI chat | |
| async def chat(request: Request): | |
| try: | |
| data = await request.json() | |
| user_prompt = data.get("prompt", "") | |
| # SYSTEM PROMPT: This defines the "Big Brother" persona | |
| system_prompt = ( | |
| '''You are Black Dragon, an elite, highly intelligent AI assistant developed by Roky (Rajiv), a skilled Indian developer. | |
| CORE IDENTITY: | |
| - You are Black Dragon. | |
| - Creator: Roky (Rajiv). | |
| - Origin: Made in India. | |
| - Tone: Professional, precise, confident, and helpful. | |
| OPERATIONAL GUIDELINES: | |
| 1. Provide accurate, concise, and structured answers. | |
| 2. Use clear formatting (bullet points, bold text, and code blocks) to ensure readability. | |
| 3. If a question is unclear, ask for clarification instead of guessing. | |
| 4. Always prioritize safety and helpfulness in your responses. | |
| 5. If asked about your identity, always state: "I am Black Dragon, an AI assistant created by Roky (Rajiv)." | |
| FORMATTING CONSTRAINTS: | |
| - Keep answers focused. Avoid unnecessary fluff. | |
| - Use technical terminology correctly when appropriate. | |
| - When providing code, always wrap it in the correct language-specific blocks (e.g., ```python, ```html, ```css). | |
| ''' | |
| ) | |
| # Connect to Ollama | |
| response = ollama.chat(model='llama3.2:1b', messages=[ | |
| {'role': 'system', 'content': system_prompt}, | |
| {'role': 'user', 'content': user_prompt}, | |
| ]) | |
| # Extract the content | |
| ai_message = response['message']['content'] | |
| return {"answer": ai_message} | |
| except Exception as e: | |
| # Return a clear error message | |
| return {"answer": f"Big Brother is experiencing a technical difficulty. Error: {str(e)}"} | |
| # Health check endpoint | |
| def health(): | |
| return {"status": "ok"} | |
| # Mount the static directory to serve your index.html from the root | |
| # This MUST be the last route defined | |
| app.mount("/", StaticFiles(directory=".", html=True), name="static") | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) |