import os from functools import lru_cache import gradio as gr from huggingface_hub import hf_hub_download from llama_cpp import Llama MODEL_REPO = "microsoft/Phi-3-mini-4k-instruct-gguf" MODEL_FILE = "Phi-3-mini-4k-instruct-q4.gguf" @lru_cache(maxsize=1) def get_model(): model_path = hf_hub_download(repo_id=MODEL_REPO, filename=MODEL_FILE) return Llama( model_path=model_path, n_ctx=4096, n_threads=min(4, os.cpu_count() or 2), n_batch=128, use_mmap=True, verbose=False, ) def build_prompt(message, history): prompt = "" for user, assistant in history: prompt += f"User: {user}\nAssistant: {assistant}\n" prompt += f"User: {message}\nAssistant:" return prompt def chat(message, history): try: model = get_model() prompt = build_prompt(message, history) output = model( prompt, max_tokens=200, temperature=0.7, top_p=0.9, stop=["User:", ""], ) text = output["choices"][0]["text"].strip() if not text: return "..." return text except Exception as e: return f"Error: {str(e)}" demo = gr.ChatInterface( fn=chat, title="Phi-3 Mini CPU Chat", ) if __name__ == "__main__": demo.launch()