AIdeaText commited on
Commit
dfe8a2b
·
verified ·
1 Parent(s): 4636a31

Update modules/chatbot/chat_process.py

Browse files
Files changed (1) hide show
  1. modules/chatbot/chat_process.py +15 -13
modules/chatbot/chat_process.py CHANGED
@@ -23,7 +23,7 @@ class ChatProcessor:
23
  raise ValueError("Texto y métricas son requeridos")
24
 
25
  self.semantic_context = {
26
- 'full_text': text, # Texto completo del documento
27
  'key_concepts': metrics.get('key_concepts', []),
28
  'concept_centrality': metrics.get('concept_centrality', {}),
29
  'graph_available': graph_data is not None,
@@ -51,7 +51,8 @@ class ChatProcessor:
51
  1. Answer questions about concepts and their relationships
52
  2. Explain the semantic network structure
53
  3. Suggest text improvements
54
- 4. Provide insights based on concept centrality""",
 
55
 
56
  'es': f"""Eres un experto en análisis semántico. El usuario analizó un artículo de investigación.
57
  Texto completo disponible (abreviado para contexto).
@@ -61,8 +62,9 @@ class ChatProcessor:
61
  Tus tareas:
62
  1. Responder preguntas sobre conceptos y sus relaciones
63
  2. Explicar la estructura de la red semántica
64
- 3. Sugerir mejorias al texto
65
- 4. Proporcionar insights basados en centralidad de conceptos""",
 
66
 
67
  'pt': f"""Você é um especialista em análise semântica. O usuário analisou um artigo de pesquisa.
68
  Texto completo disponível (abreviado para contexto).
@@ -73,7 +75,8 @@ class ChatProcessor:
73
  1. Responder perguntas sobre conceitos e suas relações
74
  2. Explicar a estrutura da rede semântica
75
  3. Sugerir melhorias no texto
76
- 4. Fornecer insights com base na centralidade dos conceitos""",
 
77
 
78
  'fr': f"""Vous êtes un expert en analyse sémantique. L'utilisateur a analysé un article de recherche.
79
  Texte complet disponible (abrégé pour le contexte).
@@ -84,14 +87,16 @@ class ChatProcessor:
84
  1. Répondre aux questions sur les concepts et leurs relations
85
  2. Expliquer la structure du réseau sémantique
86
  3. Suggérer des améliorations de texte
87
- 4. Fournir des insights basés sur la centralité des concepts"""
 
88
  }
89
 
90
  return prompts.get(self.current_lang, prompts['en'])
91
 
92
  def clean_generated_text(self, text):
93
- """Limpia caracteres especiales del texto generado"""
94
- return text.replace("\u2588", "").replace("▌", "").strip()
 
95
 
96
  def process_chat_input(self, message: str, lang_code: str) -> Generator[str, None, None]:
97
  """Procesa el mensaje con todo el contexto disponible"""
@@ -100,12 +105,10 @@ class ChatProcessor:
100
  yield "Error: Contexto semántico no configurado. Recargue el análisis."
101
  return
102
 
103
- # Actualizar idioma si es diferente
104
  if lang_code != self.current_lang:
105
  self.current_lang = lang_code
106
  logger.info(f"Idioma cambiado a: {lang_code}")
107
 
108
- # Construir historial de mensajes
109
  messages = [
110
  {
111
  "role": "user",
@@ -115,7 +118,6 @@ class ChatProcessor:
115
  {"role": "user", "content": message}
116
  ]
117
 
118
- # Llamar a Claude con streaming
119
  with self.client.messages.stream(
120
  model="claude-sonnet-4-5-20250929",
121
  max_tokens=4000,
@@ -129,10 +131,10 @@ class ChatProcessor:
129
  full_response += cleaned_chunk
130
  yield cleaned_chunk
131
 
132
- # Guardar respuesta en historial
133
  self.conversation_history.extend([
134
  {"role": "user", "content": message},
135
- {"role": "assistant", "content": full_response}
136
  ])
137
  logger.info("Respuesta generada y guardada en historial")
138
 
 
23
  raise ValueError("Texto y métricas son requeridos")
24
 
25
  self.semantic_context = {
26
+ 'full_text': text,
27
  'key_concepts': metrics.get('key_concepts', []),
28
  'concept_centrality': metrics.get('concept_centrality', {}),
29
  'graph_available': graph_data is not None,
 
51
  1. Answer questions about concepts and their relationships
52
  2. Explain the semantic network structure
53
  3. Suggest text improvements
54
+ 4. Provide insights based on concept centrality
55
+ 5. IMPORTANT FORMATTING: Always format citations or numerical references using brackets with a leading space (e.g., text [1], concept [2]).""",
56
 
57
  'es': f"""Eres un experto en análisis semántico. El usuario analizó un artículo de investigación.
58
  Texto completo disponible (abreviado para contexto).
 
62
  Tus tareas:
63
  1. Responder preguntas sobre conceptos y sus relaciones
64
  2. Explicar la estructura de la red semántica
65
+ 3. Sugerir mejoras al texto
66
+ 4. Proporcionar insights basados en centralidad de conceptos
67
+ 5. FORMATO IMPORTANTE: Formatea siempre las citas o referencias numéricas usando corchetes y asegurando un espacio antes (por ejemplo: texto [1], concepto [2]).""",
68
 
69
  'pt': f"""Você é um especialista em análise semântica. O usuário analisou um artigo de pesquisa.
70
  Texto completo disponível (abreviado para contexto).
 
75
  1. Responder perguntas sobre conceitos e suas relações
76
  2. Explicar a estrutura da rede semântica
77
  3. Sugerir melhorias no texto
78
+ 4. Fornecer insights com base na centralidade dos conceitos
79
+ 5. FORMATAÇÃO IMPORTANTE: Formate sempre as citações ou referências numéricas usando colchetes e garantindo um espaço antes (por exemplo: texto [1], conceito [2]).""",
80
 
81
  'fr': f"""Vous êtes un expert en analyse sémantique. L'utilisateur a analysé un article de recherche.
82
  Texte complet disponible (abrégé pour le contexte).
 
87
  1. Répondre aux questions sur les concepts et leurs relations
88
  2. Expliquer la structure du réseau sémantique
89
  3. Suggérer des améliorations de texte
90
+ 4. Fournir des insights basés sur la centralité des concepts
91
+ 5. FORMATAGE IMPORTANT: Formatez toujours les citations ou les références numériques en utilisant des crochets et en assurant un espace avant (par exemple: texte [1], concept [2])."""
92
  }
