Parse-Or-Fix
Sat 17 May 2025
!python --version
Python 3.12.4
from constants import OPENAI_API_KEY
!pip show langchain-openai | grep "Version:"
Version: 0.2.9
import os
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
from langchain_core.runnables import RunnableLambda
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import json
from langchain_core.runnables import RunnableConfig
def parse_or_fix(text: str, config: RunnableConfig):
fixing_chain = (
ChatPromptTemplate.from_template(
"Fix the following text:\n\n\`\`\`text\n{input}\n\`\`\`\nError: {error}"
" Don't narrate, just respond with the fixed data."
)
| model
| StrOutputParser()
)
for _ in range(3):
try:
return json.loads(text)
except Exception as e:
text = fixing_chain.invoke({"input": text, "error": e}, config)
return "Failed to parse"
from langchain_community.callbacks import get_openai_callback
with get_openai_callback() as cb:
output = RunnableLambda(parse_or_fix).invoke(
"{foo: bar}", {"tags": ["my-tag"], "callbacks": [cb]}
)
print(output)
print(cb)
<>:9: SyntaxWarning: invalid escape sequence '\`'
<>:9: SyntaxWarning: invalid escape sequence '\`'
/tmp/ipykernel_363626/1261273371.py:9: SyntaxWarning: invalid escape sequence '\`'
"Fix the following text:\n\n\`\`\`text\n{input}\n\`\`\`\nError: {error}"
Failed to parse
Tokens Used: 212
Prompt Tokens: 182
Completion Tokens: 30
Successful Requests: 3
Total Cost (USD): $4.5299999999999997e-05
Score: 5
Category: langchain