File size: 2,495 Bytes
216abcb
bb40de3
34c5fe6
bb40de3
 
ce5eee7
 
34c5fe6
 
 
ce5eee7
216abcb
ce5eee7
216abcb
ce5eee7
 
 
 
bb40de3
 
 
 
34c5fe6
 
 
ce5eee7
 
 
34c5fe6
 
ce5eee7
bb40de3
ce5eee7
bb40de3
 
 
 
 
 
ce5eee7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34c5fe6
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import subprocess
import tempfile

app = FastAPI()

# βœ… Fix: Set writable cache directory for Hugging Face models
os.environ["TRANSFORMERS_CACHE"] = "/app/cache"
os.environ["HF_HOME"] = "/app/cache"

# βœ… Ensure cache directory exists
os.makedirs("/app/cache", exist_ok=True)

# βœ… Load AI Model
model_name = "deepseek-ai/DeepSeek-Coder-V2-Base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

class CodeRequest(BaseModel):
    user_story: str

class TestRequest(BaseModel):
    code: str

@app.post("/generate-code")
def generate_code(request: CodeRequest):
    """Generates AI-powered structured code based on user story"""
    prompt = f"Generate structured code for: {request.user_story}"

    inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu")
    output = model.generate(**inputs, max_length=300)
    generated_code = tokenizer.decode(output[0], skip_special_tokens=True)

    return {"generated_code": generated_code}

@app.post("/test-code")
def test_code(request: TestRequest):
    """Runs automated testing on AI-generated code"""
    try:
        with tempfile.NamedTemporaryFile(delete=False, suffix=".py") as temp_file:
            temp_file.write(request.code.encode())
            temp_file.close()

            result = subprocess.run(["pytest", temp_file.name], capture_output=True, text=True)
            os.unlink(temp_file.name)

            if result.returncode == 0:
                return {"test_status": "All tests passed!"}
            else:
                return {"test_status": "Test failed!", "details": result.stderr}

    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/execute-code")
def execute_code():
    """Executes AI-generated code and returns output"""
    sample_code = "print('Hello from AI-generated code!')"
    
    try:
        result = subprocess.run(["python3", "-c", sample_code], capture_output=True, text=True)
        return {"status": "Execution successful!", "output": result.stdout}
    
    except Exception as e:
        return {"status": "Execution failed!", "error": str(e)}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=7860)