1 line
3.7 KiB
JSON
1 line
3.7 KiB
JSON
{"repo": "algonacci/prd-maker-ml", "files": {"app.py": {"8d60f2f896b44c445f55220fca56c4f1596073a5": {"t": 1785674062.928818, "n": 3362, "h": "2d9192558c6dc20a", "c": "import os\nimport json\nfrom flask import Flask, jsonify, request, stream_with_context, Response\nfrom langchain_ollama import ChatOllama\nfrom langchain_openai import ChatOpenAI\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_community.chat_models.sambanova import ChatSambaNovaCloud\nfrom langchain_core.prompts import PromptTemplate\nfrom flask_cors import cross_origin\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\napp = Flask(__name__)\n\nos.environ[\"LANGSMITH_TRACING\"] = \"true\"\nos.environ[\"LANGSMITH_API_KEY\"] = os.getenv(\"LANGSMITH_API_KEY\")\n\n\n# llm = ChatOllama(\n# model=\"llama3.2:latest\",\n# temperature=0.5,\n# )\n\n# llm = ChatOpenAI(\n# model=\"gpt-3.5-turbo\",\n# temperature=0.5,\n# )\n\nllm = ChatOpenAI(\n model=\"deepseek-chat\",\n openai_api_key=os.getenv(\"DEEPSEEK_API_KEY\"),\n openai_api_base=\"https://api.deepseek.com\",\n max_completion_tokens=8000\n)\n\n# llm = ChatGoogleGenerativeAI(\n# model=\"gemini-1.5-flash-8b\",\n# temperature=0.5,\n# )\n\n# llm = ChatSambaNovaCloud(\n# model=\"Meta-Llama-3.2-1B-Instruct\",\n# max_tokens=4096,\n# temperature=0.7,\n# top_k=1,\n# top_p=0.01,\n# )\n\nprompt = PromptTemplate(\n input_variables=[\n \"projectName\",\n \"language\",\n \"briefing\",\n \"targetAudience\",\n \"businessGoals\",\n \"keyFeatures\",\n \"technicalRequirements\",\n \"constraints\",\n \"concerns\",\n \"budget\",\n ],\n template=\"\"\"\nYou are a Product Requirements Document (PRD) generator. \nCreate a comprehensive PRD for a project with the following details. \nPlease format the document using Markdown syntax, including appropriate headings, subheadings, bullet points, numbered lists, and line breaks to enhance readability and structure\nAvoid using backticks (`).\n\n**Project Details:**\n\n- **Project Name:** {projectName}\n- **Language:** {language}\n- **Briefing:** {briefing}\n- **Target Audience:** {targetAudience}\n- **Business Goals:** {businessGoals}\n- **Key Features:** {keyFeatures}\n- **Technical Requirements:** {technicalRequirements}\n- **Constraints:** {constraints}\n- **Concerns:** {concerns}\n- **Budget:** {budget}\n \"\"\",\n)\n\n\n@app.route(\"/\")\ndef index():\n return jsonify(\n {\"status\": {\"code\": 200, \"message\": \"Success fetching the API\"}, \"data\": None}\n ), 200\n\n\n@app.route(\"/generate_prd\", methods=[\"GET\", \"POST\"])\n@cross_origin()\ndef generate_prd():\n if request.method == \"POST\":\n input_data = request.get_json()\n\n chain = prompt | llm\n\n def generate():\n try:\n for chunk in chain.stream(input_data):\n # Wrap each chunk in HTML tags for streaming response\n html_chunk = f\"{chunk.content}\"\n yield f\"{html_chunk}\"\n\n # Indicate completion\n yield f\"data: {json.dumps({'status': 'DONE'})}\\n\\n\"\n except Exception as e:\n # Yield error message\n error_message = json.dumps({\"error\": str(e)})\n yield f\"data: {error_message}\\n\\n\"\n\n return Response(\n stream_with_context(generate()), content_type=\"text/event-stream\"\n )\n\n else:\n return jsonify(\n {\"status\": {\"code\": 405, \"message\": \"Method Not Allowed\"}, \"data\": None}\n ), 405\n\n\nif __name__ == \"__main__\":\n app.run(debug=True)\n"}}}} |