CooLLaMACEO commited on
Commit
2d115b7
·
verified ·
1 Parent(s): 584d22a

Upload folder using huggingface_hub

Browse files
Files changed (5) hide show
  1. .gitattributes +35 -35
  2. .gitignore +1 -0
  3. README.md +14 -14
  4. app.py +128 -0
  5. requirements.txt +3 -0
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ gemma-2-2b-it.q3_k_m.gguf
README.md CHANGED
@@ -1,14 +1,14 @@
1
- ---
2
- title: CooLLaMA
3
- emoji: 🏢
4
- colorFrom: green
5
- colorTo: blue
6
- sdk: gradio
7
- sdk_version: 6.5.1
8
- app_file: app.py
9
- pinned: false
10
- license: mit
11
- short_description: Best AI
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: CooLLaMA
3
+ emoji: 🏢
4
+ colorFrom: green
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 6.5.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: Best AI
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import uuid
3
+ from flask import Flask, request, jsonify, render_template_string, send_from_directory
4
+ import ollama
5
+ import requests
6
+
7
+ app = Flask(__name__)
8
+
9
+ # === GGUF MODEL DOWNLOAD ===
10
+ MODEL_URL = "https://huggingface.co/CooLLaMACEO/CooLLaMA-Gemma2/resolve/main/gemma-2-2b-it.q3_k_m.gguf"
11
+ MODEL_DIR = "models"
12
+ MODEL_PATH = os.path.join(MODEL_DIR, "gemma-2-2b-it.q3_k_m.gguf")
13
+
14
+ os.makedirs(MODEL_DIR, exist_ok=True)
15
+
16
+ if not os.path.exists(MODEL_PATH):
17
+ print("Downloading GGUF model...")
18
+ with requests.get(MODEL_URL, stream=True) as r:
19
+ r.raise_for_status()
20
+ with open(MODEL_PATH, "wb") as f:
21
+ for chunk in r.iter_content(chunk_size=1024*1024):
22
+ if chunk:
23
+ f.write(chunk)
24
+ print("Download complete!")
25
+
26
+ # === HTML TEMPLATE ===
27
+ HTML_TEMPLATE = """
28
+ <!DOCTYPE html>
29
+ <html lang="en">
30
+ <head>
31
+ <meta charset="UTF-8">
32
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
33
+ <title>CooLLaMA AI</title>
34
+ <link rel="icon" type="image/x-icon" href="/favicon.ico">
35
+ <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;800&display=swap" rel="stylesheet">
36
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
37
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
38
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
39
+ <style>
40
+ :root { --bg:#0b0f1a; --card:#161b2c; --user-blue:#2563eb; --ai-bubble:#1e293b; --accent:#8b5cf6; --text-light:#f1f5f9; --text-dim:#64748b; }
41
+ body { font-family:'Plus Jakarta Sans',sans-serif; background:var(--bg); color:var(--text-light); display:flex; height:100vh; margin:0; overflow:hidden; }
42
+ #sidebar { width:260px; background:#090c14; display:flex; flex-direction:column; border-right:1px solid #2d3748; padding:20px; }
43
+ .new-chat-btn { background:linear-gradient(135deg,#2563eb,#7c3aed); border:none; color:white; padding:14px; border-radius:12px; cursor:pointer; font-weight:800; margin-bottom:25px; transition:all 0.2s ease; }
44
+ .new-chat-btn:hover { transform:translateY(-2px); box-shadow:0 5px 15px rgba(37,99,235,0.4); }
45
+ #chat-list { flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:8px; }
46
+ .chat-item { padding:12px; border-radius:10px; cursor:pointer; font-size:13px; color:var(--text-dim); transition:0.3s; border:1px solid transparent; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
47
+ .chat-item:hover { background:#1e293b; color:white; border-color:#334155; box-shadow:0 0 10px rgba(139,92,246,0.1); }
48
+ .chat-item.active { background:#1e293b; color:white; border-color:#2563eb; }
49
+ #main-container { flex:1; display:flex; flex-direction:column; }
50
+ header { padding:20px 30px; border-bottom:1px solid #2d3748; display:flex; justify-content:space-between; align-items:center; }
51
+ header h1 { font-size:1.5rem; margin:0; font-weight:800; background:linear-gradient(90deg,#60a5fa,#a78bfa); -webkit-background-clip:text; -webkit-text-fill-color:transparent; }
52
+ #chat { flex:1; padding:25px; overflow-y:auto; display:flex; flex-direction:column; gap:20px; scroll-behavior:smooth; }
53
+ .message-row { display:flex; flex-direction:column; width:100%; animation:slideUp 0.3s ease-out forwards; }
54
+ @keyframes slideUp { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
55
+ .message { max-width:85%; padding:14px 20px; border-radius:18px; font-size:15px; line-height:1.6; }
56
+ .user-row { align-items:flex-end; }
57
+ .user { background:var(--user-blue); color:white; border-bottom-right-radius:2px; }
58
+ .ai-row { align-items:flex-start; }
59
+ .ai { background:var(--ai-bubble); color:var(--text-light); border:1px solid #334155; border-bottom-left-radius:2px; }
60
+ .ai-cursor { color:var(--accent); font-weight:bold; margin-right:8px; animation:blink 1s infinite; }
61
+ @keyframes blink { 0%,100% {opacity:1;} 50% {opacity:0.3;} }
62
+ .label { font-size:10px; font-weight:700; margin-bottom:6px; color:var(--text-dim); text-transform:uppercase; letter-spacing:0.8px; }
63
+ #input-container { padding:25px; background:var(--card); border-top:1px solid #2d3748; }
64
+ .input-box { max-width:850px; margin:0 auto; display:flex; background:#0b0f1a; border:1px solid #334155; border-radius:15px; padding:10px; align-items:flex-end; }
65
+ textarea { flex:1; border:none; background:transparent; padding:10px; font-size:16px; outline:none; color:white; resize:none; font-family:inherit; }
66
+ button#send-btn { background:var(--user-blue); border:none; color:white; padding:0 25px; border-radius:10px; cursor:pointer; font-weight:800; height:45px; }
67
+ .typing-container { display:flex; align-items:flex-start; gap:10px; margin-top:5px; }
68
+ .dot { width:6px; height:6px; background:var(--accent); border-radius:50%; animation:bounce 1.4s infinite ease-in-out both; }
69
+ .dot:nth-child(1){animation-delay:-0.32s;} .dot:nth-child(2){animation-delay:-0.16s;}
70
+ @keyframes bounce {0%,80%,100%{transform:scale(0);}40%{transform:scale(1.0);}}
71
+ </style>
72
+ </head>
73
+ <body>
74
+ <div id="sidebar">
75
+ <button class="new-chat-btn" onclick="startNewChat()">+ New Chat</button>
76
+ <div id="chat-list"></div>
77
+ <button onclick="clearAllCache()" style="background:transparent; border:none; color:#334155; font-size:10px; cursor:pointer; margin-top:20px; font-weight:700;">RESET CACHE</button>
78
+ </div>
79
+ <div id="main-container">
80
+ <header><h1>🦙 CooLLaMA</h1><div style="font-size:10px; color:#64748b; font-weight:700;">v3.5 ANIMATED</div></header>
81
+ <div id="chat"></div>
82
+ <div id="input-container">
83
+ <div class="input-box">
84
+ <textarea id="message" placeholder="Send a message..." rows="1" oninput="this.style.height='';this.style.height=this.scrollHeight+'px'"></textarea>
85
+ <button id="send-btn" onclick="sendMessage()">Send</button>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ <script>
90
+ let currentChatId = null;
91
+ let localData = JSON.parse(localStorage.getItem('coolllama_v4_chats')) || {};
92
+ marked.setOptions({ breaks:true, highlight:(code,lang)=>Prism.languages[lang]?Prism.highlight(code,Prism.languages[lang],lang):code });
93
+ function loadSidebar(){const list=document.getElementById("chat-list");list.innerHTML="";Object.keys(localData).reverse().forEach(id=>{const item=document.createElement("div");item.className="chat-item"+(id===currentChatId?" active":"");item.id="item-"+id;item.innerHTML=`💬 Session ${id}`;item.onclick=()=>selectChat(id);list.appendChild(item);});}
94
+ async function startNewChat(){const res=await fetch("/new_chat",{method:"POST"});const data=await res.json();currentChatId=data.chat_id;localData[currentChatId]=[];saveToCache();loadSidebar();selectChat(currentChatId);}
95
+ function selectChat(id){currentChatId=id;document.querySelectorAll('.chat-item').forEach(el=>el.classList.remove('active'));if(document.getElementById("item-"+id))document.getElementById("item-"+id).classList.add("active");document.getElementById("chat").innerHTML="";if(localData[id])localData[id].forEach(msg=>appendMessage(msg.role,msg.content,false));}
96
+ function appendMessage(role,text,isNew=true){const chatDiv=document.getElementById("chat");const row=document.createElement("div");row.className=`message-row ${role==='user'?'user-row':'ai-row'}`;if(!isNew)row.style.animation='none';const prefix=(role!=='user')?'<span class="ai-cursor">■</span>':'';const content=role==='user'?document.createTextNode(text).textContent:marked.parse(text);row.innerHTML=`<span class="label">${role==='user'?'You':'CooLLaMA'}</span><div class="message ${role==='user'?'user':'ai'}">${prefix}${content}</div>`;chatDiv.appendChild(row);chatDiv.scrollTop=chatDiv.scrollHeight;Prism.highlightAll();}
97
+ async function sendMessage(){const input=document.getElementById("message");const text=input.value.trim();if(!text||!currentChatId)return;appendMessage('user',text);localData[currentChatId].push({role:'user',content:text});saveToCache();input.value="";input.style.height='auto';const chatDiv=document.getElementById("chat");const thinkRow=document.createElement("div");thinkRow.id="thinking-indicator";thinkRow.className="message-row ai-row";thinkRow.innerHTML=`<span class="label">CooLLaMA</span><div class="typing-container"><div class="dot"></div><div class="dot"></div><div class="dot"></div></div>`;chatDiv.appendChild(thinkRow);chatDiv.scrollTop=chatDiv.scrollHeight;try{const res=await fetch("/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({history:localData[currentChatId]})});const data=await res.json();document.getElementById("thinking-indicator").remove();appendMessage('assistant',data.response);localData[currentChatId].push({role:'assistant',content:data.response});saveToCache();}catch(e){document.getElementById("thinking-indicator").innerText="Error."}}
98
+ function saveToCache(){localStorage.setItem('coolllama_v4_chats',JSON.stringify(localData));}
99
+ function clearAllCache(){if(confirm("Reset all?")){localStorage.clear();location.reload();}}
100
+ document.getElementById("message").addEventListener("keydown",e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();sendMessage();}});
101
+ loadSidebar();if(Object.keys(localData).length>0)selectChat(Object.keys(localData).sort().reverse()[0]);else startNewChat();
102
+ </script>
103
+ </body>
104
+ </html>
105
+ """
106
+
107
+ @app.route("/")
108
+ def index():
109
+ return render_template_string(HTML_TEMPLATE)
110
+
111
+ @app.route('/favicon.ico')
112
+ def favicon():
113
+ return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')
114
+
115
+ @app.route("/new_chat", methods=["POST"])
116
+ def new_chat():
117
+ return jsonify({"chat_id": str(uuid.uuid4())[:8].upper()})
118
+
119
+ @app.route("/chat", methods=["POST"])
120
+ def chat():
121
+ data = request.json
122
+ history = data.get("history", [])
123
+ messages = [{"role": "system", "content": "You are CooLLaMA, an AI by the CooLLaMA Team."}] + history[-10:]
124
+ result = ollama.chat(model=MODEL_PATH, messages=messages, options={"temperature":0.4})
125
+ return jsonify({"response": result["message"]["content"]})
126
+
127
+ if __name__ == "__main__":
128
+ app.run(host="0.0.0.0", port=5000)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Flask==2.3.3
2
+ requests==2.31.0
3
+ ollama