backend / app /service /llm.py
praneethys's picture
fix income statement endpoints (#16)
4761dd9 verified
Raw
History Blame Contribute Delete
1.98 kB
from typing import List
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.base import RunnableSequence
from langchain_openai import OpenAI
from langchain.globals import set_llm_cache
from app.model.transaction import Transaction
from app.schema.index import IncomeStatementLLMResponse
from config.index import config as env
from langchain_core.output_parsers import PydanticOutputParser
set_llm_cache(None)
def income_statement_prompt () -> ChatPromptTemplate:
context_str = """
You are an accountant skilled at organizing transactions from multiple different bank
accounts and credit card statements to prepare an income statement.
Input data is in the below csv format:
transaction_date, category, name_description, amount, type\n
{input_data_csv}
Your task is to prepare an income statement. The output should be in the following format: {format_instructions}
"""
prompt = ChatPromptTemplate.from_template(context_str)
return prompt
async def call_llm(inputData: List[Transaction]) -> str:
input_data_csv = '\n'.join(str(x) for x in inputData)
output_parser = PydanticOutputParser(pydantic_object=IncomeStatementLLMResponse)
prompt = income_statement_prompt().partial(format_instructions=output_parser.get_format_instructions())
llm = OpenAI(name='Income Statement Generation Bot',
api_key=env.OPENAI_API_KEY,
# cache=True,
temperature=0.7,
verbose=True)
try:
runnable_chain = RunnableSequence(prompt, llm, output_parser)
except Exception as e:
print(f"runnable_chain error: {str(e)}")
raise e
try:
output_chunks = runnable_chain.invoke({"input_data_csv": input_data_csv})
return output_chunks
except Exception as e:
print(f"runnable_chain.invoke error: {str(e)}")
raise e