77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
import os
|
|
import uuid
|
|
from typing import Optional
|
|
|
|
from dotenv import load_dotenv
|
|
from langchain_core.prompts import (
|
|
ChatPromptTemplate,
|
|
SystemMessagePromptTemplate,
|
|
load_prompt,
|
|
)
|
|
from langchain_openai import ChatOpenAI
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from . import crud, schemas
|
|
|
|
load_dotenv()
|
|
|
|
# from supabase import Client
|
|
|
|
SYSTEM_DIALECTIC = load_prompt(
|
|
os.path.join(os.path.dirname(__file__), "prompts/dialectic.yaml")
|
|
)
|
|
system_dialectic: SystemMessagePromptTemplate = SystemMessagePromptTemplate(
|
|
prompt=SYSTEM_DIALECTIC
|
|
)
|
|
|
|
llm: ChatOpenAI = ChatOpenAI(model_name="gpt-4")
|
|
|
|
|
|
async def chat(
|
|
app_id: uuid.UUID,
|
|
user_id: uuid.UUID,
|
|
session_id: uuid.UUID,
|
|
query: str,
|
|
db: AsyncSession,
|
|
):
|
|
collection = await crud.get_collection_by_name(db, app_id, user_id, "honcho")
|
|
retrieved_facts = None
|
|
if collection is None:
|
|
collection_create = schemas.CollectionCreate(name="honcho", metadata={})
|
|
collection = await crud.create_collection(
|
|
db,
|
|
collection=collection_create,
|
|
app_id=app_id,
|
|
user_id=user_id,
|
|
)
|
|
else:
|
|
retrieved_documents = await crud.query_documents(
|
|
db=db,
|
|
app_id=app_id,
|
|
user_id=user_id,
|
|
collection_id=collection.id,
|
|
query=query,
|
|
top_k=1,
|
|
)
|
|
if len(retrieved_documents) > 0:
|
|
retrieved_facts = retrieved_documents[0].content
|
|
|
|
dialectic_prompt = ChatPromptTemplate.from_messages([system_dialectic])
|
|
chain = dialectic_prompt | llm
|
|
response = await chain.ainvoke(
|
|
{
|
|
"agent_input": query,
|
|
"retrieved_facts": retrieved_facts if retrieved_facts else "None",
|
|
}
|
|
)
|
|
|
|
return schemas.AgentChat(content=response.content)
|
|
|
|
|
|
async def hydrate():
|
|
pass
|
|
|
|
|
|
async def insight():
|
|
pass
|