| --- | |
| title: "Output Format" | |
| description: "The default is text. But you can define a structured output format to make post-processing easier." | |
| icon: "code" | |
| --- | |
| ## Custom output format | |
| With [this example](https://github.com/browser-use/browser-use/blob/main/examples/features/custom_output.py) you can define what output format the agent should return to you. | |
| ```python | |
| from pydantic import BaseModel | |
| # Define the output format as a Pydantic model | |
| class Post(BaseModel): | |
| post_title: str | |
| post_url: str | |
| num_comments: int | |
| hours_since_post: int | |
| class Posts(BaseModel): | |
| posts: List[Post] | |
| controller = Controller(output_model=Posts) | |
| async def main(): | |
| task = 'Go to hackernews show hn and give me the first 5 posts' | |
| model = ChatOpenAI(model='gpt-4o') | |
| agent = Agent(task=task, llm=model, controller=controller) | |
| history = await agent.run() | |
| result = history.final_result() | |
| if result: | |
| parsed: Posts = Posts.model_validate_json(result) | |
| for post in parsed.posts: | |
| print('\n--------------------------------') | |
| print(f'Title: {post.post_title}') | |
| print(f'URL: {post.post_url}') | |
| print(f'Comments: {post.num_comments}') | |
| print(f'Hours since post: {post.hours_since_post}') | |
| else: | |
| print('No result') | |
| if __name__ == '__main__': | |
| asyncio.run(main()) | |
| ``` |