This guide explains how to integrate Refile’s PDF generation capabilities with LangChain.js in just a few lines of code. This integration allows LLMs to generate PDFs directly from markdown content as part of their response flow.
Prerequisites
- A refile API key (available from your refile dashboard)
- Node.js project with LangChain.js installed
- Basic familiarity with LangChain.js usage patterns
Quick Start
- Install the dependencies:
npm install @langchain/openai @langchain/core zod
- Copy the refile tool code and use it with LangChain:
import { createRefileTool } from "./refileTool.js";
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage } from "@langchain/core/messages";
// Initialize the OpenAI chat model
const model = new ChatOpenAI({
temperature: 0,
modelName: "gpt-4o", // You can change to a different model as needed
openAIApiKey: "<token>",
});
// Create the refile tool
const refileTool = createRefileTool("<token>");
// Bind the tool to the model
const llmWithTool = model.bindTools([refileTool]);
// Create a messages array to track conversation
const messages = [
new HumanMessage(
"Create a research report on the rainforests of the Amazon as a PDF. Include sections on biodiversity, conservation efforts, and threats. Reply with the URL."
),
];
// Get the initial response from the model
const aiMessage = await llmWithTool.invoke(messages);
console.log("Initial AI response:", aiMessage);
// Add the AI's response to the messages
messages.push(aiMessage);
// Check if there are tool calls to execute
if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {
// Process each tool call
for (const toolCall of aiMessage.tool_calls) {
console.log(`Executing tool call: ${toolCall.name}`);
// Execute the tool with the tool call
const toolMessage = await refileTool.invoke(toolCall);
// Add the tool result to the messages
messages.push(toolMessage);
}
// Get the final response with the tool results
const finalResponse = await llmWithTool.invoke(messages);
console.log("Final response:", finalResponse);
} else {
// No tool calls were made
console.log("No tool calls were made.");
}
- Replace
<token>
with your refile API key and start generating PDFs!
How It Works
The integration follows these steps:
- Create the tool: The
createRefileTool
function creates a LangChain-compatible tool that connects to the Refile API
- Bind the tool to the model: Use LangChain’s
bindTools
method to give the model access to the PDF generation capability
- Process tool calls: When the model decides to generate a PDF, it makes a tool call which your code executes
- Return results: The final result includes the URL of the generated PDF
Customization Options
Want a different look? Just change these parameters when calling createRefileTool()
:
createRefileTool(
"your-api-key",
"basic", // theme: "modern", "basic"
"right", // page numbers: "center", "right", "left", "none"
"Letter" // page size: "A4", "Letter", "Legal", etc.
);
Remember to keep your API key safe by using environment variables in production and never exposing your key in client side code!
For a detailed explanation of the API and all configuration options, visit the API reference.