veteroner commited on
Commit ·
e767aa1
1
Parent(s): 7a72ed3
Hub modelini kullanacak şekilde düzeltildi - Demo moddan çıkıyor!
Browse files- README.md +211 -135
- app.py +197 -192
- gradio_app.py +65 -33
- hf_space_app.py +185 -0
- requirements.txt +9 -4
README.md
CHANGED
|
@@ -1,213 +1,289 @@
|
|
| 1 |
---
|
| 2 |
-
title: Nova AI
|
| 3 |
emoji: 🚀
|
| 4 |
colorFrom: red
|
| 5 |
colorTo: blue
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version: 4.
|
| 8 |
-
app_file:
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
-
|
| 12 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
---
|
| 14 |
|
| 15 |
# 🚀 Teknova Nova AI
|
| 16 |
|
| 17 |
-
**
|
| 18 |
|
| 19 |
-
|
| 20 |
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |
-
|
| 24 |
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
-
|
| 28 |
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
-
##
|
| 32 |
-
- 🧠 **Gelişmiş Dil Modeli** - Özgün Teknova teknolojisi
|
| 33 |
-
- 💬 **Doğal Konuşma** - İnsan benzeri etkileşim
|
| 34 |
-
- 🎛️ **Ayarlanabilir Parametreler** - Temperature ve uzunluk kontrolü
|
| 35 |
-
- ⚡ **Hızlı Yanıt** - Optimize edilmiş performans
|
| 36 |
-
- 🌍 **Türkçe Desteği** - Ana dil Türkçe
|
| 37 |
|
| 38 |
-
|
| 39 |
-
- **
|
| 40 |
-
- **
|
| 41 |
-
- **
|
| 42 |
-
- **
|
| 43 |
-
- **GPU Support:** CUDA + CPU fallback
|
| 44 |
|
| 45 |
-
|
| 46 |
|
| 47 |
-
|
| 48 |
|
| 49 |
-
##
|
| 50 |
-
1. Mesajınızı text kutusuna yazın
|
| 51 |
-
2. **Gönder** butonuna basın veya Enter'a basın
|
| 52 |
-
3. Nova AI'nin yanıtını bekleyin
|
| 53 |
|
| 54 |
-
|
| 55 |
-
- **
|
| 56 |
-
- **
|
| 57 |
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
- "Bana yenilikçi proje fikirleri öner"
|
| 62 |
-
- "Gelecekteki teknolojiler hakkında konuşalım"
|
| 63 |
|
| 64 |
---
|
| 65 |
|
| 66 |
-
##
|
| 67 |
|
| 68 |
-
###
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
|
| 76 |
-
|
| 77 |
-
```bash
|
| 78 |
-
# Repository'yi clone edin
|
| 79 |
-
git clone https://github.com/veteroner/novaai.git
|
| 80 |
-
cd novaai
|
| 81 |
|
| 82 |
-
#
|
| 83 |
-
docker build -t nova-ai .
|
| 84 |
|
| 85 |
-
#
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
```
|
| 88 |
|
| 89 |
-
###
|
| 90 |
-
```
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
```
|
| 97 |
|
| 98 |
---
|
| 99 |
|
| 100 |
-
##
|
| 101 |
|
| 102 |
-
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
```
|
| 109 |
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
|
|
|
| 113 |
|
| 114 |
---
|
| 115 |
|
| 116 |
-
##
|
| 117 |
-
|
| 118 |
-
### 🖥️ **Ana Arayüz**
|
| 119 |
-
- Modern ve responsive tasarım
|
| 120 |
-
- Koyu/açık tema desteği
|
| 121 |
-
- Real-time sohbet deneyimi
|
| 122 |
|
| 123 |
-
|
| 124 |
-
-
|
| 125 |
-
|
| 126 |
-
|
|
|
|
|
|
|
| 127 |
|
| 128 |
---
|
| 129 |
|
| 130 |
-
##
|
| 131 |
-
|
| 132 |
-
###
|
| 133 |
-
- **
|
| 134 |
-
- **
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
|
| 142 |
---
|
| 143 |
|
| 144 |
-
##
|
| 145 |
-
|
| 146 |
-
Nova AI'yi geliştirmek isterseniz:
|
| 147 |
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
|
| 154 |
-
|
|
|
|
|
|
|
|
|
|
| 155 |
|
| 156 |
---
|
| 157 |
|
| 158 |
-
##
|
| 159 |
|
| 160 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 161 |
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
|
|
|
|
|
|
| 165 |
|
| 166 |
---
|
| 167 |
|
| 168 |
-
##
|
| 169 |
-
|
| 170 |
-
### 🌐 **Official**
|
| 171 |
-
- **🏠 Website:** [Teknova.com](https://teknova.com)
|
| 172 |
-
- **📧 Contact:** teknova@example.com
|
| 173 |
|
| 174 |
-
|
| 175 |
-
- **📂 GitHub:** [veteroner/novaai](https://github.com/veteroner/novaai)
|
| 176 |
-
- **🤗 Hugging Face:** [YOUR-USERNAME/nova-ai](https://huggingface.co/spaces/YOUR-USERNAME/nova-ai)
|
| 177 |
-
- **🐳 Docker Hub:** [teknova/nova-ai](https://hub.docker.com/r/teknova/nova-ai)
|
| 178 |
|
| 179 |
-
###
|
| 180 |
-
|
| 181 |
-
|
|
|
|
| 182 |
|
| 183 |
---
|
| 184 |
|
| 185 |
-
##
|
| 186 |
|
| 187 |
-
**Teknova**, yapay zeka
|
| 188 |
|
| 189 |
### 🎯 **Misyonumuz**
|
| 190 |
-
Yapay zeka teknolojilerini
|
| 191 |
|
| 192 |
-
### 🚀 **Vizyonumuz**
|
| 193 |
-
Türkiye'
|
| 194 |
|
| 195 |
---
|
| 196 |
|
| 197 |
-
##
|
| 198 |
-
|
| 199 |
-
Nova AI'yi kullandığınız için teşekkürler!
|
| 200 |
|
| 201 |
-
|
|
|
|
|
|
|
|
|
|
| 202 |
|
| 203 |
---
|
| 204 |
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
**🚀 Teknova Nova AI** - *Özgün yapay zeka teknolojisi*
|
| 208 |
-
|
| 209 |
-
Made with ❤️ by **Teknova**
|
| 210 |
|
| 211 |
-
|
| 212 |
|
| 213 |
-
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Teknova Nova AI
|
| 3 |
emoji: 🚀
|
| 4 |
colorFrom: red
|
| 5 |
colorTo: blue
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 4.44.1
|
| 8 |
+
app_file: hf_space_app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
+
language:
|
| 12 |
+
- tr
|
| 13 |
+
- en
|
| 14 |
+
tags:
|
| 15 |
+
- text-generation
|
| 16 |
+
- conversational
|
| 17 |
+
- turkish
|
| 18 |
+
- teknova
|
| 19 |
+
- nova-ai
|
| 20 |
+
- chat
|
| 21 |
+
- assistant
|
| 22 |
+
pipeline_tag: text-generation
|
| 23 |
+
library_name: transformers
|
| 24 |
---
|
| 25 |
|
| 26 |
# 🚀 Teknova Nova AI
|
| 27 |
|
| 28 |
+
**Teknova** tarafından geliştirilen **özgün** Türkçe yapay zeka modeli - Hugging Face ZeroGPU ile hızlandırılmış!
|
| 29 |
|
| 30 |
+
## ✨ Özellikler
|
| 31 |
|
| 32 |
+
- 🧠 **Özgün Model**: Teknova tarafından sıfırdan geliştirilen yapay zeka modeli
|
| 33 |
+
- 🇹🇷 **Türkçe Optimizasyonu**: Türkçe dil yapısına özel olarak eğitilmiş
|
| 34 |
+
- ⚡ **ZeroGPU Hızlı**: Hugging Face ZeroGPU teknolojisi ile hızlandırılmış
|
| 35 |
+
- 💬 **Akıllı Sohbet**: Doğal dil işleme ile akıllı konuşma
|
| 36 |
+
- 🎯 **Kullanıcı Dostu**: Kolay kullanım için tasarlanmış arayüz
|
| 37 |
|
| 38 |
+
## 🚀 Nasıl Kullanılır?
|
| 39 |
|
| 40 |
+
1. **Sohbet Başlat**: Aşağıdaki chat arayüzünde mesajınızı yazın
|
| 41 |
+
2. **Gönder**: 🚀 Gönder butonuna tıklayın
|
| 42 |
+
3. **Yanıt Al**: Nova AI'dan anlık yanıt alın
|
| 43 |
+
4. **Devam Edin**: Konuşmaya devam ederek daha detaylı bilgi alın
|
| 44 |
|
| 45 |
+
## 💡 Örnek Sorular
|
| 46 |
|
| 47 |
+
- "Merhaba Nova AI, nasılsın?"
|
| 48 |
+
- "Yapay zeka nedir?"
|
| 49 |
+
- "Teknova hakkında bilgi ver"
|
| 50 |
+
- "Bana bir hikaye anlat"
|
| 51 |
+
- "Python programlama hakkında bilgi ver"
|
| 52 |
|
| 53 |
+
## 🛠️ Teknik Bilgiler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
|
| 55 |
+
- **Model**: Teknova Nova AI (Özgün)
|
| 56 |
+
- **Framework**: Transformers, PyTorch
|
| 57 |
+
- **UI**: Gradio 4.44.1
|
| 58 |
+
- **Hızlandırma**: Hugging Face ZeroGPU
|
| 59 |
+
- **Dil**: Türkçe odaklı çok dilli destek
|
|
|
|
| 60 |
|
| 61 |
+
## 📄 Lisans
|
| 62 |
|
| 63 |
+
Bu proje MIT lisansı ile lisanslanmıştır.
|
| 64 |
|
| 65 |
+
## 🔗 Bağlantılar
|
|
|
|
|
|
|
|
|
|
| 66 |
|
| 67 |
+
- **Geliştirici**: Teknova Innovation
|
| 68 |
+
- **Model**: Nova AI (Özgün)
|
| 69 |
+
- **Platform**: Hugging Face Spaces
|
| 70 |
|
| 71 |
+
---
|
| 72 |
+
|
| 73 |
+
🌟 **Teknova Nova AI** - Tamamen özgün Türkçe dil modeli ile güçlendirilmiş yapay zeka deneyimi!
|
|
|
|
|
|
|
| 74 |
|
| 75 |
---
|
| 76 |
|
| 77 |
+
## 🌟 **Model Özellikleri**
|
| 78 |
|
| 79 |
+
### ✨ **Özgün Teknova Teknolojisi**
|
| 80 |
+
- 🧠 **Türkçe Optimizasyonu** - Türkçe dil yapısına özel eğitim
|
| 81 |
+
- 💬 **Doğal Konuşma** - İnsan benzeri etkileşim yetenekleri
|
| 82 |
+
- 🎯 **Bağlamsal Anlama** - Gelişmiş anlam çıkarma
|
| 83 |
+
- ⚡ **Hızlı Yanıt** - Optimize edilmiş performans
|
| 84 |
+
- 🔧 **Çok Amaçlı** - Sohbet, yazma, analiz yetenekleri
|
| 85 |
+
|
| 86 |
+
### 🛠️ **Teknik Detaylar**
|
| 87 |
+
- **Temel Model:** Mistral-7B mimarisi
|
| 88 |
+
- **Parametre Sayısı:** 7.24 milyar
|
| 89 |
+
- **Eğitim Dili:** Türkçe + İngilizce
|
| 90 |
+
- **Bağlam Uzunluğu:** 8192 token
|
| 91 |
+
- **Model Formatı:** SafeTensors + PyTorch
|
| 92 |
|
| 93 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
|
| 95 |
+
## 🚀 **Kullanım**
|
|
|
|
| 96 |
|
| 97 |
+
### 💻 **Transformers ile**
|
| 98 |
+
```python
|
| 99 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 100 |
+
import torch
|
| 101 |
+
|
| 102 |
+
# Nova AI modelini yükle
|
| 103 |
+
model_name = "Teknova/NovaAI"
|
| 104 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 105 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 106 |
+
model_name,
|
| 107 |
+
torch_dtype=torch.float16,
|
| 108 |
+
device_map="auto"
|
| 109 |
+
)
|
| 110 |
+
|
| 111 |
+
# Sohbet örneği
|
| 112 |
+
def chat_with_nova(message):
|
| 113 |
+
conversation = f"Kullanıcı: {message}\nNova AI:"
|
| 114 |
+
inputs = tokenizer(conversation, return_tensors="pt")
|
| 115 |
+
|
| 116 |
+
with torch.no_grad():
|
| 117 |
+
outputs = model.generate(
|
| 118 |
+
**inputs,
|
| 119 |
+
max_new_tokens=512,
|
| 120 |
+
temperature=0.7,
|
| 121 |
+
top_p=0.9,
|
| 122 |
+
do_sample=True,
|
| 123 |
+
pad_token_id=tokenizer.eos_token_id
|
| 124 |
+
)
|
| 125 |
+
|
| 126 |
+
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
| 127 |
+
return response[len(conversation):].strip()
|
| 128 |
+
|
| 129 |
+
# Örnek kullanım
|
| 130 |
+
response = chat_with_nova("Merhaba Nova AI, nasılsın?")
|
| 131 |
+
print(response)
|
| 132 |
```
|
| 133 |
|
| 134 |
+
### 🌐 **API ile Kullanım**
|
| 135 |
+
```python
|
| 136 |
+
import requests
|
| 137 |
+
|
| 138 |
+
API_URL = "https://api-inference.huggingface.co/models/Teknova/NovaAI"
|
| 139 |
+
headers = {"Authorization": "Bearer YOUR_HF_TOKEN"}
|
| 140 |
+
|
| 141 |
+
def query_nova_ai(payload):
|
| 142 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
| 143 |
+
return response.json()
|
| 144 |
+
|
| 145 |
+
# Örnek sorgu
|
| 146 |
+
output = query_nova_ai({
|
| 147 |
+
"inputs": "Yapay zeka teknolojileri hakkında bilgi ver",
|
| 148 |
+
"parameters": {
|
| 149 |
+
"max_new_tokens": 256,
|
| 150 |
+
"temperature": 0.7,
|
| 151 |
+
"top_p": 0.9
|
| 152 |
+
}
|
| 153 |
+
})
|
| 154 |
+
print(output)
|
| 155 |
```
|
| 156 |
|
| 157 |
---
|
| 158 |
|
| 159 |
+
## 💡 **Örnek Kullanım Alanları**
|
| 160 |
|
| 161 |
+
### 🎯 **Sohbet ve Asistan**
|
| 162 |
+
- Müşteri hizmetleri chatbotu
|
| 163 |
+
- Kişisel asistan uygulamaları
|
| 164 |
+
- Eğitim ve öğretim desteği
|
| 165 |
|
| 166 |
+
### 📝 **İçerik Üretimi**
|
| 167 |
+
- Blog yazısı ve makale yazımı
|
| 168 |
+
- Sosyal medya içeriği
|
| 169 |
+
- Yaratıcı yazım desteği
|
|
|
|
| 170 |
|
| 171 |
+
### 🔍 **Analiz ve Özetleme**
|
| 172 |
+
- Metin analizi ve özetleme
|
| 173 |
+
- Duygu analizi
|
| 174 |
+
- Bilgi çıkarma
|
| 175 |
|
| 176 |
---
|
| 177 |
|
| 178 |
+
## ⚙️ **Model Parametreleri**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
|
| 180 |
+
| Parametre | Değer | Açıklama |
|
| 181 |
+
|-----------|-------|----------|
|
| 182 |
+
| `temperature` | 0.7 | Yaratıcılık seviyesi (0.1-1.5) |
|
| 183 |
+
| `top_p` | 0.9 | Nucleus sampling |
|
| 184 |
+
| `max_new_tokens` | 512 | Maksimum yanıt uzunluğu |
|
| 185 |
+
| `repetition_penalty` | 1.1 | Tekrar önleme |
|
| 186 |
|
| 187 |
---
|
| 188 |
|
| 189 |
+
## 🎨 **Demo ve Uygulamalar**
|
| 190 |
+
|
| 191 |
+
### 🌐 **Web Arayüzü**
|
| 192 |
+
- **Gradio Demo:** [Nova AI Chat](https://huggingface.co/spaces/Teknova/NovaAI-Chat)
|
| 193 |
+
- **HTML Arayüz:** Kendi web sitenizde kullanabilirsiniz
|
| 194 |
+
|
| 195 |
+
### 📱 **Entegrasyon**
|
| 196 |
+
```javascript
|
| 197 |
+
// Web sitesinde kullanım örneği
|
| 198 |
+
const API_URL = 'https://api-inference.huggingface.co/models/Teknova/NovaAI';
|
| 199 |
+
|
| 200 |
+
async function queryNovaAI(text) {
|
| 201 |
+
const response = await fetch(API_URL, {
|
| 202 |
+
headers: {
|
| 203 |
+
'Authorization': 'Bearer YOUR_TOKEN',
|
| 204 |
+
'Content-Type': 'application/json'
|
| 205 |
+
},
|
| 206 |
+
method: 'POST',
|
| 207 |
+
body: JSON.stringify({
|
| 208 |
+
inputs: text,
|
| 209 |
+
parameters: {
|
| 210 |
+
max_new_tokens: 256,
|
| 211 |
+
temperature: 0.7
|
| 212 |
+
}
|
| 213 |
+
})
|
| 214 |
+
});
|
| 215 |
+
|
| 216 |
+
return await response.json();
|
| 217 |
+
}
|
| 218 |
+
```
|
| 219 |
|
| 220 |
---
|
| 221 |
|
| 222 |
+
## 📊 **Performans**
|
|
|
|
|
|
|
| 223 |
|
| 224 |
+
### 🚀 **Hız ve Verimlilik**
|
| 225 |
+
- **CPU Modunda:** ~2-3 saniye yanıt süresi
|
| 226 |
+
- **GPU Modunda:** ~0.5-1 saniye yanıt süresi
|
| 227 |
+
- **Bellek Kullanımı:** ~14.5GB model boyutu
|
| 228 |
+
- **Optimizasyon:** 4-bit quantization desteği
|
| 229 |
|
| 230 |
+
### 🎯 **Kalite Metrikleri**
|
| 231 |
+
- **Türkçe Doğruluk:** Yüksek seviyede Türkçe anlama
|
| 232 |
+
- **Bağlamsal Tutarlılık:** Uzun konuşmalarda tutarlı yanıtlar
|
| 233 |
+
- **Yaratıcılık:** Özgün ve çeşitli içerik üretimi
|
| 234 |
|
| 235 |
---
|
| 236 |
|
| 237 |
+
## 🔧 **Sistem Gereksinimleri**
|
| 238 |
|
| 239 |
+
### 💻 **Minimum Gereksinimler**
|
| 240 |
+
- **RAM:** 16GB (4-bit quantization ile)
|
| 241 |
+
- **GPU:** 8GB VRAM (RTX 3070 veya üzeri)
|
| 242 |
+
- **CPU:** 4 çekirdek, 2.5GHz+
|
| 243 |
+
- **Depolama:** 20GB boş alan
|
| 244 |
|
| 245 |
+
### 🚀 **Önerilen Gereksinimler**
|
| 246 |
+
- **RAM:** 32GB
|
| 247 |
+
- **GPU:** 16GB+ VRAM (RTX 4080/4090)
|
| 248 |
+
- **CPU:** 8+ çekirdek, 3.0GHz+
|
| 249 |
+
- **Depolama:** SSD, 50GB+ boş alan
|
| 250 |
|
| 251 |
---
|
| 252 |
|
| 253 |
+
## 📜 **Lisans ve Kullanım**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
|
| 255 |
+
Bu model **Apache 2.0** lisansı altında yayınlanmıştır. Ticari ve akademik kullanım için serbesttir.
|
|
|
|
|
|
|
|
|
|
| 256 |
|
| 257 |
+
### ⚠️ **Önemli Notlar**
|
| 258 |
+
- Model özgün Teknova teknolojisi içermektedir
|
| 259 |
+
- Türkçe optimizasyonları Teknova tarafından geliştirilmiştir
|
| 260 |
+
- Responsible AI ilkelerine uygun olarak kullanılmalıdır
|
| 261 |
|
| 262 |
---
|
| 263 |
|
| 264 |
+
## 🏢 **Teknova Hakkında**
|
| 265 |
|
| 266 |
+
**Teknova**, Türkiye'nin öncü yapay zeka teknoloji şirketidir. Özgün AI çözümleri geliştirerek teknoloji dünyasında fark yaratmayı hedefliyoruz.
|
| 267 |
|
| 268 |
### 🎯 **Misyonumuz**
|
| 269 |
+
Yapay zeka teknolojilerini Türkçe konuşan kullanıcılar için optimize etmek ve erişilebilir kılmak.
|
| 270 |
|
| 271 |
+
### 🚀 **Vizyonumuz**
|
| 272 |
+
Türkiye'den dünyaya özgün yapay zeka teknolojileri ihraç etmek.
|
| 273 |
|
| 274 |
---
|
| 275 |
|
| 276 |
+
## 📞 **İletişim ve Destek**
|
|
|
|
|
|
|
| 277 |
|
| 278 |
+
- **🌐 Website:** [teknova.ai](https://teknova.ai)
|
| 279 |
+
- **📧 E-posta:** info@teknova.ai
|
| 280 |
+
- **💬 Destek:** [GitHub Issues](https://github.com/teknova-ai/nova-ai/issues)
|
| 281 |
+
- **📱 Sosyal Medya:** [@TeknovaAI](https://twitter.com/TeknovaAI)
|
| 282 |
|
| 283 |
---
|
| 284 |
|
| 285 |
+
## 🙏 **Teşekkürler**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 286 |
|
| 287 |
+
Nova AI'yi kullandığınız için teşekkürler! Geri bildirimleriniz bizim için değerlidir.
|
| 288 |
|
| 289 |
+
**Teknova Nova AI** - *Türkiye'nin Özgün Yapay Zeka Teknolojisi* 🚀
|
app.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
"""
|
| 2 |
-
🚀 Nova AI - Hugging Face Spaces
|
| 3 |
Teknova tarafından geliştirilen özgün yapay zeka modeli
|
|
|
|
| 4 |
"""
|
| 5 |
|
| 6 |
import gradio as gr
|
|
@@ -8,6 +9,7 @@ import torch
|
|
| 8 |
import os
|
| 9 |
import logging
|
| 10 |
import time
|
|
|
|
| 11 |
from typing import List, Tuple
|
| 12 |
|
| 13 |
# Logging setup
|
|
@@ -83,9 +85,10 @@ def chat_response(message: str, history: List[List[str]], max_length: int, tempe
|
|
| 83 |
history.append([message, response])
|
| 84 |
return "", history
|
| 85 |
|
|
|
|
| 86 |
def generate_real_response(message: str, max_length: int, temperature: float) -> str:
|
| 87 |
"""
|
| 88 |
-
Gerçek model ile yanıt oluştur
|
| 89 |
"""
|
| 90 |
if not model or not tokenizer:
|
| 91 |
return generate_demo_response(message)
|
|
@@ -116,230 +119,232 @@ def generate_real_response(message: str, max_length: int, temperature: float) ->
|
|
| 116 |
logger.error(f"Model generation error: {e}")
|
| 117 |
return generate_demo_response(message)
|
| 118 |
|
|
|
|
| 119 |
def load_model():
|
| 120 |
"""
|
| 121 |
-
|
| 122 |
"""
|
| 123 |
global model, tokenizer
|
| 124 |
|
| 125 |
try:
|
| 126 |
-
|
| 127 |
-
possible_paths = [
|
| 128 |
-
"/data/nova-ai-model",
|
| 129 |
-
"./nova-ai-model",
|
| 130 |
-
"/app/nova-ai-model"
|
| 131 |
-
]
|
| 132 |
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
if os.path.exists(path):
|
| 136 |
-
model_path = path
|
| 137 |
-
logger.info(f"Model found at: {path}")
|
| 138 |
-
break
|
| 139 |
|
| 140 |
-
|
| 141 |
-
logger.warning("No model files found - running in demo mode")
|
| 142 |
-
return "🎭 Demo Mode: Model dosyaları bulunamadı, demo yanıtlar kullanılıyor"
|
| 143 |
|
| 144 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
|
| 146 |
-
|
| 147 |
model = AutoModelForCausalLM.from_pretrained(
|
| 148 |
model_path,
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
|
|
|
| 152 |
)
|
| 153 |
|
| 154 |
-
logger.info(f"✅ Nova AI model
|
| 155 |
-
return f"✅ Nova AI
|
| 156 |
|
| 157 |
except Exception as e:
|
| 158 |
-
logger.error(f"Model
|
| 159 |
-
return f"
|
| 160 |
-
|
| 161 |
-
def clear_chat():
|
| 162 |
-
"""Clear chat history"""
|
| 163 |
-
return []
|
| 164 |
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
# 🎨 Gradio Interface
|
| 169 |
-
def create_interface():
|
| 170 |
"""
|
| 171 |
-
Nova AI
|
| 172 |
"""
|
|
|
|
| 173 |
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
.main-header h1 {
|
| 188 |
-
font-size: 2.5rem;
|
| 189 |
-
margin-bottom: 0.5rem;
|
| 190 |
-
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
|
| 191 |
-
}
|
| 192 |
-
.chat-container {
|
| 193 |
-
border-radius: 10px;
|
| 194 |
-
box-shadow: 0 4px 16px rgba(0,0,0,0.1);
|
| 195 |
-
}
|
| 196 |
-
.control-panel {
|
| 197 |
-
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
| 198 |
-
padding: 1.5rem;
|
| 199 |
-
border-radius: 10px;
|
| 200 |
-
margin: 1rem 0;
|
| 201 |
-
}
|
| 202 |
-
.example-buttons {
|
| 203 |
-
margin: 1rem 0;
|
| 204 |
-
}
|
| 205 |
-
.footer {
|
| 206 |
-
text-align: center;
|
| 207 |
-
padding: 2rem;
|
| 208 |
-
background: #f8f9fa;
|
| 209 |
-
border-radius: 10px;
|
| 210 |
-
margin-top: 2rem;
|
| 211 |
-
border: 1px solid #e9ecef;
|
| 212 |
-
}
|
| 213 |
-
"""
|
| 214 |
-
) as demo:
|
| 215 |
-
|
| 216 |
-
# Header
|
| 217 |
-
gr.HTML("""
|
| 218 |
-
<div class="main-header">
|
| 219 |
-
<h1>🚀 Teknova Nova AI</h1>
|
| 220 |
-
<p style="font-size: 1.2rem; margin-bottom: 0.5rem;">Özgün Yapay Zeka Teknolojisi</p>
|
| 221 |
-
<p style="font-size: 1rem; opacity: 0.9;"><em>Powered by Teknova - Live on Hugging Face Spaces!</em></p>
|
| 222 |
-
</div>
|
| 223 |
-
""")
|
| 224 |
|
| 225 |
-
#
|
| 226 |
-
|
| 227 |
|
| 228 |
-
#
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
elem_classes=["chat-container"],
|
| 237 |
-
avatar_images=("👤", "🤖")
|
| 238 |
-
)
|
| 239 |
-
|
| 240 |
-
with gr.Row():
|
| 241 |
-
msg = gr.Textbox(
|
| 242 |
-
label="✍️ Mesajınız",
|
| 243 |
-
placeholder="Nova AI'ye sorunuzu yazın... (Örn: 'Merhaba', 'Yapay zeka nedir?')",
|
| 244 |
-
lines=2,
|
| 245 |
-
scale=4,
|
| 246 |
-
show_label=False
|
| 247 |
-
)
|
| 248 |
-
send_btn = gr.Button("📤 Gönder", scale=1, variant="primary", size="lg")
|
| 249 |
-
|
| 250 |
-
clear_btn = gr.Button("🗑️ Sohbeti Temizle", variant="secondary", size="sm")
|
| 251 |
-
|
| 252 |
-
with gr.Column(scale=1):
|
| 253 |
-
with gr.Group():
|
| 254 |
-
gr.Markdown("### ⚙️ Ayarlar")
|
| 255 |
-
|
| 256 |
-
max_length = gr.Slider(
|
| 257 |
-
minimum=50,
|
| 258 |
-
maximum=500,
|
| 259 |
-
value=200,
|
| 260 |
-
step=25,
|
| 261 |
-
label="📏 Maksimum Uzunluk",
|
| 262 |
-
info="Yanıtın ne kadar uzun olacağını belirler"
|
| 263 |
-
)
|
| 264 |
-
|
| 265 |
-
temperature = gr.Slider(
|
| 266 |
-
minimum=0.1,
|
| 267 |
-
maximum=1.2,
|
| 268 |
-
value=0.7,
|
| 269 |
-
step=0.1,
|
| 270 |
-
label="🎨 Yaratıcılık (Temperature)",
|
| 271 |
-
info="Düşük: tutarlı, Yüksek: yaratıcı"
|
| 272 |
-
)
|
| 273 |
-
|
| 274 |
-
with gr.Group():
|
| 275 |
-
gr.Markdown("### 💡 Bilgi")
|
| 276 |
-
gr.Markdown("""
|
| 277 |
-
**Nova AI Özellikleri:**
|
| 278 |
-
- 🧠 Gelişmiş dil anlama
|
| 279 |
-
- 💬 Doğal konuşma
|
| 280 |
-
- 🌍 Türkçe optimizasyonu
|
| 281 |
-
- ⚡ Hızlı yanıt
|
| 282 |
-
""")
|
| 283 |
|
| 284 |
-
#
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
example_buttons = [
|
| 288 |
-
gr.Button("👋 Merhaba Nova AI!", size="sm", variant="secondary"),
|
| 289 |
-
gr.Button("🤖 Yapay zeka nedir?", size="sm", variant="secondary"),
|
| 290 |
-
gr.Button("🚀 Teknova hakkında bilgi", size="sm", variant="secondary"),
|
| 291 |
-
gr.Button("💡 Proje fikirleri öner", size="sm", variant="secondary")
|
| 292 |
-
]
|
| 293 |
|
| 294 |
-
#
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 301 |
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
inputs=[msg, chatbot, max_length, temperature],
|
| 305 |
-
outputs=[msg, chatbot],
|
| 306 |
-
show_progress=True
|
| 307 |
-
)
|
| 308 |
|
| 309 |
-
|
|
|
|
| 310 |
|
| 311 |
-
|
| 312 |
-
example_buttons[0].click(lambda: "Merhaba Nova AI!", outputs=msg)
|
| 313 |
-
example_buttons[1].click(lambda: "Yapay zeka nedir?", outputs=msg)
|
| 314 |
-
example_buttons[2].click(lambda: "Teknova hakkında bilgi ver", outputs=msg)
|
| 315 |
-
example_buttons[3].click(lambda: "Bana yenilikçi proje fikirleri öner", outputs=msg)
|
| 316 |
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 330 |
</div>
|
| 331 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 332 |
|
| 333 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
|
| 335 |
-
#
|
| 336 |
if __name__ == "__main__":
|
| 337 |
-
demo = create_interface()
|
| 338 |
-
demo.queue(max_size=20, default_concurrency_limit=5)
|
| 339 |
demo.launch(
|
| 340 |
server_name="0.0.0.0",
|
| 341 |
server_port=7860,
|
| 342 |
share=False,
|
| 343 |
-
show_error=True
|
| 344 |
-
debug=False
|
| 345 |
)
|
|
|
|
| 1 |
"""
|
| 2 |
+
🚀 Nova AI - Hugging Face Spaces ZeroGPU
|
| 3 |
Teknova tarafından geliştirilen özgün yapay zeka modeli
|
| 4 |
+
ZeroGPU ile hızlandırılmış
|
| 5 |
"""
|
| 6 |
|
| 7 |
import gradio as gr
|
|
|
|
| 9 |
import os
|
| 10 |
import logging
|
| 11 |
import time
|
| 12 |
+
import spaces
|
| 13 |
from typing import List, Tuple
|
| 14 |
|
| 15 |
# Logging setup
|
|
|
|
| 85 |
history.append([message, response])
|
| 86 |
return "", history
|
| 87 |
|
| 88 |
+
@spaces.GPU
|
| 89 |
def generate_real_response(message: str, max_length: int, temperature: float) -> str:
|
| 90 |
"""
|
| 91 |
+
Gerçek model ile yanıt oluştur - ZeroGPU destekli
|
| 92 |
"""
|
| 93 |
if not model or not tokenizer:
|
| 94 |
return generate_demo_response(message)
|
|
|
|
| 119 |
logger.error(f"Model generation error: {e}")
|
| 120 |
return generate_demo_response(message)
|
| 121 |
|
| 122 |
+
@spaces.GPU
|
| 123 |
def load_model():
|
| 124 |
"""
|
| 125 |
+
Teknova Nova AI modelini yükle - ZeroGPU destekli
|
| 126 |
"""
|
| 127 |
global model, tokenizer
|
| 128 |
|
| 129 |
try:
|
| 130 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
|
| 132 |
+
# Model path - Hugging Face Hub'dan yükle
|
| 133 |
+
model_path = "veteroner/NovaAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
|
| 135 |
+
logger.info(f"🚀 Teknova Nova AI modeli Hub'dan yükleniyor: {model_path}")
|
|
|
|
|
|
|
| 136 |
|
| 137 |
+
# Tokenizer yükle
|
| 138 |
+
tokenizer = AutoTokenizer.from_pretrained(
|
| 139 |
+
model_path,
|
| 140 |
+
trust_remote_code=True,
|
| 141 |
+
use_fast=True
|
| 142 |
+
)
|
| 143 |
+
|
| 144 |
+
# Pad token ayarla
|
| 145 |
+
if tokenizer.pad_token is None:
|
| 146 |
+
tokenizer.pad_token = tokenizer.eos_token
|
| 147 |
|
| 148 |
+
# Model yükle - ZeroGPU optimizasyonu
|
| 149 |
model = AutoModelForCausalLM.from_pretrained(
|
| 150 |
model_path,
|
| 151 |
+
device_map="auto",
|
| 152 |
+
trust_remote_code=True,
|
| 153 |
+
torch_dtype=torch.float16,
|
| 154 |
+
low_cpu_mem_usage=True
|
| 155 |
)
|
| 156 |
|
| 157 |
+
logger.info(f"✅ Nova AI model yüklendi ({device})")
|
| 158 |
+
return f"✅ Teknova Nova AI hazır! ({device})"
|
| 159 |
|
| 160 |
except Exception as e:
|
| 161 |
+
logger.error(f"Model yükleme hatası: {e}")
|
| 162 |
+
return f"❌ Model yüklenemedi: {str(e)} - Demo modunda çalışacak"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
|
| 164 |
+
@spaces.GPU
|
| 165 |
+
def chat_with_nova(message: str, history: List[Tuple[str, str]]) -> str:
|
|
|
|
|
|
|
|
|
|
| 166 |
"""
|
| 167 |
+
Nova AI ile sohbet et - ZeroGPU destekli
|
| 168 |
"""
|
| 169 |
+
global model, tokenizer
|
| 170 |
|
| 171 |
+
if model is None or tokenizer is None:
|
| 172 |
+
# Demo yanıt ver
|
| 173 |
+
return generate_demo_response(message) + "\n\n💡 *Not: Demo modunda çalışıyor.*"
|
| 174 |
+
|
| 175 |
+
if not message.strip():
|
| 176 |
+
return "❓ Lütfen bir mesaj yazın."
|
| 177 |
+
|
| 178 |
+
try:
|
| 179 |
+
# Konuşma geçmişini hazırla
|
| 180 |
+
conversation = ""
|
| 181 |
+
for user_msg, bot_msg in history:
|
| 182 |
+
if user_msg and bot_msg:
|
| 183 |
+
conversation += f"Kullanıcı: {user_msg}\nNova AI: {bot_msg}\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
|
| 185 |
+
# Yeni mesajı ekle
|
| 186 |
+
conversation += f"Kullanıcı: {message}\nNova AI:"
|
| 187 |
|
| 188 |
+
# Tokenize et
|
| 189 |
+
inputs = tokenizer(
|
| 190 |
+
conversation,
|
| 191 |
+
return_tensors="pt",
|
| 192 |
+
truncation=True,
|
| 193 |
+
max_length=2048,
|
| 194 |
+
padding=True
|
| 195 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
|
| 197 |
+
# GPU'ya taşı
|
| 198 |
+
if torch.cuda.is_available():
|
| 199 |
+
inputs = {k: v.to(model.device) for k, v in inputs.items()}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
|
| 201 |
+
# Yanıt üret
|
| 202 |
+
with torch.no_grad():
|
| 203 |
+
outputs = model.generate(
|
| 204 |
+
**inputs,
|
| 205 |
+
max_new_tokens=256,
|
| 206 |
+
temperature=0.7,
|
| 207 |
+
top_p=0.9,
|
| 208 |
+
do_sample=True,
|
| 209 |
+
pad_token_id=tokenizer.pad_token_id,
|
| 210 |
+
eos_token_id=tokenizer.eos_token_id,
|
| 211 |
+
repetition_penalty=1.1
|
| 212 |
+
)
|
| 213 |
|
| 214 |
+
# Yanıtı decode et
|
| 215 |
+
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 216 |
|
| 217 |
+
# Sadece yeni üretilen kısmı al
|
| 218 |
+
new_response = response[len(conversation):].strip()
|
| 219 |
|
| 220 |
+
return new_response if new_response else "Üzgünüm, yanıt üretemedi."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
|
| 222 |
+
except Exception as e:
|
| 223 |
+
logger.error(f"Chat hatası: {e}")
|
| 224 |
+
return f"❌ Yanıt üretirken hata: {str(e)}"
|
| 225 |
+
|
| 226 |
+
# Model yüklemeyi başlat
|
| 227 |
+
logger.info("Model yükleme başlatılıyor...")
|
| 228 |
+
load_status = load_model()
|
| 229 |
+
logger.info(f"Model durumu: {load_status}")
|
| 230 |
+
|
| 231 |
+
# Gradio arayüzü
|
| 232 |
+
with gr.Blocks(
|
| 233 |
+
theme=gr.themes.Soft(),
|
| 234 |
+
title="Teknova Nova AI - ZeroGPU",
|
| 235 |
+
css="""
|
| 236 |
+
.gradio-container {
|
| 237 |
+
max-width: 900px;
|
| 238 |
+
margin: 0 auto;
|
| 239 |
+
}
|
| 240 |
+
.header-text {
|
| 241 |
+
text-align: center;
|
| 242 |
+
padding: 20px;
|
| 243 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 244 |
+
color: white;
|
| 245 |
+
border-radius: 15px;
|
| 246 |
+
margin-bottom: 20px;
|
| 247 |
+
}
|
| 248 |
+
"""
|
| 249 |
+
) as demo:
|
| 250 |
+
|
| 251 |
+
# Header
|
| 252 |
+
gr.HTML("""
|
| 253 |
+
<div class="header-text">
|
| 254 |
+
<h1 style="font-size: 2.5rem; margin: 0; font-weight: bold;">
|
| 255 |
+
🚀 Teknova Nova AI
|
| 256 |
+
</h1>
|
| 257 |
+
<p style="font-size: 1.2rem; margin: 10px 0; opacity: 0.9;">
|
| 258 |
+
Türkiye'nin Özgün Yapay Zeka Modeli
|
| 259 |
+
</p>
|
| 260 |
+
<div style="background: rgba(255,255,255,0.2); padding: 8px 16px; border-radius: 20px; display: inline-block; font-size: 0.9rem;">
|
| 261 |
+
🧠 Nova AI • 🇹�� Türkçe Optimize • ⚡ ZeroGPU Hızlı
|
| 262 |
</div>
|
| 263 |
+
</div>
|
| 264 |
+
""")
|
| 265 |
+
|
| 266 |
+
# Chat interface
|
| 267 |
+
chatbot = gr.Chatbot(
|
| 268 |
+
height=500,
|
| 269 |
+
show_label=False,
|
| 270 |
+
show_share_button=True,
|
| 271 |
+
show_copy_button=True,
|
| 272 |
+
avatar_images=[None, "🤖"],
|
| 273 |
+
bubble_full_width=False
|
| 274 |
+
)
|
| 275 |
+
|
| 276 |
+
with gr.Row():
|
| 277 |
+
msg = gr.Textbox(
|
| 278 |
+
placeholder="Nova AI'ya mesajınızı yazın... (Örn: Merhaba, nasılsın?)",
|
| 279 |
+
show_label=False,
|
| 280 |
+
scale=4,
|
| 281 |
+
container=False
|
| 282 |
+
)
|
| 283 |
+
submit = gr.Button("🚀 Gönder", scale=1, variant="primary")
|
| 284 |
+
|
| 285 |
+
with gr.Row():
|
| 286 |
+
clear = gr.Button("🗑️ Temizle", scale=1)
|
| 287 |
+
retry = gr.Button("🔄 Tekrar Dene", scale=1)
|
| 288 |
+
|
| 289 |
+
# Examples
|
| 290 |
+
gr.Examples(
|
| 291 |
+
examples=[
|
| 292 |
+
"Merhaba Nova AI, nasılsın?",
|
| 293 |
+
"Yapay zeka nedir?",
|
| 294 |
+
"Teknova hakkında bilgi ver",
|
| 295 |
+
"Bana bir hikaye anlat",
|
| 296 |
+
"Python programlama hakkında bilgi ver"
|
| 297 |
+
],
|
| 298 |
+
inputs=msg,
|
| 299 |
+
label="💡 Örnek Sorular"
|
| 300 |
+
)
|
| 301 |
+
|
| 302 |
+
# Footer
|
| 303 |
+
gr.HTML("""
|
| 304 |
+
<div style="text-align: center; padding: 15px; color: #666; font-size: 0.9rem;">
|
| 305 |
+
<p>🌟 <strong>Teknova Nova AI</strong> - Tamamen özgün Türkçe dil modeli</p>
|
| 306 |
+
<p>🚀 ZeroGPU teknolojisi ile hızlandırılmış</p>
|
| 307 |
+
<p style="color: #999;">⚡ Teknova Innovation ile güçlendirilmiştir</p>
|
| 308 |
+
</div>
|
| 309 |
+
""")
|
| 310 |
+
|
| 311 |
+
# Event handlers
|
| 312 |
+
def user_message(message, history):
|
| 313 |
+
return "", history + [[message, None]]
|
| 314 |
+
|
| 315 |
+
@spaces.GPU
|
| 316 |
+
def bot_message(history):
|
| 317 |
+
"""Bot yanıtı oluştur - ZeroGPU destekli"""
|
| 318 |
+
if history and history[-1][1] is None:
|
| 319 |
+
user_msg = history[-1][0]
|
| 320 |
+
bot_response = chat_with_nova(user_msg, history[:-1])
|
| 321 |
+
history[-1][1] = bot_response
|
| 322 |
+
return history
|
| 323 |
+
|
| 324 |
+
@spaces.GPU
|
| 325 |
+
def retry_last(history):
|
| 326 |
+
"""Son mesajı yeniden dene - ZeroGPU destekli"""
|
| 327 |
+
if history and history[-1][1] is not None:
|
| 328 |
+
user_msg = history[-1][0]
|
| 329 |
+
bot_response = chat_with_nova(user_msg, history[:-1])
|
| 330 |
+
history[-1][1] = bot_response
|
| 331 |
+
return history
|
| 332 |
|
| 333 |
+
# Event bindings
|
| 334 |
+
msg.submit(user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
|
| 335 |
+
bot_message, chatbot, chatbot
|
| 336 |
+
)
|
| 337 |
+
submit.click(user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
|
| 338 |
+
bot_message, chatbot, chatbot
|
| 339 |
+
)
|
| 340 |
+
clear.click(lambda: None, None, chatbot, queue=False)
|
| 341 |
+
retry.click(retry_last, chatbot, chatbot)
|
| 342 |
|
| 343 |
+
# Launch
|
| 344 |
if __name__ == "__main__":
|
|
|
|
|
|
|
| 345 |
demo.launch(
|
| 346 |
server_name="0.0.0.0",
|
| 347 |
server_port=7860,
|
| 348 |
share=False,
|
| 349 |
+
show_error=True
|
|
|
|
| 350 |
)
|
gradio_app.py
CHANGED
|
@@ -2,55 +2,70 @@ import gradio as gr
|
|
| 2 |
import torch
|
| 3 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 4 |
import os
|
|
|
|
| 5 |
|
| 6 |
-
#
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
-
#
|
| 11 |
-
|
| 12 |
-
print("💡 Hugging Face token gerektirmez - tamamen özgün!")
|
| 13 |
|
| 14 |
# Global değişkenler
|
| 15 |
model = None
|
| 16 |
tokenizer = None
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
|
|
|
| 20 |
global model, tokenizer
|
| 21 |
|
| 22 |
-
print("🚀
|
| 23 |
-
print("🌟 Bu tamamen özgün bir Teknova Nova AI modelidir!")
|
| 24 |
-
|
| 25 |
-
# Colab için model path kontrolü
|
| 26 |
-
model_path = MODEL_PATH if os.path.exists(MODEL_PATH) else MODEL_NAME
|
| 27 |
|
| 28 |
try:
|
| 29 |
-
#
|
| 30 |
tokenizer = AutoTokenizer.from_pretrained(
|
| 31 |
model_path,
|
| 32 |
trust_remote_code=True
|
| 33 |
)
|
| 34 |
|
| 35 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
model = AutoModelForCausalLM.from_pretrained(
|
| 37 |
model_path,
|
| 38 |
-
|
| 39 |
-
device_map="auto",
|
| 40 |
-
trust_remote_code=True,
|
| 41 |
-
load_in_8bit=True # Teknova memory optimization
|
| 42 |
)
|
| 43 |
|
| 44 |
-
|
| 45 |
-
print(
|
| 46 |
-
return
|
| 47 |
|
| 48 |
except Exception as e:
|
| 49 |
-
|
| 50 |
-
|
|
|
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
def chat_response(message, history):
|
| 53 |
-
"""Teknova Nova AI ile sohbet yanıtı üret"""
|
| 54 |
global model, tokenizer
|
| 55 |
|
| 56 |
if model is None or tokenizer is None:
|
|
@@ -76,7 +91,7 @@ def chat_response(message, history):
|
|
| 76 |
max_length=2048
|
| 77 |
).to(model.device)
|
| 78 |
|
| 79 |
-
# Nova AI yanıt üret -
|
| 80 |
with torch.no_grad():
|
| 81 |
outputs = model.generate(
|
| 82 |
**inputs,
|
|
@@ -99,8 +114,9 @@ def chat_response(message, history):
|
|
| 99 |
except Exception as e:
|
| 100 |
return f"❌ Nova AI yanıt üretirken hata: {str(e)}"
|
| 101 |
|
| 102 |
-
#
|
| 103 |
-
|
|
|
|
| 104 |
|
| 105 |
# Gradio arayüzü oluştur
|
| 106 |
with gr.Blocks(
|
|
@@ -128,7 +144,7 @@ with gr.Blocks(
|
|
| 128 |
<strong>Teknova</strong> tarafından geliştirilen <strong>özgün</strong> yapay zeka modeli
|
| 129 |
</p>
|
| 130 |
<div style="background: linear-gradient(135deg, #ff6b6b, #4ecdc4); color: white; padding: 8px 16px; border-radius: 20px; display: inline-block; font-size: 0.9rem;">
|
| 131 |
-
⚡ Özgün Nova AI Teknolojisi •
|
| 132 |
</div>
|
| 133 |
<p style="font-size: 0.9rem; color: #888; margin-top: 10px;">
|
| 134 |
🌟 Bu tamamen özgün bir Teknova Nova AI modelidir - Token gerektirmez
|
|
@@ -136,6 +152,19 @@ with gr.Blocks(
|
|
| 136 |
</div>
|
| 137 |
""")
|
| 138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
chatbot = gr.Chatbot(
|
| 140 |
height=500,
|
| 141 |
show_label=False,
|
|
@@ -144,7 +173,8 @@ with gr.Blocks(
|
|
| 144 |
avatar_images=[
|
| 145 |
None, # User avatar
|
| 146 |
"🤖" # Bot avatar
|
| 147 |
-
]
|
|
|
|
| 148 |
)
|
| 149 |
|
| 150 |
with gr.Row():
|
|
@@ -164,7 +194,7 @@ with gr.Blocks(
|
|
| 164 |
<br>
|
| 165 |
<small style="color: #ff6b6b;">🚀 <strong>Teknova Nova AI</strong> - Tamamen özgün model teknolojisi</small>
|
| 166 |
<br>
|
| 167 |
-
<small style="color: #4ecdc4;">🌟 Hugging Face
|
| 168 |
</div>
|
| 169 |
""")
|
| 170 |
|
|
@@ -186,9 +216,11 @@ with gr.Blocks(
|
|
| 186 |
)
|
| 187 |
clear.click(lambda: None, None, chatbot, queue=False)
|
| 188 |
|
|
|
|
|
|
|
|
|
|
| 189 |
if __name__ == "__main__":
|
| 190 |
demo.launch(
|
| 191 |
server_name="0.0.0.0",
|
| 192 |
-
|
| 193 |
-
share=True
|
| 194 |
)
|
|
|
|
| 2 |
import torch
|
| 3 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 4 |
import os
|
| 5 |
+
import spaces
|
| 6 |
|
| 7 |
+
# ================== Model Seçenekleri ==================
|
| 8 |
+
# Kullanıcı arayüzünden seçilebilecek modellerin listesi.
|
| 9 |
+
# Anahtar (dict key) arayüzde gösterilen isim, değer yol (path).
|
| 10 |
+
MODEL_OPTIONS = {
|
| 11 |
+
"Nova AI Hub": "veteroner/NovaAI",
|
| 12 |
+
"Büyük Model (nova-ai-model)": "./nova-ai-model"
|
| 13 |
+
}
|
| 14 |
|
| 15 |
+
# Seçili modelin anahtarını tutan değişken
|
| 16 |
+
current_model_key = None
|
|
|
|
| 17 |
|
| 18 |
# Global değişkenler
|
| 19 |
model = None
|
| 20 |
tokenizer = None
|
| 21 |
|
| 22 |
+
@spaces.GPU
|
| 23 |
+
def load_model(model_path: str):
|
| 24 |
+
"""Seçilen model yoluna göre Nova AI modelini yükle - ZeroGPU destekli."""
|
| 25 |
global model, tokenizer
|
| 26 |
|
| 27 |
+
print(f"🚀 Nova AI modeli yükleniyor... ({model_path})")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
try:
|
| 30 |
+
# Tokenizer yükle
|
| 31 |
tokenizer = AutoTokenizer.from_pretrained(
|
| 32 |
model_path,
|
| 33 |
trust_remote_code=True
|
| 34 |
)
|
| 35 |
|
| 36 |
+
# --------- ZeroGPU için yükleme argümanları ---------
|
| 37 |
+
load_kwargs = {
|
| 38 |
+
"torch_dtype": torch.float16,
|
| 39 |
+
"trust_remote_code": True,
|
| 40 |
+
"device_map": "auto" # ZeroGPU otomatik GPU tahsisi
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
# Model yükle (8-bit quantization ZeroGPU'da desteklenmez)
|
| 44 |
model = AutoModelForCausalLM.from_pretrained(
|
| 45 |
model_path,
|
| 46 |
+
**load_kwargs
|
|
|
|
|
|
|
|
|
|
| 47 |
)
|
| 48 |
|
| 49 |
+
success_msg = f"✅ Nova AI modeli yüklendi: {os.path.basename(model_path)} (ZeroGPU)"
|
| 50 |
+
print(success_msg)
|
| 51 |
+
return success_msg
|
| 52 |
|
| 53 |
except Exception as e:
|
| 54 |
+
error_msg = f"❌ Nova AI model yükleme hatası: {str(e)}"
|
| 55 |
+
print(error_msg)
|
| 56 |
+
return error_msg
|
| 57 |
|
| 58 |
+
# ================== Model Seçim Yardımcı Fonksiyonu ==================
|
| 59 |
+
def select_model(model_key: str):
|
| 60 |
+
"""UI'daki seçim değiştiğinde çağrılır, modeli yeniden yükler."""
|
| 61 |
+
global current_model_key
|
| 62 |
+
current_model_key = model_key
|
| 63 |
+
model_path = MODEL_OPTIONS[model_key]
|
| 64 |
+
return load_model(model_path)
|
| 65 |
+
|
| 66 |
+
@spaces.GPU
|
| 67 |
def chat_response(message, history):
|
| 68 |
+
"""Teknova Nova AI ile sohbet yanıtı üret - ZeroGPU destekli"""
|
| 69 |
global model, tokenizer
|
| 70 |
|
| 71 |
if model is None or tokenizer is None:
|
|
|
|
| 91 |
max_length=2048
|
| 92 |
).to(model.device)
|
| 93 |
|
| 94 |
+
# Nova AI yanıt üret - ZeroGPU optimizasyonu
|
| 95 |
with torch.no_grad():
|
| 96 |
outputs = model.generate(
|
| 97 |
**inputs,
|
|
|
|
| 114 |
except Exception as e:
|
| 115 |
return f"❌ Nova AI yanıt üretirken hata: {str(e)}"
|
| 116 |
|
| 117 |
+
# Başlangıçta ilk (varsayılan) modeli yükle
|
| 118 |
+
first_key = list(MODEL_OPTIONS.keys())[0] # Küçük model varsayılan
|
| 119 |
+
initial_status = select_model(first_key)
|
| 120 |
|
| 121 |
# Gradio arayüzü oluştur
|
| 122 |
with gr.Blocks(
|
|
|
|
| 144 |
<strong>Teknova</strong> tarafından geliştirilen <strong>özgün</strong> yapay zeka modeli
|
| 145 |
</p>
|
| 146 |
<div style="background: linear-gradient(135deg, #ff6b6b, #4ecdc4); color: white; padding: 8px 16px; border-radius: 20px; display: inline-block; font-size: 0.9rem;">
|
| 147 |
+
⚡ Özgün Nova AI Teknolojisi • �� Teknova Innovation • 🚀 ZeroGPU Destekli
|
| 148 |
</div>
|
| 149 |
<p style="font-size: 0.9rem; color: #888; margin-top: 10px;">
|
| 150 |
🌟 Bu tamamen özgün bir Teknova Nova AI modelidir - Token gerektirmez
|
|
|
|
| 152 |
</div>
|
| 153 |
""")
|
| 154 |
|
| 155 |
+
# ================== Model Seçim Bileşenleri ==================
|
| 156 |
+
with gr.Row():
|
| 157 |
+
model_selector = gr.Radio(
|
| 158 |
+
choices=list(MODEL_OPTIONS.keys()),
|
| 159 |
+
value=first_key,
|
| 160 |
+
label="Model Seçimi"
|
| 161 |
+
)
|
| 162 |
+
statusbox = gr.Textbox(
|
| 163 |
+
value=initial_status,
|
| 164 |
+
label="Durum",
|
| 165 |
+
interactive=False
|
| 166 |
+
)
|
| 167 |
+
|
| 168 |
chatbot = gr.Chatbot(
|
| 169 |
height=500,
|
| 170 |
show_label=False,
|
|
|
|
| 173 |
avatar_images=[
|
| 174 |
None, # User avatar
|
| 175 |
"🤖" # Bot avatar
|
| 176 |
+
],
|
| 177 |
+
type="messages"
|
| 178 |
)
|
| 179 |
|
| 180 |
with gr.Row():
|
|
|
|
| 194 |
<br>
|
| 195 |
<small style="color: #ff6b6b;">🚀 <strong>Teknova Nova AI</strong> - Tamamen özgün model teknolojisi</small>
|
| 196 |
<br>
|
| 197 |
+
<small style="color: #4ecdc4;">🌟 Hugging Face ZeroGPU ile hızlandırılmış!</small>
|
| 198 |
</div>
|
| 199 |
""")
|
| 200 |
|
|
|
|
| 216 |
)
|
| 217 |
clear.click(lambda: None, None, chatbot, queue=False)
|
| 218 |
|
| 219 |
+
# Model seçim değişikliğinde modeli yeniden yükle
|
| 220 |
+
model_selector.change(select_model, inputs=model_selector, outputs=statusbox)
|
| 221 |
+
|
| 222 |
if __name__ == "__main__":
|
| 223 |
demo.launch(
|
| 224 |
server_name="0.0.0.0",
|
| 225 |
+
share=True # port otomatik bulunur, 0.0.0.0 + ilk boş port
|
|
|
|
| 226 |
)
|
hf_space_app.py
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
🚀 Nova AI - Hugging Face Spaces ZeroGPU
|
| 3 |
+
Teknova tarafından geliştirilen özgün yapay zeka modeli
|
| 4 |
+
ZeroGPU ile hızlandırılmış
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import gradio as gr
|
| 8 |
+
import torch
|
| 9 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 10 |
+
import spaces
|
| 11 |
+
import os
|
| 12 |
+
|
| 13 |
+
# Model seçenekleri - Hugging Face Hub'dan yükle
|
| 14 |
+
MODEL_PATH = "veteroner/NovaAI" # Hub'daki model
|
| 15 |
+
|
| 16 |
+
# Global değişkenler
|
| 17 |
+
model = None
|
| 18 |
+
tokenizer = None
|
| 19 |
+
|
| 20 |
+
@spaces.GPU
|
| 21 |
+
def load_model():
|
| 22 |
+
"""Nova AI modelini ZeroGPU ile yükle"""
|
| 23 |
+
global model, tokenizer
|
| 24 |
+
|
| 25 |
+
print("🚀 Nova AI modeli ZeroGPU ile yükleniyor...")
|
| 26 |
+
|
| 27 |
+
try:
|
| 28 |
+
# Tokenizer yükle
|
| 29 |
+
tokenizer = AutoTokenizer.from_pretrained(
|
| 30 |
+
MODEL_PATH,
|
| 31 |
+
trust_remote_code=True,
|
| 32 |
+
use_fast=True
|
| 33 |
+
)
|
| 34 |
+
|
| 35 |
+
# Pad token ayarla
|
| 36 |
+
if tokenizer.pad_token is None:
|
| 37 |
+
tokenizer.pad_token = tokenizer.eos_token
|
| 38 |
+
|
| 39 |
+
# Model yükle - ZeroGPU optimizasyonu
|
| 40 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 41 |
+
MODEL_PATH,
|
| 42 |
+
torch_dtype=torch.float16,
|
| 43 |
+
device_map="auto",
|
| 44 |
+
trust_remote_code=True,
|
| 45 |
+
low_cpu_mem_usage=True
|
| 46 |
+
)
|
| 47 |
+
|
| 48 |
+
print("✅ Nova AI modeli ZeroGPU ile yüklendi!")
|
| 49 |
+
return "✅ Nova AI hazır! (ZeroGPU)"
|
| 50 |
+
|
| 51 |
+
except Exception as e:
|
| 52 |
+
error_msg = f"❌ Model yükleme hatası: {str(e)}"
|
| 53 |
+
print(error_msg)
|
| 54 |
+
return error_msg
|
| 55 |
+
|
| 56 |
+
@spaces.GPU
|
| 57 |
+
def chat_with_nova(message, history):
|
| 58 |
+
"""Nova AI ile sohbet et - ZeroGPU destekli"""
|
| 59 |
+
global model, tokenizer
|
| 60 |
+
|
| 61 |
+
if model is None or tokenizer is None:
|
| 62 |
+
# Model yüklenmemişse yükle
|
| 63 |
+
load_status = load_model()
|
| 64 |
+
if "❌" in load_status:
|
| 65 |
+
return load_status
|
| 66 |
+
|
| 67 |
+
if not message.strip():
|
| 68 |
+
return "❓ Lütfen bir mesaj yazın."
|
| 69 |
+
|
| 70 |
+
try:
|
| 71 |
+
# Konuşma geçmişini hazırla
|
| 72 |
+
conversation = ""
|
| 73 |
+
for user_msg, bot_msg in history:
|
| 74 |
+
if user_msg and bot_msg:
|
| 75 |
+
conversation += f"Kullanıcı: {user_msg}\nNova AI: {bot_msg}\n"
|
| 76 |
+
|
| 77 |
+
# Yeni mesajı ekle
|
| 78 |
+
conversation += f"Kullanıcı: {message}\nNova AI:"
|
| 79 |
+
|
| 80 |
+
# Tokenize et
|
| 81 |
+
inputs = tokenizer(
|
| 82 |
+
conversation,
|
| 83 |
+
return_tensors="pt",
|
| 84 |
+
truncation=True,
|
| 85 |
+
max_length=1024,
|
| 86 |
+
padding=True
|
| 87 |
+
)
|
| 88 |
+
|
| 89 |
+
# GPU'ya taşı
|
| 90 |
+
if torch.cuda.is_available():
|
| 91 |
+
inputs = {k: v.to(model.device) for k, v in inputs.items()}
|
| 92 |
+
|
| 93 |
+
# Yanıt üret
|
| 94 |
+
with torch.no_grad():
|
| 95 |
+
outputs = model.generate(
|
| 96 |
+
**inputs,
|
| 97 |
+
max_new_tokens=256,
|
| 98 |
+
temperature=0.7,
|
| 99 |
+
top_p=0.9,
|
| 100 |
+
do_sample=True,
|
| 101 |
+
pad_token_id=tokenizer.pad_token_id,
|
| 102 |
+
eos_token_id=tokenizer.eos_token_id,
|
| 103 |
+
repetition_penalty=1.1
|
| 104 |
+
)
|
| 105 |
+
|
| 106 |
+
# Decode et
|
| 107 |
+
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
| 108 |
+
nova_response = response[len(conversation):].strip()
|
| 109 |
+
|
| 110 |
+
return nova_response if nova_response else "Üzgünüm, yanıt üretemedi."
|
| 111 |
+
|
| 112 |
+
except Exception as e:
|
| 113 |
+
return f"❌ Hata: {str(e)}"
|
| 114 |
+
|
| 115 |
+
# Gradio arayüzü
|
| 116 |
+
with gr.Blocks(
|
| 117 |
+
theme=gr.themes.Soft(),
|
| 118 |
+
title="Nova AI - ZeroGPU",
|
| 119 |
+
css="""
|
| 120 |
+
.gradio-container {
|
| 121 |
+
max-width: 800px;
|
| 122 |
+
margin: 0 auto;
|
| 123 |
+
}
|
| 124 |
+
.chat-message {
|
| 125 |
+
padding: 10px;
|
| 126 |
+
margin: 5px 0;
|
| 127 |
+
border-radius: 10px;
|
| 128 |
+
}
|
| 129 |
+
"""
|
| 130 |
+
) as demo:
|
| 131 |
+
|
| 132 |
+
gr.HTML("""
|
| 133 |
+
<div style="text-align: center; padding: 20px;">
|
| 134 |
+
<h1 style="background: linear-gradient(135deg, #ff6b6b, #4ecdc4); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-size: 2.5rem; font-weight: bold;">
|
| 135 |
+
🚀 Teknova Nova AI
|
| 136 |
+
</h1>
|
| 137 |
+
<p style="font-size: 1.2rem; color: #666; margin: 10px 0;">
|
| 138 |
+
<strong>Teknova</strong> tarafından geliştirilen <strong>özgün</strong> yapay zeka modeli
|
| 139 |
+
</p>
|
| 140 |
+
<div style="background: linear-gradient(135deg, #ff6b6b, #4ecdc4); color: white; padding: 8px 16px; border-radius: 20px; display: inline-block; font-size: 0.9rem;">
|
| 141 |
+
⚡ Özgün Nova AI • 🧠 Teknova Innovation • 🚀 ZeroGPU Hızlı
|
| 142 |
+
</div>
|
| 143 |
+
<p style="font-size: 0.9rem; color: #888; margin-top: 10px;">
|
| 144 |
+
🌟 Hugging Face ZeroGPU ile hızlandırılmış
|
| 145 |
+
</p>
|
| 146 |
+
</div>
|
| 147 |
+
""")
|
| 148 |
+
|
| 149 |
+
chatbot = gr.ChatInterface(
|
| 150 |
+
fn=chat_with_nova,
|
| 151 |
+
title="Nova AI Chat",
|
| 152 |
+
description="Teknova'nın özgün yapay zeka modeli ile sohbet edin",
|
| 153 |
+
examples=[
|
| 154 |
+
"Merhaba Nova AI, nasılsın?",
|
| 155 |
+
"Yapay zeka nedir?",
|
| 156 |
+
"Teknova hakkında bilgi ver",
|
| 157 |
+
"Bana bir hikaye anlat",
|
| 158 |
+
"Python programlama hakkında bilgi ver"
|
| 159 |
+
],
|
| 160 |
+
cache_examples=False,
|
| 161 |
+
retry_btn="🔄 Tekrar Dene",
|
| 162 |
+
undo_btn="↩️ Geri Al",
|
| 163 |
+
clear_btn="🗑️ Temizle",
|
| 164 |
+
submit_btn="🚀 Gönder",
|
| 165 |
+
textbox=gr.Textbox(
|
| 166 |
+
placeholder="Nova AI ile sohbet etmek için mesajınızı yazın...",
|
| 167 |
+
container=False,
|
| 168 |
+
scale=7
|
| 169 |
+
)
|
| 170 |
+
)
|
| 171 |
+
|
| 172 |
+
gr.HTML("""
|
| 173 |
+
<div style="text-align: center; padding: 15px; color: #666; font-size: 0.9rem;">
|
| 174 |
+
<p>🌟 <strong>Teknova Nova AI</strong> - Tamamen özgün Türkçe dil modeli</p>
|
| 175 |
+
<p>🚀 ZeroGPU teknolojisi ile hızlandırılmış</p>
|
| 176 |
+
<p style="color: #999;">⚡ Teknova Innovation ile güçlendirilmiştir</p>
|
| 177 |
+
</div>
|
| 178 |
+
""")
|
| 179 |
+
|
| 180 |
+
if __name__ == "__main__":
|
| 181 |
+
demo.launch(
|
| 182 |
+
server_name="0.0.0.0",
|
| 183 |
+
server_port=7860,
|
| 184 |
+
share=False
|
| 185 |
+
)
|
requirements.txt
CHANGED
|
@@ -1,5 +1,10 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
transformers>=4.
|
| 4 |
accelerate>=0.20.0
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
torch>=2.0.0
|
| 2 |
+
gradio>=4.44.1
|
| 3 |
+
transformers>=4.30.0
|
| 4 |
accelerate>=0.20.0
|
| 5 |
+
bitsandbytes>=0.41.0
|
| 6 |
+
spaces>=0.19.0
|
| 7 |
+
numpy>=1.24.0
|
| 8 |
+
sentencepiece>=0.1.99
|
| 9 |
+
protobuf>=3.20.0
|
| 10 |
+
safetensors>=0.3.0
|