-
Notifications
You must be signed in to change notification settings - Fork 531
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add cookbook recipe to extract event details from text (#1269)
- Loading branch information
Showing
3 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
This recipe demonstrates how to use the `outlines` library to extract structured event details from a text message. | ||
We will extract the title, location, and start date and time from messages like the following: | ||
|
||
```plaintext | ||
Hello Kitty, my grandmother will be here, I think it's better to postpone | ||
our appointment to review math lessons to next Monday at 2pm at the same | ||
place, 3 avenue des tanneurs, one hour will be enough see you 😘 | ||
``` | ||
|
||
Let see how to extract the event details from the message with the MLX | ||
library dedicated to Apple Silicon processor (M series). | ||
|
||
```python | ||
--8<-- "docs/cookbook/extract_event_details.py" | ||
``` | ||
|
||
The output will be: | ||
|
||
```plaintext | ||
Today: Saturday 16 November 2024 and it's 10:55 | ||
``` | ||
|
||
and the extracted event information will be: | ||
|
||
```json | ||
{ | ||
"title":"Math Review", | ||
"location":"3 avenue des tanneurs", | ||
"start":"2024-11-22T14:00:00Z" | ||
} | ||
``` | ||
|
||
|
||
To find out more about this use case, we recommend the project developped by [Joseph Rudoler](https://x.com/JRudoler) the [ICS Generator](https://github.com/jrudoler/ics-generator) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
from datetime import datetime | ||
|
||
from pydantic import BaseModel, Field | ||
|
||
from outlines import generate, models | ||
|
||
# Load the model | ||
model = models.mlxlm("mlx-community/Hermes-3-Llama-3.1-8B-8bit") | ||
|
||
|
||
# Define the event schema using Pydantic | ||
class Event(BaseModel): | ||
title: str = Field(description="title of the event") | ||
location: str | ||
start: datetime = Field( | ||
default=None, description="date of the event if available in iso format" | ||
) | ||
|
||
|
||
# Get the current date and time | ||
now = datetime.now().strftime("%A %d %B %Y and it's %H:%M") | ||
|
||
# Define the prompt | ||
prompt = f""" | ||
Today's date and time are {now} | ||
Given a user message, extract information of the event like date and time in iso format, location and title. | ||
If the given date is relative, think step by step to find the right date. | ||
Here is the message: | ||
""" | ||
|
||
# Sample message | ||
message = """Hello Kitty, my grandmother will be here , I think it's better to postpone our | ||
appointment to review math lessons to next Friday at 2pm at the same place, 3 avenue des tanneurs, I think that one hour will be enough | ||
see you 😘 """ | ||
|
||
# Create the generator | ||
generator = generate.json(model, Event) | ||
|
||
# Extract the event information | ||
event = generator(prompt + message) | ||
|
||
# Print the current date and time | ||
print(f"Today: {now}") | ||
|
||
# Print the extracted event information in JSON format | ||
print(event.json()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters