Se hace una depuración inicial del proyecto
This commit is contained in:
parent
f397b2d446
commit
61da645cf9
Binary file not shown.
Binary file not shown.
@ -133,7 +133,6 @@ def search_sale_order(order_id: int):
|
|||||||
|
|
||||||
return response_sale
|
return response_sale
|
||||||
|
|
||||||
|
|
||||||
@tool
|
@tool
|
||||||
def add_lines_to_order(
|
def add_lines_to_order(
|
||||||
order_id: int, product: str, unit: str, quantity: str, unitprice: str
|
order_id: int, product: str, unit: str, quantity: str, unitprice: str
|
||||||
@ -210,36 +209,3 @@ tools = [
|
|||||||
add_lines_to_order,
|
add_lines_to_order,
|
||||||
search_associate_party_to_contact_mechanism,
|
search_associate_party_to_contact_mechanism,
|
||||||
]
|
]
|
||||||
|
|
||||||
# if __name__ == "__main__":
|
|
||||||
# # Crear una orden de venta
|
|
||||||
# party = 2573
|
|
||||||
# pickup_location = "at_home"
|
|
||||||
# order_id = create_sale_order(party=party, pickup_location=pickup_location)
|
|
||||||
# print(f"\nOrden creada con ID: {order_id}")
|
|
||||||
|
|
||||||
# # Agregar líneas a la orden
|
|
||||||
# product = "1"
|
|
||||||
# unit = "1"
|
|
||||||
# quantity = "3"
|
|
||||||
# unitprice = "15"
|
|
||||||
|
|
||||||
# add_line_response = add_lines_to_order(order_id, product, unit, quantity, unitprice)
|
|
||||||
# print(f"\nRespuesta al agregar línea: {add_line_response.text}")
|
|
||||||
|
|
||||||
# # Verificar la orden actualizada
|
|
||||||
# updated_order = search_sale_order(order_id)
|
|
||||||
# print(f"\nOrden actualizada: {updated_order.text}")
|
|
||||||
|
|
||||||
# # Agregar otra línea a la orden
|
|
||||||
# product = "2"
|
|
||||||
# unit = "1"
|
|
||||||
# quantity = "3"
|
|
||||||
# unitprice = "15"
|
|
||||||
|
|
||||||
# add_line_response = add_lines_to_order(order_id, product, unit, quantity, unitprice)
|
|
||||||
# print(f"\nRespuesta al agregar línea: {add_line_response.text}")
|
|
||||||
|
|
||||||
# # Verificar la orden actualizada
|
|
||||||
# updated_order = search_sale_order(order_id)
|
|
||||||
# print(f"\nOrden actualizada: {updated_order.text}")
|
|
||||||
|
Binary file not shown.
@ -1,82 +0,0 @@
|
|||||||
from seller.catalog_tools import CatalogTrytonTools
|
|
||||||
import json
|
|
||||||
|
|
||||||
# result = json.dumps(response, indent=4)
|
|
||||||
|
|
||||||
url = "http://192.168.0.25:8000"
|
|
||||||
key = "9a9ffc430146447d81e6698240199a4be2b0e774cb18474999d0f60e33b5b1eb1cfff9d9141346a98844879b5a9e787489c891ddc8fb45cc903b7244cab64fb1"
|
|
||||||
db = "tryton"
|
|
||||||
application_name = "sale_don_confiao"
|
|
||||||
|
|
||||||
|
|
||||||
catalog = CatalogTrytonTools(url, application_name, key, db)
|
|
||||||
|
|
||||||
# Lista de los productos
|
|
||||||
print("=== Productos ===")
|
|
||||||
|
|
||||||
response = catalog.list_products()
|
|
||||||
|
|
||||||
products: str = ""
|
|
||||||
|
|
||||||
for product in response:
|
|
||||||
id = product["id"]
|
|
||||||
name = product["name"]
|
|
||||||
id_unit_measurement = product["default_uom."]["id"]
|
|
||||||
products += f"- id: {id} - Nombre: {name} - ID Unidad de Medida: {id_unit_measurement}\n"
|
|
||||||
|
|
||||||
print(products)
|
|
||||||
|
|
||||||
# Precio del los productos
|
|
||||||
print("=== Precios de los productos ===")
|
|
||||||
|
|
||||||
response = catalog.search_products("Arroz")
|
|
||||||
precios: str = ""
|
|
||||||
|
|
||||||
for product in response:
|
|
||||||
id = product["id"]
|
|
||||||
name = product["name"]
|
|
||||||
precio = product["template."]["list_price"]["decimal"]
|
|
||||||
id_unit_measurement = product["default_uom."]["id"]
|
|
||||||
|
|
||||||
precios += f"- id: {id} - Nombre: {name}: ${precio} - ID Unidad de Medida: {id_unit_measurement}\n"
|
|
||||||
|
|
||||||
print(precios)
|
|
||||||
|
|
||||||
# Revisar disponibilidad de los productos
|
|
||||||
# print("=== Disponibilidad de los productos ===")
|
|
||||||
|
|
||||||
# response = catalog.search_products("Papa")
|
|
||||||
# disponibilidad: str = ""
|
|
||||||
|
|
||||||
# for product in response:
|
|
||||||
# id = product["id"]
|
|
||||||
# name = product["name"]
|
|
||||||
# stock = product["quantity"]
|
|
||||||
|
|
||||||
# disponibilidad += f"- id: {id} - Nombre: {name} - Stock: {stock}\n"
|
|
||||||
|
|
||||||
# print(disponibilidad)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# from langgraph_tools.tools.catalog.catalog_tools import (
|
|
||||||
# list_products,
|
|
||||||
# search_products,
|
|
||||||
# check_price,
|
|
||||||
# )
|
|
||||||
|
|
||||||
# def test_catalog_functions():
|
|
||||||
# print("=== Probando lista de productos ===")
|
|
||||||
# print(list_products())
|
|
||||||
# print("\n")
|
|
||||||
|
|
||||||
# print("=== Probando búsqueda de productos ===")
|
|
||||||
# print(search_products("Arroz"))
|
|
||||||
# print("\n")
|
|
||||||
|
|
||||||
# print("=== Probando verificación de precio ===")
|
|
||||||
# print(check_price("Arroz"))
|
|
||||||
# print("\n")
|
|
||||||
|
|
||||||
# if __name__ == "__main__":
|
|
||||||
# test_catalog_functions()
|
|
@ -1,20 +0,0 @@
|
|||||||
# from langchain_tools.llm import load_llm_openai
|
|
||||||
# import yaml
|
|
||||||
#
|
|
||||||
# with open("langgraph_tools/prompts.yaml", "r") as f:
|
|
||||||
# PROMPTS = yaml.safe_load(f)
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# llm = load_llm_openai()
|
|
||||||
# query = "Necesito informacion sobre la tienda."
|
|
||||||
# prompt = PROMPTS["classifier"]["system"].format(query=query)
|
|
||||||
#
|
|
||||||
# response: dict = llm.invoke(prompt)
|
|
||||||
#
|
|
||||||
# print(response.content)
|
|
||||||
|
|
||||||
from langgraph_tools.tools.general_info import get_link_page
|
|
||||||
|
|
||||||
|
|
||||||
link = get_link_page()
|
|
||||||
print(link)
|
|
@ -1,10 +0,0 @@
|
|||||||
from dotenv import load_dotenv
|
|
||||||
from langchain_openai import OpenAIEmbeddings
|
|
||||||
|
|
||||||
|
|
||||||
def load_embeddins():
|
|
||||||
load_dotenv()
|
|
||||||
# model = "text-embedding-ada-002"
|
|
||||||
model = "text-embedding-3-small"
|
|
||||||
|
|
||||||
return OpenAIEmbeddings(model=model)
|
|
@ -1,17 +0,0 @@
|
|||||||
from dotenv import load_dotenv
|
|
||||||
from langchain_openai import ChatOpenAI
|
|
||||||
|
|
||||||
|
|
||||||
def load_llm_openai():
|
|
||||||
load_dotenv()
|
|
||||||
# model = "gpt-3.5-turbo-0125"
|
|
||||||
# model = "gpt-4o"
|
|
||||||
model = "gpt-4o-mini"
|
|
||||||
|
|
||||||
llm = ChatOpenAI(
|
|
||||||
model=model,
|
|
||||||
temperature=0.1,
|
|
||||||
max_tokens=2000,
|
|
||||||
)
|
|
||||||
|
|
||||||
return llm
|
|
@ -1,46 +0,0 @@
|
|||||||
from langchain.chains import create_history_aware_retriever
|
|
||||||
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
|
||||||
from langchain.chains import create_retrieval_chain
|
|
||||||
from langchain.chains.combine_documents import create_stuff_documents_chain
|
|
||||||
|
|
||||||
|
|
||||||
def create_rag_chain(llm, retriever):
|
|
||||||
contextualize_q_system_prompt = """
|
|
||||||
Given a chat history and the latest user question \
|
|
||||||
which might reference context in the chat history,
|
|
||||||
formulate a standalone question \
|
|
||||||
which can be understood without the chat history.
|
|
||||||
Do NOT answer the question, \
|
|
||||||
just reformulate it if needed and otherwise return it as is.
|
|
||||||
"""
|
|
||||||
contextualize_q_prompt = ChatPromptTemplate.from_messages(
|
|
||||||
[
|
|
||||||
("system", contextualize_q_system_prompt),
|
|
||||||
MessagesPlaceholder("chat_history"),
|
|
||||||
("human", "{input}"),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
history_aware_retriever = create_history_aware_retriever(
|
|
||||||
llm, retriever, contextualize_q_prompt
|
|
||||||
)
|
|
||||||
|
|
||||||
# ___________________Chain con el chat history_______________________-
|
|
||||||
qa_system_prompt = """
|
|
||||||
You are an assistant for question-answering tasks. \
|
|
||||||
Use the following pieces of retrieved context to answer the question. \
|
|
||||||
If you don't know the answer, just say that you don't know. \
|
|
||||||
The length of the answer should be sufficient to address
|
|
||||||
what is being asked, \
|
|
||||||
meaning don't limit yourself in length.\
|
|
||||||
{context}"""
|
|
||||||
qa_prompt = ChatPromptTemplate.from_messages(
|
|
||||||
[
|
|
||||||
("system", qa_system_prompt),
|
|
||||||
MessagesPlaceholder("chat_history"),
|
|
||||||
("human", "{input}"),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt)
|
|
||||||
|
|
||||||
return create_retrieval_chain(
|
|
||||||
history_aware_retriever, question_answer_chain)
|
|
@ -1,18 +0,0 @@
|
|||||||
from langchain_chroma import Chroma
|
|
||||||
|
|
||||||
|
|
||||||
def create_retriever(embeddings, persist_directory: str):
|
|
||||||
# Cargamos la vectorstore
|
|
||||||
# vectordb = Chroma.from_documents(
|
|
||||||
# persist_directory=st.session_state.persist_directory,
|
|
||||||
# Este es el directorio del la vs del docuemnto del usuario
|
|
||||||
# que se encuentra cargado en la session_state.
|
|
||||||
# embedding_function=embeddings,
|
|
||||||
# )
|
|
||||||
vectordb = Chroma(
|
|
||||||
persist_directory=persist_directory,
|
|
||||||
embedding_function=embeddings,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Creamos el retriver para que retorne los fragmentos mas relevantes.
|
|
||||||
return vectordb.as_retriever(search_kwargs={"k": 6})
|
|
@ -1,42 +0,0 @@
|
|||||||
from langchain_community.document_loaders.pdf import PyPDFLoader
|
|
||||||
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
# def load_split_docs(file_name: str) -> list:
|
|
||||||
# file_path: str = os.path.join("documents", "pdfs", file_name)
|
|
||||||
# loader = PyPDFLoader(file_path)
|
|
||||||
# docs: list = loader.load()
|
|
||||||
# chunk_size: int = 2000
|
|
||||||
# chunk_overlap: int = 300
|
|
||||||
#
|
|
||||||
# splitter = RecursiveCharacterTextSplitter(
|
|
||||||
# chunk_size=chunk_size, chunk_overlap=chunk_overlap
|
|
||||||
# )
|
|
||||||
# docs_split: list = splitter.split_documents(docs)
|
|
||||||
#
|
|
||||||
# return docs_split
|
|
||||||
|
|
||||||
|
|
||||||
def load_split_docs(file_name: str) -> list:
|
|
||||||
# Obtener el directorio base del proyecto
|
|
||||||
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
# Construir la ruta absoluta al PDF
|
|
||||||
file_path = os.path.join(base_dir, "documents", "pdfs", file_name)
|
|
||||||
|
|
||||||
# Verificar si el archivo existe
|
|
||||||
if not os.path.exists(file_path):
|
|
||||||
print(f"Archivo no encontrado en: {file_path}")
|
|
||||||
raise FileNotFoundError(f"No se encontró el archivo en: {file_path}")
|
|
||||||
|
|
||||||
loader = PyPDFLoader(file_path)
|
|
||||||
docs: list = loader.load()
|
|
||||||
|
|
||||||
chunk_size: int = 2000
|
|
||||||
chunk_overlap: int = 300
|
|
||||||
splitter = RecursiveCharacterTextSplitter(
|
|
||||||
chunk_size=chunk_size, chunk_overlap=chunk_overlap
|
|
||||||
)
|
|
||||||
docs_split: list = splitter.split_documents(docs)
|
|
||||||
return docs_split
|
|
@ -1,48 +0,0 @@
|
|||||||
from langchain_chroma import Chroma
|
|
||||||
import os
|
|
||||||
|
|
||||||
#
|
|
||||||
# def create_vectorstore(docs_split: list, embeddings, file_name: str):
|
|
||||||
# db_name: str = file_name.replace(".pdf", "").replace(" ", "_").lower()
|
|
||||||
# persist_directory: str = f"embeddings/{db_name}"
|
|
||||||
#
|
|
||||||
# # Crear el directorio si no existe
|
|
||||||
# os.makedirs(persist_directory, exist_ok=True)
|
|
||||||
#
|
|
||||||
# # Siempre crear/actualizar el vectorstore
|
|
||||||
# vectordb = Chroma.from_documents(
|
|
||||||
# persist_directory=persist_directory,
|
|
||||||
# documents=docs_split,
|
|
||||||
# embedding=embeddings,
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# return vectordb
|
|
||||||
|
|
||||||
|
|
||||||
def create_vectorstore(docs_split: list, embeddings, file_name: str):
|
|
||||||
# Obtener el directorio base del proyecto
|
|
||||||
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
# Crear el nombre de la base de datos
|
|
||||||
db_name: str = file_name.replace(".pdf", "").replace(" ", "_").lower()
|
|
||||||
|
|
||||||
# Construir la ruta absoluta para los embeddings
|
|
||||||
persist_directory: str = os.path.join(base_dir, "embeddings", db_name)
|
|
||||||
|
|
||||||
# Crear el directorio si no existe
|
|
||||||
os.makedirs(persist_directory, exist_ok=True)
|
|
||||||
|
|
||||||
# Debug log
|
|
||||||
print(f"Creando vectorstore en: {persist_directory}")
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Crear/actualizar el vectorstore
|
|
||||||
vectordb = Chroma.from_documents(
|
|
||||||
persist_directory=persist_directory,
|
|
||||||
documents=docs_split,
|
|
||||||
embedding=embeddings,
|
|
||||||
)
|
|
||||||
return vectordb
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error al crear vectorstore: {e}")
|
|
||||||
raise
|
|
@ -1,27 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from app.langgraph_tools.tools.orders.order_tools_2 import create_party
|
|
||||||
import json
|
|
||||||
|
|
||||||
# Prueba de la función create_party
|
|
||||||
def test_create_party():
|
|
||||||
# Parámetros de ejemplo
|
|
||||||
party_full_name = "Cristian Garces"
|
|
||||||
contact_method_type = "email"
|
|
||||||
contact_method_value = "cristian.garces@example.com"
|
|
||||||
|
|
||||||
# Llamar a la función
|
|
||||||
response = create_party(
|
|
||||||
party_full_name=party_full_name,
|
|
||||||
contact_method_type=contact_method_type,
|
|
||||||
contact_method_value=contact_method_value
|
|
||||||
)
|
|
||||||
|
|
||||||
# Imprimir la respuesta
|
|
||||||
print("Status Code:", response.status_code)
|
|
||||||
try:
|
|
||||||
print("Response:", json.loads(response.text))
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
print("Raw Response:", response.text)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_create_party()
|
|
Loading…
Reference in New Issue
Block a user