| """ |
| Show how to use custom outputs. |
| |
| @dev You need to add OPENAI_API_KEY to your environment variables. |
| """ |
|
|
| import os |
| import sys |
| from typing import List |
|
|
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
| import asyncio |
|
|
| from dotenv import load_dotenv |
| from langchain_openai import ChatOpenAI |
| from pydantic import BaseModel |
|
|
| from browser_use import ActionResult, Agent, Controller |
|
|
| load_dotenv() |
|
|
|
|
| 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()) |
|
|