Hjgugugjhuhjggg commited on
Commit
f56bb7e
verified
1 Parent(s): 1cb2fbe

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -25
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
- def cache_response(func):
128
- def wrapper(*args, **kwargs):
129
- cache_key = f"{args}-{kwargs}"
130
- if cache_key in cache:
131
- return cache[cache_key]
132
- response = func(*args, **kwargs)
133
- cache[cache_key] = response
134
- return response
135
- return wrapper
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
- def remove_repetitive_responses(responses):
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
- {'model': model_name, 'response': future.result()}
161
- for model_name, future in zip(global_data['models'].keys(), as_completed(futures))
162
- ]
163
- unique_responses = remove_repetitive_responses(responses)
164
- formatted_response = ""
165
- for model, response in unique_responses.items():
166
- formatted_response += f"**{model}:**\n{response}\n\n"
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..."),