sonika-langchain-bot 0.0.18__py3-none-any.whl → 0.0.19__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sonika-langchain-bot might be problematic. Click here for more details.
- sonika_langchain_bot/langchain_clasificator.py +48 -12
- {sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/METADATA +1 -1
- {sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/RECORD +6 -6
- {sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/WHEEL +0 -0
- {sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/licenses/LICENSE +0 -0
- {sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/top_level.txt +0 -0
|
@@ -2,16 +2,30 @@ from pydantic import BaseModel
|
|
|
2
2
|
from typing import Dict, Any, Type
|
|
3
3
|
from sonika_langchain_bot.langchain_class import ILanguageModel
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
class ClassificationResponse(BaseModel):
|
|
6
|
+
"""Respuesta de clasificación con tokens utilizados"""
|
|
7
|
+
input_tokens: int
|
|
8
|
+
output_tokens: int
|
|
9
|
+
result: Dict[str, Any]
|
|
10
|
+
|
|
6
11
|
class TextClassifier:
|
|
7
12
|
def __init__(self, validation_class: Type[BaseModel], llm: ILanguageModel):
|
|
8
|
-
self.llm =llm
|
|
13
|
+
self.llm = llm
|
|
9
14
|
self.validation_class = validation_class
|
|
10
|
-
#
|
|
11
|
-
self.
|
|
15
|
+
# Guardamos ambas versiones del modelo
|
|
16
|
+
self.original_model = self.llm.model # Sin structured output
|
|
17
|
+
self.structured_model = self.llm.model.with_structured_output(validation_class)
|
|
12
18
|
|
|
13
|
-
def classify(self, text: str) ->
|
|
14
|
-
|
|
19
|
+
def classify(self, text: str) -> ClassificationResponse:
|
|
20
|
+
"""
|
|
21
|
+
Clasifica el texto según la clase de validación.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
text: Texto a clasificar
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
ClassificationResponse: Objeto con result, input_tokens y output_tokens
|
|
28
|
+
"""
|
|
15
29
|
prompt = f"""
|
|
16
30
|
Classify the following text based on the properties defined in the validation class.
|
|
17
31
|
|
|
@@ -19,12 +33,34 @@ class TextClassifier:
|
|
|
19
33
|
|
|
20
34
|
Only extract the properties mentioned in the validation class.
|
|
21
35
|
"""
|
|
22
|
-
response = self.llm.invoke(prompt=prompt)
|
|
23
36
|
|
|
24
|
-
#
|
|
37
|
+
# Primero invocamos el modelo ORIGINAL para obtener metadata de tokens
|
|
38
|
+
raw_response = self.original_model.invoke(prompt)
|
|
39
|
+
|
|
40
|
+
# Extraer información de tokens del AIMessage original
|
|
41
|
+
input_tokens = 0
|
|
42
|
+
output_tokens = 0
|
|
43
|
+
|
|
44
|
+
if hasattr(raw_response, 'response_metadata'):
|
|
45
|
+
token_usage = raw_response.response_metadata.get('token_usage', {})
|
|
46
|
+
input_tokens = token_usage.get('prompt_tokens', 0)
|
|
47
|
+
output_tokens = token_usage.get('completion_tokens', 0)
|
|
48
|
+
|
|
49
|
+
# Ahora invocamos con structured output para obtener el objeto parseado
|
|
50
|
+
response = self.structured_model.invoke(prompt)
|
|
51
|
+
|
|
52
|
+
# Validar que el response es de la clase correcta
|
|
25
53
|
if isinstance(response, self.validation_class):
|
|
26
|
-
# Crear el resultado dinámicamente basado en los atributos
|
|
27
|
-
|
|
28
|
-
|
|
54
|
+
# Crear el resultado dinámicamente basado en los atributos
|
|
55
|
+
result_data = {
|
|
56
|
+
field: getattr(response, field)
|
|
57
|
+
for field in self.validation_class.__fields__.keys()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return ClassificationResponse(
|
|
61
|
+
input_tokens=input_tokens,
|
|
62
|
+
output_tokens=output_tokens,
|
|
63
|
+
result=result_data
|
|
64
|
+
)
|
|
29
65
|
else:
|
|
30
|
-
raise ValueError(f"The response is not of type '{self.validation_class.__name__}'")
|
|
66
|
+
raise ValueError(f"The response is not of type '{self.validation_class.__name__}'")
|
|
@@ -3,13 +3,13 @@ sonika_langchain_bot/document_processor.py,sha256=RuHT22Zt-psoe4adFWKwBJ0gi638fq
|
|
|
3
3
|
sonika_langchain_bot/langchain_bdi.py,sha256=ithc55azP5XSPb8AGRUrDGYnVI6I4IqpqElLNat4BAQ,7024
|
|
4
4
|
sonika_langchain_bot/langchain_bot_agent.py,sha256=wdQrIVUxmkU-VmGfrdIcnDJPdKmRQXgeKYf_50By5cE,24359
|
|
5
5
|
sonika_langchain_bot/langchain_bot_agent_bdi.py,sha256=Ev0hhRQYe6kyGAHiFDhFsfu6QnTwUFaA9oB8DfNV7u4,8613
|
|
6
|
-
sonika_langchain_bot/langchain_clasificator.py,sha256=
|
|
6
|
+
sonika_langchain_bot/langchain_clasificator.py,sha256=h0-H_1bqgA04rF2ZHh5zOg2PinqTuLQMcSK7AGK4uw8,2583
|
|
7
7
|
sonika_langchain_bot/langchain_class.py,sha256=5anB6v_wCzEoAJRb8fV9lPPS72E7-k51y_aeiip8RAw,1114
|
|
8
8
|
sonika_langchain_bot/langchain_files.py,sha256=SEyqnJgBc_nbCIG31eypunBbO33T5AHFOhQZcghTks4,381
|
|
9
9
|
sonika_langchain_bot/langchain_models.py,sha256=vqSSZ48tNofrTMLv1QugDdyey2MuIeSdlLSD37AnzkI,2235
|
|
10
10
|
sonika_langchain_bot/langchain_tools.py,sha256=y7wLf1DbUua3QIvz938Ek-JIMOuQhrOIptJadW8OIsU,466
|
|
11
|
-
sonika_langchain_bot-0.0.
|
|
12
|
-
sonika_langchain_bot-0.0.
|
|
13
|
-
sonika_langchain_bot-0.0.
|
|
14
|
-
sonika_langchain_bot-0.0.
|
|
15
|
-
sonika_langchain_bot-0.0.
|
|
11
|
+
sonika_langchain_bot-0.0.19.dist-info/licenses/LICENSE,sha256=O8VZ4aU_rUMAArvYTm2bshcZ991huv_tpfB5BKHH9Q8,1064
|
|
12
|
+
sonika_langchain_bot-0.0.19.dist-info/METADATA,sha256=hjo1qMMAqU1CCsc1BbbURDV3sOTQYVdEraEVCiDRXoc,6508
|
|
13
|
+
sonika_langchain_bot-0.0.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
14
|
+
sonika_langchain_bot-0.0.19.dist-info/top_level.txt,sha256=UsTTSZFEw2wrPSVh4ufu01e2m_E7O_QVYT_k4zCQaAE,21
|
|
15
|
+
sonika_langchain_bot-0.0.19.dist-info/RECORD,,
|
|
File without changes
|
{sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{sonika_langchain_bot-0.0.18.dist-info → sonika_langchain_bot-0.0.19.dist-info}/top_level.txt
RENAMED
|
File without changes
|