TestAICodetoZip / app.py
MegaTronX's picture
Update app.py
5da2830 verified
raw
history blame
2.96 kB
import spaces
import os
import gradio as gr
import zipfile
import tempfile
from llama_cpp import Llama
from llama_cpp_agent import LlamaCppAgent, MessagesFormatterType
from llama_cpp_agent.providers import LlamaCppPythonProvider
from llama_cpp_agent.chat_history import BasicChatHistory
from llama_cpp_agent.chat_history.messages import Roles
from huggingface_hub import hf_hub_download
MODEL_REPO = "tHottie/NeuralDaredevil-8B-abliterated-Q4_K_M-GGUF"
MODEL_FILENAME = "neuraldaredevil-8b-abliterated-q4_k_m-imat.gguf"
MODEL_PATH = f"models/{MODEL_FILENAME}"
hf_hub_download(repo_id=MODEL_REPO, filename=MODEL_FILENAME, local_dir="./models")
@spaces.GPU(duration=120)
def generate_code_zip(prompt):
chat_template = MessagesFormatterType.GEMMA_2
llm = Llama(
model_path=MODEL_PATH,
flash_attn=True,
n_gpu_layers=81,
n_batch=1024,
n_ctx=8192,
)
provider = LlamaCppPythonProvider(llm)
agent = LlamaCppAgent(
provider,
system_prompt="You are an AI code generation agent. Respond with code blocks per file name.",
predefined_messages_formatter_type=chat_template,
debug_output=True
)
messages = BasicChatHistory()
messages.add_message({"role": Roles.user, "content": prompt})
stream = agent.get_chat_response(
prompt,
llm_sampling_settings=provider.get_provider_default_settings(),
chat_history=messages,
returns_streaming_generator=False,
print_output=True
)
response = stream if isinstance(stream, str) else "".join(stream)
file_map = parse_code_blocks(response)
temp_dir = tempfile.mkdtemp()
zip_path = os.path.join(temp_dir, "generated_code.zip")
with zipfile.ZipFile(zip_path, "w") as zipf:
for filename, code in file_map.items():
full_path = os.path.join(temp_dir, filename)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
with open(full_path, "w", encoding="utf-8") as f:
f.write(code)
zipf.write(full_path, arcname=filename)
return zip_path
def parse_code_blocks(text):
import re
file_blocks = {}
pattern = r"###\s*(.*?)\n```(?:[a-zA-Z0-9+]*\n)?(.*?)```"
matches = re.findall(pattern, text, re.DOTALL)
for filename, content in matches:
cleaned_filename = filename.strip()
cleaned_code = content.strip()
file_blocks[cleaned_filename] = cleaned_code
return file_blocks
def interface_fn(prompt):
try:
zip_path = generate_code_zip(prompt)
return zip_path
except Exception as e:
return f"Error: {e}"
with gr.Blocks() as demo:
gr.Markdown("## AI Code Packager (GGUF-Powered)")
prompt = gr.Textbox(label="Enter AI response or code instructions")
output = gr.File(label="Download Zip")
btn = gr.Button("Generate Zip")
btn.click(fn=interface_fn, inputs=prompt, outputs=output)
demo.launch()