pip install uiform
First time here? Check our docs.
UiForm allows you to easily create document processing automations. Here is the general workflow:
sequenceDiagram
User ->> UiForm: File Upload
UiForm -->> UiForm: Preprocessing
UiForm ->> AI Provider: Request on your behalf
AI Provider -->> UiForm: Structured Generation
UiForm ->> Webhook: Send result
UiForm ->> User: Send Confirmation
We currently support OpenAI models.
You come with your own API key from your favorite AI provider, and we handle the rest.
UiForm solves three major challenges in document processing with LLMs:
- Universal Document Processing: Convert any file type (PDFs, Excel, emails, etc.) into LLM-ready format without writing custom parsers
- Structured, Schema-driven Extraction: Get consistent, reliable outputs using schema-based prompt engineering
- Automations: Create custom mailboxes and links to process documents at scale
We see it as building Stripe for document processing.
Our goal is to make the process of analyzing documents and unstructured data as easy and transparent as possible.
Many people haven't yet realized how powerful LLMs have become at document processing tasks - we're here to help unlock these capabilities.
To get started, install the uiform
package using pip:
pip install uiform
Then, create your API key on uiform.com and populate your env
variables with your API keys:
OPENAI_API_KEY=YOUR-API-KEY # Your AI provider API key. Compatible with OpenAI, Anthropic, xAI.
UIFORM_API_KEY=sk_xxxxxxxxx # Create your API key on https://www.uiform.com
Use the UiForm
client to convert your documents into messages and use your favorite model to analyze your document:
from uiform import UiForm
from openai import OpenAI
uiclient = UiForm()
doc_msg = uiclient.documents.create_messages(
document = "freight/booking_confirmation.jpg"
)
# Now you can use your favorite model to analyze your document
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=doc_msg.openai_messages + [
{
"role": "user",
"content": "Summarize the document"
}
]
)
We use a standard JSON Schema with custom annotations (X-SystemPrompt
, X-LLMDescription
, and X-ReasoningDescription
) as a prompt-engineering framework for the extraction process.
These annotations help guide the LLM's behavior and improve extraction accuracy. You can learn more about these in our JSON Schema documentation.
from uiform import UiForm
from openai import OpenAI
from pydantic import BaseModel, Field, ConfigDict
uiclient = UiForm()
doc_msg = uiclient.documents.create_messages(
document = "document_1.xlsx"
)
class CalendarEvent(BaseModel):
model_config = ConfigDict(json_schema_extra = {"X-SystemPrompt": "You are a useful assistant."})
name: str = Field(...,
description="The name of the calendar event.",
json_schema_extra={"X-LLMDescription": "Provide a descriptive and concise name for the event."}
)
date: str = Field(...,
description="The date of the calendar event in ISO 8601 format.",
json_schema_extra={
'X-ReasoningDescription': 'The user can mention it in any format, like **next week** or **tomorrow**. Infer the right date format from the user input.',
}
)
print("Equivalent JSON Schema:",CalendarEvent.model_json_schema())
schema_obj =Schema(
pydantic_model = CalendarEvent
)
# Now you can use your favorite model to analyze your document
client = OpenAI()
completion = client.beta.chat.completions.parse(
model="gpt-4o",
messages=schema_obj.openai_messages + doc_msg.openai_messages,
response_format=schema_obj.inference_pydantic_model
)
print("Extracted data with the reasoning fields:", completion.choices[0].message.content)
# Validate the response against the original schema if you want to remove the reasoning fields
assert completion.choices[0].message.content is not None
extraction = schema_obj.pydantic_model.model_validate_json(
completion.choices[0].message.content
)
print("Extracted data without the reasoning fields:", extraction)
And that's it ! You can start processing documents at scale ! You have 1000 free requests to get started, and you can subscribe to the pro plan to get more.
But this minimalistic example is just the beginning. Continue reading to learn more about how to use UiForm to its full potential.
- Prompt Engineering Guide
- General Concepts
- Create mailboxes
- Create links
- Finetuning (coming soon)
- Prompt optimization (coming soon)
- Data-Labelling with our AI-powered annotator (coming soon)
You can view minimal notebooks that demonstrate how to use UiForm to process documents:
- Mailbox creation quickstart
- Upload Links creation quickstart
- Document Extractions quickstart
- Document Extractions quickstart - Async
Let's create the future of document processing together!
Join our discord community to share tips, discuss best practices, and showcase what you build. Or just tweet at us.
We can't wait to see how you'll use UiForm.
We publicly share our Roadmap with the community. Please open an issue or contact us on X if you have suggestions or ideas.
- node client with ZOD
- Make a json-schema zoo
- Offer tools to display tokens usage to our users
- Launch the data-labelling API (Dataset Upload / Creation / Management / Labelling / Distillation)
- Launch the data-labelling platform : A web app based on the data-labelling API with a nice UI
- Launch the prompt-optimisation sdk
- Launch the finetuning sdk