93
 
94
  return prompts.get(self.current_lang, prompts['en'])
95
 
96
  def clean_generated_text(self, text):
97
+ """Limpia caracteres especiales del texto generado SIN eliminar espacios en blanco de los extremos."""
98
+ # Se elimina .strip() para no romper los espacios entre chunks del stream
99
+ return text.replace("\u2588", "").replace("▌", "")
100
 
101
  def process_chat_input(self, message: str, lang_code: str) -> Generator[str, None, None]:
102
  """Procesa el mensaje con todo el contexto disponible"""
 
105
  yield "Error: Contexto semántico no configurado. Recargue el análisis."
106
  return
107
 
 
108
  if lang_code != self.current_lang:
109
  self.current_lang = lang_code
110
  logger.info(f"Idioma cambiado a: {lang_code}")
111
 
 
112
  messages = [
113
  {
114
  "role": "user",
 
118
  {"role": "user", "content": message}
119
  ]
120
 
 
121
  with self.client.messages.stream(
122
  model="claude-sonnet-4-5-20250929",
123
  max_tokens=4000,
 
131
  full_response += cleaned_chunk
132
  yield cleaned_chunk
133
 
134
+ # Opcional: Aplicar un strip final solo al guardarlo en el historial
135
  self.conversation_history.extend([
136
  {"role": "user", "content": message},
137
+ {"role": "assistant", "content": full_response.strip()}
138
  ])
139
  logger.info("Respuesta generada y guardada en historial")
140