Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -13,12 +13,18 @@ from fastapi.responses import JSONResponse
|
|
13 |
import uvicorn
|
14 |
from threading import Thread
|
15 |
import gptcache
|
|
|
|
|
|
|
16 |
|
|
|
17 |
load_dotenv()
|
18 |
HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
|
19 |
|
|
|
20 |
cache = cachetools.TTLCache(maxsize=100, ttl=60)
|
21 |
|
|
|
22 |
global_data = {
|
23 |
'models': {},
|
24 |
'tokens': {
|
@@ -74,11 +80,22 @@ global_data = {
|
|
74 |
'model_type': {}
|
75 |
}
|
76 |
|
|
|
77 |
model_configs = [
|
78 |
{
|
79 |
"repo_id": "Hjgugugjhuhjggg/testing_semifinal-Q2_K-GGUF",
|
80 |
"filename": "testing_semifinal-q2_k.gguf",
|
81 |
"name": "testing"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
]
|
84 |
|
@@ -111,9 +128,11 @@ global_data['models'] = model_manager.load_all_models()
|
|
111 |
class ChatRequest(BaseModel):
|
112 |
message: str
|
113 |
|
|
|
114 |
def normalize_input(input_text):
|
115 |
return input_text.strip()
|
116 |
|
|
|
117 |
def remove_duplicates(text):
|
118 |
lines = text.split('\n')
|
119 |
unique_lines = []
|
@@ -124,16 +143,23 @@ def remove_duplicates(text):
|
|
124 |
seen_lines.add(line)
|
125 |
return '\n'.join(unique_lines)
|
126 |
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
@cache_response
|
138 |
def generate_model_response(model, inputs):
|
139 |
try:
|
@@ -142,13 +168,7 @@ def generate_model_response(model, inputs):
|
|
142 |
except Exception as e:
|
143 |
return ""
|
144 |
|
145 |
-
|
146 |
-
unique_responses = {}
|
147 |
-
for response in responses:
|
148 |
-
if response['model'] not in unique_responses:
|
149 |
-
unique_responses[response['model']] = response['response']
|
150 |
-
return unique_responses
|
151 |
-
|
152 |
async def process_message(message):
|
153 |
inputs = normalize_input(message)
|
154 |
with ThreadPoolExecutor() as executor:
|
@@ -157,15 +177,15 @@ async def process_message(message):
|
|
157 |
for model in global_data['models'].values()
|
158 |
]
|
159 |
responses = [
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
return formatted_response
|
168 |
|
|
|
169 |
app = FastAPI()
|
170 |
|
171 |
@app.post("/generate")
|
@@ -176,12 +196,14 @@ async def generate(request: ChatRequest):
|
|
176 |
except Exception as e:
|
177 |
return JSONResponse(content={"error": str(e)})
|
178 |
|
|
|
179 |
def run_uvicorn():
|
180 |
try:
|
181 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|
182 |
except Exception as e:
|
183 |
print(f"Error al ejecutar uvicorn: {e}")
|
184 |
|
|
|
185 |
iface = gr.Interface(
|
186 |
fn=process_message,
|
187 |
inputs=gr.Textbox(lines=2, placeholder="Enter your message here..."),
|
|
|
13 |
import uvicorn
|
14 |
from threading import Thread
|
15 |
import gptcache
|
16 |
+
import nltk
|
17 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
18 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
19 |
|
20 |
+
# Cargar las variables de entorno
|
21 |
load_dotenv()
|
22 |
HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
|
23 |
|
24 |
+
# Configuraci贸n del cach茅
|
25 |
cache = cachetools.TTLCache(maxsize=100, ttl=60)
|
26 |
|
27 |
+
# Datos globales para almacenar la configuraci贸n de los modelos
|
28 |
global_data = {
|
29 |
'models': {},
|
30 |
'tokens': {
|
|
|
80 |
'model_type': {}
|
81 |
}
|
82 |
|
83 |
+
# Configuraci贸n de los modelos
|
84 |
model_configs = [
|
85 |
{
|
86 |
"repo_id": "Hjgugugjhuhjggg/testing_semifinal-Q2_K-GGUF",
|
87 |
"filename": "testing_semifinal-q2_k.gguf",
|
88 |
"name": "testing"
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"repo_id": "bartowski/Llama-3.2-3B-Instruct-uncensored-GGUF",
|
92 |
+
"filename": "Llama-3.2-3B-Instruct-uncensored-Q2_K.gguf",
|
93 |
+
"name": "llama-3.2-3B"
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"repo_id": "Ffftdtd5dtft/Meta-Llama-3.1-70B-Q2_K-GGUF",
|
97 |
+
"filename": "meta-llama-3.1-70b-q2_k.gguf",
|
98 |
+
"name": "meta-llama-3.1-70B"
|
99 |
}
|
100 |
]
|
101 |
|
|
|
128 |
class ChatRequest(BaseModel):
|
129 |
message: str
|
130 |
|
131 |
+
# Normalizar entrada
|
132 |
def normalize_input(input_text):
|
133 |
return input_text.strip()
|
134 |
|
135 |
+
# Eliminar respuestas duplicadas
|
136 |
def remove_duplicates(text):
|
137 |
lines = text.split('\n')
|
138 |
unique_lines = []
|
|
|
143 |
seen_lines.add(line)
|
144 |
return '\n'.join(unique_lines)
|
145 |
|
146 |
+
# Funci贸n para evaluar la coherencia de las respuestas usando similitud de coseno
|
147 |
+
def get_best_response(responses):
|
148 |
+
# Vectorizar las respuestas usando TF-IDF
|
149 |
+
vectorizer = TfidfVectorizer().fit_transform(responses)
|
150 |
+
|
151 |
+
# Calcular la similitud de coseno entre las respuestas
|
152 |
+
similarity_matrix = cosine_similarity(vectorizer)
|
153 |
+
|
154 |
+
# Sumar las similitudes para cada respuesta
|
155 |
+
total_similarities = similarity_matrix.sum(axis=1)
|
156 |
+
|
157 |
+
# Obtener el 铆ndice de la respuesta con mayor similitud
|
158 |
+
best_response_index = total_similarities.argmax()
|
159 |
+
|
160 |
+
return responses[best_response_index]
|
161 |
+
|
162 |
+
# Funci贸n para generar respuestas de modelos
|
163 |
@cache_response
|
164 |
def generate_model_response(model, inputs):
|
165 |
try:
|
|
|
168 |
except Exception as e:
|
169 |
return ""
|
170 |
|
171 |
+
# Procesar mensaje y generar respuestas
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
async def process_message(message):
|
173 |
inputs = normalize_input(message)
|
174 |
with ThreadPoolExecutor() as executor:
|
|
|
177 |
for model in global_data['models'].values()
|
178 |
]
|
179 |
responses = [
|
180 |
+
future.result()
|
181 |
+
for future in as_completed(futures)
|
182 |
+
]
|
183 |
+
|
184 |
+
# Seleccionar la mejor respuesta basada en similitud
|
185 |
+
best_response = get_best_response(responses)
|
186 |
+
return best_response
|
|
|
187 |
|
188 |
+
# API FastAPI
|
189 |
app = FastAPI()
|
190 |
|
191 |
@app.post("/generate")
|
|
|
196 |
except Exception as e:
|
197 |
return JSONResponse(content={"error": str(e)})
|
198 |
|
199 |
+
# Funci贸n para iniciar servidor uvicorn
|
200 |
def run_uvicorn():
|
201 |
try:
|
202 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|
203 |
except Exception as e:
|
204 |
print(f"Error al ejecutar uvicorn: {e}")
|
205 |
|
206 |
+
# Interfaz Gradio
|
207 |
iface = gr.Interface(
|
208 |
fn=process_message,
|
209 |
inputs=gr.Textbox(lines=2, placeholder="Enter your message here..."),
|