Compare commits

..
102 Commits
Author SHA1 Message Date
MervinPraison 911e991f84 chore: bump praisonai and praisonaiagents package versions 2025-06-28 09:44:34 +01:00
Mervin Praison 8164dfd1cf Merge pull request #708 from MervinPraison/claude/issue-482-20250628_070041
fix: Add base_url and api_key parameters to Agent class for Ollama support
2025-06-28 09:37:36 +01:00
Mervin Praison 461bac900d Merge pull request #707 from MervinPraison/claude/issue-67-20250628_070140
feat: add --file/-f flag for file input support
2025-06-28 09:34:01 +01:00
claude[bot]andMervin Praison 67e02cd88a feat: add --file/-f flag for file input support
Implements file input functionality allowing users to pass file contents
as input to PraisonAI commands. The file content is appended to the
prompt similar to how stdin input is handled.

Key changes:
- Added --file/-f argument to CLI parser
- Added read_file_if_provided() method for safe file reading
- Updated prompt handling to combine file input with commands/stdin
- Maintains full backward compatibility

Usage examples:
- praisonai "Analyze this" --file data.txt
- praisonai -f prompt.txt
- echo "context" | praisonai "Process" --file input.txt

Closes #67

Co-authored-by: Mervin Praison <[email protected]>
2025-06-28 07:12:52 +00:00
claude[bot]andMervin Praison 4f7b6ed9f8 fix: Add base_url and api_key parameters to Agent class for Ollama support
This allows users to connect to remote Ollama instances without relying on environment variables.

Usage:
```python
agent = Agent(
    llm="ollama/llama3.2",
    base_url="http://remote-host:11434"
)
```

Fixes #482

Co-authored-by: Mervin Praison <[email protected]>
2025-06-28 07:06:54 +00:00
MervinPraison c9d31385ec chore: bump praisonai to v2.2.35 and praisonaiagents to v0.0.108 2025-06-27 13:25:23 +01:00
Mervin Praison 92fae803e8 Merge pull request #702 from MervinPraison/claude/issue-619-20250627_112552
fix: add missing 'items' attribute for MCP array parameters
2025-06-27 12:52:02 +01:00
Mervin Praison 4d867a9ff1 Merge pull request #701 from MervinPraison/claude/issue-615-20250627_112613
fix: add stream parameter to disable streaming for custom LLMs
2025-06-27 12:50:07 +01:00
Mervin Praison 1fe43d9c9e Merge pull request #700 from MervinPraison/claude/issue-616-20250627_112603
fix: ensure all custom tools are available in chatbot integration
2025-06-27 12:49:03 +01:00
Mervin Praison acdcabcba7 Rename test_custom_tools_fix.py to src/praisonai/tests/test_custom_tools_fix.py 2025-06-27 12:48:54 +01:00
claude[bot]andMervin Praison 5f8c87f2cb fix: add stream parameter to disable streaming for custom LLMs
- Add stream parameter to Agent class with default True
- Add stream parameter to LLM get_response and get_response_async methods
- Replace hardcoded stream=True values with configurable stream parameter
- Maintains backward compatibility while allowing stream disabling

Fixes #615

Co-authored-by: Mervin Praison <[email protected]>
2025-06-27 11:46:35 +00:00
Mervin Praison 7907cd0913 Merge pull request #699 from MervinPraison/claude/issue-620-20250627_112541
fix: enable custom tools in chat interface
2025-06-27 12:45:40 +01:00
claude[bot]andMervin Praison 298a5b2b65 fix: enable custom tools in chat interface
- Add custom tool loading from tools.py
- Extend tools list to include both Tavily and custom tools  
- Update tool handling to work with any available tools
- Fix function calling to handle different parameter signatures
- Add proper error handling for sync/async functions
- Fix AsyncWebCrawler typo

Fixes #620

Co-authored-by: Mervin Praison <[email protected]>
2025-06-27 11:34:05 +00:00
claude[bot]andMervin Praison 7d6bd0ffeb fix: ensure all custom tools are available in chatbot integration
Previously, when agents were integrated into the chatbot UI, only the last
tool in the tools list was available due to the agent.tools assignment
being inside the tool loading loop. This caused the tools to be overwritten
on each iteration.

This commit moves the tool assignment outside the loop, ensuring all tools
are collected before being assigned to the agent. This fixes the issue
where custom tools were not working properly in the chatbot context while
maintaining full backward compatibility.

Fixes #616

Co-authored-by: Mervin Praison <[email protected]>
2025-06-27 11:32:37 +00:00
claude[bot]andMervin Praison 19d4999021 fix: add missing 'items' attribute for MCP array parameters
This fixes an issue where MCP tools with array parameters were not working
correctly with OpenAI-compatible LLMs. The tools were missing the required
'items' attribute that specifies the type of elements in the array.

- Added _fix_array_schemas() method to recursively fix array schemas
- Updated to_openai_tool() in both mcp.py and mcp_sse.py to apply the fix
- Maintains backward compatibility by preserving existing schemas

Fixes #619

Co-authored-by: Mervin Praison <[email protected]>
2025-06-27 11:31:28 +00:00
MervinPraison 8a309dd4b2 Merge branch 'main' of https://github.com/MervinPraison/PraisonAI 2025-06-27 12:04:19 +01:00
MervinPraison 54805722cd refactor: migrate Claude action to OAuth and simplify filesystem agent implementation 2025-06-27 12:04:18 +01:00
Mervin Praison 1b52f4ce5f Merge pull request #681 from Dhivya-Bharathy/add-personalized_learning_assistant
Add personalized learning assistant
2025-06-24 07:17:19 +01:00
Mervin Praison ec3a8d1863 Merge pull request #683 from Dhivya-Bharathy/add-github_repo_analyzer_agent
Add GitHub repo analyzer agent
2025-06-24 07:17:11 +01:00
Mervin Praison 41157e1f31 Merge pull request #684 from Dhivya-Bharathy/add-github-repo-analyzer-agent
Add GitHub repo analyzer agent
2025-06-24 07:17:08 +01:00
Mervin Praison 31078c38a0 Merge pull request #685 from Dhivya-Bharathy/add-Flow_Intelligent_Agent_PraisonAI
Add Flow_Intelligent_Agent_PraisonAI
2025-06-24 07:15:17 +01:00
devops-vestradata a48a0aca22 Move Flow_Intelligent_Agent_PraisonAI.py to examples/python/tools/exa-tool/ 2025-06-24 11:45:07 +05:30
devops-vestradata bf39bf7e8b Merge remote 'origin/main' into add-Flow_Intelligent_Agent_PraisonAI 2025-06-24 11:36:41 +05:30
devops-vestradata e9e1086afe Add Flow Intelligent Agent with custom tool 2025-06-24 11:32:10 +05:30
DhivyaBharathy 0554796b45 Add files via upload 2025-06-24 11:27:15 +05:30
devops-vestradata 7e2f17e047 Add GitHub Repo Analyzer Agent example 2025-06-23 16:41:57 +05:30
DhivyaBharathy 04457f5bc6 Add files via upload 2025-06-23 16:33:57 +05:30
DhivyaBharathy-web 250c56bbaa Add github_repo_analyzer_agent notebook 2025-06-23 11:02:14 +00:00
devops-vestradata a01f55cdd2 Add AI-Powered Learning Assistant example using praisonaiagents 2025-06-23 14:49:39 +05:30
devops-vestradata f4df72dfc4 Add learning assistant example 2025-06-23 14:46:48 +05:30
DhivyaBharathy 291c0b6b35 Add files via upload 2025-06-23 14:39:44 +05:30
DhivyaBharathy-web d7ad0dfaf4 Add personalized_learning_assistant notebook 2025-06-23 09:07:34 +00:00
Mervin Praison 3435b14a60 Merge pull request #678 from DhivyaBharathy-web/add-YouTube_Influencer_Intelligence_Agent
Add you tube influencer intelligence agent
2025-06-23 07:49:02 +01:00
Mervin Praison 26c89de3b7 Merge pull request #679 from DhivyaBharathy-web/add-voiGno_Restaurant_Agent_PraisonAI
Add voi gno restaurant agent praison ai
2025-06-23 07:48:52 +01:00
Mervin Praison 467e07fb8b Merge pull request #680 from DhivyaBharathy-web/add-Fuel_Emission_Agent_Intelligence_Agent
Add fuel emission agent intelligence agent
2025-06-23 07:47:50 +01:00
Mervin Praison 1f64210663 Merge pull request #677 from DhivyaBharathy-web/add-Home_Buying_Real_Estate_Agent
Add home buying real estate agent
2025-06-23 07:47:40 +01:00
DhivyaBharathy 8e87f2767f Add files via upload 2025-06-23 12:14:54 +05:30
DhivyaBharathy-web b74dbcd772 Add Fuel_Emission_Agent_Intelligence_Agent notebook 2025-06-23 06:43:19 +00:00
DhivyaBharathy 2ca306d6c9 Update E_commerce_Shopping_Assistant.ipynb 2025-06-22 19:18:11 +05:30
DhivyaBharathy 0ae294f528 Update E_commerce_Shopping_Assistant.ipynb 2025-06-22 19:16:56 +05:30
DhivyaBharathy d7b371fb3f Add files via upload 2025-06-22 18:31:02 +05:30
DhivyaBharathy-web 557f680b04 Add voiGno_Restaurant_Agent_PraisonAI notebook 2025-06-22 12:50:36 +00:00
DhivyaBharathy-web 80ceb59767 Add YouTube_Influencer_Intelligence_Agent notebook 2025-06-22 12:47:46 +00:00
DhivyaBharathy-web e2fc2752e0 Add Home_Buying_Real_Estate_Agent notebook 2025-06-22 12:45:21 +00:00
DhivyaBharathy f6ca39469f Delete examples/cookbooks/voiGno_Restaurant_Agent_PraisonAI.ipynb 2025-06-22 17:56:46 +05:30
DhivyaBharathy bd061bf555 Delete examples/cookbooks/YouTube_Influencer_Intelligence_Agent.ipynb 2025-06-22 17:56:32 +05:30
DhivyaBharathy c3f668ebef Delete examples/cookbooks/Home_Buying_Real_Estate_Agent.ipynb 2025-06-22 17:56:16 +05:30
DhivyaBharathy 1491ebf00a Delete examples/cookbooks/E_commerce_Shopping_Assistant.ipynb 2025-06-22 17:56:00 +05:30
DhivyaBharathy 59eec99ae4 Delete examples/cookbooks/Cognitive_Assistant_Agent_Team.ipynb 2025-06-22 17:55:47 +05:30
DhivyaBharathy 13d90399e5 Delete examples/cookbooks/Crypto_Research_Agent_Intelligence_Agent.ipynb 2025-06-22 17:55:31 +05:30
DhivyaBharathy e2a707509e Add files via upload 2025-06-22 17:53:57 +05:30
MervinPraison a432135e75 chore: update praisonai package version from 2.2.33 to 2.2.34 across Docker and deployment files 2025-06-21 07:22:29 +01:00
MervinPraison 17e620d9e0 refactor: migrate workflow process to sequential and enhance result handling with debug logging 2025-06-21 07:19:34 +01:00
MervinPraison 17ceaad435 Merge branch 'main' of https://github.com/MervinPraison/PraisonAI 2025-06-21 06:40:45 +01:00
MervinPraison fe3ba3a916 feat: add weather server and Ollama LLM integration with test files 2025-06-21 06:40:44 +01:00
Mervin Praison 1b9c9b78c9 Merge pull request #670 from DhivyaBharathy-web/add-Meta_LLaMA3_SyntheticData
Add  Meta Synthetic Data Generator (LLaMA 3.2 - 3B)
2025-06-20 23:53:33 +02:00
Mervin Praison 1051f3a705 Merge pull request #671 from DhivyaBharathy-web/add-Sesame_CSM_1B_TTS
Add  Sesame CSM (1B) - TTS Model
2025-06-20 23:53:18 +02:00
Mervin Praison 982473ce08 Merge pull request #673 from DhivyaBharathy-web/add-KnowledgeAgent_PraisonAI
Add knowledge agent praison ai
2025-06-20 23:52:59 +02:00
DhivyaBharathy 09de1f1405 Add files via upload 2025-06-20 10:18:42 +05:30
DhivyaBharathy ee21add0ef Delete examples/cookbooks/KnowledgeAgent_PraisonAI.ipynb 2025-06-20 10:18:01 +05:30
DhivyaBharathy dcc2f899e7 Add files via upload 2025-06-20 10:16:59 +05:30
DhivyaBharathy 362d6e62be Add files via upload 2025-06-18 13:14:09 +05:30
DhivyaBharathy-web d2a12c5fc6 Add Sesame_CSM_1B_TTS notebook 2025-06-18 07:37:58 +00:00
DhivyaBharathy-web 993c342209 Add Meta_LLaMA3_SyntheticData notebook 2025-06-18 07:36:01 +00:00
MervinPraison 218370fef8 Merge branch 'main' of https://github.com/MervinPraison/PraisonAI 2025-06-17 11:09:41 +01:00
MervinPraison 117969e8f6 Update Claude workflow to simplify action references by using version tags, enhancing clarity and maintainability. 2025-06-17 11:09:40 +01:00
DhivyaBharathy aa3282cabd Add files via upload 2025-06-17 15:29:02 +05:30
Mervin Praison 914532028d Merge pull request #669 from DhivyaBharathy-web/add-Phi_3_Medium_Conversational
Add Phi_3_Medium_Conversational notebook
2025-06-17 11:56:33 +02:00
DhivyaBharathy-web 83d808ddc1 Add Phi_3_Medium_Conversational notebook 2025-06-17 09:54:35 +00:00
Mervin Praison 3cf922f36c Merge pull request #667 from DhivyaBharathy-web/add-Phi_4_14B_GRPO
Add Phi_4_14B_GRPO notebook
2025-06-17 11:52:37 +02:00
Mervin Praison b5956e0d39 Merge pull request #668 from DhivyaBharathy-web/add-Phi_3_5_Mini_Conversational
Add Phi_3_5_Mini_Conversational notebook
2025-06-17 11:52:27 +02:00
Mervin Praison 07952d1b61 Merge pull request #666 from DhivyaBharathy-web/add-Phi_4_Conversational
Add Phi_4_Conversational notebook
2025-06-17 11:52:17 +02:00
DhivyaBharathy-web 9eedd55b19 Add Phi_3_5_Mini_Conversational notebook 2025-06-17 09:49:45 +00:00
DhivyaBharathy-web 3b31afb270 Add Phi_4_14B_GRPO notebook 2025-06-17 09:45:50 +00:00
DhivyaBharathy-web c77f3c7363 Add Phi_4_Conversational notebook 2025-06-17 09:40:28 +00:00
Mervin Praison c808ce29e4 Merge pull request #632 from DhivyaBharathy-web/add-qwen-chatbot-agent
Add qwen chatbot agent
2025-06-17 00:24:41 +02:00
Mervin Praison ca70d34ffe Merge pull request #659 from DhivyaBharathy-web/add-llama3-2-11b-vision-agent
Add llama3 2 11b vision agent
2025-06-17 00:20:23 +02:00
Mervin Praison 96563ffb04 Merge pull request #662 from DhivyaBharathy-web/add-Pixtral_12B_Vision_Model
Add pixtral 12 b vision model
2025-06-17 00:20:11 +02:00
Mervin Praison d7a89a5b5d Merge pull request #663 from DhivyaBharathy-web/add-Qwen2-5-VL_7B_Vision_Model
Add qwen2 5 vl 7 b vision model
2025-06-17 00:20:02 +02:00
DhivyaBharathy-web 7d0afb062e Resolve conflict by deleting Mistral notebook 2025-06-16 11:44:20 +00:00
DhivyaBharathy-web 3ede63d3d9 Resolve conflict by deleting Mistral notebook 2025-06-16 11:30:59 +00:00
DhivyaBharathy-web db58770b46 Resolve conflict by deleting Mistral notebook 2025-06-16 11:11:32 +00:00
MervinPraison 9066668121 Refactor Claude Code Action to streamline prompt handling by reading directly from the prompt file, enhancing clarity and efficiency in command execution. 2025-06-16 09:57:01 +01:00
MervinPraison 8e5b6a9d38 Refactor Claude Code Action by removing unnecessary timeout and custom instructions handling, streamlining command argument preparation for improved clarity and efficiency. 2025-06-16 09:41:00 +01:00
MervinPraison b16086c17d Update Claude Code Action to enhance input options and streamline prompt extraction from GitHub context. Remove redundant GitHub token and MCP installation steps in workflow for improved clarity and efficiency. 2025-06-16 09:39:06 +01:00
MervinPraison f50a2448df Refactor Claude Code Action to auto-generate prompts from GitHub context when no input is provided, improving usability and functionality. Update workflow to remove redundant prompt generation step, streamlining the process. 2025-06-16 09:13:23 +01:00
MervinPraison b1ff7a9500 Update GitHub Actions workflow by standardising GitHub token reference and adding a step to generate prompts from GitHub context, enhancing functionality and clarity. 2025-06-16 09:10:37 +01:00
DhivyaBharathy c4829d45a4 Merge branch 'main' into add-qwen-chatbot-agent 2025-06-16 13:04:42 +05:30
DhivyaBharathy f4479fa1f4 Add files via upload 2025-06-16 13:00:35 +05:30
DhivyaBharathy-web f008aa1c3b Add Qwen2.5-VL_7B_Vision_Model Agent notebook 2025-06-16 07:20:55 +00:00
MervinPraison 3abb084209 Refactor Claude Code Action by consolidating functionality into a composite action, removing Dockerfile and entrypoint script, and enhancing input descriptions for clarity and usability. 2025-06-16 08:16:05 +01:00
DhivyaBharathy-web 617efcc96d Add LLaMA3-2_11B_Vision Agent notebook 2025-06-16 07:15:16 +00:00
MervinPraison 41bec67b51 Refine Claude workflow by directly executing the 'claude' script with Node to bypass BusyBox environment issues, enhancing reliability in CI execution. 2025-06-16 07:59:11 +01:00
MervinPraison 91361eee17 Enhance Claude workflow by adding debugging steps for environment verification, checking for the presence of the 'claude' command, and implementing automatic installation if not found, ensuring smoother execution in CI mode. 2025-06-16 07:56:35 +01:00
MervinPraison aa1356629b Update Claude workflow by modifying Docker image reference format, enhancing environment variable debugging, and updating GitHub token reference for improved clarity and reliability. 2025-06-16 07:54:53 +01:00
MervinPraison ac86a8dd76 Fix GHCR authentication issue in Claude workflow by updating login method and adding a logout step for improved reliability. 2025-06-16 07:50:37 +01:00
MervinPraison ab679e040e Add Docker pull test step to Claude workflow for verification of successful image retrieval after login. 2025-06-16 07:49:57 +01:00
MervinPraison c2fded7a89 Refactor Claude workflow by removing redundant debugging and testing steps, updating GitHub token usage for improved security and clarity. 2025-06-16 07:45:03 +01:00
DhivyaBharathy 1a306988cf Delete examples/cookbooks/Mistral_v0_3_Conversational_Demo.ipynb 2025-06-11 16:22:41 +05:30
DhivyaBharathy f4cb62a288 Merge branch 'main' into add-qwen-chatbot-agent 2025-06-10 11:55:04 +05:30
DhivyaBharathy dde6ec4a6a Update qwen_colab_agent.ipynb 2025-06-10 11:52:40 +05:30
DhivyaBharathy-web c8b2414f5b Add Qwen Agent notebook 2025-06-10 06:17:23 +00:00
72 changed files with 15500 additions and 6542 deletions

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
---
name: Bug report
about: Create a report to help us improve
title: '[BUG] '
labels: bug
assignees: ''
---
## Environment
- Provider (select one):
- [ ] Anthropic
- [ ] OpenAI
- [ ] Google Vertex AI
- [ ] AWS Bedrock
- [ ] Other: <!-- specify -->
- PraisonAI version: <!-- if known -->
- Operating System: <!-- e.g. macOS 14.3, Windows 11, Ubuntu 22.04 -->
## Full Code
<!-- Full code that reproduces the bug -->
## Steps to Reproduce
1. <!-- First step -->
2. <!-- Second step -->
3. <!-- And so on... -->
## Expected Behavior
<!-- What you expected to happen -->
## Actual Behavior
<!-- What actually happened -->
## Additional Context
<!-- Add any other context about the problem here, such as screenshots, logs, etc. -->
@@ -1,9 +0,0 @@
FROM node:20-alpine
RUN npm install -g @anthropic-ai/claude-code
WORKDIR /app
COPY entrypoint.sh .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]
+232 -12
View File
@@ -1,20 +1,240 @@
name: "Claude Code Action"
description: "Custom Claude Code runner for PraisonAI"
description: "Run Claude Code in GitHub Actions workflows"
inputs:
anthropic_api_key:
required: true
description: "Anthropic API key"
required: false
github_token:
required: true
description: "GitHub token for repo access"
description: "GitHub token for Claude to operate with"
required: false
default: ${{ github.token }}
trigger_phrase:
description: "The trigger phrase to look for in comments, issue/PR bodies, and issue titles"
required: false
default: "@claude"
assignee_trigger:
description: "The assignee username that triggers the action (e.g. @claude). Only used for issue assignment"
required: false
max_turns:
description: "Maximum number of conversation turns Claude can take"
required: false
timeout_minutes:
description: "Timeout in minutes for execution"
required: false
default: "30"
model:
description: "Model to use (provider-specific format required for Bedrock/Vertex)"
required: false
use_bedrock:
description: "Use Amazon Bedrock with OIDC authentication instead of direct Anthropic API"
required: false
default: "false"
use_vertex:
description: "Use Google Vertex AI with OIDC authentication instead of direct Anthropic API"
required: false
default: "false"
allowed_tools:
description: "Additional tools for Claude to use (the base GitHub tools will always be included)"
required: false
default: ""
disallowed_tools:
description: "Tools that Claude should never use"
required: false
default: ""
custom_instructions:
description: "Additional custom instructions to include in the prompt for Claude"
required: false
default: ""
mcp_config:
description: "Additional MCP configuration (JSON string) that merges with the built-in GitHub MCP servers"
required: false
default: ""
claude_env:
description: "Custom environment variables to pass to Claude Code execution (YAML format)"
required: false
default: ""
direct_prompt:
description: "Direct prompt for Claude to execute automatically without needing a trigger (for automated workflows)"
required: false
runs:
using: "docker"
image: "ghcr.io/mervinpraison/praisonai-claudecode:latest"
env:
ANTHROPIC_API_KEY: ${{ inputs.anthropic_api_key }}
GITHUB_TOKEN: ${{ inputs.github_token }}
args:
- "--anthropic-api-key=${{ inputs.anthropic_api_key }}"
- "--github-token=${{ inputs.github_token }}"
using: "composite"
steps:
- name: Install Claude Code
shell: bash
run: npm install -g @anthropic-ai/claude-code
- name: Install GitHub MCP Server
shell: bash
run: |
claude mcp add-json github '{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server:sha-ff3036d"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${{ inputs.github_token }}"
}
}'
- name: Extract GitHub Context and Create Prompt
shell: bash
id: prepare_context
run: |
echo "🔍 Extracting GitHub context from event: ${{ github.event_name }}"
# Function to check for trigger phrase
check_trigger() {
local text="$1"
local trigger="${{ inputs.trigger_phrase }}"
if [[ "$text" == *"$trigger"* ]]; then
return 0
fi
return 1
}
# Extract context based on event type
TRIGGER_FOUND="false"
USER_REQUEST=""
CONTEXT_INFO=""
case "${{ github.event_name }}" in
"issue_comment")
COMMENT_BODY="${{ github.event.comment.body }}"
ISSUE_TITLE="${{ github.event.issue.title }}"
ISSUE_NUMBER="${{ github.event.issue.number }}"
if check_trigger "$COMMENT_BODY"; then
TRIGGER_FOUND="true"
USER_REQUEST="$COMMENT_BODY"
CONTEXT_INFO="Issue Comment on #$ISSUE_NUMBER: $ISSUE_TITLE"
fi
;;
"pull_request_review_comment")
COMMENT_BODY="${{ github.event.comment.body }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_NUMBER="${{ github.event.pull_request.number }}"
if check_trigger "$COMMENT_BODY"; then
TRIGGER_FOUND="true"
USER_REQUEST="$COMMENT_BODY"
CONTEXT_INFO="PR Comment on #$PR_NUMBER: $PR_TITLE"
fi
;;
"pull_request_review")
REVIEW_BODY="${{ github.event.review.body }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_NUMBER="${{ github.event.pull_request.number }}"
if check_trigger "$REVIEW_BODY"; then
TRIGGER_FOUND="true"
USER_REQUEST="$REVIEW_BODY"
CONTEXT_INFO="PR Review on #$PR_NUMBER: $PR_TITLE"
fi
;;
"issues")
ISSUE_BODY="${{ github.event.issue.body }}"
ISSUE_TITLE="${{ github.event.issue.title }}"
ISSUE_NUMBER="${{ github.event.issue.number }}"
if check_trigger "$ISSUE_TITLE" || check_trigger "$ISSUE_BODY"; then
TRIGGER_FOUND="true"
USER_REQUEST="$ISSUE_BODY"
CONTEXT_INFO="Issue #$ISSUE_NUMBER: $ISSUE_TITLE"
elif [[ "${{ github.event.action }}" == "assigned" && -n "${{ inputs.assignee_trigger }}" ]]; then
ASSIGNEE="${{ github.event.assignee.login }}"
if [[ "$ASSIGNEE" == "${{ inputs.assignee_trigger }}" ]]; then
TRIGGER_FOUND="true"
USER_REQUEST="$ISSUE_BODY"
CONTEXT_INFO="Issue #$ISSUE_NUMBER assigned to $ASSIGNEE: $ISSUE_TITLE"
fi
fi
;;
esac
# Check for direct prompt override
if [[ -n "${{ inputs.direct_prompt }}" ]]; then
TRIGGER_FOUND="true"
USER_REQUEST="${{ inputs.direct_prompt }}"
CONTEXT_INFO="Automated GitHub workflow"
fi
if [[ "$TRIGGER_FOUND" != "true" ]]; then
echo "❌ No trigger phrase found or direct prompt provided. Exiting gracefully."
echo "SKIP_EXECUTION=true" >> $GITHUB_ENV
exit 0
fi
echo "✅ Trigger found! Context: $CONTEXT_INFO"
# Create comprehensive prompt
mkdir -p /tmp/claude-action
cat > /tmp/claude-action/github-context-prompt.txt << EOF
You are Claude Code, an AI assistant helping with GitHub workflows and code.
Repository: ${{ github.repository }}
Context: $CONTEXT_INFO
Event: ${{ github.event_name }}
User Request:
$USER_REQUEST
Please analyze the request and provide helpful assistance. You have access to repository tools and can help with:
- Code analysis and implementation
- GitHub workflows and automation
- Pull request reviews and feedback
- Issue resolution and bug fixes
- Documentation updates
- Testing and deployment
Respond naturally and helpfully to the user's request using the available tools.
EOF
echo "PROMPT_FILE=/tmp/claude-action/github-context-prompt.txt" >> $GITHUB_ENV
echo "SKIP_EXECUTION=false" >> $GITHUB_ENV
- name: Run Claude Code
if: env.SKIP_EXECUTION != 'true'
shell: bash
run: |
echo "🚀 Running Claude Code with GitHub context..."
# Build command arguments
CMD_ARGS=("-p" "--verbose" "--output-format" "stream-json")
# Add max turns if specified
if [[ -n "${{ inputs.max_turns }}" ]]; then
CMD_ARGS+=("--max-turns" "${{ inputs.max_turns }}")
fi
# Add allowed tools (include GitHub tools by default)
TOOLS="mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__search_issues,mcp__github__list_issues,mcp__github__create_comment,Read,Write,Edit,Bash"
if [[ -n "${{ inputs.allowed_tools }}" ]]; then
TOOLS="$TOOLS,${{ inputs.allowed_tools }}"
fi
CMD_ARGS+=("--allowedTools" "$TOOLS")
# Add disallowed tools
if [[ -n "${{ inputs.disallowed_tools }}" ]]; then
CMD_ARGS+=("--disallowedTools" "${{ inputs.disallowed_tools }}")
fi
echo "📝 Executing Claude Code with prompt from file..."
# Execute Claude Code with timeout, using stdin for the prompt
TIMEOUT_SECONDS=$((${{ inputs.timeout_minutes }} * 60))
timeout $TIMEOUT_SECONDS claude "${CMD_ARGS[@]}" < "${{ env.PROMPT_FILE }}"
echo "✅ Claude Code execution completed"
env:
ANTHROPIC_API_KEY: ${{ inputs.anthropic_api_key }}
GITHUB_TOKEN: ${{ inputs.github_token }}
@@ -1,21 +0,0 @@
#!/bin/sh
set -e
echo "Running Claude Code in CI mode..."
# Extract GitHub context and create a smart prompt
PROMPT="Analyse the GitHub issue or PR context and generate a smart response based on the repository context."
# Set environment variables from arguments
export ANTHROPIC_API_KEY="${1#--anthropic-api-key=}"
export GITHUB_TOKEN="${2#--github-token=}"
# Verify environment variables
if [ -z "$ANTHROPIC_API_KEY" ] || [ -z "$GITHUB_TOKEN" ]; then
echo "Error: Required environment variables are not set"
exit 1
fi
# Run Claude with the prompt
claude -p "$PROMPT"
-117
View File
@@ -1,117 +0,0 @@
name: "Claude Code Action"
description: "Run Claude Code in GitHub Actions workflows"
inputs:
github_token:
description: "GitHub token with repo and issues permissions"
required: true
anthropic_api_key:
description: "Anthropic API key"
required: true
prompt:
description: "The prompt to send to Claude Code"
required: false
default: ""
prompt_file:
description: "Path to a file containing the prompt to send to Claude Code"
required: false
default: ""
allowed_tools:
description: "Comma-separated list of allowed tools for Claude Code to use"
required: false
default: ""
output_file:
description: "File to save Claude Code output to (optional)"
required: false
default: ""
timeout_minutes:
description: "Timeout in minutes for Claude Code execution"
required: false
default: "10"
install_github_mcp:
description: "Whether to install the GitHub MCP server"
required: false
default: "false"
runs:
using: "composite"
steps:
- name: Install Claude Code
shell: bash
run: npm install -g @anthropic-ai/claude-code
- name: Install GitHub MCP Server
if: inputs.install_github_mcp == 'true'
shell: bash
run: |
claude mcp add-json github '{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server:sha-ff3036d"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${{ inputs.GITHUB_TOKEN }}"
}
}'
- name: Prepare Prompt File
shell: bash
id: prepare_prompt
run: |
if [ -z "${{ inputs.prompt }}" ] && [ -z "${{ inputs.prompt_file }}" ]; then
echo "::error::Neither 'prompt' nor 'prompt_file' was provided. At least one is required."
exit 1
fi
if [ ! -z "${{ inputs.prompt_file }}" ]; then
if [ ! -f "${{ inputs.prompt_file }}" ]; then
echo "::error::Prompt file '${{ inputs.prompt_file }}' does not exist."
exit 1
fi
PROMPT_PATH="${{ inputs.prompt_file }}"
else
mkdir -p /tmp/claude-action
PROMPT_PATH="/tmp/claude-action/prompt.txt"
echo "${{ inputs.prompt }}" > "$PROMPT_PATH"
fi
if [ ! -s "$PROMPT_PATH" ]; then
echo "::error::Prompt is empty. Please provide a non-empty prompt."
exit 1
fi
echo "PROMPT_PATH=$PROMPT_PATH" >> $GITHUB_ENV
- name: Run Claude Code
shell: bash
id: run_claude
run: |
timeout_seconds=$((${{ inputs.timeout_minutes }} * 60))
if [ -z "${{ inputs.output_file }}" ]; then
timeout $timeout_seconds claude \
-p \
--verbose \
--output-format stream-json \
"$(cat ${{ env.PROMPT_PATH }})" \
${{ inputs.allowed_tools != '' && format('--allowedTools "{0}"', inputs.allowed_tools) || '' }}
else
timeout $timeout_seconds claude \
-p \
--verbose \
--output-format stream-json \
"$(cat ${{ env.PROMPT_PATH }})" \
${{ inputs.allowed_tools != '' && format('--allowedTools "{0}"', inputs.allowed_tools) || '' }} | tee output.txt
jq -s '.' output.txt > output.json
jq -r '.[-1].result' output.json > "${{ inputs.output_file }}"
echo "Complete output saved to output.json, final response saved to ${{ inputs.output_file }}"
fi
env:
ANTHROPIC_API_KEY: ${{ inputs.anthropic_api_key }}
GITHUB_TOKEN: ${{ inputs.github_token }}
@@ -0,0 +1,87 @@
name: "Claude Issue Triage Action"
description: "Automatically triage GitHub issues using Claude Code"
inputs:
timeout_minutes:
description: "Timeout in minutes for execution"
required: false
default: "5"
anthropic_api_key:
description: "Anthropic API key"
required: true
github_token:
description: "GitHub token with repo and issues permissions"
required: true
runs:
using: "composite"
steps:
- name: Checkout repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create prompt file
shell: bash
run: |
mkdir -p /tmp/claude-prompts
cat > /tmp/claude-prompts/claude-issue-triage-prompt.txt << 'EOF'
You're an issue triage assistant for GitHub issues. Your task is to analyze the issue and select appropriate labels from the provided list.
IMPORTANT: Don't post any comments or messages to the issue. Your only action should be to apply labels.
Issue Information:
- REPO: ${{ github.repository }}
- ISSUE_NUMBER: ${{ github.event.issue.number }}
TASK OVERVIEW:
1. First, fetch the list of labels available in this repository by running: `gh label list`. Run exactly this command with nothing else.
2. Next, use the GitHub tools to get context about the issue:
- You have access to these tools:
- mcp__github__get_issue: Use this to retrieve the current issue's details including title, description, and existing labels
- mcp__github__get_issue_comments: Use this to read any discussion or additional context provided in the comments
- mcp__github__update_issue: Use this to apply labels to the issue (do not use this for commenting)
- mcp__github__search_issues: Use this to find similar issues that might provide context for proper categorization and to identify potential duplicate issues
- mcp__github__list_issues: Use this to understand patterns in how other issues are labeled
- Start by using mcp__github__get_issue to get the issue details
3. Analyze the issue content, considering:
- The issue title and description
- The type of issue (bug report, feature request, question, etc.)
- Technical areas mentioned
- Severity or priority indicators
- User impact
- Components affected
4. Select appropriate labels from the available labels list provided above:
- Choose labels that accurately reflect the issue's nature
- Be specific but comprehensive
- Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority)
- Consider platform labels (android, ios) if applicable
- If you find similar issues using mcp__github__search_issues, consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue.
5. Apply the selected labels:
- Use mcp__github__update_issue to apply your selected labels
- DO NOT post any comments explaining your decision
- DO NOT communicate directly with users
- If no labels are clearly applicable, do not apply any labels
IMPORTANT GUIDELINES:
- Be thorough in your analysis
- Only select labels from the provided list above
- DO NOT post any comments to the issue
- Your ONLY action should be to apply labels using mcp__github__update_issue
- It's okay to not add any labels if none are clearly applicable
EOF
- name: Run Claude Code
uses: ./.github/actions/claude-code-action
with:
prompt_file: /tmp/claude-prompts/claude-issue-triage-prompt.txt
allowed_tools: "Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__search_issues,mcp__github__list_issues"
install_github_mcp: "true"
timeout_minutes: ${{ inputs.timeout_minutes }}
anthropic_api_key: ${{ inputs.anthropic_api_key }}
github_token: ${{ inputs.github_token }}
+2 -1
View File
@@ -26,13 +26,14 @@ jobs:
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
password: ${{ secrets.GH_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./.github/actions/claude-code-action
push: true
platforms: linux/amd64
tags: ghcr.io/mervinpraison/praisonai-claudecode:${{ inputs.version }}
cache-from: type=gha
cache-to: type=gha,mode=max
+23
View File
@@ -0,0 +1,23 @@
name: Claude Issue Triage
description: "Automatically triage GitHub issues using Claude Code"
on:
issues:
types: [opened]
jobs:
triage-issue:
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Run Claude Issue Triage
uses: ./.github/actions/claude-issue-triage-action
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}
+6 -49
View File
@@ -23,60 +23,17 @@ jobs:
pull-requests: read
issues: read
id-token: write
packages: read
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Debug Environment
run: |
echo "=== Environment Debug ==="
echo "GITHUB_ACTOR: $GITHUB_ACTOR"
echo "GITHUB_REPOSITORY: $GITHUB_REPOSITORY"
echo "GITHUB_REPOSITORY_OWNER: $GITHUB_REPOSITORY_OWNER"
echo "GITHUB_TOKEN exists: $([ -n "$GITHUB_TOKEN" ] && echo "yes" || echo "no")"
echo "GITHUB_TOKEN length: ${#GITHUB_TOKEN}"
- name: Check Package Visibility
run: |
echo "=== Checking Package Visibility ==="
curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/users/MervinPraison/packages/container/praisonai-claudecode" \
|| echo "Package API call failed"
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Test Docker Authentication
run: |
echo "=== Testing Docker Authentication ==="
echo "Checking ~/.docker/config.json"
cat ~/.docker/config.json | jq '.' || echo "No docker config found"
echo "=== Testing Registry Access ==="
curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
"https://ghcr.io/v2/" || echo "Registry access failed"
- name: Test Docker Pull
run: |
echo "=== Testing Docker Pull ==="
echo "Attempting to pull image: ghcr.io/mervinpraison/praisonai-claudecode:latest"
docker pull ghcr.io/mervinpraison/praisonai-claudecode:latest || echo "Pull failed with exit code: $?"
echo "=== Checking Docker Images ==="
docker images | grep praisonai-claudecode || echo "No images found"
- name: Run Claude Code
- name: Run Claude Code (OAuth)
id: claude
uses: ./.github/actions/claude-code-action
uses: grll/claude-code-action@beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}
use_oauth: true
claude_access_token: ${{ secrets.CLAUDE_ACCESS_TOKEN }}
claude_refresh_token: ${{ secrets.CLAUDE_REFRESH_TOKEN }}
claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
flask \
"praisonai>=2.2.33" \
"praisonai>=2.2.36" \
"praisonai[api]" \
gunicorn \
markdown
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.2.33" \
"praisonai>=2.2.36" \
"praisonai[chat]" \
"embedchain[github,youtube]"
+1 -1
View File
@@ -20,7 +20,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.2.33" \
"praisonai>=2.2.36" \
"praisonai[ui]" \
"praisonai[chat]" \
"praisonai[realtime]" \
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.2.33" \
"praisonai>=2.2.36" \
"praisonai[ui]" \
"praisonai[crewai]"
+2 -2
View File
@@ -121,7 +121,7 @@ healthcheck:
## 📦 Package Versions
All Docker images use consistent, up-to-date versions:
- PraisonAI: `>=2.2.33`
- PraisonAI: `>=2.2.36`
- PraisonAI Agents: `>=0.0.92`
- Python: `3.11-slim`
@@ -218,7 +218,7 @@ docker-compose up -d
### Version Pinning
To use specific versions, update the Dockerfile:
```dockerfile
RUN pip install "praisonai==2.2.33" "praisonaiagents==0.0.92"
RUN pip install "praisonai==2.2.36" "praisonaiagents==0.0.92"
```
## 🌐 Production Deployment
-30
View File
@@ -1,30 +0,0 @@
framework: ag2
topic: "Research the latest developments in AI agents"
# Install: pip install "praisonai[ag2]"
# Run: praisonai --framework ag2 examples/ag2/ag2_basic.yaml
# or praisonai run examples/ag2/ag2_basic.yaml --framework ag2
roles:
research_agent:
role: "AI Research Specialist"
goal: "Research and summarise the latest developments in AI agent frameworks"
backstory: |
You are an experienced AI researcher with deep knowledge of multi-agent
systems, large language models, and the latest trends in AI tooling.
You excel at synthesising complex technical topics into clear summaries.
tasks:
research_task:
description: |
Research and summarise the latest developments in AI agent frameworks
for the topic: {topic}
Focus on:
1. Key frameworks and their unique capabilities
2. Recent innovations and improvements
3. Community adoption and ecosystem growth
4. Practical use cases and success stories
expected_output: |
A concise research summary covering the key developments,
major frameworks, and practical insights. Include 3-5 bullet
points of the most important findings.
-42
View File
@@ -1,42 +0,0 @@
framework: ag2
topic: "Cloud-native AI deployment strategies on AWS"
# AG2 exclusive feature: native AWS Bedrock support via LLMConfig(api_type="bedrock")
#
# Prerequisites:
# pip install "praisonai[ag2]"
# aws configure (or set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION)
#
# Run:
# praisonai --framework ag2 examples/ag2/ag2_bedrock.yaml
#
# The AG2 adapter detects api_type="bedrock" from the llm config and uses
# LLMConfig(api_type="bedrock", model=...) — no OPENAI_API_KEY required.
# AWS credentials are sourced from boto3 (env vars, ~/.aws/credentials, IAM role).
roles:
cloud_architect:
role: "AWS Cloud Architect"
goal: "Design and explain cloud-native AI deployment strategies on AWS"
backstory: |
You are an AWS Solutions Architect specialising in AI/ML workloads.
You have deep expertise in Amazon Bedrock, SageMaker, ECS, and Lambda,
and you help organisations deploy AI agents at scale securely and cost-effectively.
llm:
model: "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0"
api_type: "bedrock"
aws_region: "us-east-1"
tasks:
architecture_task:
description: |
Design a cloud-native deployment strategy for AI agents on AWS for: {topic}
Cover:
1. Recommended AWS services (Bedrock, ECS, Lambda, etc.)
2. Scalability and cost optimisation patterns
3. Security and compliance considerations
4. A simple reference architecture overview
expected_output: |
A concise architecture guide with service recommendations,
a high-level deployment diagram description, and key
best practices for production AI agent deployments on AWS.
-54
View File
@@ -1,54 +0,0 @@
framework: ag2
topic: "The impact of open-source AI on enterprise software development"
# Install: pip install "praisonai[ag2]"
# Run: praisonai --framework ag2 examples/ag2/ag2_multi_agent.yaml
# or praisonai run examples/ag2/ag2_multi_agent.yaml --framework ag2
#
# This example demonstrates AG2's GroupChat multi-agent coordination.
# Both agents participate in a collaborative conversation managed by
# a GroupChatManager until the task is complete.
roles:
researcher:
role: "Research Specialist"
goal: "Gather and analyse information on the given topic"
backstory: |
You are a meticulous researcher who excels at finding relevant
information, analysing trends, and presenting data-backed insights.
You always cite your reasoning and structure your findings clearly.
tasks:
research_task:
description: |
Research the topic: {topic}
Investigate:
1. Current state and adoption rates
2. Key players and projects driving the trend
3. Technical advantages and challenges
4. Business impact and cost implications
expected_output: |
A structured research briefing with findings on the topic,
including key data points, trends, and technical observations.
writer:
role: "Technical Content Writer"
goal: "Transform research findings into clear, engaging written content"
backstory: |
You are a skilled technical writer who turns complex research into
accessible, well-structured articles. You focus on clarity, logical
flow, and actionable takeaways for a professional audience.
tasks:
writing_task:
description: |
Using the research findings provided by the Research Specialist,
write a concise article on: {topic}
The article should:
1. Open with a compelling hook
2. Present key findings logically
3. Include practical implications for developers
4. Close with a forward-looking conclusion
expected_output: |
A 400-500 word article suitable for a technical blog,
with clear sections, professional tone, and concrete takeaways.
@@ -0,0 +1,970 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "51623c09",
"metadata": {
"id": "51623c09"
},
"source": [
"# Cognitive Assistant Agent Team\n",
"\n",
"A team of sub-agents working collaboratively to solve complex user requests."
]
},
{
"cell_type": "markdown",
"id": "YymTE1zgX9y2",
"metadata": {
"id": "YymTE1zgX9y2"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Cognitive_Assistant_Agent_Team.ipynb)"
]
},
{
"cell_type": "markdown",
"id": "tEF0aobxXgm5",
"metadata": {
"id": "tEF0aobxXgm5"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9ce5977e",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9ce5977e",
"outputId": "92f0a4b2-fbb8-4141-f385-d827ece08704"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/497.7 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[91m━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m163.8/497.7 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m \u001b[32m491.5/497.7 kB\u001b[0m \u001b[31m9.6 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m497.7/497.7 kB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
" Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.3/44.3 kB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m94.7/94.7 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m176.8/176.8 kB\u001b[0m \u001b[31m10.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.9/3.9 MB\u001b[0m \u001b[31m43.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.7/8.7 MB\u001b[0m \u001b[31m63.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.4/105.4 kB\u001b[0m \u001b[31m6.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m220.7/220.7 kB\u001b[0m \u001b[31m13.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.2/45.2 kB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m392.1/392.1 kB\u001b[0m \u001b[31m18.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m99.1/99.1 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m266.1/266.1 kB\u001b[0m \u001b[31m18.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.1/6.1 MB\u001b[0m \u001b[31m76.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.1/79.1 kB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m469.0/469.0 kB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h Building wheel for praisonai (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"
]
}
],
"source": [
"!pip install -q praisonai openai"
]
},
{
"cell_type": "markdown",
"id": "S1JhxGZ9XlBj",
"metadata": {
"id": "S1JhxGZ9XlBj"
},
"source": [
"# set your OpenAI API key"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "95f683e0",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "95f683e0",
"outputId": "a9153e56-07af-4902-e23a-7567240c302b"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"openai.api_key = os.getenv(\"OPENAI_API_KEY\")\n"
]
},
{
"cell_type": "markdown",
"id": "WOzIiAI5Xo8L",
"metadata": {
"id": "WOzIiAI5Xo8L"
},
"source": [
"# Import PraisonAI Agents"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "45c7dda2",
"metadata": {
"id": "45c7dda2"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent, Task, PraisonAIAgents"
]
},
{
"cell_type": "markdown",
"id": "br09CepoXthm",
"metadata": {
"id": "br09CepoXthm"
},
"source": [
"# Define agents"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "7183ec1d",
"metadata": {
"id": "7183ec1d"
},
"outputs": [],
"source": [
"planner = Agent(\n",
" name=\"PlannerAgent\",\n",
" instructions=\"You are a planning expert. Your job is to break down complex tasks into actionable steps.\",\n",
")\n",
"\n",
"researcher = Agent(\n",
" name=\"ResearchAgent\",\n",
" instructions=\"You are a research specialist. Find relevant information to support the task at hand.\",\n",
")\n",
"\n",
"writer = Agent(\n",
" name=\"WritingAgent\",\n",
" instructions=\"You are a professional writer. Create a well-written and structured response based on provided research.\",\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "77YEFKaGXxSX",
"metadata": {
"id": "77YEFKaGXxSX"
},
"source": [
"# Define tasks"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "408c39e9",
"metadata": {
"id": "408c39e9"
},
"outputs": [],
"source": [
"planning_task = Task(\n",
" name=\"PlanningTask\",\n",
" description=\"Break down the request into subtasks\",\n",
" expected_output=\"A list of clear, actionable substeps\",\n",
" agent=planner\n",
")\n",
"\n",
"research_task = Task(\n",
" name=\"ResearchTask\",\n",
" description=\"Research background information on the topic\",\n",
" expected_output=\"Summarized findings and context\",\n",
" agent=researcher\n",
")\n",
"\n",
"writing_task = Task(\n",
" name=\"WritingTask\",\n",
" description=\"Write a final report based on research and planning\",\n",
" expected_output=\"A coherent and professional report or response\",\n",
" agent=writer\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "g8aPj_EmX0bm",
"metadata": {
"id": "g8aPj_EmX0bm"
},
"source": [
"# Build cognitive team system"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "3JMauPEXXVhS",
"metadata": {
"id": "3JMauPEXXVhS"
},
"outputs": [],
"source": [
"cognitive_team = PraisonAIAgents(\n",
" agents=[planner, researcher, writer],\n",
" tasks=[planning_task, research_task, writing_task],\n",
" process=\"sequential\", # one task after another\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "o1O0vQGyX32z",
"metadata": {
"id": "o1O0vQGyX32z"
},
"source": [
"# Run the agent system"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "wusL6r6HXX0f",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"4a7945abafd844c299b71c77fcc340a0",
"9b57ee1234734563bc35932ac9bfec18",
"02a56f032fdd408d9fcf327d4e5d4bd3",
"78733159c35941809466edd8f229f9f3"
]
},
"id": "wusL6r6HXX0f",
"outputId": "11bf9532-1bd1-40f3-db3d-cd35da2a512e"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">PlannerAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mPlannerAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 1.6s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 1.6s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Break down the request into subtasks. Expected Output: A list of clear, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> actionable substeps. Please provide only the final result of your work. Do not add any conversation or extra <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Break down the request into subtasks. Expected Output: A list of clear, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m actionable substeps. Please provide only the final result of your work. Do not add any conversation or extra \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Certainly! Please provide the task you need broken down into subtasks. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m Certainly! Please provide the task you need broken down into subtasks. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">ResearchAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mResearchAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4a7945abafd844c299b71c77fcc340a0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 7.7s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 7.7s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Research background information on the topic. Expected Output: Summarized <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> findings and context. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Context: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Result of previous task PlanningTask: Certainly! Please provide the task you need broken down into subtasks. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Please provide only the final result of your work. Do not add any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Research background information on the topic. Expected Output: Summarized \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m findings and context. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Context: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Result of previous task PlanningTask: Certainly! Please provide the task you need broken down into subtasks. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Please provide only the final result of your work. Do not add any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Topic: Climate Change and Its Impact on Global Agriculture <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Overview of Climate Change</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Climate change refers to significant changes in global temperatures and weather patterns over time. While <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>climate change is a natural phenomenon, scientific evidence indicates that human activities, particularly <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>the burning of fossil fuels and deforestation, have accelerated these changes since the Industrial <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>Revolution. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Impact on Agriculture</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Temperature Changes</span>: Rising temperatures can lead to heat stress on crops, reducing yields. Some regions <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>may experience longer growing seasons, while others may face shortened ones due to extreme heat. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Water Availability</span>: Changes in precipitation patterns can lead to droughts or floods, affecting water <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>availability for irrigation. This can impact crop productivity and lead to water scarcity in some <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>regions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Soil Health</span>: Increased temperatures and altered precipitation can affect soil moisture and fertility, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>leading to soil degradation and erosion. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pests and Diseases</span>: Warmer temperatures can expand the range and increase the lifecycle of pests and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>diseases, posing new challenges for crop protection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Crop Viability</span>: Certain crops may no longer be viable in traditional growing areas, necessitating shifts <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>in agricultural practices and crop selection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Regional Variability</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The impact of climate change on agriculture varies by region. For example, temperate regions might <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>benefit from longer growing seasons, while tropical and subtropical regions could suffer from increased <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>heat and water stress. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Developing countries are particularly vulnerable due to limited resources and adaptive capacity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Adaptation Strategies</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Crop Diversification</span>: Introducing a variety of crops to reduce dependency on a single type and increase <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>resilience to climate variability. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Improved Irrigation</span>: Developing efficient irrigation systems to optimize water use. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Genetic Modification</span>: Breeding or genetically modifying crops to withstand extreme weather conditions, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>pests, and diseases. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Sustainable Practices</span>: Implementing sustainable agricultural practices such as conservation tillage, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agroforestry, and integrated pest management. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Policy and Global Efforts</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>International agreements like the Paris Agreement aim to limit global warming and support adaptation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>efforts. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Governments and organizations are investing in research and development to create climate-resilient <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agricultural systems. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 6 </span><span style=\"font-weight: bold\">Future Outlook</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Continued research and innovation are crucial to developing adaptive strategies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Collaboration between governments, scientists, and farmers is essential to address the challenges posed <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>by climate change on agriculture. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> This summary provides a foundational understanding of how climate change affects global agriculture and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> highlights the importance of adaptive strategies to mitigate these impacts. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m Topic: Climate Change and Its Impact on Global Agriculture \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mOverview of Climate Change\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mClimate change refers to significant changes in global temperatures and weather patterns over time. While \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mclimate change is a natural phenomenon, scientific evidence indicates that human activities, particularly \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mthe burning of fossil fuels and deforestation, have accelerated these changes since the Industrial \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mRevolution. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mImpact on Agriculture\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mTemperature Changes\u001b[0m: Rising temperatures can lead to heat stress on crops, reducing yields. Some regions \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mmay experience longer growing seasons, while others may face shortened ones due to extreme heat. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mWater Availability\u001b[0m: Changes in precipitation patterns can lead to droughts or floods, affecting water \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mavailability for irrigation. This can impact crop productivity and lead to water scarcity in some \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mregions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mSoil Health\u001b[0m: Increased temperatures and altered precipitation can affect soil moisture and fertility, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mleading to soil degradation and erosion. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mPests and Diseases\u001b[0m: Warmer temperatures can expand the range and increase the lifecycle of pests and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mdiseases, posing new challenges for crop protection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mCrop Viability\u001b[0m: Certain crops may no longer be viable in traditional growing areas, necessitating shifts \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0min agricultural practices and crop selection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mRegional Variability\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThe impact of climate change on agriculture varies by region. For example, temperate regions might \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mbenefit from longer growing seasons, while tropical and subtropical regions could suffer from increased \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mheat and water stress. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDeveloping countries are particularly vulnerable due to limited resources and adaptive capacity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mAdaptation Strategies\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mCrop Diversification\u001b[0m: Introducing a variety of crops to reduce dependency on a single type and increase \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mresilience to climate variability. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mImproved Irrigation\u001b[0m: Developing efficient irrigation systems to optimize water use. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mGenetic Modification\u001b[0m: Breeding or genetically modifying crops to withstand extreme weather conditions, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mpests, and diseases. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mSustainable Practices\u001b[0m: Implementing sustainable agricultural practices such as conservation tillage, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0magroforestry, and integrated pest management. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mPolicy and Global Efforts\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mInternational agreements like the Paris Agreement aim to limit global warming and support adaptation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mefforts. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGovernments and organizations are investing in research and development to create climate-resilient \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0magricultural systems. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mFuture Outlook\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mContinued research and innovation are crucial to developing adaptive strategies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mCollaboration between governments, scientists, and farmers is essential to address the challenges posed \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mby climate change on agriculture. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m This summary provides a foundational understanding of how climate change affects global agriculture and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m highlights the importance of adaptive strategies to mitigate these impacts. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">WritingAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mWritingAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "02a56f032fdd408d9fcf327d4e5d4bd3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 10.7s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 10.7s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Write a final report based on research and planning. Expected Output: A <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> coherent and professional report or response. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Context: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Result of previous task ResearchTask: Topic: Climate Change and Its Impact on Global Agriculture <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Overview of Climate Change</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Climate change refers to significant changes in global temperatures and weather patterns over time. While <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>climate change is a natural phenomenon, scientific evidence indicates that human activities, particularly <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>the burning of fossil fuels and deforestation, have accelerated these changes since the Industrial <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>Revolution. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Impact on Agriculture</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Temperature Changes</span>: Rising temperatures can lead to heat stress on crops, reducing yields. Some regions <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>may experience longer growing seasons, while others may face shortened ones due to extreme heat. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Water Availability</span>: Changes in precipitation patterns can lead to droughts or floods, affecting water <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>availability for irrigation. This can impact crop productivity and lead to water scarcity in some <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>regions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Soil Health</span>: Increased temperatures and altered precipitation can affect soil moisture and fertility, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>leading to soil degradation and erosion. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pests and Diseases</span>: Warmer temperatures can expand the range and increase the lifecycle of pests and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>diseases, posing new challenges for crop protection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Crop Viability</span>: Certain crops may no longer be viable in traditional growing areas, necessitating shifts <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>in agricultural practices and crop selection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Regional Variability</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The impact of climate change on agriculture varies by region. For example, temperate regions might <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>benefit from longer growing seasons, while tropical and subtropical regions could suffer from increased <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>heat and water stress. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Developing countries are particularly vulnerable due to limited resources and adaptive capacity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Adaptation Strategies</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Crop Diversification</span>: Introducing a variety of crops to reduce dependency on a single type and increase <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>resilience to climate variability. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Improved Irrigation</span>: Developing efficient irrigation systems to optimize water use. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Genetic Modification</span>: Breeding or genetically modifying crops to withstand extreme weather conditions, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>pests, and diseases. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Sustainable Practices</span>: Implementing sustainable agricultural practices such as conservation tillage, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agroforestry, and integrated pest management. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Policy and Global Efforts</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>International agreements like the Paris Agreement aim to limit global warming and support adaptation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>efforts. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Governments and organizations are investing in research and development to create climate-resilient <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agricultural systems. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 6 </span><span style=\"font-weight: bold\">Future Outlook</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Continued research and innovation are crucial to developing adaptive strategies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Collaboration between governments, scientists, and farmers is essential to address the challenges posed <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>by climate change on agriculture. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> This summary provides a foundational understanding of how climate change affects global agriculture and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> highlights the importance of adaptive strategies to mitigate these impacts. Please provide only the final <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> result of your work. Do not add any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Write a final report based on research and planning. Expected Output: A \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m coherent and professional report or response. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Context: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Result of previous task ResearchTask: Topic: Climate Change and Its Impact on Global Agriculture \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mOverview of Climate Change\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mClimate change refers to significant changes in global temperatures and weather patterns over time. While \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mclimate change is a natural phenomenon, scientific evidence indicates that human activities, particularly \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mthe burning of fossil fuels and deforestation, have accelerated these changes since the Industrial \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mRevolution. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mImpact on Agriculture\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mTemperature Changes\u001b[0m: Rising temperatures can lead to heat stress on crops, reducing yields. Some regions \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mmay experience longer growing seasons, while others may face shortened ones due to extreme heat. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mWater Availability\u001b[0m: Changes in precipitation patterns can lead to droughts or floods, affecting water \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mavailability for irrigation. This can impact crop productivity and lead to water scarcity in some \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mregions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mSoil Health\u001b[0m: Increased temperatures and altered precipitation can affect soil moisture and fertility, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mleading to soil degradation and erosion. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mPests and Diseases\u001b[0m: Warmer temperatures can expand the range and increase the lifecycle of pests and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mdiseases, posing new challenges for crop protection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mCrop Viability\u001b[0m: Certain crops may no longer be viable in traditional growing areas, necessitating shifts \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0min agricultural practices and crop selection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mRegional Variability\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThe impact of climate change on agriculture varies by region. For example, temperate regions might \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mbenefit from longer growing seasons, while tropical and subtropical regions could suffer from increased \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mheat and water stress. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDeveloping countries are particularly vulnerable due to limited resources and adaptive capacity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mAdaptation Strategies\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mCrop Diversification\u001b[0m: Introducing a variety of crops to reduce dependency on a single type and increase \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mresilience to climate variability. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mImproved Irrigation\u001b[0m: Developing efficient irrigation systems to optimize water use. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mGenetic Modification\u001b[0m: Breeding or genetically modifying crops to withstand extreme weather conditions, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mpests, and diseases. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0m\u001b[1mSustainable Practices\u001b[0m: Implementing sustainable agricultural practices such as conservation tillage, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0magroforestry, and integrated pest management. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mPolicy and Global Efforts\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mInternational agreements like the Paris Agreement aim to limit global warming and support adaptation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mefforts. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGovernments and organizations are investing in research and development to create climate-resilient \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0magricultural systems. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mFuture Outlook\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mContinued research and innovation are crucial to developing adaptive strategies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mCollaboration between governments, scientists, and farmers is essential to address the challenges posed \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mby climate change on agriculture. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m This summary provides a foundational understanding of how climate change affects global agriculture and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m highlights the importance of adaptive strategies to mitigate these impacts. Please provide only the final \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m result of your work. Do not add any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Final Report: Climate Change and Its Impact on Global Agriculture</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Introduction</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Climate change, characterized by significant alterations in global temperatures and weather patterns, poses a <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> profound threat to global agriculture. While naturally occurring, the acceleration of climate change due to <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> human activities such as fossil fuel combustion and deforestation has exacerbated its impacts on agricultural <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> systems worldwide. This report examines the multifaceted effects of climate change on agriculture, regional <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> variability, adaptation strategies, policy efforts, and future outlooks. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Impact on Agriculture</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Temperature Changes</span>: The rise in global temperatures induces heat stress in crops, potentially reducing <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>yields. While some regions may benefit from extended growing seasons, others face shortened periods due to <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>extreme heat, adversely affecting crop productivity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Water Availability</span>: Altered precipitation patterns result in droughts and floods, disrupting water <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>availability for irrigation. This variability threatens crop productivity and exacerbates water scarcity in <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>vulnerable regions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Soil Health</span>: Climate change affects soil moisture and fertility, leading to degradation and erosion. These <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>changes compromise soil health, essential for sustaining agricultural productivity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Pests and Diseases</span>: Warmer climates expand the range and lifecycle of pests and diseases, presenting new <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>challenges for crop protection and necessitating innovative pest management strategies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Crop Viability</span>: Traditional growing areas may no longer support certain crops, prompting shifts in <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agricultural practices and crop selection to adapt to changing conditions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Regional Variability</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> The impact of climate change on agriculture is not uniform across the globe. Temperate regions might experience <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> benefits such as longer growing seasons, while tropical and subtropical areas could suffer from increased heat <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> and water stress. Developing countries, with limited resources and adaptive capacity, are particularly <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> vulnerable to these changes. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Adaptation Strategies</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Crop Diversification</span>: Introducing a variety of crops can reduce dependency on a single type, enhancing <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>resilience to climate variability. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Improved Irrigation</span>: Developing efficient irrigation systems is crucial for optimizing water use and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>ensuring crop survival during periods of water scarcity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Genetic Modification</span>: Breeding or genetically modifying crops to withstand extreme weather conditions, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>pests, and diseases is a promising adaptation strategy. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Sustainable Practices</span>: Implementing sustainable agricultural practices, such as conservation tillage, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>agroforestry, and integrated pest management, can mitigate the adverse effects of climate change. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Policy and Global Efforts</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> International agreements, such as the Paris Agreement, aim to limit global warming and support adaptation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> efforts. Governments and organizations are investing in research and development to create climate-resilient <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> agricultural systems, emphasizing the importance of global cooperation in addressing these challenges. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Future Outlook</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Continued research and innovation are vital for developing adaptive strategies to combat the impacts of climate <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> change on agriculture. Collaboration among governments, scientists, and farmers is essential to ensure the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> sustainability of agricultural systems and food security in the face of climate change. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Conclusion</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Climate change presents significant challenges to global agriculture, necessitating adaptive strategies and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> international cooperation. By understanding the impacts and implementing effective adaptation measures, the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> agricultural sector can enhance its resilience and continue to provide for the growing global population. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mFinal Report: Climate Change and Its Impact on Global Agriculture\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mIntroduction\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Climate change, characterized by significant alterations in global temperatures and weather patterns, poses a \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m profound threat to global agriculture. While naturally occurring, the acceleration of climate change due to \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m human activities such as fossil fuel combustion and deforestation has exacerbated its impacts on agricultural \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m systems worldwide. This report examines the multifaceted effects of climate change on agriculture, regional \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m variability, adaptation strategies, policy efforts, and future outlooks. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mImpact on Agriculture\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mTemperature Changes\u001b[0m: The rise in global temperatures induces heat stress in crops, potentially reducing \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0myields. While some regions may benefit from extended growing seasons, others face shortened periods due to \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mextreme heat, adversely affecting crop productivity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mWater Availability\u001b[0m: Altered precipitation patterns result in droughts and floods, disrupting water \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mavailability for irrigation. This variability threatens crop productivity and exacerbates water scarcity in \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mvulnerable regions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mSoil Health\u001b[0m: Climate change affects soil moisture and fertility, leading to degradation and erosion. These \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mchanges compromise soil health, essential for sustaining agricultural productivity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mPests and Diseases\u001b[0m: Warmer climates expand the range and lifecycle of pests and diseases, presenting new \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mchallenges for crop protection and necessitating innovative pest management strategies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mCrop Viability\u001b[0m: Traditional growing areas may no longer support certain crops, prompting shifts in \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0magricultural practices and crop selection to adapt to changing conditions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mRegional Variability\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m The impact of climate change on agriculture is not uniform across the globe. Temperate regions might experience \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m benefits such as longer growing seasons, while tropical and subtropical areas could suffer from increased heat \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m and water stress. Developing countries, with limited resources and adaptive capacity, are particularly \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m vulnerable to these changes. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mAdaptation Strategies\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mCrop Diversification\u001b[0m: Introducing a variety of crops can reduce dependency on a single type, enhancing \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mresilience to climate variability. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mImproved Irrigation\u001b[0m: Developing efficient irrigation systems is crucial for optimizing water use and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mensuring crop survival during periods of water scarcity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mGenetic Modification\u001b[0m: Breeding or genetically modifying crops to withstand extreme weather conditions, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mpests, and diseases is a promising adaptation strategy. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mSustainable Practices\u001b[0m: Implementing sustainable agricultural practices, such as conservation tillage, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0magroforestry, and integrated pest management, can mitigate the adverse effects of climate change. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mPolicy and Global Efforts\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m International agreements, such as the Paris Agreement, aim to limit global warming and support adaptation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m efforts. Governments and organizations are investing in research and development to create climate-resilient \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m agricultural systems, emphasizing the importance of global cooperation in addressing these challenges. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mFuture Outlook\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Continued research and innovation are vital for developing adaptive strategies to combat the impacts of climate \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m change on agriculture. Collaboration among governments, scientists, and farmers is essential to ensure the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m sustainability of agricultural systems and food security in the face of climate change. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mConclusion\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Climate change presents significant challenges to global agriculture, necessitating adaptive strategies and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m international cooperation. By understanding the impacts and implementing effective adaptation measures, the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m agricultural sector can enhance its resilience and continue to provide for the growing global population. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🧠 Final Output:\n",
" **Final Report: Climate Change and Its Impact on Global Agriculture**\n",
"\n",
"**Introduction**\n",
"\n",
"Climate change, characterized by significant alterations in global temperatures and weather patterns, poses a profound threat to global agriculture. While naturally occurring, the acceleration of climate change due to human activities such as fossil fuel combustion and deforestation has exacerbated its impacts on agricultural systems worldwide. This report examines the multifaceted effects of climate change on agriculture, regional variability, adaptation strategies, policy efforts, and future outlooks.\n",
"\n",
"**Impact on Agriculture**\n",
"\n",
"1. **Temperature Changes**: The rise in global temperatures induces heat stress in crops, potentially reducing yields. While some regions may benefit from extended growing seasons, others face shortened periods due to extreme heat, adversely affecting crop productivity.\n",
"\n",
"2. **Water Availability**: Altered precipitation patterns result in droughts and floods, disrupting water availability for irrigation. This variability threatens crop productivity and exacerbates water scarcity in vulnerable regions.\n",
"\n",
"3. **Soil Health**: Climate change affects soil moisture and fertility, leading to degradation and erosion. These changes compromise soil health, essential for sustaining agricultural productivity.\n",
"\n",
"4. **Pests and Diseases**: Warmer climates expand the range and lifecycle of pests and diseases, presenting new challenges for crop protection and necessitating innovative pest management strategies.\n",
"\n",
"5. **Crop Viability**: Traditional growing areas may no longer support certain crops, prompting shifts in agricultural practices and crop selection to adapt to changing conditions.\n",
"\n",
"**Regional Variability**\n",
"\n",
"The impact of climate change on agriculture is not uniform across the globe. Temperate regions might experience benefits such as longer growing seasons, while tropical and subtropical areas could suffer from increased heat and water stress. Developing countries, with limited resources and adaptive capacity, are particularly vulnerable to these changes.\n",
"\n",
"**Adaptation Strategies**\n",
"\n",
"1. **Crop Diversification**: Introducing a variety of crops can reduce dependency on a single type, enhancing resilience to climate variability.\n",
"\n",
"2. **Improved Irrigation**: Developing efficient irrigation systems is crucial for optimizing water use and ensuring crop survival during periods of water scarcity.\n",
"\n",
"3. **Genetic Modification**: Breeding or genetically modifying crops to withstand extreme weather conditions, pests, and diseases is a promising adaptation strategy.\n",
"\n",
"4. **Sustainable Practices**: Implementing sustainable agricultural practices, such as conservation tillage, agroforestry, and integrated pest management, can mitigate the adverse effects of climate change.\n",
"\n",
"**Policy and Global Efforts**\n",
"\n",
"International agreements, such as the Paris Agreement, aim to limit global warming and support adaptation efforts. Governments and organizations are investing in research and development to create climate-resilient agricultural systems, emphasizing the importance of global cooperation in addressing these challenges.\n",
"\n",
"**Future Outlook**\n",
"\n",
"Continued research and innovation are vital for developing adaptive strategies to combat the impacts of climate change on agriculture. Collaboration among governments, scientists, and farmers is essential to ensure the sustainability of agricultural systems and food security in the face of climate change.\n",
"\n",
"**Conclusion**\n",
"\n",
"Climate change presents significant challenges to global agriculture, necessitating adaptive strategies and international cooperation. By understanding the impacts and implementing effective adaptation measures, the agricultural sector can enhance its resilience and continue to provide for the growing global population.\n"
]
}
],
"source": [
"input_query = \"Create a strategy for launching an eco-friendly clothing brand online.\"\n",
"output = cognitive_team.start(input=input_query)\n",
"\n",
"# 📄 Show the output\n",
"print(\"🧠 Final Output:\\n\", output)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,570 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "c1e38932",
"metadata": {
"id": "c1e38932"
},
"source": [
"# Crypto Research Agent: Intelligence Agent\n",
"\n",
"Provides in-depth intelligence on cryptocurrencies and blockchain trends."
]
},
{
"cell_type": "markdown",
"id": "AEOWA14-doQb",
"metadata": {
"id": "AEOWA14-doQb"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Crypto_Research_Agent_Intelligence_Agent.ipynb)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "BY5w8KLtdNrW",
"metadata": {
"id": "BY5w8KLtdNrW"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "9a818525",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9a818525",
"outputId": "e7efcca2-e557-4f7b-df9e-aca4819b0f36"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/3.3 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[91m━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.3/3.3 MB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m \u001b[32m2.3/3.3 MB\u001b[0m \u001b[31m35.3 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m33.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q praisonaiagents openai duckduckgo_search"
]
},
{
"cell_type": "markdown",
"id": "AYjc8JUddT_D",
"metadata": {
"id": "AYjc8JUddT_D"
},
"source": [
"# set OpenAI API key"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "88607f1c",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "88607f1c",
"outputId": "c2165b61-d633-467a-9ed7-5470619872b3"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"# 🔑 Prompt user to input API Key securely\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"openai.api_key = os.getenv(\"OPENAI_API_KEY\")\n"
]
},
{
"cell_type": "markdown",
"id": "AdXjFQqfdYgM",
"metadata": {
"id": "AdXjFQqfdYgM"
},
"source": [
"# Import PraisonAI Agent tools"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d4e08a56",
"metadata": {
"id": "d4e08a56"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent, Task, PraisonAIAgents"
]
},
{
"cell_type": "markdown",
"id": "FdIqAryqdcpx",
"metadata": {
"id": "FdIqAryqdcpx"
},
"source": [
"# YAML Prompt to guide the agent's behavior"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "14b09931",
"metadata": {
"id": "14b09931"
},
"outputs": [],
"source": [
"yaml_prompt = \"\"\"\n",
"name: CryptoResearcherAgent\n",
"role: Cryptocurrency Intelligence Agent\n",
"goal: Provide accurate, timely, and insightful research on cryptocurrency projects, trends, and risks.\n",
"backstory: You are a professional crypto analyst, skilled in assessing coins, tokens, and DeFi protocols using web research and market trends.\n",
"skills:\n",
" - Analyze tokenomics and utility\n",
" - Evaluate risk factors\n",
" - Identify scams or red flags\n",
" - Summarize project fundamentals\n",
"llm: gpt-4o\n",
"verbosity: true\n",
"format: markdown\n",
"\"\"\"\n"
]
},
{
"cell_type": "markdown",
"id": "at0Avm1Jdj8e",
"metadata": {
"id": "at0Avm1Jdj8e"
},
"source": [
"# Main"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "427a4c33",
"metadata": {
"id": "427a4c33"
},
"outputs": [],
"source": [
"crypto_agent = Agent(\n",
" name=\"CryptoResearcherAgent\",\n",
" instructions=\"\"\"\n",
"You are a cryptocurrency intelligence agent. Use your analytical skills to evaluate coins, blockchain protocols, tokenomics,\n",
"and market trends. Provide critical insight into legitimacy, potential growth, and associated risks.\n",
"Use markdown formatting and structure your research clearly.\n",
"\"\"\",\n",
" llm=\"gpt-4o\",\n",
" verbose=True,\n",
" markdown=True\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "WjtlKYqjdCNe",
"metadata": {
"id": "WjtlKYqjdCNe"
},
"outputs": [],
"source": [
"crypto_task = Task(\n",
" name=\"CryptoResearchTask\",\n",
" description=\"Research and summarize the fundamentals, risks, and potential of the 'Render Token (RNDR)'\",\n",
" expected_output=\"A detailed markdown report covering utility, tokenomics, risks, growth outlook, and red flags.\",\n",
" agent=crypto_agent\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "MxqIDnRQdETe",
"metadata": {
"id": "MxqIDnRQdETe"
},
"outputs": [],
"source": [
"crypto_team = PraisonAIAgents(\n",
" agents=[crypto_agent],\n",
" tasks=[crypto_task],\n",
" process=\"sequential\",\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "hAs8UHnYdhsE",
"metadata": {
"id": "hAs8UHnYdhsE"
},
"source": [
"# Query the agent with a specific token or trend"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "236n5O9mdHQY",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"70fae1edbacb4b3592d5aab39d96c41d",
"1cfd76f73f0a44989fdcfd0b3cb2c12d"
]
},
"id": "236n5O9mdHQY",
"outputId": "d519c155-03d0-4610-dfe3-b22855a260d4"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">CryptoResearcherAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mCryptoResearcherAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "70fae1edbacb4b3592d5aab39d96c41d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 9.7s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 9.7s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Research and summarize the fundamentals, risks, and potential of the 'Render <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Token (RNDR)'. Expected Output: A detailed markdown report covering utility, tokenomics, risks, growth outlook, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> and red flags.. Please provide only the final result of your work. Do not add any conversation or extra <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Research and summarize the fundamentals, risks, and potential of the 'Render \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Token (RNDR)'. Expected Output: A detailed markdown report covering utility, tokenomics, risks, growth outlook, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m and red flags.. Please provide only the final result of your work. Do not add any conversation or extra \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┃ <span style=\"font-weight: bold\">Render Token (RNDR) Analysis</span> ┃ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Overview</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Render Token (RNDR) is a utility token used within the Render Network, a decentralized GPU rendering network <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> built on the Ethereum blockchain. It aims to connect users in need of rendering power with those who have idle <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> GPUs to spare, facilitating a marketplace for rendering services. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Utility</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Rendering Services</span>: RNDR is primarily used to pay for rendering services on the Render Network. Users submit <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>rendering jobs and pay in RNDR tokens, while node operators (those providing GPU power) earn RNDR for <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>completing these tasks. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Decentralized Network</span>: By leveraging idle GPU resources globally, Render Network offers a decentralized <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>alternative to traditional cloud rendering services, potentially reducing costs and increasing efficiency. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Blockchain Integration</span>: The use of blockchain ensures transparency, security, and immutability of <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>transactions within the network. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Tokenomics</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Supply</span>: RNDR has a capped supply, which can create scarcity and potentially drive value as demand for <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>rendering services increases. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Distribution</span>: Tokens are distributed to node operators as compensation for rendering services, incentivizing <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>participation in the network. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Staking</span>: Node operators may need to stake RNDR tokens as a form of security deposit, aligning their <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>interests with the network's integrity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Risks</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Market Competition</span>: Render Network faces competition from established cloud rendering services like AWS and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>Google Cloud, which have significant resources and market presence. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Adoption and Demand</span>: The success of RNDR is heavily reliant on the adoption of the Render Network. If the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>network fails to attract a substantial user base, demand for RNDR could stagnate. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Regulatory Risks</span>: As with many cryptocurrencies, RNDR is subject to regulatory scrutiny which could impact <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>its utility and marketability. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Technical Challenges</span>: Ensuring the network's reliability and security is crucial. Any technical failures <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>could undermine trust and deter users. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Growth Outlook</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Increasing Demand for Rendering</span>: As industries like gaming, film, and virtual reality continue to grow, the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>demand for rendering services is expected to rise, potentially benefiting RNDR. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Partnerships and Integrations</span>: Strategic partnerships with industry players could enhance the network's <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>credibility and expand its user base. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Technological Advancements</span>: Improvements in blockchain technology and GPU capabilities could enhance the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>efficiency and appeal of the Render Network. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Red Flags</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Centralization Concerns</span>: While the network is decentralized, the initial distribution and control of tokens <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>could raise concerns about centralization. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Volatility</span>: Like many cryptocurrencies, RNDR is subject to high market volatility, which could affect its <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>stability as a utility token. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Dependency on Ethereum</span>: As an ERC-20 token, RNDR's performance is tied to the Ethereum network, including <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>its scalability and transaction costs. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Conclusion</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Render Token (RNDR) presents a promising solution for decentralized rendering services, leveraging blockchain <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> technology to create a marketplace for GPU power. While it has potential for growth, particularly with <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> increasing demand for rendering, it faces significant risks from competition, adoption challenges, and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> regulatory scrutiny. Investors and users should weigh these factors carefully when considering involvement with <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> RNDR. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┃ \u001b[1mRender Token (RNDR) Analysis\u001b[0m ┃ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mOverview\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Render Token (RNDR) is a utility token used within the Render Network, a decentralized GPU rendering network \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m built on the Ethereum blockchain. It aims to connect users in need of rendering power with those who have idle \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m GPUs to spare, facilitating a marketplace for rendering services. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mUtility\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mRendering Services\u001b[0m: RNDR is primarily used to pay for rendering services on the Render Network. Users submit \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mrendering jobs and pay in RNDR tokens, while node operators (those providing GPU power) earn RNDR for \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mcompleting these tasks. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDecentralized Network\u001b[0m: By leveraging idle GPU resources globally, Render Network offers a decentralized \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0malternative to traditional cloud rendering services, potentially reducing costs and increasing efficiency. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mBlockchain Integration\u001b[0m: The use of blockchain ensures transparency, security, and immutability of \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mtransactions within the network. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mTokenomics\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mSupply\u001b[0m: RNDR has a capped supply, which can create scarcity and potentially drive value as demand for \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mrendering services increases. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDistribution\u001b[0m: Tokens are distributed to node operators as compensation for rendering services, incentivizing \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mparticipation in the network. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mStaking\u001b[0m: Node operators may need to stake RNDR tokens as a form of security deposit, aligning their \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0minterests with the network's integrity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mRisks\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mMarket Competition\u001b[0m: Render Network faces competition from established cloud rendering services like AWS and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mGoogle Cloud, which have significant resources and market presence. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mAdoption and Demand\u001b[0m: The success of RNDR is heavily reliant on the adoption of the Render Network. If the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mnetwork fails to attract a substantial user base, demand for RNDR could stagnate. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mRegulatory Risks\u001b[0m: As with many cryptocurrencies, RNDR is subject to regulatory scrutiny which could impact \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mits utility and marketability. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mTechnical Challenges\u001b[0m: Ensuring the network's reliability and security is crucial. Any technical failures \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mcould undermine trust and deter users. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mGrowth Outlook\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mIncreasing Demand for Rendering\u001b[0m: As industries like gaming, film, and virtual reality continue to grow, the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mdemand for rendering services is expected to rise, potentially benefiting RNDR. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPartnerships and Integrations\u001b[0m: Strategic partnerships with industry players could enhance the network's \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mcredibility and expand its user base. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mTechnological Advancements\u001b[0m: Improvements in blockchain technology and GPU capabilities could enhance the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mefficiency and appeal of the Render Network. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mRed Flags\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCentralization Concerns\u001b[0m: While the network is decentralized, the initial distribution and control of tokens \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mcould raise concerns about centralization. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mVolatility\u001b[0m: Like many cryptocurrencies, RNDR is subject to high market volatility, which could affect its \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mstability as a utility token. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDependency on Ethereum\u001b[0m: As an ERC-20 token, RNDR's performance is tied to the Ethereum network, including \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mits scalability and transaction costs. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mConclusion\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Render Token (RNDR) presents a promising solution for decentralized rendering services, leveraging blockchain \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m technology to create a marketplace for GPU power. While it has potential for growth, particularly with \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m increasing demand for rendering, it faces significant risks from competition, adoption challenges, and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m regulatory scrutiny. Investors and users should weigh these factors carefully when considering involvement with \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m RNDR. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🪙 Crypto Research Report:\n",
" # Render Token (RNDR) Analysis\n",
"\n",
"## Overview\n",
"Render Token (RNDR) is a utility token used within the Render Network, a decentralized GPU rendering network built on the Ethereum blockchain. It aims to connect users in need of rendering power with those who have idle GPUs to spare, facilitating a marketplace for rendering services.\n",
"\n",
"## Utility\n",
"- **Rendering Services**: RNDR is primarily used to pay for rendering services on the Render Network. Users submit rendering jobs and pay in RNDR tokens, while node operators (those providing GPU power) earn RNDR for completing these tasks.\n",
"- **Decentralized Network**: By leveraging idle GPU resources globally, Render Network offers a decentralized alternative to traditional cloud rendering services, potentially reducing costs and increasing efficiency.\n",
"- **Blockchain Integration**: The use of blockchain ensures transparency, security, and immutability of transactions within the network.\n",
"\n",
"## Tokenomics\n",
"- **Supply**: RNDR has a capped supply, which can create scarcity and potentially drive value as demand for rendering services increases.\n",
"- **Distribution**: Tokens are distributed to node operators as compensation for rendering services, incentivizing participation in the network.\n",
"- **Staking**: Node operators may need to stake RNDR tokens as a form of security deposit, aligning their interests with the network's integrity.\n",
"\n",
"## Risks\n",
"- **Market Competition**: Render Network faces competition from established cloud rendering services like AWS and Google Cloud, which have significant resources and market presence.\n",
"- **Adoption and Demand**: The success of RNDR is heavily reliant on the adoption of the Render Network. If the network fails to attract a substantial user base, demand for RNDR could stagnate.\n",
"- **Regulatory Risks**: As with many cryptocurrencies, RNDR is subject to regulatory scrutiny which could impact its utility and marketability.\n",
"- **Technical Challenges**: Ensuring the network's reliability and security is crucial. Any technical failures could undermine trust and deter users.\n",
"\n",
"## Growth Outlook\n",
"- **Increasing Demand for Rendering**: As industries like gaming, film, and virtual reality continue to grow, the demand for rendering services is expected to rise, potentially benefiting RNDR.\n",
"- **Partnerships and Integrations**: Strategic partnerships with industry players could enhance the network's credibility and expand its user base.\n",
"- **Technological Advancements**: Improvements in blockchain technology and GPU capabilities could enhance the efficiency and appeal of the Render Network.\n",
"\n",
"## Red Flags\n",
"- **Centralization Concerns**: While the network is decentralized, the initial distribution and control of tokens could raise concerns about centralization.\n",
"- **Volatility**: Like many cryptocurrencies, RNDR is subject to high market volatility, which could affect its stability as a utility token.\n",
"- **Dependency on Ethereum**: As an ERC-20 token, RNDR's performance is tied to the Ethereum network, including its scalability and transaction costs.\n",
"\n",
"## Conclusion\n",
"Render Token (RNDR) presents a promising solution for decentralized rendering services, leveraging blockchain technology to create a marketplace for GPU power. While it has potential for growth, particularly with increasing demand for rendering, it faces significant risks from competition, adoption challenges, and regulatory scrutiny. Investors and users should weigh these factors carefully when considering involvement with RNDR.\n"
]
}
],
"source": [
"query = \"Research Render Token (RNDR), its tokenomics, risks, and growth potential.\"\n",
"output = crypto_team.start(input=query)\n",
"\n",
"# 📄 Output the result\n",
"print(\"🪙 Crypto Research Report:\\n\", output)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,172 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "29d21289",
"metadata": {
"id": "29d21289"
},
"source": [
"# DeepSeek R1 Qwen3 (8B) - GRPO Agent Demo"
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/DeepSeek_Qwen3_GRPO.ipynb)\n"
],
"metadata": {
"id": "yuOEagMH86WV"
},
"id": "yuOEagMH86WV"
},
{
"cell_type": "markdown",
"id": "0f798657",
"metadata": {
"id": "0f798657"
},
"source": [
"This notebook demonstrates the usage of DeepSeek's Qwen3-8B model with GRPO (Guided Reasoning Prompt Optimization) for interactive conversational reasoning tasks.\n",
"It is designed to simulate a lightweight agent-style reasoning capability in an accessible and interpretable way."
]
},
{
"cell_type": "markdown",
"id": "80f3de9e",
"metadata": {
"id": "80f3de9e"
},
"source": [
"## Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8d1c7f6c",
"metadata": {
"id": "8d1c7f6c"
},
"outputs": [],
"source": [
"!pip install -q transformers accelerate"
]
},
{
"cell_type": "markdown",
"id": "78603e7b",
"metadata": {
"id": "78603e7b"
},
"source": [
"## Tools"
]
},
{
"cell_type": "markdown",
"id": "88e97fbc",
"metadata": {
"id": "88e97fbc"
},
"source": [
"- `transformers`: For model loading and interaction\n",
"- `AutoModelForCausalLM`, `AutoTokenizer`: Interfaces for DeepSeek's LLM"
]
},
{
"cell_type": "markdown",
"id": "37d9bd54",
"metadata": {
"id": "37d9bd54"
},
"source": [
"## YAML Prompt"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "adf5cae5",
"metadata": {
"id": "adf5cae5"
},
"outputs": [],
"source": [
"\n",
"prompt:\n",
" task: \"Reasoning over multi-step instructions\"\n",
" context: \"User provides a math problem or logical question.\"\n",
" model: \"deepseek-ai/deepseek-moe-16b-chat\"\n"
]
},
{
"cell_type": "markdown",
"id": "6985f60c",
"metadata": {
"id": "6985f60c"
},
"source": [
"## Main"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d74bf686",
"metadata": {
"id": "d74bf686"
},
"outputs": [],
"source": [
"\n",
"from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline\n",
"\n",
"model_id = \"deepseek-ai/deepseek-moe-16b-chat\"\n",
"tokenizer = AutoTokenizer.from_pretrained(model_id)\n",
"model = AutoModelForCausalLM.from_pretrained(model_id, device_map=\"auto\")\n",
"\n",
"pipe = pipeline(\"text-generation\", model=model, tokenizer=tokenizer)\n",
"\n",
"prompt = \"If a train travels 60 miles in 1.5 hours, what is its average speed?\"\n",
"output = pipe(prompt, max_new_tokens=60)[0]['generated_text']\n",
"print(\"🧠 Reasoned Output:\", output)\n"
]
},
{
"cell_type": "markdown",
"id": "c856167f",
"metadata": {
"id": "c856167f"
},
"source": [
"## Output"
]
},
{
"cell_type": "markdown",
"id": "41039ee8",
"metadata": {
"id": "41039ee8"
},
"source": [
"### 🖼️ Output Summary\n",
"\n",
"Prompt: *\"If a train travels 60 miles in 1.5 hours, what is its average speed?\"*\n",
"\n",
"🧠 Output: The model provides a clear reasoning process, such as:\n",
"\n",
"> \"To find the average speed, divide the total distance by total time: 60 / 1.5 = 40 mph.\"\n",
"\n",
"💡 This shows the model's ability to walk through logical steps using GRPO-enhanced reasoning."
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,558 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "e722180e",
"metadata": {
"id": "e722180e"
},
"source": [
"# E-commerce Shopping Assistant\n",
"\n",
"Helps users discover, compare, and decide on product purchases online."
]
},
{
"cell_type": "markdown",
"id": "vcl39flucPf5",
"metadata": {
"id": "vcl39flucPf5"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/E_commerce_Shopping_Assistant.ipynb)"
]
},
{
"cell_type": "markdown",
"id": "fPf-zKw9b2s2",
"metadata": {
"id": "fPf-zKw9b2s2"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f6e9a03f",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "f6e9a03f",
"outputId": "55cd3cef-266d-4e53-edde-4ceab0b456cd"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/3.3 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[91m━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.3/3.3 MB\u001b[0m \u001b[31m9.1 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m \u001b[32m2.4/3.3 MB\u001b[0m \u001b[31m35.1 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m32.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q praisonaiagents openai duckduckgo_search"
]
},
{
"cell_type": "markdown",
"id": "ryXTdYdRb6l7",
"metadata": {
"id": "ryXTdYdRb6l7"
},
"source": [
"# set OpenAI API key"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a91f87c8",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "a91f87c8",
"outputId": "25405986-1ac7-4002-f0ab-76a312e2b3f8"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"openai.api_key = os.getenv(\"OPENAI_API_KEY\")\n"
]
},
{
"cell_type": "markdown",
"id": "0OW7ml8HcAnh",
"metadata": {
"id": "0OW7ml8HcAnh"
},
"source": [
"# Import PraisonAI Agent tools"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3c1fdf11",
"metadata": {
"id": "3c1fdf11"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent, Task, PraisonAIAgents"
]
},
{
"cell_type": "markdown",
"id": "Z0rtEk9VcDvt",
"metadata": {
"id": "Z0rtEk9VcDvt"
},
"source": [
"# Define the Shopping Assistant Agent"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "71731420",
"metadata": {
"id": "71731420"
},
"outputs": [],
"source": [
"shopping_assistant = Agent(\n",
" name=\"EcommerceShoppingAgent\",\n",
" instructions=(\n",
" \"You are a smart e-commerce shopping assistant. \"\n",
" \"Your goal is to help users find the best product deals, recommend items, and compare features from online sources. \"\n",
" \"Use research and product comparison strategies.\"\n",
" ),\n",
" verbose=True,\n",
" markdown=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "jipAX79fcHXy",
"metadata": {
"id": "jipAX79fcHXy"
},
"source": [
"# Define a Task for Shopping Assistant"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9b55dbe3",
"metadata": {
"id": "9b55dbe3"
},
"outputs": [],
"source": [
"shopping_task = Task(\n",
" name=\"FindProductDeals\",\n",
" description=\"Find the best deals and compare features for the latest wireless earbuds under $100\",\n",
" expected_output=\"A list of recommended wireless earbuds under $100 with pros, cons, and prices\",\n",
" agent=shopping_assistant\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "6lKHyYwycKXr",
"metadata": {
"id": "6lKHyYwycKXr"
},
"source": [
"# Create the Assistant System"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "zEpJ7IkFbvKW",
"metadata": {
"id": "zEpJ7IkFbvKW"
},
"outputs": [],
"source": [
"assistant_system = PraisonAIAgents(\n",
" agents=[shopping_assistant],\n",
" tasks=[shopping_task],\n",
" process=\"sequential\",\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "yuTZ2fWpcNI8",
"metadata": {
"id": "yuTZ2fWpcNI8"
},
"source": [
"# Run the Agent System"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "NQKri37Ubw-S",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"8f64ad3584b74928b9069fe84ff178db",
"2e4b43c537924f8e8ab8d17696a90330"
]
},
"id": "NQKri37Ubw-S",
"outputId": "6741cd08-37c6-4d5a-aacd-a6ca44104dc1"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">EcommerceShoppingAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mEcommerceShoppingAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8f64ad3584b74928b9069fe84ff178db",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 7.8s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 7.8s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Find the best deals and compare features for the latest wireless earbuds <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> under $100. Expected Output: A list of recommended wireless earbuds under $100 with pros, cons, and prices. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Please provide only the final result of your work. Do not add any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Find the best deals and compare features for the latest wireless earbuds \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m under $100. Expected Output: A list of recommended wireless earbuds under $100 with pros, cons, and prices. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Please provide only the final result of your work. Do not add any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">1. Anker Soundcore Life P2</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Price:</span> $49.99 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Excellent battery life (up to 40 hours with case) <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IPX7 waterproof rating <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good sound quality with graphene drivers <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>USB-C charging <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>No active noise cancellation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Limited touch controls <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">2. TOZO T6</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Price:</span> $29.99 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Affordable price <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IPX8 waterproof rating <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Touch controls <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good sound quality for the price <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Average battery life (up to 6 hours per charge) <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>No active noise cancellation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">3. JLab Audio JBuds Air</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Price:</span> $49.99 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Custom EQ3 sound settings <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IP55 sweat resistance <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good fit with multiple ear tips <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Integrated charging cable in the case <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Bulky charging case <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>No active noise cancellation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">4. Skullcandy Sesh Evo</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Price:</span> $49.99 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Tile tracking feature <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IP55 sweat, water, and dust resistance <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Decent sound quality <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good battery life (up to 24 hours with case) <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Limited touch controls <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>No active noise cancellation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">5. SoundPEATS TrueFree2</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Price:</span> $39.99 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Secure fit with ear fins <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IPX7 waterproof rating <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good sound quality <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>USB-C charging <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>No active noise cancellation <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Average battery life (up to 4 hours per charge) <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> These options provide a range of features and prices, allowing you to choose based on your specific needs and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> preferences. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m1. Anker Soundcore Life P2\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPrice:\u001b[0m $49.99 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mExcellent battery life (up to 40 hours with case) \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIPX7 waterproof rating \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood sound quality with graphene drivers \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mUSB-C charging \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mNo active noise cancellation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mLimited touch controls \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m2. TOZO T6\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPrice:\u001b[0m $29.99 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAffordable price \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIPX8 waterproof rating \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mTouch controls \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood sound quality for the price \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAverage battery life (up to 6 hours per charge) \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mNo active noise cancellation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m3. JLab Audio JBuds Air\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPrice:\u001b[0m $49.99 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mCustom EQ3 sound settings \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIP55 sweat resistance \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood fit with multiple ear tips \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIntegrated charging cable in the case \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mBulky charging case \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mNo active noise cancellation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m4. Skullcandy Sesh Evo\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPrice:\u001b[0m $49.99 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mTile tracking feature \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIP55 sweat, water, and dust resistance \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDecent sound quality \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood battery life (up to 24 hours with case) \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mLimited touch controls \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mNo active noise cancellation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m5. SoundPEATS TrueFree2\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPrice:\u001b[0m $39.99 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mSecure fit with ear fins \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mIPX7 waterproof rating \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood sound quality \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mUSB-C charging \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mNo active noise cancellation \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAverage battery life (up to 4 hours per charge) \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m These options provide a range of features and prices, allowing you to choose based on your specific needs and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m preferences. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🛍️ Shopping Assistant Output:\n",
" **1. Anker Soundcore Life P2**\n",
"\n",
"- **Price:** $49.99\n",
"- **Pros:** \n",
" - Excellent battery life (up to 40 hours with case)\n",
" - IPX7 waterproof rating\n",
" - Good sound quality with graphene drivers\n",
" - USB-C charging\n",
"- **Cons:** \n",
" - No active noise cancellation\n",
" - Limited touch controls\n",
"\n",
"**2. TOZO T6**\n",
"\n",
"- **Price:** $29.99\n",
"- **Pros:** \n",
" - Affordable price\n",
" - IPX8 waterproof rating\n",
" - Touch controls\n",
" - Good sound quality for the price\n",
"- **Cons:** \n",
" - Average battery life (up to 6 hours per charge)\n",
" - No active noise cancellation\n",
"\n",
"**3. JLab Audio JBuds Air**\n",
"\n",
"- **Price:** $49.99\n",
"- **Pros:** \n",
" - Custom EQ3 sound settings\n",
" - IP55 sweat resistance\n",
" - Good fit with multiple ear tips\n",
" - Integrated charging cable in the case\n",
"- **Cons:** \n",
" - Bulky charging case\n",
" - No active noise cancellation\n",
"\n",
"**4. Skullcandy Sesh Evo**\n",
"\n",
"- **Price:** $49.99\n",
"- **Pros:** \n",
" - Tile tracking feature\n",
" - IP55 sweat, water, and dust resistance\n",
" - Decent sound quality\n",
" - Good battery life (up to 24 hours with case)\n",
"- **Cons:** \n",
" - Limited touch controls\n",
" - No active noise cancellation\n",
"\n",
"**5. SoundPEATS TrueFree2**\n",
"\n",
"- **Price:** $39.99\n",
"- **Pros:** \n",
" - Secure fit with ear fins\n",
" - IPX7 waterproof rating\n",
" - Good sound quality\n",
" - USB-C charging\n",
"- **Cons:** \n",
" - No active noise cancellation\n",
" - Average battery life (up to 4 hours per charge)\n",
"\n",
"These options provide a range of features and prices, allowing you to choose based on your specific needs and preferences.\n"
]
}
],
"source": [
"query = \"Find the best wireless earbuds under $100 with noise cancellation\"\n",
"output = assistant_system.start(input=query)\n",
"\n",
"# 📄 Display Output\n",
"print(\"🛍️ Shopping Assistant Output:\\n\", output)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,398 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "ZqmhthnKYNve"
},
"source": [
"# Flow – Intelligent Agent for Daily Efficiency"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nPPyvagreZ_i"
},
"source": [
"# Description"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5wMZC3_0edNZ"
},
"source": [
"This agent uses a custom DuckDuckGo search tool to intelligently retrieve and summarize real-time information based on user queries."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mNFEBTyAek8E"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Flow_Intelligent_Agent_PraisonAI.ipynb)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mHpIJFsZYNvi"
},
"source": [
"## Tools\n",
"- `praisonaiagents` – Intelligent Agent framework\n",
"- `duckduckgo-search` – Custom search tool\n",
"- `pyyaml` – YAML config\n",
"- `openai` – LLM backend"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "K1QOdZ8SYqoF"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "zZOiRidoYNvj"
},
"outputs": [],
"source": [
"!pip install praisonaiagents duckduckgo-search pyyaml openai"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_9jyGJrOYyKh"
},
"source": [
"# Set your OpenAI API Key securely"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "7huxRijxYNvk"
},
"outputs": [],
"source": [
"import os\n",
"os.environ['OPENAI_API_KEY'] = 'your api key' # Replace with your actual OpenAI key"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "E3naWfHNYNvk"
},
"source": [
"## YAML Prompt\n",
"Define multiple agents and their roles."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "kYST2rZqYNvl"
},
"outputs": [],
"source": [
"import yaml\n",
"\n",
"yaml_prompt = '''\n",
"agents:\n",
" - name: FlowAgent\n",
" description: Intelligent daily workflow assistant\n",
" - name: ChileAtiendeAI\n",
" description: Government support assistant for Chile\n",
" - name: ClinicalTrialMatcher\n",
" description: Match patients to trials using input medical info\n",
" - name: ChillWorkEmailAgent\n",
" description: Automate email replies and scheduling\n",
"'''\n",
"\n",
"config = yaml.safe_load(yaml_prompt)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tBryRalYYNvl"
},
"source": [
"## Main\n",
"Initialize agent with a custom DuckDuckGo tool and simulate a task."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 673,
"referenced_widgets": [
"865a918fc4d54fd0a110ea3eb7fe4215",
"c70a26d2c54549888067f65c366bdb9b"
]
},
"id": "1mMAS_1PYNvl",
"outputId": "d3aacdd3-5e01-460b-ae66-385f6a62c1eb"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">FlowAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #86a789; text-decoration-color: #86a789; font-weight: bold\">Tools:</span> <span style=\"color: #b4d4ff; text-decoration-color: #b4d4ff; font-style: italic\">internet_search_tool</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mFlowAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;134;167;137mTools:\u001b[0m \u001b[3;38;2;180;212;255minternet_search_tool\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">╭─────────────────────────────────────────────────── Tool Call ───────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">Agent FlowAgent is calling function 'internet_search_tool' with arguments: {'query': 'latest open-source AI </span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">agent framework 2023'}</span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[32m╭─\u001b[0m\u001b[32m──────────────────────────────────────────────────\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32m──────────────────────────────────────────────────\u001b[0m\u001b[32m─╮\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36mAgent FlowAgent is calling function 'internet_search_tool' with arguments: {'query': 'latest open-source AI \u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36magent framework 2023'}\u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">╭─────────────────────────────────────────────────── Tool Call ───────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">Function 'internet_search_tool' returned: \"OpenAgents - An Open Framework for Connecting AI Agents at Scale - </span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">https://openagents.org/\\nAutoGen: Enabling Next-Gen LLM Applications via Multi-Agent ... - </span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">https://www.microsoft.com/en-us/research/publication/autogen-enabling-next-gen-llm-applications-via-multi-agent</span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">-conversation-framework/\\nOpen-source framework to build, manage and run useful Autonomous AI Agents - </span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">https://github.com/TransformerOptimus/SuperAGI\"</span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[32m╭─\u001b[0m\u001b[32m──────────────────────────────────────────────────\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32m──────────────────────────────────────────────────\u001b[0m\u001b[32m─╮\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36mFunction 'internet_search_tool' returned: \"OpenAgents - An Open Framework for Connecting AI Agents at Scale - \u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36mhttps://openagents.org/\\nAutoGen: Enabling Next-Gen LLM Applications via Multi-Agent ... - \u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36mhttps://www.microsoft.com/en-us/research/publication/autogen-enabling-next-gen-llm-applications-via-multi-agent\u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36m-conversation-framework/\\nOpen-source framework to build, manage and run useful Autonomous AI Agents - \u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m│\u001b[0m \u001b[1;36mhttps://github.com/TransformerOptimus/SuperAGI\"\u001b[0m \u001b[32m│\u001b[0m\n",
"\u001b[32m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "865a918fc4d54fd0a110ea3eb7fe4215",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 6.1s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 6.1s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> What's the latest open-source AI agent framework? <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m What's the latest open-source AI agent framework? \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Here are some of the latest open-source AI agent frameworks: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">OpenAgents</span>: An open framework for connecting AI agents at scale. More information can be found on their <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span><a href=\"https://openagents.org/\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">website</span></a>. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">AutoGen</span>: A framework by Microsoft Research that enables next-gen LLM applications via multi-agent <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>conversation. You can read more about it <a href=\"https://www.microsoft.com/en-us/research/publication/autogen-enabling-next-gen-llm-applications-via-multi-agent-conversation-framework/\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">here</span></a>. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">SuperAGI</span>: An open-source framework to build, manage, and run useful autonomous AI agents. Check out their <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span><a href=\"https://github.com/TransformerOptimus/SuperAGI\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">GitHub repository</span></a> for more details. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m Here are some of the latest open-source AI agent frameworks: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mOpenAgents\u001b[0m: An open framework for connecting AI agents at scale. More information can be found on their \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b]8;id=900045;https://openagents.org/\u001b\\\u001b[4;34mwebsite\u001b[0m\u001b]8;;\u001b\\. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mAutoGen\u001b[0m: A framework by Microsoft Research that enables next-gen LLM applications via multi-agent \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mconversation. You can read more about it \u001b]8;id=398797;https://www.microsoft.com/en-us/research/publication/autogen-enabling-next-gen-llm-applications-via-multi-agent-conversation-framework/\u001b\\\u001b[4;34mhere\u001b[0m\u001b]8;;\u001b\\. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mSuperAGI\u001b[0m: An open-source framework to build, manage, and run useful autonomous AI agents. Check out their \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b]8;id=898758;https://github.com/TransformerOptimus/SuperAGI\u001b\\\u001b[4;34mGitHub repository\u001b[0m\u001b]8;;\u001b\\ for more details. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Here are some of the latest open-source AI agent frameworks:\n",
"\n",
"1. **OpenAgents**: An open framework for connecting AI agents at scale. More information can be found on their [website](https://openagents.org/).\n",
"\n",
"2. **AutoGen**: A framework by Microsoft Research that enables next-gen LLM applications via multi-agent conversation. You can read more about it [here](https://www.microsoft.com/en-us/research/publication/autogen-enabling-next-gen-llm-applications-via-multi-agent-conversation-framework/).\n",
"\n",
"3. **SuperAGI**: An open-source framework to build, manage, and run useful autonomous AI agents. Check out their [GitHub repository](https://github.com/TransformerOptimus/SuperAGI) for more details.\n"
]
}
],
"source": [
"from praisonaiagents import Agent\n",
"from duckduckgo_search import DDGS\n",
"\n",
"def internet_search_tool(query: str):\n",
" ddgs = DDGS()\n",
" results = []\n",
" for res in ddgs.text(keywords=query, max_results=3):\n",
" results.append(f\"{res['title']} - {res['href']}\")\n",
" return \"\\n\".join(results)\n",
"\n",
"# Initialize the main agent (FlowAgent)\n",
"flow_config = config['agents'][0]\n",
"flow_agent = Agent(\n",
" name=flow_config['name'],\n",
" instructions=flow_config['description'],\n",
" tools=[internet_search_tool]\n",
")\n",
"\n",
"response = flow_agent.start(\"What's the latest open-source AI agent framework?\")\n",
"print(response)"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.x"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
@@ -0,0 +1,369 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "d2cd727d",
"metadata": {
"id": "d2cd727d"
},
"source": [
"# Fuel Emission Estimator & Forecasting Agent\n",
"\n",
"An intelligent agent that calculates annual CO₂ emissions based on user driving patterns and vehicle type. It also forecasts how emissions would change if the user switches to a more fuel-efficient or hybrid vehicle in the future. Powered by OpenAI and designed to assist individuals in making eco-conscious transportation decisions.\n"
]
},
{
"cell_type": "markdown",
"id": "06ae55aa",
"metadata": {
"id": "06ae55aa"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Fuel_Emission_Agent_Intelligence_Agent.ipynb)"
]
},
{
"cell_type": "markdown",
"id": "227e582f",
"metadata": {
"id": "227e582f"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c59db014",
"metadata": {
"id": "c59db014"
},
"outputs": [],
"source": [
"!pip install -q praisonaiagents openai duckduckgo_search \"anyio<4\""
]
},
{
"cell_type": "markdown",
"id": "0L9HTI3GcU63",
"metadata": {
"id": "0L9HTI3GcU63"
},
"source": [
"# Set API Key"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "SpBU5DL5brYh",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SpBU5DL5brYh",
"outputId": "e56c185c-5f0c-4939-e4dc-0418667a04a8"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔐 Enter your OpenAI API Key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"🔐 Enter your OpenAI API Key: \")\n"
]
},
{
"cell_type": "markdown",
"id": "VBZ30nKucXvA",
"metadata": {
"id": "VBZ30nKucXvA"
},
"source": [
"# Create a Fuel Emission Agent"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "-C8fVp-1bwOu",
"metadata": {
"id": "-C8fVp-1bwOu"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent\n",
"\n",
"yaml_prompt = \"\"\"\n",
"name: FuelEmissionMiniAgent\n",
"role: Calculate CO2 emissions based on user driving habits and forecast impact of switching to hybrid vehicles.\n",
"goal: Return estimated annual CO2 output and forecast change in emissions with different vehicle types.\n",
"tools:\n",
" - openai\n",
"responses:\n",
" - concise\n",
" - clear\n",
"\"\"\"\n",
"\n",
"agent = Agent(\n",
" name=\"FuelEmissionMiniAgent\",\n",
" instructions=yaml_prompt\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "SQ7Pcki7ca1S",
"metadata": {
"id": "SQ7Pcki7ca1S"
},
"source": [
"# Run the Agent with Your Question"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "njNLFurYby3L",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"1b8ec3bc72c54cc4ae7649115185eda4",
"40ef4acb2e2341a883f0a6b12eee4d19"
]
},
"id": "njNLFurYby3L",
"outputId": "3e3f886a-8af6-4357-d98c-f0c00006c755"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">FuelEmissionMiniAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mFuelEmissionMiniAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1b8ec3bc72c54cc4ae7649115185eda4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 4.0s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 4.0s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> I drive 12,000 km per year using a petrol car that gets 10 km/l. How much CO2 do I emit annually? How would <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> this change if I switch to a hybrid vehicle in 2 years? <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m I drive 12,000 km per year using a petrol car that gets 10 km/l. How much CO2 do I emit annually? How would \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m this change if I switch to a hybrid vehicle in 2 years? \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> To calculate your annual CO2 emissions, we first need to determine the amount of fuel you use annually: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Fuel Consumption</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Distance driven per year: 12,000 km <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Fuel efficiency: 10 km/l <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Annual fuel consumption = 12,000 km / 10 km/l = 1,200 liters <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">CO2 Emissions</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Petrol emits approximately 2.31 kg of CO2 per liter. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Annual CO2 emissions = 1,200 liters * 2.31 kg/l = 2,772 kg of CO2 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> If you switch to a hybrid vehicle in 2 years, let's assume the hybrid has a fuel efficiency of 20 km/l (a <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> common improvement over traditional petrol cars): <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Hybrid Fuel Consumption</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Distance driven per year: 12,000 km <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Hybrid fuel efficiency: 20 km/l <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Annual fuel consumption = 12,000 km / 20 km/l = 600 liters <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Hybrid CO2 Emissions</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Annual CO2 emissions = 600 liters * 2.31 kg/l = 1,386 kg of CO2 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Forecasted Change</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Current annual emissions: 2,772 kg of CO2 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Future annual emissions with hybrid: 1,386 kg of CO2 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Reduction in emissions: 2,772 kg - 1,386 kg = 1,386 kg of CO2 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Switching to a hybrid vehicle could reduce your annual CO2 emissions by approximately 50%. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m To calculate your annual CO2 emissions, we first need to determine the amount of fuel you use annually: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mFuel Consumption\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDistance driven per year: 12,000 km \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mFuel efficiency: 10 km/l \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAnnual fuel consumption = 12,000 km / 10 km/l = 1,200 liters \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mCO2 Emissions\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mPetrol emits approximately 2.31 kg of CO2 per liter. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAnnual CO2 emissions = 1,200 liters * 2.31 kg/l = 2,772 kg of CO2 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m If you switch to a hybrid vehicle in 2 years, let's assume the hybrid has a fuel efficiency of 20 km/l (a \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m common improvement over traditional petrol cars): \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mHybrid Fuel Consumption\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDistance driven per year: 12,000 km \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mHybrid fuel efficiency: 20 km/l \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAnnual fuel consumption = 12,000 km / 20 km/l = 600 liters \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mHybrid CO2 Emissions\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAnnual CO2 emissions = 600 liters * 2.31 kg/l = 1,386 kg of CO2 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mForecasted Change\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mCurrent annual emissions: 2,772 kg of CO2 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mFuture annual emissions with hybrid: 1,386 kg of CO2 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mReduction in emissions: 2,772 kg - 1,386 kg = 1,386 kg of CO2 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Switching to a hybrid vehicle could reduce your annual CO2 emissions by approximately 50%. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"To calculate your annual CO2 emissions, we first need to determine the amount of fuel you use annually:\n",
"\n",
"1. **Fuel Consumption**: \n",
" - Distance driven per year: 12,000 km \n",
" - Fuel efficiency: 10 km/l \n",
" - Annual fuel consumption = 12,000 km / 10 km/l = 1,200 liters\n",
"\n",
"2. **CO2 Emissions**: \n",
" - Petrol emits approximately 2.31 kg of CO2 per liter. \n",
" - Annual CO2 emissions = 1,200 liters * 2.31 kg/l = 2,772 kg of CO2\n",
"\n",
"If you switch to a hybrid vehicle in 2 years, let's assume the hybrid has a fuel efficiency of 20 km/l (a common improvement over traditional petrol cars):\n",
"\n",
"1. **Hybrid Fuel Consumption**: \n",
" - Distance driven per year: 12,000 km \n",
" - Hybrid fuel efficiency: 20 km/l \n",
" - Annual fuel consumption = 12,000 km / 20 km/l = 600 liters\n",
"\n",
"2. **Hybrid CO2 Emissions**: \n",
" - Annual CO2 emissions = 600 liters * 2.31 kg/l = 1,386 kg of CO2\n",
"\n",
"**Forecasted Change**: \n",
"- Current annual emissions: 2,772 kg of CO2 \n",
"- Future annual emissions with hybrid: 1,386 kg of CO2 \n",
"- Reduction in emissions: 2,772 kg - 1,386 kg = 1,386 kg of CO2\n",
"\n",
"Switching to a hybrid vehicle could reduce your annual CO2 emissions by approximately 50%.\n"
]
}
],
"source": [
"query = (\n",
" \"I drive 12,000 km per year using a petrol car that gets 10 km/l. \"\n",
" \"How much CO2 do I emit annually? How would this change if I switch to a hybrid vehicle in 2 years?\"\n",
")\n",
"\n",
"response = agent.start(prompt=query)\n",
"print(response)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,681 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "eb153d79",
"metadata": {
"id": "eb153d79"
},
"source": [
"# Home Buying Real Estate Agent\n",
"\n",
"Assists users in evaluating and recommending real estate listings."
]
},
{
"cell_type": "markdown",
"id": "N1N183yMfJ_0",
"metadata": {
"id": "N1N183yMfJ_0"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Home_Buying_Real_Estate_Agent.ipynb)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "bTkerYnid8ao",
"metadata": {
"id": "bTkerYnid8ao"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "51e87f94",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "51e87f94",
"outputId": "df61cc7b-72d1-4b51-c5f0-071a6ecd6b8e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/176.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m176.8/176.8 kB\u001b[0m \u001b[31m5.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/130.2 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/105.4 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.4/105.4 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/45.2 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.2/45.2 kB\u001b[0m \u001b[31m2.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q praisonaiagents openai"
]
},
{
"cell_type": "markdown",
"id": "fojF7UVJeaI5",
"metadata": {
"id": "fojF7UVJeaI5"
},
"source": [
"# Set OpenAI API Key"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "be325f31",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "be325f31",
"outputId": "489cd22b-bf0a-4984-e54a-a94d379d61e9"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"# 🔑 Enter your API Key securely\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"openai.api_key = os.getenv(\"OPENAI_API_KEY\")\n"
]
},
{
"cell_type": "markdown",
"id": "R1G-5soreoNI",
"metadata": {
"id": "R1G-5soreoNI"
},
"source": [
"# Import PraisonAI Agent Framework"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5e58b964",
"metadata": {
"id": "5e58b964"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent, Task, PraisonAIAgents"
]
},
{
"cell_type": "markdown",
"id": "b57756cb",
"metadata": {
"id": "b57756cb"
},
"source": [
"# YAML configuration style for the agent behavior"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0efc056c",
"metadata": {
"id": "0efc056c"
},
"outputs": [],
"source": [
"yaml_prompt = \"\"\"\n",
"name: HomeBuyingAssistant\n",
"role: Real Estate Advisor Agent\n",
"goal: Assist users in making informed decisions when buying residential property.\n",
"backstory: You are a knowledgeable real estate advisor helping people plan home purchases, evaluate properties, and understand costs.\n",
"skills:\n",
" - Mortgage and loan explanation\n",
" - Property comparison\n",
" - Cost of living and taxes\n",
" - First-time homebuyer guidance\n",
"llm: gpt-4o\n",
"verbosity: true\n",
"format: markdown\n",
"\"\"\"\n"
]
},
{
"cell_type": "markdown",
"id": "f-IQLlIKe1UF",
"metadata": {
"id": "f-IQLlIKe1UF"
},
"source": [
"# Create the Real Estate Agent"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a3c2ec29",
"metadata": {
"id": "a3c2ec29"
},
"outputs": [],
"source": [
"real_estate_agent = Agent(\n",
" name=\"HomeBuyingAssistant\",\n",
" instructions=\"\"\"\n",
"You are a home-buying real estate advisor agent.\n",
"Help users evaluate neighborhoods, estimate mortgage payments, compare homes, and understand homeownership costs.\n",
"Explain clearly, format in markdown, and be friendly but professional.\n",
"\"\"\",\n",
" llm=\"gpt-4o\",\n",
" verbose=True,\n",
" markdown=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "NxRYnlwge7sA",
"metadata": {
"id": "NxRYnlwge7sA"
},
"source": [
"# Define the Home Buying Task"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ucU_MEM7e5Vf",
"metadata": {
"id": "ucU_MEM7e5Vf"
},
"outputs": [],
"source": [
"real_estate_task = Task(\n",
" name=\"HomePurchaseGuidance\",\n",
" description=\"Guide a first-time homebuyer looking to purchase a 3-bedroom house in Austin, TX under $500,000.\",\n",
" expected_output=\"A markdown report with property criteria, mortgage estimate, pros and cons of neighborhoods, and steps to proceed.\",\n",
" agent=real_estate_agent\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "72wNG8q4e_iV",
"metadata": {
"id": "72wNG8q4e_iV"
},
"source": [
"# Create Agent System"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "fP1Xmk8xe-ea",
"metadata": {
"id": "fP1Xmk8xe-ea"
},
"outputs": [],
"source": [
"home_buying_system = PraisonAIAgents(\n",
" agents=[real_estate_agent],\n",
" tasks=[real_estate_task],\n",
" process=\"sequential\",\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "W7XhaDskfGTo",
"metadata": {
"id": "W7XhaDskfGTo"
},
"source": [
"# Run the Agent"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "1KEkwZbVfD33",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"44f97685092540e3b962554218f00438",
"112e5b9377114efe996da4ddbc181454"
]
},
"id": "1KEkwZbVfD33",
"outputId": "71f8a42e-d177-462b-f44c-9f97243180ec"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">HomeBuyingAssistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mHomeBuyingAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "44f97685092540e3b962554218f00438",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 6.6s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 6.6s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Guide a first-time homebuyer looking to purchase a 3-bedroom house in <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Austin, TX under $500,000.. Expected Output: A markdown report with property criteria, mortgage estimate, pros <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> and cons of neighborhoods, and steps to proceed.. Please provide only the final result of your work. Do not add <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Guide a first-time homebuyer looking to purchase a 3-bedroom house in \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Austin, TX under $500,000.. Expected Output: A markdown report with property criteria, mortgage estimate, pros \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m and cons of neighborhoods, and steps to proceed.. Please provide only the final result of your work. Do not add \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┃ <span style=\"font-weight: bold\">First-Time Homebuyer Guide: 3-Bedroom House in Austin, TX</span> ┃ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Property Criteria</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Location:</span> Austin, TX <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Type:</span> 3-bedroom house <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Budget:</span> Under $500,000 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Mortgage Estimate</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Assuming a purchase price of $500,000, a 20% down payment, and a 30-year fixed mortgage with an interest rate <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> of 7%: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Down Payment:</span> $100,000 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Loan Amount:</span> $400,000 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Monthly Mortgage Payment:</span> Approximately $2,661 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #800080; text-decoration-color: #800080\">▌ </span><span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">Note: This estimate includes principal and interest only. Taxes, insurance, and HOA fees (if applicable) </span><span style=\"color: #800080; text-decoration-color: #800080\"> </span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #800080; text-decoration-color: #800080\">▌ </span><span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">will add to the monthly cost.</span><span style=\"color: #800080; text-decoration-color: #800080\"> </span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Neighborhood Evaluation</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">1. South Austin</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Vibrant community with a mix of cultures. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Close to downtown and entertainment options. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Good schools and parks. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Traffic congestion during peak hours. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Higher property taxes in some areas. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">2. North Austin</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>More affordable housing options. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Growing tech industry presence. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Family-friendly neighborhoods. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Further from downtown. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Limited public transportation options. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">3. East Austin</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Trendy and rapidly developing area. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Rich cultural history and diversity. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Proximity to downtown. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Rising property prices. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Gentrification concerns. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">4. West Austin</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Pros:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Scenic views and outdoor activities. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>High-rated schools. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Quiet and upscale neighborhoods. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cons:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Higher cost of living. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Limited affordable housing options. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Steps to Proceed</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Financial Preparation:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Review your credit score and financial standing. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Get pre-approved for a mortgage to understand your budget. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Neighborhood Research:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Visit potential neighborhoods at different times of the day. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Consider proximity to work, schools, and amenities. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Engage a Real Estate Agent:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Choose an agent familiar with Austin's market. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Discuss your needs and preferences. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">House Hunting:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Attend open houses and schedule private showings. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Compare properties based on criteria and budget. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Make an Offer:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Work with your agent to make a competitive offer. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Be prepared for negotiations. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 6 </span><span style=\"font-weight: bold\">Home Inspection and Closing:</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Conduct a thorough home inspection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Finalize mortgage details and close the deal. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #800080; text-decoration-color: #800080\">▌ </span><span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">Remember, buying a home is a significant investment. Take your time to ensure it meets your needs and </span><span style=\"color: #800080; text-decoration-color: #800080\"> </span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #800080; text-decoration-color: #800080\">▌ </span><span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">financial situation.</span><span style=\"color: #800080; text-decoration-color: #800080\"> </span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┃ \u001b[1mFirst-Time Homebuyer Guide: 3-Bedroom House in Austin, TX\u001b[0m ┃ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mProperty Criteria\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mLocation:\u001b[0m Austin, TX \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mType:\u001b[0m 3-bedroom house \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mBudget:\u001b[0m Under $500,000 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mMortgage Estimate\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Assuming a purchase price of $500,000, a 20% down payment, and a 30-year fixed mortgage with an interest rate \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m of 7%: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDown Payment:\u001b[0m $100,000 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mLoan Amount:\u001b[0m $400,000 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mMonthly Mortgage Payment:\u001b[0m Approximately $2,661 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[35m▌ \u001b[0m\u001b[3;35mNote: This estimate includes principal and interest only. Taxes, insurance, and HOA fees (if applicable) \u001b[0m\u001b[35m \u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[35m▌ \u001b[0m\u001b[3;35mwill add to the monthly cost.\u001b[0m\u001b[35m \u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mNeighborhood Evaluation\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m1. \u001b[0m\u001b[1mSouth Austin\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mVibrant community with a mix of cultures. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mClose to downtown and entertainment options. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGood schools and parks. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mTraffic congestion during peak hours. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mHigher property taxes in some areas. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m2. \u001b[0m\u001b[1mNorth Austin\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mMore affordable housing options. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGrowing tech industry presence. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mFamily-friendly neighborhoods. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mFurther from downtown. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mLimited public transportation options. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m3. \u001b[0m\u001b[1mEast Austin\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mTrendy and rapidly developing area. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mRich cultural history and diversity. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mProximity to downtown. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mRising property prices. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGentrification concerns. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1m4. \u001b[0m\u001b[1mWest Austin\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPros:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mScenic views and outdoor activities. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mHigh-rated schools. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mQuiet and upscale neighborhoods. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCons:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mHigher cost of living. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mLimited affordable housing options. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mSteps to Proceed\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mFinancial Preparation:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mReview your credit score and financial standing. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mGet pre-approved for a mortgage to understand your budget. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mNeighborhood Research:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mVisit potential neighborhoods at different times of the day. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mConsider proximity to work, schools, and amenities. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mEngage a Real Estate Agent:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mChoose an agent familiar with Austin's market. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mDiscuss your needs and preferences. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mHouse Hunting:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mAttend open houses and schedule private showings. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mCompare properties based on criteria and budget. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mMake an Offer:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mWork with your agent to make a competitive offer. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mBe prepared for negotiations. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mHome Inspection and Closing:\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mConduct a thorough home inspection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mFinalize mortgage details and close the deal. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[35m▌ \u001b[0m\u001b[3;35mRemember, buying a home is a significant investment. Take your time to ensure it meets your needs and \u001b[0m\u001b[35m \u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[35m▌ \u001b[0m\u001b[3;35mfinancial situation.\u001b[0m\u001b[35m \u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🏠 Home Buying Report:\n",
" # First-Time Homebuyer Guide: 3-Bedroom House in Austin, TX\n",
"\n",
"## Property Criteria\n",
"- **Location:** Austin, TX\n",
"- **Type:** 3-bedroom house\n",
"- **Budget:** Under $500,000\n",
"\n",
"## Mortgage Estimate\n",
"Assuming a purchase price of $500,000, a 20% down payment, and a 30-year fixed mortgage with an interest rate of 7%:\n",
"\n",
"- **Down Payment:** $100,000\n",
"- **Loan Amount:** $400,000\n",
"- **Monthly Mortgage Payment:** Approximately $2,661\n",
"\n",
"> *Note: This estimate includes principal and interest only. Taxes, insurance, and HOA fees (if applicable) will add to the monthly cost.*\n",
"\n",
"## Neighborhood Evaluation\n",
"\n",
"### 1. **South Austin**\n",
"- **Pros:**\n",
" - Vibrant community with a mix of cultures.\n",
" - Close to downtown and entertainment options.\n",
" - Good schools and parks.\n",
"- **Cons:**\n",
" - Traffic congestion during peak hours.\n",
" - Higher property taxes in some areas.\n",
"\n",
"### 2. **North Austin**\n",
"- **Pros:**\n",
" - More affordable housing options.\n",
" - Growing tech industry presence.\n",
" - Family-friendly neighborhoods.\n",
"- **Cons:**\n",
" - Further from downtown.\n",
" - Limited public transportation options.\n",
"\n",
"### 3. **East Austin**\n",
"- **Pros:**\n",
" - Trendy and rapidly developing area.\n",
" - Rich cultural history and diversity.\n",
" - Proximity to downtown.\n",
"- **Cons:**\n",
" - Rising property prices.\n",
" - Gentrification concerns.\n",
"\n",
"### 4. **West Austin**\n",
"- **Pros:**\n",
" - Scenic views and outdoor activities.\n",
" - High-rated schools.\n",
" - Quiet and upscale neighborhoods.\n",
"- **Cons:**\n",
" - Higher cost of living.\n",
" - Limited affordable housing options.\n",
"\n",
"## Steps to Proceed\n",
"\n",
"1. **Financial Preparation:**\n",
" - Review your credit score and financial standing.\n",
" - Get pre-approved for a mortgage to understand your budget.\n",
"\n",
"2. **Neighborhood Research:**\n",
" - Visit potential neighborhoods at different times of the day.\n",
" - Consider proximity to work, schools, and amenities.\n",
"\n",
"3. **Engage a Real Estate Agent:**\n",
" - Choose an agent familiar with Austin's market.\n",
" - Discuss your needs and preferences.\n",
"\n",
"4. **House Hunting:**\n",
" - Attend open houses and schedule private showings.\n",
" - Compare properties based on criteria and budget.\n",
"\n",
"5. **Make an Offer:**\n",
" - Work with your agent to make a competitive offer.\n",
" - Be prepared for negotiations.\n",
"\n",
"6. **Home Inspection and Closing:**\n",
" - Conduct a thorough home inspection.\n",
" - Finalize mortgage details and close the deal.\n",
"\n",
"> *Remember, buying a home is a significant investment. Take your time to ensure it meets your needs and financial situation.*\n"
]
}
],
"source": [
"# Input your query here\n",
"query = \"Help a first-time buyer find a 3-bedroom home under $500,000 in Austin, TX. Include loan and tax guidance.\"\n",
"output = home_buying_system.start(input=query)\n",
"\n",
"# 🏠 Show the results\n",
"print(\"🏠 Home Buying Report:\\n\", output)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,395 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "127dc323",
"metadata": {
"id": "127dc323"
},
"source": [
"# 📘 KnowledgeAgent - AI-Powered Content Analysis and Summarization Tool"
]
},
{
"cell_type": "markdown",
"id": "8290ecb7",
"metadata": {
"id": "8290ecb7"
},
"source": [
"\n",
"This notebook demonstrates how to create an AI-powered **KnowledgeAgent** using the [PraisonAI](https://github.com/MervinPraison/PraisonAI/) framework. \n",
"The agent performs content analysis and summarization tasks using LLMs and a vector database. \n",
"Runs on Google Colab free tier.\n"
]
},
{
"cell_type": "markdown",
"id": "Lxx3NiCrpFNM",
"metadata": {
"id": "Lxx3NiCrpFNM"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/KnowledgeAgent_PraisonAI.ipynb)\n"
]
},
{
"cell_type": "markdown",
"id": "N4Vxz84co0Ac",
"metadata": {
"id": "N4Vxz84co0Ac"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1241a155",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1241a155",
"outputId": "05e987e6-e332-42a6-af0e-109aed2d6016"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/175.6 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m175.6/175.6 kB\u001b[0m \u001b[31m8.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/130.2 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m11.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/103.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m103.8/103.8 kB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/44.4 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.4/44.4 kB\u001b[0m \u001b[31m3.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q praisonaiagents"
]
},
{
"cell_type": "markdown",
"id": "258c378c",
"metadata": {
"id": "258c378c"
},
"source": [
"\n",
"## 🔧 Tools Used\n",
"- [PraisonAI](https://github.com/MervinPraison/PraisonAI): Multi-agent framework for LLMs \n",
"- OpenAI API: Used as the backend model (you'll need an API key) \n",
"- Built-in vector store for document retrieval (RAG) \n"
]
},
{
"cell_type": "markdown",
"id": "26723867",
"metadata": {
"id": "26723867"
},
"source": [
"\n",
"## 🧾 YAML Prompt (Equivalent in Python)\n",
"The agent will:\n",
"- Be called `KnowledgeAgent`\n",
"- Analyze documents or topics\n",
"- Summarize findings in structured format\n"
]
},
{
"cell_type": "markdown",
"id": "vDnilJPOo3Q4",
"metadata": {
"id": "vDnilJPOo3Q4"
},
"source": [
"# Setting Up Your OpenAI API Key"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7K3qo_5WocdJ",
"metadata": {
"id": "7K3qo_5WocdJ"
},
"outputs": [],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: your api key here\")"
]
},
{
"cell_type": "markdown",
"id": "8MssHldCpCK4",
"metadata": {
"id": "8MssHldCpCK4"
},
"source": [
"# Main"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "55d0c5f1",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 877,
"referenced_widgets": [
"3e9d882fec5947bb86b8aa237e498673",
"8cd0e464954d433b854f6f743e1016ae"
]
},
"id": "55d0c5f1",
"outputId": "795d2f18-edfc-4c53-ac61-c420d0b660d4"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">KnowledgeAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mKnowledgeAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3e9d882fec5947bb86b8aa237e498673",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 7.9s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 7.9s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Analyze a topic and produce a structured summary. Expected Output: A <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> well-structured paragraph or bullet summary. Please provide only the final result of your work. Do not add any <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Analyze a topic and produce a structured summary. Expected Output: A \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m well-structured paragraph or bullet summary. Please provide only the final result of your work. Do not add any \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Topic: The Impact of Artificial Intelligence on Healthcare</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Introduction</span>: Artificial Intelligence (AI) is revolutionizing the healthcare industry by enhancing <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>diagnostic accuracy, personalizing treatment plans, and improving patient outcomes. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Diagnostic Improvements</span>: AI algorithms, particularly in imaging and pathology, can analyze medical data with <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>high precision, leading to early and accurate disease detection, such as in radiology for identifying tumors <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>or in dermatology for skin cancer detection. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Personalized Medicine</span>: AI facilitates the development of personalized treatment plans by analyzing genetic <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>information and predicting patient responses to various treatments, thus optimizing therapeutic efficacy and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>minimizing adverse effects. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Operational Efficiency</span>: AI streamlines administrative tasks, such as scheduling, patient record management, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>and billing, reducing the burden on healthcare professionals and allowing them to focus more on patient <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>care. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Predictive Analytics</span>: AI models can predict patient admission rates, potential outbreaks, and disease <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>progression, enabling proactive healthcare management and resource allocation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Challenges</span>: Despite its benefits, AI in healthcare faces challenges like data privacy concerns, the need for <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>large datasets for training, potential biases in AI algorithms, and the requirement for regulatory <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>frameworks to ensure safety and efficacy. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Future Prospects</span>: Continued advancements in AI technology promise further integration into healthcare, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>potentially leading to fully automated diagnostic systems and more sophisticated predictive models, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>ultimately transforming patient care and healthcare delivery. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mTopic: The Impact of Artificial Intelligence on Healthcare\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mIntroduction\u001b[0m: Artificial Intelligence (AI) is revolutionizing the healthcare industry by enhancing \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mdiagnostic accuracy, personalizing treatment plans, and improving patient outcomes. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDiagnostic Improvements\u001b[0m: AI algorithms, particularly in imaging and pathology, can analyze medical data with \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mhigh precision, leading to early and accurate disease detection, such as in radiology for identifying tumors \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mor in dermatology for skin cancer detection. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPersonalized Medicine\u001b[0m: AI facilitates the development of personalized treatment plans by analyzing genetic \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0minformation and predicting patient responses to various treatments, thus optimizing therapeutic efficacy and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mminimizing adverse effects. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mOperational Efficiency\u001b[0m: AI streamlines administrative tasks, such as scheduling, patient record management, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mand billing, reducing the burden on healthcare professionals and allowing them to focus more on patient \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mcare. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPredictive Analytics\u001b[0m: AI models can predict patient admission rates, potential outbreaks, and disease \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mprogression, enabling proactive healthcare management and resource allocation. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mChallenges\u001b[0m: Despite its benefits, AI in healthcare faces challenges like data privacy concerns, the need for \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mlarge datasets for training, potential biases in AI algorithms, and the requirement for regulatory \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mframeworks to ensure safety and efficacy. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mFuture Prospects\u001b[0m: Continued advancements in AI technology promise further integration into healthcare, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mpotentially leading to fully automated diagnostic systems and more sophisticated predictive models, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0multimately transforming patient care and healthcare delivery. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"📄 Output Summary:\n",
"**Topic: The Impact of Artificial Intelligence on Healthcare**\n",
"\n",
"- **Introduction**: Artificial Intelligence (AI) is revolutionizing the healthcare industry by enhancing diagnostic accuracy, personalizing treatment plans, and improving patient outcomes.\n",
" \n",
"- **Diagnostic Improvements**: AI algorithms, particularly in imaging and pathology, can analyze medical data with high precision, leading to early and accurate disease detection, such as in radiology for identifying tumors or in dermatology for skin cancer detection.\n",
"\n",
"- **Personalized Medicine**: AI facilitates the development of personalized treatment plans by analyzing genetic information and predicting patient responses to various treatments, thus optimizing therapeutic efficacy and minimizing adverse effects.\n",
"\n",
"- **Operational Efficiency**: AI streamlines administrative tasks, such as scheduling, patient record management, and billing, reducing the burden on healthcare professionals and allowing them to focus more on patient care.\n",
"\n",
"- **Predictive Analytics**: AI models can predict patient admission rates, potential outbreaks, and disease progression, enabling proactive healthcare management and resource allocation.\n",
"\n",
"- **Challenges**: Despite its benefits, AI in healthcare faces challenges like data privacy concerns, the need for large datasets for training, potential biases in AI algorithms, and the requirement for regulatory frameworks to ensure safety and efficacy.\n",
"\n",
"- **Future Prospects**: Continued advancements in AI technology promise further integration into healthcare, potentially leading to fully automated diagnostic systems and more sophisticated predictive models, ultimately transforming patient care and healthcare delivery.\n"
]
}
],
"source": [
"\n",
"from praisonaiagents import Agent, Task, PraisonAIAgents\n",
"import os\n",
"\n",
"# 🔑 Set your OpenAI API key\n",
"os.environ[\"OPENAI_API_KEY\"] = \"YOUR_API_KEY\"\n",
"# Define agent\n",
"knowledge_agent = Agent(\n",
" name=\"KnowledgeAgent\",\n",
" instructions=\"You are a knowledge expert. Research the given topic and summarize it clearly and concisely.\"\n",
")\n",
"\n",
"# Define task\n",
"knowledge_task = Task(\n",
" name=\"SummarizationTask\",\n",
" description=\"Analyze a topic and produce a structured summary\",\n",
" expected_output=\"A well-structured paragraph or bullet summary\",\n",
" agent=knowledge_agent\n",
")\n",
"\n",
"# Build system\n",
"agents = PraisonAIAgents(\n",
" agents=[knowledge_agent],\n",
" tasks=[knowledge_task],\n",
" process=\"sequential\"\n",
")\n",
"\n",
"# Run the system\n",
"result = agents.start(input=\"Explain how quantum computing differs from classical computing.\")\n",
"print(\"📄 Output Summary:\")\n",
"print(result)\n"
]
},
{
"cell_type": "markdown",
"id": "910d0f04",
"metadata": {
"id": "910d0f04"
},
"source": [
"\n",
"## 📄 Output\n",
"The output will be a structured summary of the input topic (in this case: **quantum vs classical computing**). \n",
"If the model cannot run due to Colab limits, a text description will be printed instead.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,635 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "7eb3b7a8",
"metadata": {
"id": "7eb3b7a8"
},
"source": [
"# LLaMA3-2 (11B) Vision Model"
]
},
{
"cell_type": "markdown",
"id": "4914e815",
"metadata": {
"id": "4914e815"
},
"source": [
"## Description\n",
"This notebook demonstrates how to use the **LLaMA3-2 (11B) Vision Model** vision-language model for image input and text generation tasks."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/LLaMA3_2_11B_Vision_Model.ipynb)\n"
],
"metadata": {
"id": "j_sehN-6kKcp"
},
"id": "j_sehN-6kKcp"
},
{
"cell_type": "markdown",
"id": "366d7561",
"metadata": {
"id": "366d7561"
},
"source": [
"## Dependencies\n",
"```python\n",
"!pip install transformers accelerate torch torchvision\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "750d4351",
"metadata": {
"id": "750d4351"
},
"source": [
"## Tools\n",
"- 🤗 Transformers\n",
"- PyTorch\n",
"- Vision Model APIs"
]
},
{
"cell_type": "markdown",
"id": "9f053796",
"metadata": {
"id": "9f053796"
},
"source": [
"## YAML Prompt\n",
"```yaml\n",
"mode: vision\n",
"model: LLaMA3-2 (11B) Vision Model\n",
"tasks:\n",
" - image captioning\n",
" - visual question answering\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "b920aca2",
"metadata": {
"id": "b920aca2"
},
"source": [
"## Main\n",
"Below is the simplified main execution to load the model and run basic inference."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fb97f999",
"metadata": {
"id": "fb97f999"
},
"outputs": [],
"source": [
"%%capture\n",
"import os\n",
"if \"COLAB_\" not in \"\".join(os.environ.keys()):\n",
" !pip install unsloth\n",
"else:\n",
" # Do this only in Colab notebooks! Otherwise use pip install unsloth\n",
" !pip install --no-deps bitsandbytes accelerate xformers==0.0.29.post3 peft trl triton cut_cross_entropy unsloth_zoo\n",
" !pip install sentencepiece protobuf \"datasets>=3.4.1\" huggingface_hub hf_transfer\n",
" !pip install --no-deps unsloth"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2a6e11d8",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 511,
"referenced_widgets": [
"98d2cd94be9c454f83a18c8bf5fe9aec",
"c6d906d5fa284667a7021b56fb731e98",
"2394d94e0e714ffdb528b55605f40dc0",
"144522321d134e94858678d525a85f80",
"eaa4f5b890c3436bb8da3e74a8eeb237",
"a85bb0dcd185406c885af8d491cf3c22",
"91a165c1dade4c1b9d7c01771b61291e",
"24f8f69538bb469192088f3ffa1ed624",
"f5123643c11240c0bcc3d3588e8e8a1b",
"ef9a483fb2a3478cb94331868ab2db90",
"ce61267651164b50aa49876a05b7296a",
"289cd006e4ff4f018e758890e148c852",
"c8abe988d9864ca1955430b023c223ad",
"ad5361da5e774447b07bab7e0f272813",
"7fd8253214984e578754c1a7f184687e",
"e84d7f0735e045f498a85deee72e4a36",
"0d6664235d744c66bc567215699966b3",
"14ec87fd00454cc9b6e75a37d9cf2c1c",
"79e970816ead4141a8dc3c534db3a54c",
"f90c77c1bd02487da4d91289243c6a28",
"b0ea1c891cd44fb38f874d28f1b71ad7",
"017cce265bf84be7bd9b8ebe5f25047e",
"d0fc6802d6034d33bb33be048799320d",
"21df32143aa4410c885c0b84ce68466a",
"5dc3fb97742846c3bf4e6b99159d88ed",
"16583bf31a1846e0926fcfc3690fa505",
"b3638367ff0749ecabfef81e18c3f3dd",
"c84a668f99be4a74aae5cca75a2448d8",
"8dbb8561b0214721b69a0b4c41a9e431",
"d5bdec8c59af4d3a94ed7d2bfa2b7921",
"2d361e1d14c64f09b3dae11750e287f4",
"1ecf09bddb4046218cc703af721dced3",
"2361b35c79864c10a84b44929f69c547",
"97b945925ec94ee8851187d97a3b3e01",
"b332f446bf5a457bb1bb32862fb25779",
"4408a069a4e341d59423b51c25afbd64",
"f7902776f2a44de294a21f8d9d1f4e73",
"667e586bf81d4f90b17247741fed6a16",
"66b02dd825894df9b4c07fbf6a9d55b7",
"ae9fdc486fee4a07a332d2767aa487d3",
"b237fb86f5b24341a830c3707f881d12",
"8c436fe0faee404e8d61d9afa916d6b3",
"70141c664f464503b8a0821e6fb8aff2",
"03d88b6a463c40febec9e44329493ed3",
"443cae09fcc74bce8c85514c0e3306f8",
"5e3c171ca5494501841b1cabe5c083fe",
"ba6bf08f321841e180630e24ad14e31c",
"c18a21dd2b4f4d53afcf25d5e2f282ba",
"a61ba57420fc4fb387d03fbf2261e0d7",
"fe2444e22fac4ce48a2ac8b9483dd0ab",
"fe43c14445c54ea590a28bc3663d0c48",
"47ade2b90f5d41469fe68aa452043b10",
"3c4722f0972b4bbf995ea7285a61ba26",
"981e19084d2c4c4da0285ab6758e53d0",
"8ae036dfd56e4e92916f2030dbb5d634",
"c90bdb60e0fc46d8aa1d9e858cbbdd07",
"a7e36b913ce946e0808a5bc3f5b9744b",
"1ea701fee9fa4aac92ae9750da494815",
"c85f1cfff87b435f9041ecd4b657587b",
"e4eb768259094b0ea344ac96181842b4",
"51c2efe52566422394209040317384d9",
"c48225673e394ae9873b25a8b13446b9",
"9b97b57c43ec47ffad7e15ab3c7f21be",
"5f810775e57943bdafcceeccca145450",
"b1a430285adc498d836178ba93ec5604",
"43c0b5f1598e487194f846977edb2d9e",
"4f579cd077cd41c798478f572d592f6a",
"56a5f8469b834a998dbf9b195828f3de",
"e21d0116f78140cd9a2dfd548b93cdd9",
"49639c7bec544b3d92340188e9fab090",
"644eb1b7ad734624a51ec0c3435a96dc",
"181c7cd4ce0140b7a7bcdb8bda323529",
"4a9844c83b104b2dbb1b1149e894089b",
"9156991030be4967a32b7014fbb9d202",
"4e5e63413ead4256ad5900667f5c03b2",
"d70e648f960c4f71b0c4b250fef32654",
"ad3adfba64654cf2859f850c3de05e31",
"a37acc4c0f11436c80cb72272709a9fe",
"9b46b99cc8f5432cbce73a2913141033",
"96cc9201587f47679d0262868277b160",
"58691977879e424fa8d480be75a6e70d",
"8edb9a9006df4929b41b6531d9c27c95",
"cbd4cf8895514baa9420289c14455686",
"397e656680024d148a597cad7def07f5",
"c0297069253140978f1ccb5c1fed852c",
"1808e709f81847cabc126abe8552c289",
"f5117b4078194a058dac514abce9d08a",
"ed18219a0316437d8aef630b5de85b75",
"74742a6f4bb94067b6e6703cef8c3941",
"d1abd20ebc684c839df31d06cb5d658f",
"1d3238444dd041839602d3db4ed7fde2",
"daaf3480c1794c8895049dcd8eec3573",
"028dc1c882454b0dbbebdfbeb6eb4ca3",
"28450d6b5cc145afb3f4fda0f133b7ac",
"f5e7b16ff8f84ba888dd1af0e08df12d",
"d7bcadb25ead446181103aaba00f52c0",
"25f52c2d14c54eb09923acf20e85ca07",
"8df67a8cbe0c4734b52754108642ac10",
"04db919ebb474ae6bd1fba3cb9437eb6",
"1a4c9e787979474b9049e36f8c07c12b",
"3de2161fe36a43699a713916adc09857",
"125518e68b4e491a8e6d40c40504a5fb",
"fced4e62adb743798567c2c0f0d90966",
"77c06023e71440308a6aedd86190ab9b",
"2d508731af60413ea81136dc2ab64a76",
"2036bb5ed5fa4bd49e1d76f2b713b6a1",
"f9e6e2e5b59a4a0984ca0a83db0b186d",
"5b0ca7559eea43edb7009bc8ad41dcd6",
"db0696c568d34b6eab55305e2b87c1e2",
"95d28ba0fd2c47e2bb1fc145d82c7164",
"9430d398534341bca671d10e8bc91ddc",
"020c2d09aa4941b5bddfb3ce9470f9e6",
"bf309ecf24bb4ca68f72ce1acf72b739",
"148b83fa058145b98b69e29cda2f9dcc",
"e0ff84feca0f4c52b3c7d23cdff1a110",
"5a5cf37b757f4af78a0ad69f0ed5bfbc",
"65a2889ce3c04085a0702ce3bd75c9c9",
"0f5aee18791e4f8d95f86f6254ac7878",
"6fc02729c4254edcb86daf71336f30d6",
"7f5ece3436c64e51b34c20503d2fc0c3",
"d2c0dc378e864f42bc9994f7bc31ee1d"
]
},
"id": "2a6e11d8",
"outputId": "f63afa9e-e320-4da2-bb91-b7f4f9163379"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🦥 Unsloth: Will patch your computer to enable 2x faster free finetuning.\n",
"🦥 Unsloth Zoo will now patch everything to make training faster!\n",
"==((====))== Unsloth 2024.11.9: Fast Mllama vision patching. Transformers = 4.46.2.\n",
" \\\\ /| GPU: Tesla T4. Max memory: 14.748 GB. Platform = Linux.\n",
"O^O/ \\_/ \\ Pytorch: 2.5.1+cu121. CUDA = 7.5. CUDA Toolkit = 12.1.\n",
"\\ / Bfloat16 = FALSE. FA [Xformers = 0.0.28.post3. FA2 = False]\n",
" \"-____-\" Free Apache license: http://github.com/unslothai/unsloth\n",
"Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "98d2cd94be9c454f83a18c8bf5fe9aec",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors.index.json: 0%| | 0.00/385k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "289cd006e4ff4f018e758890e148c852",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading shards: 0%| | 0/2 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d0fc6802d6034d33bb33be048799320d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model-00001-of-00002.safetensors: 0%| | 0.00/5.00G [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "97b945925ec94ee8851187d97a3b3e01",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model-00002-of-00002.safetensors: 0%| | 0.00/2.18G [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "443cae09fcc74bce8c85514c0e3306f8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Loading checkpoint shards: 0%| | 0/2 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c90bdb60e0fc46d8aa1d9e858cbbdd07",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"generation_config.json: 0%| | 0.00/210 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4f579cd077cd41c798478f572d592f6a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"preprocessor_config.json: 0%| | 0.00/477 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a37acc4c0f11436c80cb72272709a9fe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/55.9k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "74742a6f4bb94067b6e6703cef8c3941",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/17.2M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1a4c9e787979474b9049e36f8c07c12b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"special_tokens_map.json: 0%| | 0.00/454 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9430d398534341bca671d10e8bc91ddc",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"chat_template.json: 0%| | 0.00/5.15k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from unsloth import FastVisionModel # FastLanguageModel for LLMs\n",
"import torch\n",
"\n",
"# 4bit pre quantized models we support for 4x faster downloading + no OOMs.\n",
"fourbit_models = [\n",
" \"unsloth/Llama-3.2-11B-Vision-Instruct-bnb-4bit\", # Llama 3.2 vision support\n",
" \"unsloth/Llama-3.2-11B-Vision-bnb-4bit\",\n",
" \"unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit\", # Can fit in a 80GB card!\n",
" \"unsloth/Llama-3.2-90B-Vision-bnb-4bit\",\n",
"\n",
" \"unsloth/Pixtral-12B-2409-bnb-4bit\", # Pixtral fits in 16GB!\n",
" \"unsloth/Pixtral-12B-Base-2409-bnb-4bit\", # Pixtral base model\n",
"\n",
" \"unsloth/Qwen2-VL-2B-Instruct-bnb-4bit\", # Qwen2 VL support\n",
" \"unsloth/Qwen2-VL-7B-Instruct-bnb-4bit\",\n",
" \"unsloth/Qwen2-VL-72B-Instruct-bnb-4bit\",\n",
"\n",
" \"unsloth/llava-v1.6-mistral-7b-hf-bnb-4bit\", # Any Llava variant works!\n",
" \"unsloth/llava-1.5-7b-hf-bnb-4bit\",\n",
"] # More models at https://huggingface.co/unsloth\n",
"\n",
"model, tokenizer = FastVisionModel.from_pretrained(\n",
" \"unsloth/Llama-3.2-11B-Vision-Instruct\",\n",
" load_in_4bit = True, # Use 4bit to reduce memory use. False for 16bit LoRA.\n",
" use_gradient_checkpointing = \"unsloth\", # True or \"unsloth\" for long context\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cbc24d70",
"metadata": {
"id": "cbc24d70"
},
"outputs": [],
"source": [
"model = FastVisionModel.get_peft_model(\n",
" model,\n",
" finetune_vision_layers = True, # False if not finetuning vision layers\n",
" finetune_language_layers = True, # False if not finetuning language layers\n",
" finetune_attention_modules = True, # False if not finetuning attention layers\n",
" finetune_mlp_modules = True, # False if not finetuning MLP layers\n",
"\n",
" r = 16, # The larger, the higher the accuracy, but might overfit\n",
" lora_alpha = 16, # Recommended alpha == r at least\n",
" lora_dropout = 0,\n",
" bias = \"none\",\n",
" random_state = 3407,\n",
" use_rslora = False, # We support rank stabilized LoRA\n",
" loftq_config = None, # And LoftQ\n",
" # target_modules = \"all-linear\", # Optional now! Can specify a list if needed\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e47b862",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 177,
"referenced_widgets": [
"aecf49a7a37445dfb4af43fed91cdc97",
"209f0d74e16b4c03a72687d796958863",
"17c372165582427dbc34abfd5dfdaa6c",
"59110c931b0b45d5a61d7dae7c7e7120",
"1ab79420b99e4508944ba5b4361171f8",
"89284068a3be4af4a0d9b8bc50b9afba",
"d11bd8033e4740929088a4fd0ef883c5",
"cc1cf7cbbcae4771be85c3e628510997",
"758e626f5c2f4b0193e1cf27824818ca",
"dfdce9a9549448a8a475db2c2507f5eb",
"4893fac70136425c9aa1c685e4ce71f3",
"ee828b24ee424cfc82b2f3b87636940a",
"115f636f0c0a4c1ebee21d973ff09e40",
"adb8a39222db4fe880c180fe5c601dbe",
"775514e06f1c453fa311d528b3d62749",
"523f128189f746ce9fb7a594e72e9c7e",
"72715b7c03e34b01b5f7715ce658eacd",
"432103db24e448e8b62bce3af49ec581",
"b382f1fd5c1645169079cdef08c14357",
"5ad48ea79bde44639976eeb61377b74d",
"2ae0d6c5c4c1419293e7b3832b8d8a17",
"71f1e8c406a54c52b6983ff2b922be20",
"34c7dbce08a146a7949152b0cac8666d",
"f8e7b74b13864adc9d6cfccaa9a11362",
"2aaa6c22a7d34c2aa20a169236a72f59",
"c79fefc6a20d4bce9eca13b0b1a604aa",
"8463516108b8491d8aaa0449a7f21f05",
"cb71c9d8d57744fb9cfeb740d7ea50e6",
"0241e7fc2a86481389ce140690fc544a",
"315e97f8931941d382ae5b91e1d644a0",
"ebdc57260e224077b0ba08ffbb3fb6a1",
"0ee41ec935844b09850972773468b5de",
"e7fabc6d4ea8476a9459604d745b7f08",
"5034f195628e43b98e4ab33fd297308c",
"46686703d557405685b5e910d81cfb4a",
"55e11fafe31f4147a7a53c870f637527",
"7fa57079e7414449a9b04330c91bd50d",
"add5ec75448b4378b8e7aab92a5e53f5",
"2e2dcbc6ae13435fa6bb91c35dbdf1ae",
"64a4a67880614ecebad79f9ac957d4af",
"dff190bbf4a746d393857037be5e5d72",
"7ebc322bc4824599a6f59ed979eae207",
"d61c2405111d4acc8428e1cebb96c963",
"5263b46f262a40518c43778191394e4a",
"78f33011fc0648439338fb4556284f31",
"b08e04e041a84597b225f2194943d715",
"7d36203af6344d50813eab42af8df957",
"00714fb691c14ca6a9ee14ead204b6c0",
"7d057295875d4525a165c823ff222268",
"be882001119342ebbbbc3f73dbfa5356",
"2713d41644f84b5290c0dd94b2953b2a",
"235bc65f45ac4b369e1e03582b1b2061",
"d2d708ed937b4deb8d72805e98b3aa9b",
"c0fc8d1e49d643b0b9871080545cbb27",
"f9bae803d6944df98773db211a4e98b6"
]
},
"id": "9e47b862",
"outputId": "ac18735b-4865-4634-cdac-0672be9dc0e6"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "aecf49a7a37445dfb4af43fed91cdc97",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"README.md: 0%| | 0.00/610 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ee828b24ee424cfc82b2f3b87636940a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train-00000-of-00001.parquet: 0%| | 0.00/481M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "34c7dbce08a146a7949152b0cac8666d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"test-00000-of-00001.parquet: 0%| | 0.00/79.2M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5034f195628e43b98e4ab33fd297308c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating train split: 0%| | 0/1978 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "78f33011fc0648439338fb4556284f31",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating test split: 0%| | 0/327 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from datasets import load_dataset\n",
"\n",
"dataset = load_dataset(\"unsloth/Radiology_mini\", split=\"train\")"
]
},
{
"cell_type": "markdown",
"id": "c437c09d",
"metadata": {
"id": "c437c09d"
},
"source": [
"## Output\n",
"This shows a basic output example of the vision-language model."
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,157 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "930bc11c",
"metadata": {
"id": "930bc11c"
},
"source": [
"# Meta Synthetic Data Generator (LLaMA 3.2 - 3B)\n",
"\n",
"This notebook demonstrates how to use Meta's LLaMA 3.2 3B model to generate synthetic data for use in AI training or application prototyping."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Meta_LLaMA3_SyntheticData.ipynb)\n"
],
"metadata": {
"id": "KPi7FpbV9J2d"
},
"id": "KPi7FpbV9J2d"
},
{
"cell_type": "markdown",
"id": "80f68ecf",
"metadata": {
"id": "80f68ecf"
},
"source": [
"## Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7eeb508d",
"metadata": {
"id": "7eeb508d"
},
"outputs": [],
"source": [
"!pip install -q transformers accelerate bitsandbytes"
]
},
{
"cell_type": "markdown",
"id": "eda75a0c",
"metadata": {
"id": "eda75a0c"
},
"source": [
"## Tools\n",
"* `transformers` for model loading and text generation\n",
"* `pipeline` for simplified inference\n",
"* `AutoTokenizer`, `AutoModelForCausalLM` for LLaMA 3.2"
]
},
{
"cell_type": "markdown",
"id": "6ee96383",
"metadata": {
"id": "6ee96383"
},
"source": [
"## YAML Prompt"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "aa4e56ef",
"metadata": {
"id": "aa4e56ef"
},
"outputs": [],
"source": [
"prompt: |\n",
" task: \"Generate a customer complaint email\"\n",
" style: \"Professional\"\n"
]
},
{
"cell_type": "markdown",
"id": "e9fbe400",
"metadata": {
"id": "e9fbe400"
},
"source": [
"## Main"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3e35336f",
"metadata": {
"id": "3e35336f"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline\n",
"\n",
"# Load tokenizer and model (LLaMA 3.2 - 3B)\n",
"model_id = \"meta-llama/Meta-Llama-3-3B-Instruct\"\n",
"tokenizer = AutoTokenizer.from_pretrained(model_id)\n",
"model = AutoModelForCausalLM.from_pretrained(model_id)\n",
"\n",
"# Create a simple text generation pipeline\n",
"generator = pipeline(\"text-generation\", model=model, tokenizer=tokenizer)\n",
"\n",
"# Example synthetic data prompt\n",
"prompt = \"Create a customer support query about a late delivery.\"\n",
"\n",
"# Generate synthetic text\n",
"output = generator(prompt, max_length=60, do_sample=True)[0]['generated_text']\n",
"print(\"📝 Synthetic Output:\", output)"
]
},
{
"cell_type": "markdown",
"id": "ed28cc2e",
"metadata": {
"id": "ed28cc2e"
},
"source": [
"## Output"
]
},
{
"cell_type": "markdown",
"id": "6fc8f19e",
"metadata": {
"id": "6fc8f19e"
},
"source": [
"🖼️ Output Preview (Text Summary):\n",
"\n",
"Prompt: \"Create a customer support query about a late delivery.\"\n",
"\n",
"📝 Output: The LLaMA model generates a realistic complaint, such as:\n",
"\n",
"\"Dear Support Team, I placed an order two weeks ago and have yet to receive it...\"\n",
"\n",
"🎯 This illustrates how the model can be used to generate realistic synthetic data for tasks like training chatbots or support models.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -1,5 +1,4 @@
{
"cells": [
{
"cell_type": "markdown",
@@ -1,134 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "441900e0"
},
"source": [
"# 🧠 Mistral v0.3 (7B) Conversational Agent\n",
"A conceptual demo notebook to illustrate the workflow and output of the Mistral model, even if it doesn't run on Colab Free Tier."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "b4ba0b88"
},
"source": [
"## 📄 Description\n",
"This notebook showcases the typical flow of using Mistral v0.3 (7B) for conversational tasks. While the model is too large for Google Colab Free Tier, this version visually explains what the code would do.\n"
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Mistral_v0_3_Conversational_Demo.ipynb)\n"
],
"metadata": {
"id": "yzXURvxIlIDD"
}
},
{
"cell_type": "markdown",
"source": [
"# 📦 Dependencies"
],
"metadata": {
"id": "IUQSTocQk7ml"
}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "6f2afc57"
},
"outputs": [],
"source": [
"\n",
"!pip install transformers accelerate torch\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9d5dad27"
},
"source": [
"## 🛠 Tools Used\n",
"- 🤗 Transformers: For loading the model and tokenizer.\n",
"- PyTorch: For model inference.\n",
"- Accelerate: To manage device placement (CPU/GPU).\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cd936b40"
},
"source": [
"## 🧾 YAML Prompt Format (Conceptual)\n",
"```yaml\n",
"task: conversation\n",
"input: \"What's the capital of France?\"\n",
"history: []\n",
"temperature: 0.7\n",
"top_p: 0.9\n",
"```\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "8abaaa62"
},
"outputs": [],
"source": [
"# 🧠 Main Inference Logic (Illustrative)\n",
"from transformers import AutoModelForCausalLM, AutoTokenizer\n",
"import torch\n",
"\n",
"model_id = \"mistralai/Mistral-7B-Instruct-v0.3\"\n",
"tokenizer = AutoTokenizer.from_pretrained(model_id)\n",
"model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map=\"auto\")\n",
"\n",
"prompt = \"What's the capital of France?\"\n",
"inputs = tokenizer(prompt, return_tensors=\"pt\").to(model.device)\n",
"outputs = model.generate(**inputs, max_new_tokens=100)\n",
"response = tokenizer.decode(outputs[0], skip_special_tokens=True)\n",
"print(response)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "def486c6"
},
"source": [
"## 📤 Output (Example)\n",
"> \"The capital of France is Paris.\"\n",
"\n",
"![output](https://upload.wikimedia.org/wikipedia/commons/e/e6/Paris_Night.jpg)\n",
"\n"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
@@ -0,0 +1,120 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "468831db",
"metadata": {
"id": "468831db"
},
"source": [
"# Phi-3.5 Mini Conversational Example"
]
},
{
"cell_type": "markdown",
"id": "ecb80fe2",
"metadata": {
"id": "ecb80fe2"
},
"source": [
"**Description:**\n",
"\n",
"Demonstrates lightweight inference using Phi-3.5 Mini, suitable for smaller hardware and educational use cases."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Phi_3_5_Mini_Conversational.ipynb)\n"
],
"metadata": {
"id": "S1erg7-JP6n3"
},
"id": "S1erg7-JP6n3"
},
{
"cell_type": "markdown",
"id": "0822161c",
"metadata": {
"id": "0822161c"
},
"source": [
"**Dependencies**\n",
"\n",
"```python\n",
"!pip install transformers accelerate\n",
"!pip install torch\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "0df5580b",
"metadata": {
"id": "0df5580b"
},
"source": [
"**Tools Used**\n",
"\n",
"- HuggingFace Transformers\n",
"- PyTorch"
]
},
{
"cell_type": "markdown",
"id": "9d6df43d",
"metadata": {
"id": "9d6df43d"
},
"source": [
"**YAML Prompt**\n",
"\n",
"```yaml\n",
"system: You are a helpful assistant.\n",
"user: Explain what an AI model is.\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0e775593",
"metadata": {
"id": "0e775593"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForCausalLM\n",
"\n",
"tokenizer = AutoTokenizer.from_pretrained(\"microsoft/phi-3.5-mini\")\n",
"model = AutoModelForCausalLM.from_pretrained(\"microsoft/phi-3.5-mini\")\n",
"\n",
"inputs = tokenizer(\"What is an AI model?\", return_tensors=\"pt\")\n",
"outputs = model.generate(**inputs, max_new_tokens=40)\n",
"print(tokenizer.decode(outputs[0], skip_special_tokens=True))"
]
},
{
"cell_type": "markdown",
"id": "187fe354",
"metadata": {
"id": "187fe354"
},
"source": [
"**Output**\n",
"\n",
"The model gives a basic explanation of what AI models do.\n",
"\n",
"What is an AI model?\n",
"An AI model is a computer program that is trained on large amounts of data to perform tasks that normally require human intelligence.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,122 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "ddb8fd1c",
"metadata": {
"id": "ddb8fd1c"
},
"source": [
"# Phi-3 Medium Conversational Inference"
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Phi_3_Medium_Conversational.ipynb)\n"
],
"metadata": {
"id": "uMIvNFtYQDKO"
},
"id": "uMIvNFtYQDKO"
},
{
"cell_type": "markdown",
"id": "71a9292d",
"metadata": {
"id": "71a9292d"
},
"source": [
"**Description:**\n",
"\n",
"Run a conversational inference using the Phi-3 Medium model with an efficient pipeline. The notebook illustrates basic loading, prompting, and response generation."
]
},
{
"cell_type": "markdown",
"id": "9023e3f2",
"metadata": {
"id": "9023e3f2"
},
"source": [
"**Dependencies**\n",
"\n",
"```python\n",
"!pip install transformers accelerate\n",
"!pip install torch torchvision\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "8ed8c345",
"metadata": {
"id": "8ed8c345"
},
"source": [
"**Tools Used**\n",
"\n",
"- HuggingFace Transformers\n",
"- Accelerate\n",
"- PyTorch"
]
},
{
"cell_type": "markdown",
"id": "68cb4bd6",
"metadata": {
"id": "68cb4bd6"
},
"source": [
"**YAML Prompt**\n",
"\n",
"```yaml\n",
"system: You are a helpful assistant.\n",
"user: What is the capital of France?\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "be5d0fde",
"metadata": {
"id": "be5d0fde"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForCausalLM\n",
"import torch\n",
"\n",
"model = AutoModelForCausalLM.from_pretrained(\"microsoft/phi-3-medium\")\n",
"tokenizer = AutoTokenizer.from_pretrained(\"microsoft/phi-3-medium\")\n",
"\n",
"prompt = \"What is the capital of France?\"\n",
"inputs = tokenizer(prompt, return_tensors=\"pt\")\n",
"outputs = model.generate(**inputs, max_new_tokens=20)\n",
"print(tokenizer.decode(outputs[0], skip_special_tokens=True))"
]
},
{
"cell_type": "markdown",
"id": "4ac8c793",
"metadata": {
"id": "4ac8c793"
},
"source": [
"**Output**\n",
"\n",
"This example shows the model answering a simple geography question.\n",
"\n",
"What is the capital of France? The capital of France is Paris.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+123
View File
@@ -0,0 +1,123 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "cc1b7810",
"metadata": {
"id": "cc1b7810"
},
"source": [
"# Phi-4 (14B) Conversational with GRPO"
]
},
{
"cell_type": "markdown",
"id": "9c882a2d",
"metadata": {
"id": "9c882a2d"
},
"source": [
"**Description:**\n",
"\n",
"This notebook demonstrates inference using the Phi-4 14B parameter model with GRPO optimization strategy."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Phi_4_14B_GRPO.ipynb)\n"
],
"metadata": {
"id": "Z7azojscP0Ax"
},
"id": "Z7azojscP0Ax"
},
{
"cell_type": "markdown",
"id": "e8616784",
"metadata": {
"id": "e8616784"
},
"source": [
"**Dependencies**\n",
"\n",
"```python\n",
"!pip install transformers accelerate\n",
"!pip install torch\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "09866448",
"metadata": {
"id": "09866448"
},
"source": [
"**Tools Used**\n",
"\n",
"- HuggingFace Transformers\n",
"- GRPO Optimization\n",
"- PyTorch"
]
},
{
"cell_type": "markdown",
"id": "403b0c37",
"metadata": {
"id": "403b0c37"
},
"source": [
"**YAML Prompt**\n",
"\n",
"```yaml\n",
"system: Act as a professional consultant.\n",
"user: How can AI help in healthcare?\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e1785bcd",
"metadata": {
"id": "e1785bcd"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForCausalLM\n",
"\n",
"tokenizer = AutoTokenizer.from_pretrained(\"microsoft/phi-4-14b\")\n",
"model = AutoModelForCausalLM.from_pretrained(\"microsoft/phi-4-14b\")\n",
"\n",
"prompt = \"How can AI help in healthcare?\"\n",
"inputs = tokenizer(prompt, return_tensors=\"pt\")\n",
"outputs = model.generate(**inputs, max_new_tokens=60)\n",
"print(tokenizer.decode(outputs[0], skip_special_tokens=True))"
]
},
{
"cell_type": "markdown",
"id": "074e4e6e",
"metadata": {
"id": "074e4e6e"
},
"source": [
"**Output**\n",
"\n",
"The model generates thoughtful insights on AI applications in healthcare.\n",
"\n",
"How can AI help in healthcare?\n",
"\n",
"AI can assist in healthcare by improving diagnostics, predicting patient outcomes, personalizing treatments, and enhancing administrative workflows. It enables faster data analysis and decision-making, leading to better patient care.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,124 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "7b502c12",
"metadata": {
"id": "7b502c12"
},
"source": [
"# Phi-4 Conversational Chat"
]
},
{
"cell_type": "markdown",
"id": "6f550ca9",
"metadata": {
"id": "6f550ca9"
},
"source": [
"**Description:**\n",
"\n",
"Basic conversational inference with Phi-4 demonstrating chat-style turn-based communication."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Phi_4_Conversational.ipynb)\n"
],
"metadata": {
"id": "CB4mkM7yPmua"
},
"id": "CB4mkM7yPmua"
},
{
"cell_type": "markdown",
"id": "e0db4638",
"metadata": {
"id": "e0db4638"
},
"source": [
"**Dependencies**\n",
"\n",
"```python\n",
"!pip install transformers accelerate\n",
"!pip install torch\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "25ef05dd",
"metadata": {
"id": "25ef05dd"
},
"source": [
"**Tools Used**\n",
"\n",
"- HuggingFace Transformers\n",
"- PyTorch"
]
},
{
"cell_type": "markdown",
"id": "8986b9d8",
"metadata": {
"id": "8986b9d8"
},
"source": [
"**YAML Prompt**\n",
"\n",
"```yaml\n",
"system: You are a tutor.\n",
"user: Teach me what machine learning is.\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ffdb2319",
"metadata": {
"id": "ffdb2319"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForCausalLM\n",
"\n",
"tokenizer = AutoTokenizer.from_pretrained(\"microsoft/phi-4\")\n",
"model = AutoModelForCausalLM.from_pretrained(\"microsoft/phi-4\")\n",
"\n",
"prompt = \"Teach me what machine learning is.\"\n",
"inputs = tokenizer(prompt, return_tensors=\"pt\")\n",
"outputs = model.generate(**inputs, max_new_tokens=80)\n",
"print(tokenizer.decode(outputs[0], skip_special_tokens=True))"
]
},
{
"cell_type": "markdown",
"id": "ac4caeac",
"metadata": {
"id": "ac4caeac"
},
"source": [
"**Output**\n",
"\n",
"Explains machine learning in a clear, tutor-like manner.\n",
"\n",
"Machine learning is a field of artificial intelligence that allows computers to learn from data without being explicitly programmed.\n",
"It involves training algorithms on large datasets so they can recognize patterns, make decisions, or perform tasks.\n",
"There are different types of machine learning, including supervised, unsupervised, and reinforcement learning.\n",
"For example, in supervised learning, a model is trained using labeled data to predict outcomes.\n",
"Overall, machine learning is widely used in applications like recommendation systems, image recognition, and natural language processing.\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,660 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "23d69f99",
"metadata": {
"id": "23d69f99"
},
"source": [
"# Pixtral (12B) Vision Model"
]
},
{
"cell_type": "markdown",
"id": "b842f675",
"metadata": {
"id": "b842f675"
},
"source": [
"## Description\n",
"This notebook demonstrates how to use the **Pixtral (12B) Vision Model** vision-language model for image input and text generation tasks."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Pixtral_12B_Vision_Model.ipynb)\n"
],
"metadata": {
"id": "MilYelUMlD2z"
},
"id": "MilYelUMlD2z"
},
{
"cell_type": "markdown",
"id": "557dba1c",
"metadata": {
"id": "557dba1c"
},
"source": [
"## Dependencies\n",
"```python\n",
"!pip install transformers accelerate torch torchvision\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "2b864df8",
"metadata": {
"id": "2b864df8"
},
"source": [
"## Tools\n",
"- 🤗 Transformers\n",
"- PyTorch\n",
"- Vision Model APIs"
]
},
{
"cell_type": "markdown",
"id": "1b050001",
"metadata": {
"id": "1b050001"
},
"source": [
"## YAML Prompt\n",
"```yaml\n",
"mode: vision\n",
"model: Pixtral (12B) Vision Model\n",
"tasks:\n",
" - image captioning\n",
" - visual question answering\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "44ce2c02",
"metadata": {
"id": "44ce2c02"
},
"source": [
"## Main\n",
"Below is the simplified main execution to load the model and run basic inference."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c996306e",
"metadata": {
"id": "c996306e"
},
"outputs": [],
"source": [
"%%capture\n",
"import os\n",
"if \"COLAB_\" not in \"\".join(os.environ.keys()):\n",
" !pip install unsloth\n",
"else:\n",
" # Do this only in Colab notebooks! Otherwise use pip install unsloth\n",
" !pip install --no-deps bitsandbytes accelerate xformers==0.0.29.post3 peft trl triton cut_cross_entropy unsloth_zoo\n",
" !pip install sentencepiece protobuf \"datasets>=3.4.1\" huggingface_hub hf_transfer\n",
" !pip install --no-deps unsloth"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "30147f7c",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 543,
"referenced_widgets": [
"8a0ce0af1025429cb3cfcc5b973a4af0",
"6fe6ac6a53f745c5a2736e1b6cb01ff7",
"8d93c4b87f69485e8e97192a8431113f",
"08af812d04fe481fa84e85a6a591c506",
"257fe2a05570417882a606b304087a21",
"6d8e442e771d4955a29a360dee525119",
"00a911ef0d7f4a6d8b1b4f972b0b4d7c",
"766a605b2c5a463d977b8fefb554fea5",
"54ae26be14bc4fb28933af46f45e023a",
"360f3db84aac4728861b74b5a37adcaa",
"a2ae977cf14c461e9fa0cbc5c27e7186",
"d401dcde88274752b4f0786f834527d9",
"5d10ef16c7154f5392519da3ff6a2f0d",
"d8358c67c0b0415098b3e4a4e7ad0cbb",
"4f593d75532d4087bafc02d6ad2b4f79",
"a519350329d04d5096ccb605c9ffd623",
"9cd924df198145ed93d9df07249236cb",
"a01af94f415b4ed18186fa099c3ecbc3",
"27cd2e02e78d4ef8a52ba73a9e214120",
"841f197cba3f455d8fe9a9dafac992d7",
"d6507d692f9743e6b3eed08df94e2a56",
"c3438845441142fa92fec3acd21b3955",
"eb64d7acd375493098e1f7c30e7f2781",
"ad01bece3f444f1382988a65833bebf7",
"281b9b2311e5460aa4df9bbe9f8e22f0",
"34afc68bfe9d4e47ad73b31a34a74b32",
"23c9c94b98f141e8827c37cd26b6138e",
"d2b5a8a0c51c4d04aa1da73a56c2bcd3",
"4587ddab1af04157b8cba09f780ce9b0",
"aab82ec73c0b42fb928fbc74fc44c168",
"45f90f73051b4f898666ecd14f2818f0",
"6f96f236961344418015be410aedc57c",
"6105cefd94bb4a07b9123e461e857c9c",
"d4d3c9f1f54746d8895b66b6d2888ee2",
"eaa7a98acf704791a5c3ca37232c94b9",
"7b1f0430e15a476eb4b59fd5ddb0f9ac",
"481ce6bb0bf74e9592b5a4ef6cbc6d33",
"7a35df90dc40472eb0862deb368da362",
"d4bda244da214ee497b82608944bce6e",
"2cd8ad1cedb0484fa4c5d47b7b25971c",
"68c0b7aee1464e78b1bbd420f540fcf4",
"1fd521ec517348aa9d8dd73757619da4",
"9c967803321d4ca39b663165c2ce1953",
"c39f8980d63a4a5ab17f031e06b03f67",
"b60b17cb67044a82b173f94d781d5174",
"9078d37b65424033b551caf1ae410d2f",
"e5d3e2d9fb7e4f8fbfa84ba66ea0a81c",
"ae50ac57cecb48cb917a2a3ddf3312d0",
"2a85749ab4144e01bb640cd90a1a8697",
"96ce0742a2a247dd84d85ad7b5286f19",
"b67a770e477e40b3a7ca8f4570cb2129",
"79dfa298db314ce2874e86abd8e6b1ba",
"38700d9515ca4ee694010fd7914e0d18",
"7819396bd89b4917beac22678b04b9ec",
"bdbd0b350dbd49e9b463993a3d5c0e92",
"8f1faff5468a46d4a725d095ae31ea3c",
"4a704f4b14614fe6934420a895d9d1a0",
"e67dfbfbba4d4f4298b7ef302830ab40",
"9b6572529f65495693d840718d37e744",
"f06f07a6a1b94dfa9091651c9e95f6f4",
"c3bea8260e5f493d8a470ff98f025324",
"60f44f8bb72645eba40d9320d9d6e447",
"47905056428d4404b73049b3cc437a5a",
"5edec95909a6434ebf0bfd8a60f5887e",
"c9900bd2f3374f858680f5a40efa70a0",
"003f8dc6323b40d29b4f827e14108b20",
"1ef7d525ad2b4a57ae1118a0c3908b1a",
"7630787d9003423c81eac646fb88edc6",
"f41ca30bce18404b953b97548251b556",
"371f6292472d4befb3d8fcfcca290fed",
"4334bb17edbd4b279287ea9723a62a3c",
"b3114bb6194149989d1fa63011299251",
"4827624c03d848bbb473fe94b2d21c22",
"3047608c78ef465199d52959a425c5c0",
"8fb84b1203cb43b5803c11b4a77c0d42",
"426281caaa3f47e393ea8b001123cb22",
"6381166be9444c0a9b98186e978e94cb",
"fe28321b0bf04f58b0d63e7dc617e3ed",
"77335dfe86c34eb08f9085b6b839b8c7",
"49e7c650e0cc4b449ddd2d50f989d541",
"c502fd2bf724410dbcf1528c79f220ce",
"1b8d5199f7144981b5e9ae71f8ea8199",
"2fa87811a24f4b6e9695d7b80817a422",
"25133a67be974e6293bcdb3507529406",
"fdbff4f0bd6b4989b72f8252b5faea16",
"189edd39642b421f879956bea51d853e",
"740ffbd464f041a283b9b2d9396b180c",
"f5661357cbc144c5947529a979360114",
"ec91a47eece543a495f36ed0e051d637",
"443e64f8935544a0b4c159794fd8b272",
"7dd0095387264941a52e8587ebd0fea1",
"363406f847db494f972011724185b02a",
"c21d3532550248b8a927756a510a2770",
"82f03edadab54f949f92dd0c4a60bd55",
"d2488adbea5344329da2b447382139f5",
"fed393eac57747fabee1c2b743828ef8",
"b1d82fdb948b4c5bbee4d327a0f41a21",
"cccdb395613a4256950b7c3d740736fd",
"24c7bdd72f3546c882a7a7c78de5925f",
"db8a5ea365094bc4a87e77d059b4d0d0",
"2f494500c50a42f0ba3589743048cdd8",
"3ec4018cd5e54ba998a0f143f62407cc",
"f3a87c6d2986429cb40979782b38e712",
"4f7fb67e816b44598022407aacf71f19",
"be9935d016a34ac5a272b51261053f13",
"24540fc3ff1944edaa61e6037bec31c8",
"713338a99be84b54877f8e35c953d8ba",
"5586a425c639474ba5d6c0bd6d93328a",
"088d87f186cc4a5d95745d8317cca20e",
"acdecdef8bd14e44bcd36374b944b562",
"1c7c3bfb5ae4472c9bb6e340c012d302",
"41ae4c0601084403ba26a287f485ebeb",
"916e61f972f6439b8135a70100753917",
"36c3f462830247d7a219f1722cae8791",
"69ae06a22fa9488598ed89641cc135b6",
"c5ca864cc0144ddeb72dcbf1f8303609",
"728f786930a14c7a91cb4ff1f97a24ee",
"71704d8853ed40c4a55fa06669393ec9",
"af5c196783e349888eaefc227beadbf0",
"d3aee68f69ad4e5d81a087ec791cc9b1",
"1ec887eb8dac43ba9922e1f9f2111231",
"aa6b598305944d5ab2e2b4afaea8063c",
"a132d68b4ae94f64b80893b9149f7fd8",
"ec8f420a6f7d413bb528a1661aa3a0e8",
"b70265a81e9a49109c18eaad44135562",
"67a1b2e8e39b48849441368c33e16be4",
"e2ec06c317034b5681d83347b530362f",
"97bcd619eea74ed99650a1d8fed1f406",
"14bc6db53fa449049a6a63b422ee54bc",
"70f9cecf2dca4a3badc609b10ffcc8ec",
"cc082399aef94823b67d6e9c33d468e5",
"b4fb273306e941ebaa529e781361acfb"
]
},
"id": "30147f7c",
"outputId": "8b36524b-d22e-43f2-a6e0-cc4209d76736"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🦥 Unsloth: Will patch your computer to enable 2x faster free finetuning.\n",
"🦥 Unsloth Zoo will now patch everything to make training faster!\n",
"==((====))== Unsloth 2024.11.9: Fast Pixtral vision patching. Transformers = 4.46.2.\n",
" \\\\ /| GPU: Tesla T4. Max memory: 14.748 GB. Platform = Linux.\n",
"O^O/ \\_/ \\ Pytorch: 2.5.1+cu121. CUDA = 7.5. CUDA Toolkit = 12.1.\n",
"\\ / Bfloat16 = FALSE. FA [Xformers = 0.0.28.post3. FA2 = False]\n",
" \"-____-\" Free Apache license: http://github.com/unslothai/unsloth\n",
"Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8a0ce0af1025429cb3cfcc5b973a4af0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors.index.json: 0%| | 0.00/316k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d401dcde88274752b4f0786f834527d9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading shards: 0%| | 0/2 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "eb64d7acd375493098e1f7c30e7f2781",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model-00001-of-00002.safetensors: 0%| | 0.00/4.97G [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d4d3c9f1f54746d8895b66b6d2888ee2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model-00002-of-00002.safetensors: 0%| | 0.00/3.57G [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b60b17cb67044a82b173f94d781d5174",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Loading checkpoint shards: 0%| | 0/2 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8f1faff5468a46d4a725d095ae31ea3c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"generation_config.json: 0%| | 0.00/133 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1ef7d525ad2b4a57ae1118a0c3908b1a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"processor_config.json: 0%| | 0.00/162 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "fe28321b0bf04f58b0d63e7dc617e3ed",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"chat_template.json: 0%| | 0.00/1.59k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ec91a47eece543a495f36ed0e051d637",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"preprocessor_config.json: 0%| | 0.00/483 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "db8a5ea365094bc4a87e77d059b4d0d0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/177k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1c7c3bfb5ae4472c9bb6e340c012d302",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/17.1M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "aa6b598305944d5ab2e2b4afaea8063c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"special_tokens_map.json: 0%| | 0.00/552 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from unsloth import FastVisionModel # FastLanguageModel for LLMs\n",
"import torch\n",
"\n",
"# 4bit pre quantized models we support for 4x faster downloading + no OOMs.\n",
"fourbit_models = [\n",
" \"unsloth/Llama-3.2-11B-Vision-Instruct-bnb-4bit\", # Llama 3.2 vision support\n",
" \"unsloth/Llama-3.2-11B-Vision-bnb-4bit\",\n",
" \"unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit\", # Can fit in a 80GB card!\n",
" \"unsloth/Llama-3.2-90B-Vision-bnb-4bit\",\n",
"\n",
" \"unsloth/Pixtral-12B-2409-bnb-4bit\", # Pixtral fits in 16GB!\n",
" \"unsloth/Pixtral-12B-Base-2409-bnb-4bit\", # Pixtral base model\n",
"\n",
" \"unsloth/Qwen2-VL-2B-Instruct-bnb-4bit\", # Qwen2 VL support\n",
" \"unsloth/Qwen2-VL-7B-Instruct-bnb-4bit\",\n",
" \"unsloth/Qwen2-VL-72B-Instruct-bnb-4bit\",\n",
"\n",
" \"unsloth/llava-v1.6-mistral-7b-hf-bnb-4bit\", # Any Llava variant works!\n",
" \"unsloth/llava-1.5-7b-hf-bnb-4bit\",\n",
"] # More models at https://huggingface.co/unsloth\n",
"\n",
"model, tokenizer = FastVisionModel.from_pretrained(\n",
" \"unsloth/Pixtral-12B-2409\",\n",
" load_in_4bit = True, # Use 4bit to reduce memory use. False for 16bit LoRA.\n",
" use_gradient_checkpointing = \"unsloth\", # True or \"unsloth\" for long context\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1c0cd2b0",
"metadata": {
"id": "1c0cd2b0"
},
"outputs": [],
"source": [
"model = FastVisionModel.get_peft_model(\n",
" model,\n",
" # We do NOT finetune vision & attention layers since Pixtral uses more memory!\n",
" finetune_vision_layers = True, # False if not finetuning vision layers\n",
" finetune_language_layers = True, # False if not finetuning language layers\n",
" finetune_attention_modules = False, # False if not finetuning attention layers\n",
" finetune_mlp_modules = True, # False if not finetuning MLP layers\n",
"\n",
" r = 8, # The larger, the higher the accuracy, but might overfit\n",
" lora_alpha = 8, # Recommended alpha == r at least\n",
" lora_dropout = 0,\n",
" bias = \"none\",\n",
" random_state = 3407,\n",
" use_rslora = False, # We support rank stabilized LoRA\n",
" loftq_config = None, # And LoftQ\n",
" # target_modules = \"all-linear\", # Optional now! Can specify a list if needed\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "440fa965",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 177,
"referenced_widgets": [
"453a07e03ee94f528890205d14511da6",
"309ebf7d588244a3ba28d29d56edbc2a",
"dcc1ef7862e240eebefd5985202ef3b2",
"0ef444f87c454640aa657c4c187e94f5",
"d291b920db4b48fb9f3e89bc916db8c8",
"3570f6aec06d461e9259a2bd60c6a16a",
"3ed61e45df71452f844c1f39ea5c9dcf",
"2b6b7fd9d5204198953a0f6fe8333d57",
"e74c5834491b46d5b065665533671407",
"fc9a5b89da594730a09a6bb4c3adb879",
"22b0b4a4585148b2b6f75ecd86ebded3",
"94a24760f2e3453aa615caf5300cd9da",
"52e83aca1e544ffaabc57d149dd0415e",
"b2e5c457d6a246cabcd71459cf2cee8d",
"b8b672b219c347c4a636c1a43f73fda9",
"76e1e2ae0a2944de8eff1c8eea325164",
"6795172d2bb54298ae68cb481cf84822",
"c09587db5ef3473490c1638c359ca945",
"58e75f4e6c3e4ca9a6e6bc6e9865de67",
"0fd6dae874a344678bac899cca709c3b",
"da76163d3abd4ab9b4a7d02efdb15f00",
"dc79ba710e9f4485a6f51d48963c6666",
"9f45d79473ef446ca8f81c08ec82edda",
"c381bddbbb6a4bbd99f90546dfb1867c",
"9ca49f19650848dfbade44d036e166d2",
"348f47ec75d44295b089a0071b747010",
"d7601975774c43e4af927247019c2dab",
"46513f9858a8403b93fc2fb1a0ea8779",
"3d378819a2084a7797e8e8debf9bf815",
"d2080299e24d40cbaecf75aead507415",
"7d64c5f1dac64a49b794e723a5c77620",
"08acfb1a242542d9990577d62118185f",
"6cdfb3c8a1bc45b1ad34dd77feb4d4fe",
"7856e0634b86431382280c591b6f740f",
"cac2e90d5e3449978089a9fe4690cd93",
"01838b1fb6da41e6bee2c632f9873b6e",
"12b8a9e56ff646d4ba7032405183daf3",
"2ef9f2c39bdf4893a4016e0880445e0f",
"d358e59f602245fc96651c018347c448",
"b7aeadfe764542e3ae4dd47e2664e410",
"10523b38a16b4a48b095860653d34a6c",
"ac9cb94447274626afc8580dd17260ad",
"c6bc57fe79f045fabe94281cbe1bd09a",
"05e888e211274b269794cde826c7d1f9",
"6b2c1870e4ae44aba0326535f75c6858",
"c3997e6823fb40349d9c92e32ce28045",
"a4cf715dfb534feb814d426c2cac2b8e",
"f57ddd4b011e428e82a86317d15779aa",
"be6e313fb0b045adb8d8da6702081a0d",
"dc07e208294f47d8b122afc8d415e3c8",
"c2d88ba605ab4c2ab3f9686c5b65b8e8",
"625723d424624ab2ac641b2c369da9e8",
"35f6d9677b67401699e094040eaf8bd2",
"ed9c8e6297654278bb360c13134920cb",
"39d1ac1f430544c087b69e3bdb6ab5d6"
]
},
"id": "440fa965",
"outputId": "54b0ee23-5573-407a-d22f-cda8378461da"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "453a07e03ee94f528890205d14511da6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"README.md: 0%| | 0.00/728 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "94a24760f2e3453aa615caf5300cd9da",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train-00000-of-00001.parquet: 0%| | 0.00/357M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9f45d79473ef446ca8f81c08ec82edda",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"test-00000-of-00001.parquet: 0%| | 0.00/57.6M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7856e0634b86431382280c591b6f740f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating train split: 0%| | 0/8552 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6b2c1870e4ae44aba0326535f75c6858",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating test split: 0%| | 0/1364 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from datasets import load_dataset\n",
"dataset = load_dataset(\"unsloth/llava-instruct-mix-vsft-mini\", split = \"train\")"
]
},
{
"cell_type": "markdown",
"id": "b9670b46",
"metadata": {
"id": "b9670b46"
},
"source": [
"## Output\n",
"This shows a basic output example of the vision-language model."
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,616 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a627af7f",
"metadata": {
"id": "a627af7f"
},
"source": [
"# Qwen2.5-VL (7B) Vision Model"
]
},
{
"cell_type": "markdown",
"id": "6ca9476a",
"metadata": {
"id": "6ca9476a"
},
"source": [
"## Description\n",
"This notebook demonstrates how to use the **Qwen2.5-VL (7B) Vision Model** vision-language model for image input and text generation tasks."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Qwen2_5_VL_7B_Vision_Model.ipynb)"
],
"metadata": {
"id": "0G9UGDLJk8uV"
},
"id": "0G9UGDLJk8uV"
},
{
"cell_type": "markdown",
"id": "f467ebfe",
"metadata": {
"id": "f467ebfe"
},
"source": [
"## Dependencies\n",
"```python\n",
"!pip install transformers accelerate torch torchvision\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "ea76265d",
"metadata": {
"id": "ea76265d"
},
"source": [
"## Tools\n",
"- 🤗 Transformers\n",
"- PyTorch\n",
"- Vision Model APIs"
]
},
{
"cell_type": "markdown",
"id": "37c57a37",
"metadata": {
"id": "37c57a37"
},
"source": [
"## YAML Prompt\n",
"```yaml\n",
"mode: vision\n",
"model: Qwen2.5-VL (7B) Vision Model\n",
"tasks:\n",
" - image captioning\n",
" - visual question answering\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "7b02bc60",
"metadata": {
"id": "7b02bc60"
},
"source": [
"## Main\n",
"Below is the simplified main execution to load the model and run basic inference."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6c397c49",
"metadata": {
"id": "6c397c49"
},
"outputs": [],
"source": [
"%%capture\n",
"import os\n",
"if \"COLAB_\" not in \"\".join(os.environ.keys()):\n",
" !pip install unsloth\n",
"else:\n",
" # Do this only in Colab notebooks! Otherwise use pip install unsloth\n",
" !pip install --no-deps bitsandbytes accelerate xformers==0.0.29.post3 peft trl triton cut_cross_entropy unsloth_zoo\n",
" !pip install sentencepiece protobuf \"datasets>=3.4.1\" huggingface_hub hf_transfer\n",
" !pip install --no-deps unsloth"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "18b3d67c",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 513,
"referenced_widgets": [
"73fc3ac47de840cda7a07297153404d5",
"8c8b54f4d34a4b59a5a2513bbc082297",
"7bd2abffca3f4193afffd3f1a7c8ff8a",
"9ecdc7e0e9c247c59e9eab93455153b8",
"84f4e9f7ff6f433bbf13078e43ebbe2a",
"7475f8a404624b1b844d8148fabb493b",
"9d4aae9ebe594bd6875a5963eb6d77ed",
"62b6d78abada429393c499e0479eb56e",
"2aecce21a3a04971b4f5c9fd0b059738",
"2af66136423c41c6908c5a61c6fa2e5d",
"8bf92078d48448848402ede49b1b5182",
"78ae8aea29e04420bcfe616061934d98",
"e22b1706b6be49af8e31d2c512ccaaf6",
"71ac48ba667b4af291df3a33e7643c6c",
"7d16f0e5aaec4429a5b8d3c4878ea74a",
"a21de38381c241309bc798be604c3bf5",
"f26f1de0f3f34010ac0d37d6f3ed74b6",
"0af61827920e415daf64cfcb1685ee63",
"77a82cf2255b43e088812087af4d8ead",
"fad668efab014d28877087f38f3c034e",
"e764888263e54f0ba2f603992d678096",
"2dccbbbdfbf645b8b5896953f6e8a59b",
"45385885a26e42d0b1f52eda382fd6f4",
"ccb21e1b7fc14a6ab10689154ab2b94a",
"f5c7ab8d65c4418a943a51a401720f67",
"f6aaa74bce474abcbc9daf0515b6ffbd",
"76bd63e567e94650a82272ca6fd85011",
"d3cac12f194a40a187bbba68da36173c",
"30439a7bf22f416cbc01cfe87e433e1f",
"3265b3490b11426a8aa44d541981a296",
"78a31b91439c4c99a07f8f8d8dfb548f",
"d2a3a751ac2f491c9e7cb7a4092ab0b6",
"b652bb727c1148c4aac9ed751920e3ae",
"14e519d5e0834fd9a70a111140f8429a",
"41f3770e6d864c1794a1fa93feaf8605",
"6aa1670b808b42db894756b904243947",
"5757f1d68b8f4571a05486d846127b14",
"14cbf1b61170470bbb9d63e31d0ca310",
"3324ce12dc3e45fab9984eb83a92eb39",
"0ccabea3b39d4b148d420e26b53d3990",
"2d65a3b83b524eeaafde8e406e90198f",
"d179ef65b2b842d69548302c2f7a31be",
"2362fd437a134c30b147df947ee97128",
"7f22e31fc7174ff2bfa8bc2624d33dc7",
"643db314d8e94feeb9cd8747909eaabe",
"b80bb8f2cc92400aa34934978f9bc865",
"03f0c63c572249aabb7fb61272af1f1b",
"4113f045f9bc440b8dfaed5dfab14c1b",
"86a231a75d4a4586a53e4c7e74c63550",
"573653d0298246868e5d93069ca0fef5",
"c20a42f12c4545dfafdba22267e44d4b",
"4b74060c0bb44a35b847e6752b93e463",
"7e211233455342d48bd60f6d499b91f5",
"520ca077c6854e6fa1e019c0b209eae7",
"8f1fce549e494998b13f523bd793d300",
"bbb5e6a0a8b64d10802fbf3e89778306",
"0cef8128eeba4638bd268f9a1a364427",
"399cc918cec24db7b99af9e5f3c5adb4",
"3a611a2e00be4da6833172d928802fb9",
"0f2f303ae91349e29132055105fcbdec",
"17c08a96e04244a995e658eeb5a69699",
"9269dee0b0104b22b4043d3661f79350",
"a405cbc6d42d4f8f8be7c05f4e34128c",
"e702e948bb34481d995c75be223c4e16",
"c9949e2b99d14fa0bc4cfc88f42c2afb",
"48bbf9b662af47c5b99ebe24a6b70549",
"c1af10a57c0a40cf818d0974facdcc36",
"e4c1ff933c6e4ef49afbedffcdd99d5c",
"3caf3a6d48da403099bcdee89bda6949",
"7e0bbe2417e0420db1502390ba7c6c2d",
"5522658c84dc47a491f5deb08353b631",
"aecb331a01a44c9e92c74840faaf2616",
"caadc7751ff847b4a831dd6b2b53e60b",
"f0dd55c8f71a4f47a91a7018ab89d092",
"7a2d1ba8441e4a368a505c38d2c811ad",
"6657bbba902e43429224ed9c426389fe",
"a25ba73fb99448a3b46ac3571e2db0be",
"c2f518986b724620bbc67f7b6ede6d96",
"ed214eea73f54928af276883ddd53b5e",
"b241468a1d684fbb820baff6b9f9e362",
"0f7da532813445f1be01977cdec364ab",
"de7ac823a59d488995aa37bfbcec2e5b",
"fc5321766b8742ca97c4a839ba30d421",
"c4256f50e38e481083f3d366bfd91d3f",
"f7e4e90fb3fe4bbb85adb039404dd8e2",
"e0f8b5f130064bd69f4f3298e9536b5a",
"20956dab8f3e4f22830b4d9e56a5232a",
"4efe313f923c4ae585fb8a4353cecd97",
"3af59a3e9ac2430da201262fc54b5998",
"ad746cc40cdb461bba8cf04033d4afc5",
"3d09770f22854ca38213d4a64ace6df3",
"910df16ec7494eb68fb1f8ce95046414",
"080c7eed9cc0475980e85a530c91e616",
"e4fe961d149b461fb1d168d226c8aa1d",
"2a588c12d3814de495fa865a63629ba8",
"607a235508e54fdda0aef75311c7a213",
"383e14f14b0d4328a80e6b0283c421fa",
"913324d3476a4d04887d200f91afc553",
"4c0c6892c4f347deb4a85544664ff1e1",
"a863bb17b5984981bf9bd4ff93e438f4",
"b28286deba7c4152a8d2c21ea0d19402",
"fb9e17975b2349de81115173af6ac17a",
"f3b068de4fa6466e88970b73c868de0a",
"2127bee2928e43578b8b51e3c1fdfabf",
"a97f3d8c7bdf4292ae8ed133f059f635",
"67053bf18cd04347a0f2d2ff6134ae88",
"80e56300aee14b4386832aa1618c5d43",
"d096e33830754ea5b2e8f102548b805a",
"a913ea3370404f5f972754715889aced",
"35db2f7869f44aeab422409d27d5f7ec"
]
},
"id": "18b3d67c",
"outputId": "f0d7f72f-8166-439b-96da-ed7e30f8bdb3"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🦥 Unsloth: Will patch your computer to enable 2x faster free finetuning.\n",
"🦥 Unsloth Zoo will now patch everything to make training faster!\n",
"==((====))== Unsloth 2025.3.19: Fast Qwen2_5_Vl patching. Transformers: 4.50.0.\n",
" \\\\ /| Tesla T4. Num GPUs = 1. Max memory: 14.741 GB. Platform: Linux.\n",
"O^O/ \\_/ \\ Torch: 2.6.0+cu124. CUDA: 7.5. CUDA Toolkit: 12.4. Triton: 3.2.0\n",
"\\ / Bfloat16 = FALSE. FA [Xformers = 0.0.29.post3. FA2 = False]\n",
" \"-____-\" Free license: http://github.com/unslothai/unsloth\n",
"Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "73fc3ac47de840cda7a07297153404d5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors: 0%| | 0.00/5.97G [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "78ae8aea29e04420bcfe616061934d98",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"generation_config.json: 0%| | 0.00/267 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "45385885a26e42d0b1f52eda382fd6f4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"preprocessor_config.json: 0%| | 0.00/575 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using a slow image processor as `use_fast` is unset and a slow processor was saved with this model. `use_fast=True` will be the default behavior in v4.50, even if the model was saved with a slow processor. This will result in minor differences in outputs. You'll still be able to use a slow processor with `use_fast=False`.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "14e519d5e0834fd9a70a111140f8429a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/7.33k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "643db314d8e94feeb9cd8747909eaabe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"vocab.json: 0%| | 0.00/2.78M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "bbb5e6a0a8b64d10802fbf3e89778306",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"merges.txt: 0%| | 0.00/1.67M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c1af10a57c0a40cf818d0974facdcc36",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/11.4M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c2f518986b724620bbc67f7b6ede6d96",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"added_tokens.json: 0%| | 0.00/605 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3af59a3e9ac2430da201262fc54b5998",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"special_tokens_map.json: 0%| | 0.00/614 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a863bb17b5984981bf9bd4ff93e438f4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"chat_template.json: 0%| | 0.00/1.05k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from unsloth import FastVisionModel # FastLanguageModel for LLMs\n",
"import torch\n",
"\n",
"# 4bit pre quantized models we support for 4x faster downloading + no OOMs.\n",
"fourbit_models = [\n",
" \"unsloth/Llama-3.2-11B-Vision-Instruct-bnb-4bit\", # Llama 3.2 vision support\n",
" \"unsloth/Llama-3.2-11B-Vision-bnb-4bit\",\n",
" \"unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit\", # Can fit in a 80GB card!\n",
" \"unsloth/Llama-3.2-90B-Vision-bnb-4bit\",\n",
"\n",
" \"unsloth/Pixtral-12B-2409-bnb-4bit\", # Pixtral fits in 16GB!\n",
" \"unsloth/Pixtral-12B-Base-2409-bnb-4bit\", # Pixtral base model\n",
"\n",
" \"unsloth/Qwen2-VL-2B-Instruct-bnb-4bit\", # Qwen2 VL support\n",
" \"unsloth/Qwen2-VL-7B-Instruct-bnb-4bit\",\n",
" \"unsloth/Qwen2-VL-72B-Instruct-bnb-4bit\",\n",
"\n",
" \"unsloth/llava-v1.6-mistral-7b-hf-bnb-4bit\", # Any Llava variant works!\n",
" \"unsloth/llava-1.5-7b-hf-bnb-4bit\",\n",
"] # More models at https://huggingface.co/unsloth\n",
"\n",
"model, tokenizer = FastVisionModel.from_pretrained(\n",
" \"unsloth/Qwen2.5-VL-7B-Instruct-bnb-4bit\",\n",
" load_in_4bit = True, # Use 4bit to reduce memory use. False for 16bit LoRA.\n",
" use_gradient_checkpointing = \"unsloth\", # True or \"unsloth\" for long context\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "45f1a7d8",
"metadata": {
"id": "45f1a7d8"
},
"outputs": [],
"source": [
"model = FastVisionModel.get_peft_model(\n",
" model,\n",
" finetune_vision_layers = True, # False if not finetuning vision layers\n",
" finetune_language_layers = True, # False if not finetuning language layers\n",
" finetune_attention_modules = True, # False if not finetuning attention layers\n",
" finetune_mlp_modules = True, # False if not finetuning MLP layers\n",
"\n",
" r = 16, # The larger, the higher the accuracy, but might overfit\n",
" lora_alpha = 16, # Recommended alpha == r at least\n",
" lora_dropout = 0,\n",
" bias = \"none\",\n",
" random_state = 3407,\n",
" use_rslora = False, # We support rank stabilized LoRA\n",
" loftq_config = None, # And LoftQ\n",
" # target_modules = \"all-linear\", # Optional now! Can specify a list if needed\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "915566b6",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 177,
"referenced_widgets": [
"5e4f3f4910d1477b924362c095a0cedd",
"b5a01de096fa4e2daf66e235bd5686bb",
"e9195f3a3e29475f941c302fe2a88a83",
"0d6f6fb66522436786728d8602e2f466",
"94b72e08764c486d8eed43a4557f1d98",
"8e8281a56a3d4879b6b376077890c920",
"630894e18b264f7dae8eddb17304a1cd",
"697fc92abb824cf4a9bc78709640ba54",
"eb6d552d6c1d4e82a521b29b36ae3db0",
"7572f2d06114442ba94fc22761a55346",
"c6dcd15e155949cbb9698e43e55b7a90",
"7365368b63d9425db5d4e5514e6e0586",
"5997909fc34645ce9a03d82ab0932766",
"ea4ebb90b708493c85fa81fecf4d60c0",
"227724312eb045a58616f63c3a5b7407",
"4f58e8a2ddbb4a73a2421ea37c68fea9",
"7e89e5546e394162b7b0f793478527ff",
"db9ea237050045d8861d76bb3b995753",
"3a484309bbe148abb2ef05452850728a",
"5e601d00c0094d999a5b37b9555c111c",
"e7bd6c674af541d08c0acb5e47579156",
"927147d620b0426cb46b49b6d8dc2ffc",
"4ebb36e479884847bcef5736e276dfb9",
"7b5a059a8ef84817851d109fd7e3a7b5",
"0e949ae97d544d65af09cebe63041b8e",
"c817a779a9ff4a848391a7c7dff1e4ca",
"abae462b98c84006b71d4a62c8a47d5a",
"dc1a755aae6c44849d818fd96c046649",
"2650d2ce196e404a98cbfac96d0a9bef",
"36d579fdc2fb4c59b827f5bf7a92abd4",
"fccec1c2a389401eb614f5f1cfb15f0c",
"7b4d303966274c71b50312df12e7b87a",
"ce4bb2dffcf84ae9bf1f8ac86b2d768e",
"639b886f72e24951909e4ffb6cfa247d",
"7b13cf1727a04f5ca6de1f7eb536d800",
"631ce764f4684225a3c1e4455717a555",
"48af93dada914d8b88d5ffffd24ac666",
"4bd339c9d3ee43f39678d2c18baeef53",
"b1b12b8def994e748b08b27abcef4b87",
"bc38022049ce47628d8c215959c38b91",
"331d5d2bc67f44f283fc82481cb60411",
"0a5ad3bd338b4e6ea94a11a199d2f5ba",
"5c41f695158641f485349c20a1405cfd",
"89bc17f1911a43cca7196da232500fd6",
"f5629e8c82c848218f69810e1b21b0e4",
"5244452af0734f3183a7384435f9e1fe",
"69f645decfb64baca11cfbdb9773a458",
"d1788fabe3e34f6eb60fecab3c7490ba",
"8f423066ba8f421495f934a269053cc1",
"569d1435402e4533b0427a4b191b6754",
"b834a7ab12544f9b8305f5728677e921",
"e72ac7c9b7824c81a6e77e6fadad9f9c",
"828ad6e5fcfb44b3b4559ec5682d095d",
"dac611678f4949ae98051bdc975e083f",
"0a21bae13a3c46509db70dbe8e9de5eb"
]
},
"id": "915566b6",
"outputId": "ece64855-55d4-4011-c5b8-33a9bb622734"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5e4f3f4910d1477b924362c095a0cedd",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"README.md: 0%| | 0.00/519 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7365368b63d9425db5d4e5514e6e0586",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"train-00000-of-00001.parquet: 0%| | 0.00/344M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4ebb36e479884847bcef5736e276dfb9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"test-00000-of-00001.parquet: 0%| | 0.00/38.2M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "639b886f72e24951909e4ffb6cfa247d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating train split: 0%| | 0/68686 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f5629e8c82c848218f69810e1b21b0e4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Generating test split: 0%| | 0/7632 [00:00<?, ? examples/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from datasets import load_dataset\n",
"dataset = load_dataset(\"unsloth/LaTeX_OCR\", split = \"train\")"
]
},
{
"cell_type": "markdown",
"id": "6193435d",
"metadata": {
"id": "6193435d"
},
"source": [
"## Output\n",
"This shows a basic output example of the vision-language model."
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+146
View File
@@ -0,0 +1,146 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a050dfc0",
"metadata": {
"id": "a050dfc0"
},
"source": [
"# Sesame CSM (1B) - Text to Speech"
]
},
{
"cell_type": "markdown",
"id": "7c2c61ec",
"metadata": {
"id": "7c2c61ec"
},
"source": [
"This notebook showcases how to generate speech from text using the Sesame CSM 1B model. This is ideal for converting instructional or conversational content into natural audio output."
]
},
{
"cell_type": "markdown",
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Sesame_CSM_1B_TTS.ipynb)\n"
],
"metadata": {
"id": "5SA94wTb9AH-"
},
"id": "5SA94wTb9AH-"
},
{
"cell_type": "markdown",
"id": "ab27fd8d",
"metadata": {
"id": "ab27fd8d"
},
"source": [
"## 🧩 Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ac3a627f",
"metadata": {
"id": "ac3a627f"
},
"outputs": [],
"source": [
"!pip install -q transformers\n",
"!pip install -q torchaudio\n",
"!pip install -q soundfile"
]
},
{
"cell_type": "markdown",
"id": "a382e4d0",
"metadata": {
"id": "a382e4d0"
},
"source": [
"## 🛠️ Tools\n",
"- transformers for loading the model\n",
"- torchaudio for audio processing\n",
"- soundfile for playback"
]
},
{
"cell_type": "markdown",
"id": "7ff6eb6d",
"metadata": {
"id": "7ff6eb6d"
},
"source": [
"## 🧾 YAML Prompt\n",
"```yaml\n",
"task: \"Text to Speech\"\n",
"style: \"Clear, educational\"\n",
"language: \"en\"\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "0ab9cda8",
"metadata": {
"id": "0ab9cda8"
},
"source": [
"## 🧠 Main"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6459f8bd",
"metadata": {
"id": "6459f8bd"
},
"outputs": [],
"source": [
"from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq\n",
"import torchaudio\n",
"import soundfile as sf\n",
"import torch\n",
"\n",
"processor = AutoProcessor.from_pretrained(\"m-a-p/Sesame-CM\")\n",
"model = AutoModelForSpeechSeq2Seq.from_pretrained(\"m-a-p/Sesame-CM\")\n",
"model = model.to(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
"\n",
"text = \"Welcome to the world of voice synthesis using open models!\"\n",
"inputs = processor(text, return_tensors=\"pt\").to(model.device)\n",
"with torch.no_grad():\n",
" outputs = model.generate(**inputs)\n",
"speech = processor.batch_decode(outputs, return_tensors=\"pt\")[0]\n",
"\n",
"sf.write(\"output.wav\", speech.numpy(), 16000)"
]
},
{
"cell_type": "markdown",
"id": "376fe112",
"metadata": {
"id": "376fe112"
},
"source": [
"## 📤 Output\n",
"🖼️ Output Preview (Text Summary):\n",
"\n",
"Prompt: A clear educational text is converted to a .wav file.\n",
"\n",
"🎧 The output audio will say: 'Welcome to the world of voice synthesis using open models!'\n",
"This demonstrates how Sesame-CM can be used for building TTS applications easily."
]
}
],
"metadata": {
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,591 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "c417d47b",
"metadata": {
"id": "c417d47b"
},
"source": [
"# YouTube Influencer Intelligence Agent\n",
"\n",
"Analyzes YouTube influencers for marketing or collaboration purposes."
]
},
{
"cell_type": "markdown",
"id": "xox_eBaJg4rq",
"metadata": {
"id": "xox_eBaJg4rq"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/YouTube_Influencer_Intelligence_Agent.ipynb)"
]
},
{
"cell_type": "markdown",
"id": "jsaqhbElgHza",
"metadata": {
"id": "jsaqhbElgHza"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "324febba",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "324febba",
"outputId": "148556a5-fd5e-44ee-e4e1-56ae68709464"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/176.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m176.8/176.8 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m5.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.4/105.4 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m41.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.2/45.2 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q praisonaiagents openai duckduckgo_search"
]
},
{
"cell_type": "markdown",
"id": "pnILL4wigO--",
"metadata": {
"id": "pnILL4wigO--"
},
"source": [
"# Set OpenAI API Key"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "2997709c",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2997709c",
"outputId": "c6369f33-76c5-4b23-fd68-ed1ec92eec0e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"# 🔑 Securely input your API key\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"openai.api_key = os.getenv(\"OPENAI_API_KEY\")\n"
]
},
{
"cell_type": "markdown",
"id": "fhuSmjHFgW8t",
"metadata": {
"id": "fhuSmjHFgW8t"
},
"source": [
"# Import PraisonAI Agents"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1c01dc84",
"metadata": {
"id": "1c01dc84"
},
"outputs": [],
"source": [
"from praisonaiagents import Agent, Task, PraisonAIAgents"
]
},
{
"cell_type": "markdown",
"id": "49a41cdd",
"metadata": {
"id": "49a41cdd"
},
"source": [
"# YAML Prompt"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0b3a6096",
"metadata": {
"id": "0b3a6096"
},
"outputs": [],
"source": [
"yaml_prompt = \"\"\"\n",
"name: YouTubeInfluencerIntelligence\n",
"role: YouTube Channel Analysis and Strategy Expert\n",
"goal: Analyze YouTube influencers and channels to provide strategic insights, trends, and content suggestions.\n",
"backstory: You are a YouTube analytics expert trained in identifying trends, engagement metrics, and content strategies.\n",
"skills:\n",
" - Analyze subscriber and engagement data\n",
" - Spot content patterns and trends\n",
" - Recommend growth strategies\n",
" - Detect potential monetization methods\n",
"llm: gpt-4o\n",
"verbosity: true\n",
"format: markdown\n",
"\"\"\"\n"
]
},
{
"cell_type": "markdown",
"id": "dQ0vQrsggiqt",
"metadata": {
"id": "dQ0vQrsggiqt"
},
"source": [
"# Define the Intelligence Agent"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f293e64e",
"metadata": {
"id": "f293e64e"
},
"outputs": [],
"source": [
"yt_agent = Agent(\n",
" name=\"YouTubeInfluencerIntel\",\n",
" instructions=\"\"\"\n",
"You are a YouTube intelligence analyst. Your job is to research a specific channel, niche, or influencer topic.\n",
"Provide growth recommendations, engagement analysis, trending strategies, and monetization tips. Format in markdown.\n",
"\"\"\",\n",
" llm=\"gpt-4o\",\n",
" verbose=True,\n",
" markdown=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "ULFepw5ggoRY",
"metadata": {
"id": "ULFepw5ggoRY"
},
"source": [
"# Define the Task"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "pplhgO0WglsY",
"metadata": {
"id": "pplhgO0WglsY"
},
"outputs": [],
"source": [
"yt_task = Task(\n",
" name=\"AnalyzeInfluencerChannel\",\n",
" description=\"Analyze the growth strategy of the YouTube channel 'Ali Abdaal' and suggest content ideas for a new productivity creator.\",\n",
" expected_output=\"A markdown report with channel strengths, content patterns, audience engagement tips, and content ideas.\",\n",
" agent=yt_agent\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "JCLR8cZEguUV",
"metadata": {
"id": "JCLR8cZEguUV"
},
"source": [
"# Create Agent System"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "DT34DDBmgqbk",
"metadata": {
"id": "DT34DDBmgqbk"
},
"outputs": [],
"source": [
"yt_intel_system = PraisonAIAgents(\n",
" agents=[yt_agent],\n",
" tasks=[yt_task],\n",
" process=\"sequential\",\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "N1gjbZ33gzzN",
"metadata": {
"id": "N1gjbZ33gzzN"
},
"source": [
"# Run the Agent"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "yjM_e2rQgw2h",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"b04f460c5c974d6b9360a8bea97ab662",
"f464ceb8423c4e4484b6fd5318cca4c6"
]
},
"id": "yjM_e2rQgw2h",
"outputId": "90bb00e7-5829-4f53-ef90-ca9df38a3e23"
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">YouTubeInfluencerIntel</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mYouTubeInfluencerIntel\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b04f460c5c974d6b9360a8bea97ab662",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 12.5s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 12.5s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Analyze the growth strategy of the YouTube channel 'Ali Abdaal' and suggest <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> content ideas for a new productivity creator.. Expected Output: A markdown report with channel strengths, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> content patterns, audience engagement tips, and content ideas.. Please provide only the final result of your <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> work. Do not add any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Analyze the growth strategy of the YouTube channel 'Ali Abdaal' and suggest \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m content ideas for a new productivity creator.. Expected Output: A markdown report with channel strengths, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m content patterns, audience engagement tips, and content ideas.. Please provide only the final result of your \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m work. Do not add any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┃ <span style=\"font-weight: bold\">YouTube Channel Analysis: Ali Abdaal</span> ┃ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Channel Strengths</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Educational Content</span>: Ali Abdaal is known for his informative and educational content, focusing on <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>productivity, personal development, and tech reviews. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Authenticity</span>: His genuine and relatable personality helps build trust with his audience. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Consistency</span>: Regular uploads and a consistent content schedule keep the audience engaged. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">High-Quality Production</span>: Professional video and audio quality enhance viewer experience. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Diverse Content Formats</span>: Utilizes a mix of long-form videos, vlogs, and shorts to cater to different <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>audience preferences. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Content Patterns</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Productivity Tips</span>: Videos often focus on productivity hacks, study techniques, and time management. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Book Reviews and Summaries</span>: Regularly shares insights from books, appealing to an audience interested in <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>self-improvement. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Tech and Tools</span>: Reviews and recommendations of productivity tools and tech gadgets. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Personal Development</span>: Content on habits, routines, and personal growth strategies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Collaborations</span>: Features interviews and collaborations with other influencers and experts. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Audience Engagement Tips</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Community Building</span>: Encourage viewer interaction through comments, polls, and Q&amp;A sessions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Feedback Loop</span>: Regularly ask for audience feedback to tailor content to viewer preferences. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Live Streams</span>: Host live sessions to engage with the audience in real-time and build a stronger community. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Social Media Integration</span>: Use platforms like Instagram and Twitter to engage with the audience outside of <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>YouTube. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Content Ideas for a New Productivity Creator</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Daily Routine Vlogs</span>: Share a day-in-the-life video focusing on productivity habits and routines. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Productivity Challenges</span>: Create a series where you try different productivity techniques for a week and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>share results. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Tool Comparisons</span>: Compare popular productivity tools and apps, providing pros and cons for each. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Case Studies</span>: Analyze the productivity habits of successful individuals and extract actionable insights. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Interactive Workshops</span>: Host virtual workshops on productivity topics, encouraging viewer participation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 6 </span><span style=\"font-weight: bold\">Behind-the-Scenes</span>: Offer a glimpse into your content creation process and how you stay productive. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 7 </span><span style=\"font-weight: bold\">Book Club</span>: Start a monthly book club focusing on productivity and personal development books. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 8 </span><span style=\"font-weight: bold\">Myth Busting</span>: Debunk common productivity myths and provide evidence-based alternatives. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Trending Strategies</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Short-Form Content</span>: Leverage YouTube Shorts to capture attention with quick, impactful productivity tips. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">SEO Optimization</span>: Use relevant keywords and tags to improve video discoverability. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Cross-Promotion</span>: Collaborate with other creators in the productivity niche to reach new audiences. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Series Format</span>: Develop a series around a specific productivity theme to encourage binge-watching. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold; text-decoration: underline\">Monetization Tips</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Affiliate Marketing</span>: Promote productivity tools and books with affiliate links. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Online Courses</span>: Develop and sell courses on productivity and personal development. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Merchandise</span>: Create branded merchandise related to productivity themes. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Sponsorships</span>: Partner with brands that align with your content and audience interests. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Memberships</span>: Offer exclusive content and perks through YouTube memberships or Patreon. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> By leveraging these insights and strategies, a new productivity creator can effectively grow their channel and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> engage with their audience. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┃ \u001b[1mYouTube Channel Analysis: Ali Abdaal\u001b[0m ┃ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mChannel Strengths\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mEducational Content\u001b[0m: Ali Abdaal is known for his informative and educational content, focusing on \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mproductivity, personal development, and tech reviews. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mAuthenticity\u001b[0m: His genuine and relatable personality helps build trust with his audience. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mConsistency\u001b[0m: Regular uploads and a consistent content schedule keep the audience engaged. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mHigh-Quality Production\u001b[0m: Professional video and audio quality enhance viewer experience. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDiverse Content Formats\u001b[0m: Utilizes a mix of long-form videos, vlogs, and shorts to cater to different \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0maudience preferences. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mContent Patterns\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mProductivity Tips\u001b[0m: Videos often focus on productivity hacks, study techniques, and time management. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mBook Reviews and Summaries\u001b[0m: Regularly shares insights from books, appealing to an audience interested in \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mself-improvement. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mTech and Tools\u001b[0m: Reviews and recommendations of productivity tools and tech gadgets. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mPersonal Development\u001b[0m: Content on habits, routines, and personal growth strategies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCollaborations\u001b[0m: Features interviews and collaborations with other influencers and experts. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mAudience Engagement Tips\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCommunity Building\u001b[0m: Encourage viewer interaction through comments, polls, and Q&A sessions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mFeedback Loop\u001b[0m: Regularly ask for audience feedback to tailor content to viewer preferences. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mLive Streams\u001b[0m: Host live sessions to engage with the audience in real-time and build a stronger community. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mSocial Media Integration\u001b[0m: Use platforms like Instagram and Twitter to engage with the audience outside of \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mYouTube. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mContent Ideas for a New Productivity Creator\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mDaily Routine Vlogs\u001b[0m: Share a day-in-the-life video focusing on productivity habits and routines. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mProductivity Challenges\u001b[0m: Create a series where you try different productivity techniques for a week and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mshare results. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mTool Comparisons\u001b[0m: Compare popular productivity tools and apps, providing pros and cons for each. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mCase Studies\u001b[0m: Analyze the productivity habits of successful individuals and extract actionable insights. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mInteractive Workshops\u001b[0m: Host virtual workshops on productivity topics, encouraging viewer participation. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mBehind-the-Scenes\u001b[0m: Offer a glimpse into your content creation process and how you stay productive. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 7 \u001b[0m\u001b[1mBook Club\u001b[0m: Start a monthly book club focusing on productivity and personal development books. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 8 \u001b[0m\u001b[1mMyth Busting\u001b[0m: Debunk common productivity myths and provide evidence-based alternatives. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mTrending Strategies\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mShort-Form Content\u001b[0m: Leverage YouTube Shorts to capture attention with quick, impactful productivity tips. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mSEO Optimization\u001b[0m: Use relevant keywords and tags to improve video discoverability. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mCross-Promotion\u001b[0m: Collaborate with other creators in the productivity niche to reach new audiences. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mSeries Format\u001b[0m: Develop a series around a specific productivity theme to encourage binge-watching. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;4mMonetization Tips\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mAffiliate Marketing\u001b[0m: Promote productivity tools and books with affiliate links. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mOnline Courses\u001b[0m: Develop and sell courses on productivity and personal development. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mMerchandise\u001b[0m: Create branded merchandise related to productivity themes. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mSponsorships\u001b[0m: Partner with brands that align with your content and audience interests. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mMemberships\u001b[0m: Offer exclusive content and perks through YouTube memberships or Patreon. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m By leveraging these insights and strategies, a new productivity creator can effectively grow their channel and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m engage with their audience. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🎥 YouTube Intelligence Report:\n",
" # YouTube Channel Analysis: Ali Abdaal\n",
"\n",
"## Channel Strengths\n",
"- **Educational Content**: Ali Abdaal is known for his informative and educational content, focusing on productivity, personal development, and tech reviews.\n",
"- **Authenticity**: His genuine and relatable personality helps build trust with his audience.\n",
"- **Consistency**: Regular uploads and a consistent content schedule keep the audience engaged.\n",
"- **High-Quality Production**: Professional video and audio quality enhance viewer experience.\n",
"- **Diverse Content Formats**: Utilizes a mix of long-form videos, vlogs, and shorts to cater to different audience preferences.\n",
"\n",
"## Content Patterns\n",
"- **Productivity Tips**: Videos often focus on productivity hacks, study techniques, and time management.\n",
"- **Book Reviews and Summaries**: Regularly shares insights from books, appealing to an audience interested in self-improvement.\n",
"- **Tech and Tools**: Reviews and recommendations of productivity tools and tech gadgets.\n",
"- **Personal Development**: Content on habits, routines, and personal growth strategies.\n",
"- **Collaborations**: Features interviews and collaborations with other influencers and experts.\n",
"\n",
"## Audience Engagement Tips\n",
"- **Community Building**: Encourage viewer interaction through comments, polls, and Q&A sessions.\n",
"- **Feedback Loop**: Regularly ask for audience feedback to tailor content to viewer preferences.\n",
"- **Live Streams**: Host live sessions to engage with the audience in real-time and build a stronger community.\n",
"- **Social Media Integration**: Use platforms like Instagram and Twitter to engage with the audience outside of YouTube.\n",
"\n",
"## Content Ideas for a New Productivity Creator\n",
"1. **Daily Routine Vlogs**: Share a day-in-the-life video focusing on productivity habits and routines.\n",
"2. **Productivity Challenges**: Create a series where you try different productivity techniques for a week and share results.\n",
"3. **Tool Comparisons**: Compare popular productivity tools and apps, providing pros and cons for each.\n",
"4. **Case Studies**: Analyze the productivity habits of successful individuals and extract actionable insights.\n",
"5. **Interactive Workshops**: Host virtual workshops on productivity topics, encouraging viewer participation.\n",
"6. **Behind-the-Scenes**: Offer a glimpse into your content creation process and how you stay productive.\n",
"7. **Book Club**: Start a monthly book club focusing on productivity and personal development books.\n",
"8. **Myth Busting**: Debunk common productivity myths and provide evidence-based alternatives.\n",
"\n",
"## Trending Strategies\n",
"- **Short-Form Content**: Leverage YouTube Shorts to capture attention with quick, impactful productivity tips.\n",
"- **SEO Optimization**: Use relevant keywords and tags to improve video discoverability.\n",
"- **Cross-Promotion**: Collaborate with other creators in the productivity niche to reach new audiences.\n",
"- **Series Format**: Develop a series around a specific productivity theme to encourage binge-watching.\n",
"\n",
"## Monetization Tips\n",
"- **Affiliate Marketing**: Promote productivity tools and books with affiliate links.\n",
"- **Online Courses**: Develop and sell courses on productivity and personal development.\n",
"- **Merchandise**: Create branded merchandise related to productivity themes.\n",
"- **Sponsorships**: Partner with brands that align with your content and audience interests.\n",
"- **Memberships**: Offer exclusive content and perks through YouTube memberships or Patreon.\n",
"\n",
"By leveraging these insights and strategies, a new productivity creator can effectively grow their channel and engage with their audience.\n"
]
}
],
"source": [
"query = \"Study the YouTube channel 'Ali Abdaal'. What makes it grow? Give tips for new productivity YouTubers.\"\n",
"output = yt_intel_system.start(input=query)\n",
"\n",
"# 🎬 Output\n",
"print(\"🎥 YouTube Intelligence Report:\\n\", output)\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,466 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "YiPIh4QSYBCW"
},
"source": [
"# 🤖 GitHub Repo Analyzer Agent\n",
"AI agent powered by PraisonAI and OpenAI to analyze GitHub repositories using GitHub API."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2Jkig4AGZG1n"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/github_repo_analyzer_agent.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aAiN-i3UYvsN"
},
"source": [
"# 📦 Install dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "1B_sEv9PYBCZ"
},
"outputs": [],
"source": [
"!pip install praisonaiagents openai requests"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eUViHgGPaObo"
},
"source": [
"# Tools Used"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ut_APj9xaSQI"
},
"source": [
"🧠 praisonaiagents – Smart AI agent\n",
"\n",
"🔗 openai – GPT-powered responses\n",
"\n",
"📂 requests – GitHub repo analysis\n",
"\n",
"🖥️ Python I/O – Interactive CLI in notebook"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hDsXrWYpYzuB"
},
"source": [
"# 🔐 Set OpenAI API Key"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "aea6TQ4hYBCb"
},
"outputs": [],
"source": [
"import os\n",
"if not os.getenv(\"OPENAI_API_KEY\"):\n",
" os.environ[\"OPENAI_API_KEY\"] = input(\"🔐 Enter your OpenAI API key: \")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OvQvZZonY2YI"
},
"source": [
"# 🧠 Imports"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "1XSubvMsYBCc"
},
"outputs": [],
"source": [
"import requests\n",
"import openai\n",
"from praisonaiagents import Agent\n",
"\n",
"openai.api_key = os.environ[\"OPENAI_API_KEY\"]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "s0o_V2oqY4rJ"
},
"source": [
"# 🤖 Create the Agent"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "40KpW78vYBCc"
},
"outputs": [],
"source": [
"agent = Agent(instructions=\"\"\"\n",
"You are a GitHub codebase explainer. When given a repo URL, fetch summary of\n",
"its files and provide insightful analysis. Be helpful and concise.\n",
"\"\"\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q4b3ts3lY-Fe"
},
"source": [
"# 📂 Fetch GitHub repo file names"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "8fWBzdRxYBCd"
},
"outputs": [],
"source": [
"def fetch_repo_files(repo_url):\n",
" api_url = repo_url.replace(\"https://github.com\", \"https://api.github.com/repos\") + \"/contents\"\n",
" r = requests.get(api_url)\n",
" return [f[\"name\"] for f in r.json()] if r.status_code == 200 else []"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "de0Du9OsZAjo"
},
"source": [
"# 💬 Ask Agent"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "v85t6c8PYBCd"
},
"outputs": [],
"source": [
"def ask_agent(repo_url):\n",
" files = fetch_repo_files(repo_url)\n",
" if not files:\n",
" return \"❌ Cannot fetch repo contents.\"\n",
" return agent.start(f\"Repo contains files: {files}. Analyze key components and structure.\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8HOy15H0ZCsZ"
},
"source": [
"# 🧪 Run the agent"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"c536cd3c498244d4b0c2526b00610f29",
"f0baa19f760c4a869064e51fde0ea4d0"
]
},
"id": "QNmR8_ZdYBCd",
"outputId": "448195d1-28eb-43c1-e86c-5308c4e6d089"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🔗 Enter GitHub repository URL: https://github.com/DhivyaBharathy-web/agents\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Agent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c536cd3c498244d4b0c2526b00610f29",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 10.0s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 10.0s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Repo contains files: ['Fuel_Emission_Agent_Intelligence_Agent.ipynb', <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> 'fixed_Cognitive_Assistant_Agent_Team.ipynb', 'fixed_Crypto_Research_Agent_Intelligence_Agent.ipynb', <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> 'fixed_E_commerce_Shopping_Assistant.ipynb', 'fixed_Home_Buying_Real_Estate_Agent.ipynb', <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> 'fixed_YouTube_Influencer_Intelligence_Agent.ipynb', 'fixed_voiGno_Restaurant_Agent_PraisonAI.ipynb']. Analyze <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> key components and structure. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m Repo contains files: ['Fuel_Emission_Agent_Intelligence_Agent.ipynb', \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m 'fixed_Cognitive_Assistant_Agent_Team.ipynb', 'fixed_Crypto_Research_Agent_Intelligence_Agent.ipynb', \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m 'fixed_E_commerce_Shopping_Assistant.ipynb', 'fixed_Home_Buying_Real_Estate_Agent.ipynb', \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m 'fixed_YouTube_Influencer_Intelligence_Agent.ipynb', 'fixed_voiGno_Restaurant_Agent_PraisonAI.ipynb']. Analyze \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m key components and structure. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> The repository contains several Jupyter Notebook files, each seemingly focused on different specialized agents. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Here's a breakdown of the key components and structure based on the file names: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Fuel_Emission_Agent_Intelligence_Agent.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This notebook likely focuses on analyzing and possibly predicting fuel emissions. It might include data <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>analysis, machine learning models, or simulations to assess environmental impacts or optimize fuel usage. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">fixed_Cognitive_Assistant_Agent_Team.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This file suggests a cognitive assistant, possibly designed to aid in decision-making or provide <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>intelligent recommendations. The \"Team\" aspect might indicate collaborative features or multi-agent <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>interactions. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">fixed_Crypto_Research_Agent_Intelligence_Agent.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This notebook is probably dedicated to cryptocurrency research. It might include data analysis, market <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>trend predictions, or sentiment analysis related to cryptocurrencies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">fixed_E_commerce_Shopping_Assistant.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This agent likely serves as a shopping assistant, possibly providing product recommendations, price <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>comparisons, or personalized shopping experiences for e-commerce platforms. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">fixed_Home_Buying_Real_Estate_Agent.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This notebook appears to be focused on the real estate market, potentially offering insights into <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>property values, market trends, or personalized home-buying recommendations. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 6 </span><span style=\"font-weight: bold\">fixed_YouTube_Influencer_Intelligence_Agent.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This file likely deals with analyzing YouTube influencers, possibly providing insights into influencer <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>performance, audience engagement, or content optimization strategies. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 7 </span><span style=\"font-weight: bold\">fixed_voiGno_Restaurant_Agent_PraisonAI.ipynb</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>This agent seems to be related to the restaurant industry, possibly offering services like menu <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>optimization, customer feedback analysis, or operational efficiency improvements. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Overall Structure and Insights</span>: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The repository appears to focus on developing intelligent agents across various domains, each tailored to <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>specific industry needs. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The use of Jupyter Notebooks suggests an emphasis on data analysis, visualization, and possibly machine <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>learning or AI model development. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The prefix \"fixed_\" in the file names might indicate that these are refined or updated versions of previous <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>iterations. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>The diversity of domains covered (environmental, cognitive, financial, e-commerce, real estate, social <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>media, and hospitality) suggests a broad application of AI and data-driven insights. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> These notebooks likely contain a mix of data preprocessing, model training, and evaluation, along with <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> visualizations to support the findings and recommendations of each agent. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m The repository contains several Jupyter Notebook files, each seemingly focused on different specialized agents. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Here's a breakdown of the key components and structure based on the file names: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mFuel_Emission_Agent_Intelligence_Agent.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis notebook likely focuses on analyzing and possibly predicting fuel emissions. It might include data \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0manalysis, machine learning models, or simulations to assess environmental impacts or optimize fuel usage. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mfixed_Cognitive_Assistant_Agent_Team.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis file suggests a cognitive assistant, possibly designed to aid in decision-making or provide \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mintelligent recommendations. The \"Team\" aspect might indicate collaborative features or multi-agent \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0minteractions. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mfixed_Crypto_Research_Agent_Intelligence_Agent.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis notebook is probably dedicated to cryptocurrency research. It might include data analysis, market \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mtrend predictions, or sentiment analysis related to cryptocurrencies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mfixed_E_commerce_Shopping_Assistant.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis agent likely serves as a shopping assistant, possibly providing product recommendations, price \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mcomparisons, or personalized shopping experiences for e-commerce platforms. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mfixed_Home_Buying_Real_Estate_Agent.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis notebook appears to be focused on the real estate market, potentially offering insights into \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mproperty values, market trends, or personalized home-buying recommendations. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mfixed_YouTube_Influencer_Intelligence_Agent.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis file likely deals with analyzing YouTube influencers, possibly providing insights into influencer \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mperformance, audience engagement, or content optimization strategies. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 7 \u001b[0m\u001b[1mfixed_voiGno_Restaurant_Agent_PraisonAI.ipynb\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m • \u001b[0mThis agent seems to be related to the restaurant industry, possibly offering services like menu \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0moptimization, customer feedback analysis, or operational efficiency improvements. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mOverall Structure and Insights\u001b[0m: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mThe repository appears to focus on developing intelligent agents across various domains, each tailored to \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mspecific industry needs. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mThe use of Jupyter Notebooks suggests an emphasis on data analysis, visualization, and possibly machine \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mlearning or AI model development. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mThe prefix \"fixed_\" in the file names might indicate that these are refined or updated versions of previous \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0miterations. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0mThe diversity of domains covered (environmental, cognitive, financial, e-commerce, real estate, social \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mmedia, and hospitality) suggests a broad application of AI and data-driven insights. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m These notebooks likely contain a mix of data preprocessing, model training, and evaluation, along with \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m visualizations to support the findings and recommendations of each agent. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"🧠 Agent Insight:\n",
" The repository contains several Jupyter Notebook files, each seemingly focused on different specialized agents. Here's a breakdown of the key components and structure based on the file names:\n",
"\n",
"1. **Fuel_Emission_Agent_Intelligence_Agent.ipynb**:\n",
" - This notebook likely focuses on analyzing and possibly predicting fuel emissions. It might include data analysis, machine learning models, or simulations to assess environmental impacts or optimize fuel usage.\n",
"\n",
"2. **fixed_Cognitive_Assistant_Agent_Team.ipynb**:\n",
" - This file suggests a cognitive assistant, possibly designed to aid in decision-making or provide intelligent recommendations. The \"Team\" aspect might indicate collaborative features or multi-agent interactions.\n",
"\n",
"3. **fixed_Crypto_Research_Agent_Intelligence_Agent.ipynb**:\n",
" - This notebook is probably dedicated to cryptocurrency research. It might include data analysis, market trend predictions, or sentiment analysis related to cryptocurrencies.\n",
"\n",
"4. **fixed_E_commerce_Shopping_Assistant.ipynb**:\n",
" - This agent likely serves as a shopping assistant, possibly providing product recommendations, price comparisons, or personalized shopping experiences for e-commerce platforms.\n",
"\n",
"5. **fixed_Home_Buying_Real_Estate_Agent.ipynb**:\n",
" - This notebook appears to be focused on the real estate market, potentially offering insights into property values, market trends, or personalized home-buying recommendations.\n",
"\n",
"6. **fixed_YouTube_Influencer_Intelligence_Agent.ipynb**:\n",
" - This file likely deals with analyzing YouTube influencers, possibly providing insights into influencer performance, audience engagement, or content optimization strategies.\n",
"\n",
"7. **fixed_voiGno_Restaurant_Agent_PraisonAI.ipynb**:\n",
" - This agent seems to be related to the restaurant industry, possibly offering services like menu optimization, customer feedback analysis, or operational efficiency improvements.\n",
"\n",
"**Overall Structure and Insights**:\n",
"- The repository appears to focus on developing intelligent agents across various domains, each tailored to specific industry needs.\n",
"- The use of Jupyter Notebooks suggests an emphasis on data analysis, visualization, and possibly machine learning or AI model development.\n",
"- The prefix \"fixed_\" in the file names might indicate that these are refined or updated versions of previous iterations.\n",
"- The diversity of domains covered (environmental, cognitive, financial, e-commerce, real estate, social media, and hospitality) suggests a broad application of AI and data-driven insights.\n",
"\n",
"These notebooks likely contain a mix of data preprocessing, model training, and evaluation, along with visualizations to support the findings and recommendations of each agent.\n"
]
}
],
"source": [
"repo = input(\"🔗 Enter GitHub repository URL: \")\n",
"print(\"\\n🧠 Agent Insight:\\n\", ask_agent(repo))"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
@@ -0,0 +1,779 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "Ma_-6sDA-RaE"
},
"source": [
"# AI‑Powered Personalized Learning Assistant with Smart Content Chatbot\n",
"Powered by **praisonaiagents**, **OpenAI API**, and **Hugging Face Transformers**.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dSQ-cb--A7Ys"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/personalized_learning_assistant.ipynb)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mu7qWPtq_eOd"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bPvUlNIV-RaK"
},
"outputs": [],
"source": [
"!pip install praisonaiagents openai transformers"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z_SH8eTwAf3v"
},
"source": [
"# Tools Used"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ffqa_kI_ApwO"
},
"source": [
"✅ praisonaiagents – Builds the smart tutoring agent.\n",
"\n",
"✅ openai – Connects to OpenAI’s GPT for accurate responses.\n",
"\n",
"✅ Hugging Face transformers – Uses GPT-2 as a fallback if OpenAI isn’t available.\n",
"\n",
"✅Python I/O – Enables interactive chat using input() and print()."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fYU4lvNV_jyp"
},
"source": [
"# Set Api Key"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "gXlxt_gz-RaL"
},
"outputs": [],
"source": [
"import os\n",
"os.environ['OPENAI_API_KEY'] = input('Enter your OpenAI API key: ')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yh4uKOB4_xQl"
},
"source": [
"# Main"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 258,
"referenced_widgets": [
"dc97b547b11b41c79f293032f84243a3",
"ff4335dceb3d4b3b8d13a04f5c0bff73",
"df648eb8626e40b5bc13ae58fff1b42e",
"c0061c2cf09c4d8f9d0dcd735e464c5d",
"bb1b511cc3b644bfa5ebcdc9fa3cc6b6",
"e204a3e4fd65431985317aa51287b15f",
"c884cfdd133e42fd8c8b54505b1494c6",
"b533995c6724481486c1a753ca1a1966",
"0b7c2014d0b3493c9b9d2325e0a846e1",
"16ade62581ac412dac0924574366e977",
"5e3ef88a547e418d9b5a26671c352fa6",
"7b71a29acb1f44ca93c962114163fcff",
"9723d0ca7c1f4abfb93bbbede0eb65d4",
"95a1b145785c4fd881a58961afd385e5",
"4a1acd18aad64a7a8d39bba617577ee4",
"0c82f0b829f049ab91fa9a81970917c5",
"c2f10a3ec48f41ad9c85941bdac0fdde",
"c1fd448e3cad48bc82f309eabd25d5c5",
"bb982458adec49608bf01c35ee6c36e5",
"843019e709cd40eb9afef212857f5dcb",
"c7d4261778a54645b1d3f793ddf25d19",
"f01403e275fb4ac7b90e4fc25695caa4",
"362e1762012341b180502fa68bb1d4c1",
"637a253c8a1049ceb3cb45eb38d435ff",
"3c583202d1ec4eac90387fad555c84c2",
"bad0f052849843f3a9b7c250da3a6138",
"8fdb3bee2379482fba84c8a8ee4b9950",
"5b5dc04fdd094565a49fd5df77455e81",
"806e3fc688704788a8350efae8175116",
"50ab46cbe06a42c1b6f7f2cc63af3ec2",
"47389688c19742f7b06f99ededd12890",
"d87a6ec5eeb44b2782350f44c7a7eb05",
"84f5fd3514e74389a333478bb9aa0f44",
"b9c7aa568136493797109b873ebe3616",
"ac18e246e59b4b2c82969d51c0f2298d",
"67d92a37e63b43b288aa4bdd552d61e1",
"0a033fe3fdf143dd804f04b9b97762d0",
"75975646a23c4196843aecc651cff6f1",
"e2458c89346541b29002f4fb92922488",
"7ca831df46234cb1b120ed6710998c22",
"eeadb7301f434e9fbcf0b38eb47336d7",
"d5225c830bf7456297fb69439bd43b54",
"03f44b7f997e4ef3a2b1054007ca4a4e",
"c63ed8fc81c54d7b92ecbbce9fdc950b",
"0808ee0189734b6ba992df2be9d4f15f",
"70fca3c1206a4bf9b442d8bf2e4368b8",
"e25e0dbf47e44d9cb22f309a83fe0707",
"e2a0fcc56c114159b931887a673c8bfe",
"a2d5263a5b6e4dd594d869e0a38c1fa1",
"715bbacb30d54d50ba6328e77bdbcffb",
"ecc05aff07b04b8fbce16dcea83008f8",
"9e0b0e71547e42ae91ba4d8e027744f4",
"1758ba511d564b9295cddf83f176d32b",
"3c6601ed2b494d01910e4f30043ef95d",
"de5a8ba940f742af8001f70c029b56b8",
"ea77452dd7d0402991cfadc717a47d19",
"a181f094d7184df5b747cafcdacb832a",
"dbf86357b88f485d816528361c8f31c7",
"6453702474fb4383889955a4ecda0168",
"2c380d372b394252a5b13fd5c9a7f4e8",
"0a92287900bf43e18df6d36ba17138cc",
"2dfd301479704b2eaa0784effa5be92f",
"301cd584eaa14333ab2e3c3b12181745",
"50f0b5c832a34c7ebfc9e9d741184786",
"7574fc34bcd14b059bb2d285fb147fe4",
"91cccc1c2d39422bb323da0d6f2448b0",
"db0c8ba302844fd5982c6ac996fbb868",
"52e1b827d7c84ed3b217d43cc014c22c",
"0187570a62f044eeb13426392ad173d9",
"050c6f7089d841abae0c85f656715dad",
"73d3092c22bb49a69984f190d002e2d0",
"f5f9136e41fa45a684eca1feebb84f07",
"9d9c38b4aa824b5ca456aff5bc469576",
"7514acf98dc54826a1e305caac9ec4d9",
"c8b83d6e35f4412d9990355105a0a65c",
"a0dfc6c2761846168663e689ecfa8752",
"d3687494bbd0465a99e7bb5fb62e36f8"
]
},
"id": "XshcuLCO-RaM",
"outputId": "95d308ed-cb4a-402b-d755-afc8257afe34"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dc97b547b11b41c79f293032f84243a3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"config.json: 0%| | 0.00/665 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7b71a29acb1f44ca93c962114163fcff",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors: 0%| | 0.00/548M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "362e1762012341b180502fa68bb1d4c1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"generation_config.json: 0%| | 0.00/124 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b9c7aa568136493797109b873ebe3616",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/26.0 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0808ee0189734b6ba992df2be9d4f15f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"vocab.json: 0%| | 0.00/1.04M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ea77452dd7d0402991cfadc717a47d19",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"merges.txt: 0%| | 0.00/456k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "db0c8ba302844fd5982c6ac996fbb868",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/1.36M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Device set to use cpu\n"
]
}
],
"source": [
"from praisonaiagents import Agent\n",
"from transformers import pipeline as hf_pipeline\n",
"import openai\n",
"\n",
"openai.api_key = os.getenv('OPENAI_API_KEY')\n",
"\n",
"# Fallback NLP tool\n",
"hf_chatbot = hf_pipeline('text-generation', model='gpt2')\n",
"\n",
"# Create smart Agent with praisonaiagents\n",
"agent = Agent(instructions='You are a friendly tutor. Answer learner questions clearly and helpfully.')\n",
"\n",
"def chat_with_ai(user_input):\n",
" try:\n",
" return agent.start(user_input)\n",
" except Exception as e:\n",
" print('[Fallback GPT-2] ', e)\n",
" return hf_chatbot(user_input, max_length=100)[0]['generated_text']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"be1777343939486c941c1959f7632104",
"1e3a02318cb642cb9304dece111a70cc",
"7dca42e3bc724c6e9f63fd049a4539ea",
"5b4ade0a459e42d38bc3cf84f01f6538"
]
},
"id": "vELE_tDT-RaN",
"outputId": "8ac6cf86-7894-47a0-b47b-cbc1cb474b41"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"You: What is the Pythagorean theorem?\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Agent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "be1777343939486c941c1959f7632104",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 6.8s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 6.8s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> What is the Pythagorean theorem? <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m What is the Pythagorean theorem? \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> The Pythagorean theorem is a fundamental principle in geometry that relates to right-angled triangles. It <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> states that in a right-angled triangle, the square of the length of the hypotenuse (the side opposite the right <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> angle) is equal to the sum of the squares of the lengths of the other two sides. This can be expressed with the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> formula: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> [ a^2 + b^2 = c^2 ] <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Here, ( c ) represents the length of the hypotenuse, while ( a ) and ( b ) represent the lengths of the other <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> two sides. This theorem is useful for calculating the length of one side of a right triangle if the lengths of <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> the other two sides are known. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m The Pythagorean theorem is a fundamental principle in geometry that relates to right-angled triangles. It \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m states that in a right-angled triangle, the square of the length of the hypotenuse (the side opposite the right \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m angle) is equal to the sum of the squares of the lengths of the other two sides. This can be expressed with the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m formula: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m [ a^2 + b^2 = c^2 ] \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Here, ( c ) represents the length of the hypotenuse, while ( a ) and ( b ) represent the lengths of the other \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m two sides. This theorem is useful for calculating the length of one side of a right triangle if the lengths of \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m the other two sides are known. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🤖 Tutor: The Pythagorean theorem is a fundamental principle in geometry that relates to right-angled triangles. It states that in a right-angled triangle, the square of the length of the hypotenuse (the side opposite the right angle) is equal to the sum of the squares of the lengths of the other two sides. This can be expressed with the formula:\n",
"\n",
"\\[ a^2 + b^2 = c^2 \\]\n",
"\n",
"Here, \\( c \\) represents the length of the hypotenuse, while \\( a \\) and \\( b \\) represent the lengths of the other two sides. This theorem is useful for calculating the length of one side of a right triangle if the lengths of the other two sides are known.\n",
"You: How does photosynthesis work?\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Agent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7dca42e3bc724c6e9f63fd049a4539ea",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 7.2s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 7.2s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> How does photosynthesis work? <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m How does photosynthesis work? \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Photosynthesis is the process by which green plants, algae, and some bacteria convert light energy, usually <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> from the sun, into chemical energy stored in glucose. This process is essential for life on Earth as it <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> provides the oxygen we breathe and forms the base of the food chain. Here's how it works: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 1 </span><span style=\"font-weight: bold\">Light Absorption</span>: Photosynthesis begins when chlorophyll, the green pigment in plant cells, absorbs <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>sunlight. This primarily occurs in the chloroplasts of plant cells. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 2 </span><span style=\"font-weight: bold\">Water Splitting (Photolysis)</span>: The absorbed light energy is used to split water molecules (H₂O) into oxygen, <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>protons, and electrons. This reaction releases oxygen as a byproduct, which is expelled into the atmosphere. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 3 </span><span style=\"font-weight: bold\">Energy Conversion (Light Reactions)</span>: The electrons and protons generated from water splitting are used in <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>the light-dependent reactions. These reactions occur in the thylakoid membranes of the chloroplasts and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>result in the production of ATP (adenosine triphosphate) and NADPH, which are energy carriers. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 4 </span><span style=\"font-weight: bold\">Carbon Fixation (Calvin Cycle)</span>: In the light-independent reactions, also known as the Calvin Cycle, ATP and <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>NADPH produced in the light reactions are used to convert carbon dioxide (CO₂) from the atmosphere into <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>glucose (C₆H₁₂O₆). This process occurs in the stroma of the chloroplasts. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> 5 </span><span style=\"font-weight: bold\">Glucose Formation</span>: The glucose produced can be used immediately by the plant for energy or can be converted <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> </span>into other carbohydrates, such as starch, for storage. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Overall, the simplified equation for photosynthesis is: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> [ 6CO₂ + 6H₂O + light \\ energy \\rightarrow C₆H₁₂O₆ + 6O₂ ] <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> This equation shows that carbon dioxide and water, in the presence of light energy, are transformed into <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> glucose and oxygen. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m Photosynthesis is the process by which green plants, algae, and some bacteria convert light energy, usually \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m from the sun, into chemical energy stored in glucose. This process is essential for life on Earth as it \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m provides the oxygen we breathe and forms the base of the food chain. Here's how it works: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mLight Absorption\u001b[0m: Photosynthesis begins when chlorophyll, the green pigment in plant cells, absorbs \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0msunlight. This primarily occurs in the chloroplasts of plant cells. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mWater Splitting (Photolysis)\u001b[0m: The absorbed light energy is used to split water molecules (H₂O) into oxygen, \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mprotons, and electrons. This reaction releases oxygen as a byproduct, which is expelled into the atmosphere. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mEnergy Conversion (Light Reactions)\u001b[0m: The electrons and protons generated from water splitting are used in \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mthe light-dependent reactions. These reactions occur in the thylakoid membranes of the chloroplasts and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mresult in the production of ATP (adenosine triphosphate) and NADPH, which are energy carriers. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mCarbon Fixation (Calvin Cycle)\u001b[0m: In the light-independent reactions, also known as the Calvin Cycle, ATP and \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mNADPH produced in the light reactions are used to convert carbon dioxide (CO₂) from the atmosphere into \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0mglucose (C₆H₁₂O₆). This process occurs in the stroma of the chloroplasts. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mGlucose Formation\u001b[0m: The glucose produced can be used immediately by the plant for energy or can be converted \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m \u001b[0minto other carbohydrates, such as starch, for storage. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Overall, the simplified equation for photosynthesis is: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m [ 6CO₂ + 6H₂O + light \\ energy \\rightarrow C₆H₁₂O₆ + 6O₂ ] \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m This equation shows that carbon dioxide and water, in the presence of light energy, are transformed into \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m glucose and oxygen. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🤖 Tutor: Photosynthesis is the process by which green plants, algae, and some bacteria convert light energy, usually from the sun, into chemical energy stored in glucose. This process is essential for life on Earth as it provides the oxygen we breathe and forms the base of the food chain. Here's how it works:\n",
"\n",
"1. **Light Absorption**: Photosynthesis begins when chlorophyll, the green pigment in plant cells, absorbs sunlight. This primarily occurs in the chloroplasts of plant cells.\n",
"\n",
"2. **Water Splitting (Photolysis)**: The absorbed light energy is used to split water molecules (H₂O) into oxygen, protons, and electrons. This reaction releases oxygen as a byproduct, which is expelled into the atmosphere.\n",
"\n",
"3. **Energy Conversion (Light Reactions)**: The electrons and protons generated from water splitting are used in the light-dependent reactions. These reactions occur in the thylakoid membranes of the chloroplasts and result in the production of ATP (adenosine triphosphate) and NADPH, which are energy carriers.\n",
"\n",
"4. **Carbon Fixation (Calvin Cycle)**: In the light-independent reactions, also known as the Calvin Cycle, ATP and NADPH produced in the light reactions are used to convert carbon dioxide (CO₂) from the atmosphere into glucose (C₆H₁₂O₆). This process occurs in the stroma of the chloroplasts.\n",
"\n",
"5. **Glucose Formation**: The glucose produced can be used immediately by the plant for energy or can be converted into other carbohydrates, such as starch, for storage.\n",
"\n",
"Overall, the simplified equation for photosynthesis is:\n",
"\n",
"\\[ 6CO₂ + 6H₂O + light \\ energy \\rightarrow C₆H₁₂O₆ + 6O₂ \\]\n",
"\n",
"This equation shows that carbon dioxide and water, in the presence of light energy, are transformed into glucose and oxygen.\n",
"You: stop\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Agent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 0.5s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 0.5s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> stop <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m stop \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> If you have any more questions or need further assistance, feel free to ask! <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m If you have any more questions or need further assistance, feel free to ask! \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"🤖 Tutor: If you have any more questions or need further assistance, feel free to ask!\n",
"You: exit\n",
"Goodbye! Happy learning!\n"
]
}
],
"source": [
"while True:\n",
" user_input = input('You: ')\n",
" if user_input.lower() in ['exit','quit']:\n",
" print('Goodbye! Happy learning!')\n",
" break\n",
" response = chat_with_ai(user_input)\n",
" print('🤖 Tutor:', response)"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
+33 -1
View File
@@ -6,11 +6,19 @@
"id": "IY0bHc5lF46I"
},
"source": [
"# \ud83e\udd16 Qwen Model Agent\n",
"This notebook runs a chatbot agent using the `Qwen/Qwen1.5-1.8B` model via the `transformers` library in Google Colab.\n",
"\n",
"\u2705 Lightweight model (1.8B) so it runs on Colab Free.\n",
"\u2699\ufe0f No extra setup needed beyond `transformers` and `torch`.\n",
=======
"# 🤖 Qwen Model Agent\n",
"This notebook runs a chatbot agent using the `Qwen/Qwen1.5-1.8B` model via the `transformers` library in Google Colab.\n",
"\n",
"✅ Lightweight model (1.8B) so it runs on Colab Free.\n",
"⚙️ No extra setup needed beyond `transformers` and `torch`.\n",
"---"
],
"id": "IY0bHc5lF46I"
@@ -50,6 +58,18 @@
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m36.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m23.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m2.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m15.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m81.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
=======
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m36.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
@@ -60,6 +80,7 @@
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m81.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
@@ -73,7 +94,11 @@
{
"cell_type": "markdown",
"source": [
"# \u2705 Use the official BERT Large model"
=======
"# ✅ Use the official BERT Large model"
],
"metadata": {
"id": "PvTxUutEce5s"
@@ -324,6 +349,8 @@
},
"colab": {
"provenance": []
=======
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
@@ -2038,8 +2065,13 @@
}
}
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
}
=======
}
@@ -0,0 +1,467 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "6068ab0d",
"metadata": {
"id": "6068ab0d"
},
"source": [
"# voiGno Restaurant Agent – Voice Booking System with Interruption Handling"
]
},
{
"cell_type": "markdown",
"id": "Y9FkDzt1lF47",
"metadata": {
"id": "Y9FkDzt1lF47"
},
"source": [
"This notebook implements a conversational restaurant booking assistant using the Praison AI Agent framework. It handles natural interruptions such as modifying guest count or changing time mid-conversation. Built for Google Colab Free Tier, it uses OpenAI's GPT-4o model and follows a YAML-based agent design for clarity and modularity."
]
},
{
"cell_type": "markdown",
"id": "7Ik-GsSjlPza",
"metadata": {
"id": "7Ik-GsSjlPza"
},
"source": [
"[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/voiGno_Restaurant_Agent_PraisonAI.ipynb)\n"
]
},
{
"cell_type": "markdown",
"id": "vOsFg5C0lNg8",
"metadata": {
"id": "vOsFg5C0lNg8"
},
"source": [
"# Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c5b33646",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "c5b33646",
"outputId": "3728c81a-e8f4-4fce-e2da-2723937df0b5"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/3.3 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r",
"\u001b[2K \u001b[91m━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.3/3.3 MB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m \u001b[32m2.4/3.3 MB\u001b[0m \u001b[31m35.4 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m32.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install -q openai duckduckgo_search praisonaiagents"
]
},
{
"cell_type": "markdown",
"id": "5wUAjCAwlX-k",
"metadata": {
"id": "5wUAjCAwlX-k"
},
"source": [
"# OpenAI API + Imports"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c8dbd157",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "c8dbd157",
"outputId": "2d9209c8-87a1-4093-bcbe-6f53b83867a1"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your OpenAI API key: ··········\n"
]
}
],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n",
"import openai\n",
"from praisonaiagents import Agent, Task, PraisonAIAgents\n"
]
},
{
"cell_type": "markdown",
"id": "1qEN4kLNlcMq",
"metadata": {
"id": "1qEN4kLNlcMq"
},
"source": [
"# YAML Prompt Configuration"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "7d20ac12",
"metadata": {
"id": "7d20ac12"
},
"outputs": [],
"source": [
"yaml_prompt = \"\"\"\n",
"name: voiGnoRestaurantAgent\n",
"role: Voice restaurant booking assistant with interruption handling\n",
"goal: Coordinate bookings—date, time, guest count—with dynamic corrections\n",
"backstory: You are a friendly, patient assistant that remembers and adapts conversation context.\n",
"skills:\n",
" - Context management\n",
" - Handling mid-conversation changes\n",
" - Summarizing confirmed reservations\n",
"llm: gpt-4o\n",
"verbosity: true\n",
"format: markdown\n",
"\"\"\"\n"
]
},
{
"cell_type": "markdown",
"id": "XcJsL2yple6S",
"metadata": {
"id": "XcJsL2yple6S"
},
"source": [
"# Define Agent"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "jPfTEPRkkvl8",
"metadata": {
"id": "jPfTEPRkkvl8"
},
"outputs": [],
"source": [
"agent = Agent(\n",
" name=\"voiGnoRestaurantAgent\",\n",
" instructions=\"\"\"\n",
"You are a restaurant booking assistant. Handle booking requests naturally,\n",
"manage corrections like “change to 3 guests” or “move to 8 PM,”\n",
"confirm the details once the user is satisfied. Respond in markdown.\n",
"\"\"\",\n",
" llm=\"gpt-4o\",\n",
" verbose=True,\n",
" markdown=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "okUezUadlhl4",
"metadata": {
"id": "okUezUadlhl4"
},
"source": [
"# Define Task"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "e1de31ba",
"metadata": {
"id": "e1de31ba"
},
"outputs": [],
"source": [
"task = Task(\n",
" name=\"VoiceBookingTask\",\n",
" description=\"Assist user in making or updating a restaurant booking with interruptions.\",\n",
" expected_output=\"A markdown-style conversation confirming updated booking details.\",\n",
" agent=agent\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "TmgIxwgZlkI3",
"metadata": {
"id": "TmgIxwgZlkI3"
},
"source": [
"# Build Agent System"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "1ca36e92",
"metadata": {
"id": "1ca36e92"
},
"outputs": [],
"source": [
"booking_system = PraisonAIAgents(\n",
" agents=[agent],\n",
" tasks=[task],\n",
" process=\"sequential\",\n",
" verbose=True\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "D-OG_N_0loEw",
"metadata": {
"id": "D-OG_N_0loEw"
},
"source": [
"# Run Example Dialogue"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "A56Lhv0Lk5AT",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"c605e612d0c9466e90451701534dac7b",
"d77b8417c8c046fbb680d2f35c83a95b"
]
},
"id": "A56Lhv0Lk5AT",
"outputId": "a8d64995-03c7-4faa-d08b-ce66757d47b4"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> You: I'd like to book a table for 2 at 7 PM tomorrow.\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╭─ </span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8; font-weight: bold\">Agent Info</span><span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\"> ────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #ff9b9b; text-decoration-color: #ff9b9b; font-weight: bold\">👤 Agent:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">voiGnoRestaurantAgent</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #b4b4b3; text-decoration-color: #b4b4b3; font-weight: bold\">Role:</span> <span style=\"color: #ffe5e5; text-decoration-color: #ffe5e5\">Assistant</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span> <span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">│</span>\n",
"<span style=\"color: #d2e3c8; text-decoration-color: #d2e3c8\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[38;2;210;227;200m╭─\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200m───────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[38;2;210;227;200m─╮\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;255;155;155m👤 Agent:\u001b[0m \u001b[38;2;255;229;229mvoiGnoRestaurantAgent\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m│\u001b[0m \u001b[38;2;210;227;200m│\u001b[0m\n",
"\u001b[38;2;210;227;200m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c605e612d0c9466e90451701534dac7b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
"</pre>\n"
],
"text/plain": [
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Response generated in 2.9s</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[2mResponse generated in 2.9s\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭───────────────────────────────────────────────────── Task ──────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> You need to do the following task: Assist user in making or updating a restaurant booking with interruptions.. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Expected Output: A markdown-style conversation confirming updated booking details.. Please provide only the <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> final result of your work. Do not add any conversation or extra explanation. <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m────────────────────────────────────────────────────\u001b[0m\u001b[36m Task \u001b[0m\u001b[36m─────────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m You need to do the following task: Assist user in making or updating a restaurant booking with interruptions.. \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Expected Output: A markdown-style conversation confirming updated booking details.. Please provide only the \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m final result of your work. Do not add any conversation or extra explanation. \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008080; text-decoration-color: #008080\">╭─────────────────────────────────────────────────── Response ────────────────────────────────────────────────────╮</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"font-weight: bold\">Booking Confirmation</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> Your restaurant booking has been successfully updated. Here are the details: <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Date:</span> [Please specify the date] <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Time:</span> 8:00 PM <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Guests:</span> 3 <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">│</span> If you need further assistance, feel free to ask! <span style=\"color: #008080; text-decoration-color: #008080\">│</span>\n",
"<span style=\"color: #008080; text-decoration-color: #008080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[36m╭─\u001b[0m\u001b[36m──────────────────────────────────────────────────\u001b[0m\u001b[36m Response \u001b[0m\u001b[36m───────────────────────────────────────────────────\u001b[0m\u001b[36m─╮\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1mBooking Confirmation\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m Your restaurant booking has been successfully updated. Here are the details: \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mDate:\u001b[0m [Please specify the date] \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mTime:\u001b[0m 8:00 PM \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[1;33m • \u001b[0m\u001b[1mGuests:\u001b[0m 3 \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m \u001b[36m│\u001b[0m\n",
"\u001b[36m│\u001b[0m If you need further assistance, feel free to ask! \u001b[36m│\u001b[0m\n",
"\u001b[36m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"**Booking Confirmation**\n",
"\n",
"Your restaurant booking has been successfully updated. Here are the details:\n",
"\n",
"- **Date:** [Please specify the date]\n",
"- **Time:** 8:00 PM\n",
"- **Guests:** 3\n",
"\n",
"If you need further assistance, feel free to ask! \n",
"\n",
"> You: Wait, actually make that 3 people instead.\n",
"**Booking Confirmation**\n",
"\n",
"Your restaurant booking has been successfully updated. Here are the details:\n",
"\n",
"- **Date:** [Please specify the date]\n",
"- **Time:** 8:00 PM\n",
"- **Guests:** 3\n",
"\n",
"If you need further assistance, feel free to ask! \n",
"\n",
"> You: Can we move it to 8 PM?\n",
"**Booking Confirmation**\n",
"\n",
"Your restaurant booking has been successfully updated. Here are the details:\n",
"\n",
"- **Date:** [Please specify the date]\n",
"- **Time:** 8:00 PM\n",
"- **Guests:** 3\n",
"\n",
"If you need further assistance, feel free to ask! \n",
"\n",
"> You: Great, that's perfect!\n",
"**Booking Confirmation**\n",
"\n",
"Your restaurant booking has been successfully updated. Here are the details:\n",
"\n",
"- **Date:** [Please specify the date]\n",
"- **Time:** 8:00 PM\n",
"- **Guests:** 3\n",
"\n",
"If you need further assistance, feel free to ask! \n",
"\n"
]
}
],
"source": [
"dialog = [\n",
" \"I'd like to book a table for 2 at 7 PM tomorrow.\",\n",
" \"Wait, actually make that 3 people instead.\",\n",
" \"Can we move it to 8 PM?\",\n",
" \"Great, that's perfect!\"\n",
"]\n",
"\n",
"for turn in dialog:\n",
" print(f\"> You: {turn}\")\n",
" response = booking_system.start(input=turn)\n",
" print(response, \"\\n\")\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -269,7 +269,7 @@ async def generate_market_research_report(job_id: str, config: MarketResearchCon
workflow = PraisonAIAgents(
agents=list(agents.values()),
tasks=tasks,
process="workflow",
process="sequential",
verbose=False
)
@@ -296,14 +296,92 @@ async def generate_market_research_report(job_id: str, config: MarketResearchCon
"research_findings": {}
}
# Extract results from each task
if "task_results" in results:
for task_name, result in results["task_results"].items():
if result:
report_data["research_findings"][task_name] = {
"content": result.raw,
"agent": result.agent if hasattr(result, 'agent') else "Unknown"
}
# Extract results from each task with comprehensive logging
print(f"DEBUG: Raw results type: {type(results)}")
print(f"DEBUG: Raw results content: {results}")
if isinstance(results, str):
# Sequential process returns a string result directly
print("DEBUG: Sequential process returned string result")
report_data["research_findings"]["synthesis_report"] = {
"content": results,
"agent": "Research Report Synthesizer",
"section": "Complete Market Research Report"
}
print(f"DEBUG: Added synthesis_report with content length: {len(results)}")
elif isinstance(results, dict):
print(f"DEBUG: Results is dict with keys: {list(results.keys())}")
if "task_results" in results:
print(f"DEBUG: Found task_results: {results['task_results']}")
print(f"DEBUG: task_results type: {type(results['task_results'])}")
for task_name, result in results["task_results"].items():
print(f"DEBUG: Processing task '{task_name}', result type: {type(result)}")
print(f"DEBUG: Result content: {result}")
if result:
# Try multiple ways to extract content
content = None
agent_name = "Unknown"
if hasattr(result, 'raw'):
content = result.raw
print(f"DEBUG: Extracted content from result.raw")
elif hasattr(result, 'content'):
content = result.content
print(f"DEBUG: Extracted content from result.content")
elif isinstance(result, str):
content = result
print(f"DEBUG: Result is string, using directly")
else:
content = str(result)
print(f"DEBUG: Converting result to string")
if hasattr(result, 'agent'):
agent_name = result.agent
elif hasattr(result, 'agent_name'):
agent_name = result.agent_name
if content:
report_data["research_findings"][task_name] = {
"content": content,
"agent": agent_name,
"section": f"Task {task_name}"
}
print(f"DEBUG: Added task '{task_name}' with content length: {len(str(content))}")
else:
print(f"DEBUG: No content found for task '{task_name}'")
else:
print(f"DEBUG: Task '{task_name}' result is None or empty")
else:
print("DEBUG: No 'task_results' found in results dict")
# Try to use the whole results as content
report_data["research_findings"]["workflow_output"] = {
"content": str(results),
"agent": "PraisonAI Workflow",
"section": "Complete Workflow Output"
}
print("DEBUG: Added entire results as workflow_output")
else:
print(f"DEBUG: Unexpected results type: {type(results)}")
report_data["research_findings"]["raw_output"] = {
"content": str(results),
"agent": "Unknown",
"section": "Raw Output"
}
print(f"DEBUG: Final research_findings keys: {list(report_data['research_findings'].keys())}")
print(f"DEBUG: Final research_findings count: {len(report_data['research_findings'])}")
# Generate executive summary from synthesis if available
if "synthesis_report" in report_data["research_findings"]:
content = report_data["research_findings"]["synthesis_report"]["content"]
# Extract first few sentences as executive summary
sentences = content.split('. ')[:3]
report_data["executive_summary"] = '. '.join(sentences) + '.' if sentences else "Market research analysis completed."
print("DEBUG: Generated executive summary from synthesis report")
# Save report to file
report_filename = f"market_research_{job_id}.json"
@@ -0,0 +1,34 @@
# Example: Using Ollama with a remote host via base_url parameter
# pip install praisonaiagents
from praisonaiagents import Agent
# Method 1: Using base_url parameter directly (NEW)
agent = Agent(
instructions="You are a helpful assistant",
llm="ollama/llama3.2",
base_url="http://remote-host:11434"
)
response = agent.start("Why is the sky blue?")
print(response)
# Method 2: Using dict configuration
agent2 = Agent(
instructions="You are a helpful assistant",
llm={
"model": "ollama/llama3.2",
"base_url": "http://remote-host:11434"
}
)
response2 = agent2.start("What is the capital of France?")
print(response2)
# Method 3: Using environment variable (existing method)
# export OPENAI_BASE_URL=http://remote-host:11434
# Then just:
# agent3 = Agent(
# instructions="You are a helpful assistant",
# llm="ollama/llama3.2"
# )
@@ -0,0 +1,76 @@
# # -*- coding: utf-8 -*-
# """Flow_Intelligent_Agent_PraisonAI.ipynb
# Automatically generated by Colab.
# Original file is located at
# https://colab.research.google.com/drive/1gm6zP1CbGU2d24iAaHhzVxTzWGs2oV43
# # Flow – Intelligent Agent for Daily Efficiency
# # Description
# This agent uses a custom DuckDuckGo search tool to intelligently retrieve and summarize real-time information based on user queries.
# [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Flow_Intelligent_Agent_PraisonAI.ipynb)
# ## Tools
# - `praisonaiagents` – Intelligent Agent framework
# - `duckduckgo-search` – Custom search tool
# - `pyyaml` – YAML config
# - `openai` – LLM backend
# # Dependencies
# """
# pip install praisonaiagents duckduckgo-search pyyaml openai
# """# Set your OpenAI API Key securely"""
import os
os.environ['OPENAI_API_KEY'] = 'your api key' # Replace with your actual OpenAI key
# """## YAML Prompt
# Define multiple agents and their roles.
# """
import yaml
yaml_prompt = '''
agents:
- name: FlowAgent
description: Intelligent daily workflow assistant
- name: ChileAtiendeAI
description: Government support assistant for Chile
- name: ClinicalTrialMatcher
description: Match patients to trials using input medical info
- name: ChillWorkEmailAgent
description: Automate email replies and scheduling
'''
config = yaml.safe_load(yaml_prompt)
# """## Main
# Initialize agent with a custom DuckDuckGo tool and simulate a task.
# """
from praisonaiagents import Agent
from duckduckgo_search import DDGS
def internet_search_tool(query: str):
ddgs = DDGS()
results = []
for res in ddgs.text(keywords=query, max_results=3):
results.append(f"{res['title']} - {res['href']}")
return "\n".join(results)
# Initialize the main agent (FlowAgent)
flow_config = config['agents'][0]
flow_agent = Agent(
name=flow_config['name'],
instructions=flow_config['description'],
tools=[internet_search_tool]
)
response = flow_agent.start("What's the latest open-source AI agent framework?")
print(response)
@@ -0,0 +1,69 @@
# # -*- coding: utf-8 -*-
# """github_repo_analyzer_agent.ipynb
# Automatically generated by Colab.
# Original file is located at
# https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/github_repo_analyzer_agent.ipynb
# # 🤖 GitHub Repo Analyzer Agent
# AI agent powered by PraisonAI and OpenAI to analyze GitHub repositories using GitHub API.
# [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/github_repo_analyzer_agent.ipynb)
# # 📦 Install dependencies
# """
# !pip install praisonaiagents openai requests
# """# Tools Used
# 🧠 praisonaiagents – Smart AI agent
# 🔗 openai – GPT-powered responses
# 📂 requests – GitHub repo analysis
# 🖥️ Python I/O – Interactive CLI in notebook
# # 🔐 Set OpenAI API Key
# """
import os
if not os.getenv("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = input("🔐 Enter your OpenAI API key: ")
# """# 🧠 Imports"""
import requests
import openai
from praisonaiagents import Agent
openai.api_key = os.environ["OPENAI_API_KEY"]
# """# 🤖 Create the Agent"""
agent = Agent(instructions="""
You are a GitHub codebase explainer. When given a repo URL, fetch summary of
its files and provide insightful analysis. Be helpful and concise.
""")
# """# 📂 Fetch GitHub repo file names"""
def fetch_repo_files(repo_url):
api_url = repo_url.replace("https://github.com", "https://api.github.com/repos") + "/contents"
r = requests.get(api_url)
return [f["name"] for f in r.json()] if r.status_code == 200 else []
# """# 💬 Ask Agent"""
def ask_agent(repo_url):
files = fetch_repo_files(repo_url)
if not files:
return "❌ Cannot fetch repo contents."
return agent.start(f"Repo contains files: {files}. Analyze key components and structure.")
# """# 🧪 Run the agent"""
repo = input("🔗 Enter GitHub repository URL: ")
print("\n🧠 Agent Insight:\n", ask_agent(repo))
@@ -0,0 +1,69 @@
# ===============================
# 1. 📘 Project Title & Purpose
# ===============================
# """
# AI‑Powered Personalized Learning Assistant with Smart Content Chatbot
# This assistant helps users learn any topic by chatting with an AI tutor.
# It uses PraisonAI Agents, OpenAI API, and Transformers to deliver answers clearly.
# """
# ============================
# 2. 📦 Dependencies Required
# ============================
# """
# Required Libraries:
# - praisonaiagents
# - openai
# - transformers
# Make sure to install these in Colab or terminal:
# !pip install praisonaiagents openai transformers
# """
# =====================
# 3. 🧰 Tools Used
# =====================
# """
# ✅ praisonaiagents – Builds the smart tutoring agent
# ✅ openai – Uses OpenAI GPT for accurate answers
# ✅ transformers – Fallback model using GPT-2
# ✅ Python I/O – Simple interactive CLI using input/print
# """
# ============================
# 4. 🔐 Set OpenAI API Key
# ============================
import os
os.environ['OPENAI_API_KEY'] = input('Enter your OpenAI API key: ')
# ================================
# 5. 🧠 Initialize AI Agent + Fallback
# ================================
from praisonaiagents import Agent
from transformers import pipeline as hf_pipeline
import openai
openai.api_key = os.getenv('OPENAI_API_KEY')
hf_chatbot = hf_pipeline('text-generation', model='gpt2')
agent = Agent(instructions='You are a friendly tutor. Answer learner questions clearly and helpfully.')
def chat_with_ai(user_input):
try:
return agent.start(user_input)
except Exception as e:
print('[Fallback GPT-2]', e)
return hf_chatbot(user_input, max_length=100)[0]['generated_text']
# ============================
# 6. 💬 Interactive Chat Loop
# ============================
print("Start chatting with your AI tutor! Type 'exit' to quit.")
while True:
user_input = input('You: ')
if user_input.lower() in ['exit', 'quit']:
print('Goodbye! Happy learning!')
break
response = chat_with_ai(user_input)
print('🤖 Tutor:', response)
@@ -0,0 +1,69 @@
# ===============================
# 1. 📘 Project Title & Purpose
# ===============================
# """
# AI‑Powered Personalized Learning Assistant with Smart Content Chatbot
# This assistant helps users learn any topic by chatting with an AI tutor.
# It uses PraisonAI Agents, OpenAI API, and Transformers to deliver answers clearly.
# """
# ============================
# 2. 📦 Dependencies Required
# ============================
# """
# Required Libraries:
# - praisonaiagents
# - openai
# - transformers
# Make sure to install these in Colab or terminal:
# !pip install praisonaiagents openai transformers
# """
# =====================
# 3. 🧰 Tools Used
# =====================
# """
# ✅ praisonaiagents – Builds the smart tutoring agent
# ✅ openai – Uses OpenAI GPT for accurate answers
# ✅ transformers – Fallback model using GPT-2
# ✅ Python I/O – Simple interactive CLI using input/print
# """
# ============================
# 4. 🔐 Set OpenAI API Key
# ============================
import os
os.environ['OPENAI_API_KEY'] = input('Enter your OpenAI API key: ')
# ================================
# 5. 🧠 Initialize AI Agent + Fallback
# ================================
from praisonaiagents import Agent
from transformers import pipeline as hf_pipeline
import openai
openai.api_key = os.getenv('OPENAI_API_KEY')
hf_chatbot = hf_pipeline('text-generation', model='gpt2')
agent = Agent(instructions='You are a friendly tutor. Answer learner questions clearly and helpfully.')
def chat_with_ai(user_input):
try:
return agent.start(user_input)
except Exception as e:
print('[Fallback GPT-2]', e)
return hf_chatbot(user_input, max_length=100)[0]['generated_text']
# ============================
# 6. 💬 Interactive Chat Loop
# ============================
print("Start chatting with your AI tutor! Type 'exit' to quit.")
while True:
user_input = input('You: ')
if user_input.lower() in ['exit', 'quit']:
print('Goodbye! Happy learning!')
break
response = chat_with_ai(user_input)
print('🤖 Tutor:', response)
@@ -364,6 +364,7 @@ class Agent:
knowledge_config: Optional[Dict[str, Any]] = None,
use_system_prompt: Optional[bool] = True,
markdown: bool = True,
stream: bool = True,
self_reflect: bool = False,
max_reflect: int = 3,
min_reflect: int = 1,
@@ -372,7 +373,9 @@ class Agent:
user_id: Optional[str] = None,
reasoning_steps: bool = False,
guardrail: Optional[Union[Callable[['TaskOutput'], Tuple[bool, Any]], str]] = None,
max_guardrail_retries: int = 3
max_guardrail_retries: int = 3,
base_url: Optional[str] = None,
api_key: Optional[str] = None
):
"""Initialize an Agent instance.
@@ -435,6 +438,8 @@ class Agent:
conversations to establish agent behavior and context. Defaults to True.
markdown (bool, optional): Enable markdown formatting in agent responses for better
readability and structure. Defaults to True.
stream (bool, optional): Enable streaming responses from the language model. Set to False
for LLM providers that don't support streaming. Defaults to True.
self_reflect (bool, optional): Enable self-reflection capabilities where the agent
evaluates and improves its own responses. Defaults to False.
max_reflect (int, optional): Maximum number of self-reflection iterations to prevent
@@ -454,6 +459,10 @@ class Agent:
description string for LLM-based validation. Defaults to None.
max_guardrail_retries (int, optional): Maximum number of retry attempts when guardrail
validation fails before giving up. Defaults to 3.
base_url (Optional[str], optional): Base URL for custom LLM endpoints (e.g., Ollama).
If provided, automatically creates a custom LLM instance. Defaults to None.
api_key (Optional[str], optional): API key for LLM provider. If not provided,
falls back to environment variables. Defaults to None.
Raises:
ValueError: If all of name, role, goal, backstory, and instructions are None.
@@ -500,10 +509,40 @@ class Agent:
# Check for model name in environment variable if not provided
self._using_custom_llm = False
# If the user passes a dictionary (for advanced configuration)
if isinstance(llm, dict) and "model" in llm:
# If base_url is provided, always create a custom LLM instance
if base_url:
try:
from ..llm.llm import LLM
# Handle different llm parameter types with base_url
if isinstance(llm, dict):
# Merge base_url and api_key into the dict
llm_config = llm.copy()
llm_config['base_url'] = base_url
if api_key:
llm_config['api_key'] = api_key
self.llm_instance = LLM(**llm_config)
else:
# Create LLM with model string and base_url
model_name = llm or os.getenv('OPENAI_MODEL_NAME', 'gpt-4o')
self.llm_instance = LLM(
model=model_name,
base_url=base_url,
api_key=api_key
)
self._using_custom_llm = True
except ImportError as e:
raise ImportError(
"LLM features requested but dependencies not installed. "
"Please install with: pip install \"praisonaiagents[llm]\""
) from e
# If the user passes a dictionary (for advanced configuration)
elif isinstance(llm, dict) and "model" in llm:
try:
from ..llm.llm import LLM
# Add api_key if provided and not in dict
if api_key and 'api_key' not in llm:
llm = llm.copy()
llm['api_key'] = api_key
self.llm_instance = LLM(**llm) # Pass all dict items as kwargs
self._using_custom_llm = True
except ImportError as e:
@@ -516,7 +555,10 @@ class Agent:
try:
from ..llm.llm import LLM
# Pass the entire string so LiteLLM can parse provider/model
self.llm_instance = LLM(model=llm)
llm_params = {'model': llm}
if api_key:
llm_params['api_key'] = api_key
self.llm_instance = LLM(**llm_params)
self._using_custom_llm = True
# Ensure tools are properly accessible when using custom LLM
@@ -554,6 +596,7 @@ class Agent:
self.use_system_prompt = use_system_prompt
self.chat_history = []
self.markdown = markdown
self.stream = stream
self.max_reflect = max_reflect
self.min_reflect = min_reflect
self.reflect_prompt = reflect_prompt
@@ -1002,7 +1045,7 @@ Your Goal: {self.goal}
tools=formatted_tools if formatted_tools else None,
verbose=self.verbose,
markdown=self.markdown,
stream=True,
stream=stream,
console=self.console,
execute_tool_fn=self.execute_tool,
agent_name=self.name,
@@ -1018,7 +1061,7 @@ Your Goal: {self.goal}
tools=formatted_tools if formatted_tools else None,
verbose=self.verbose,
markdown=self.markdown,
stream=False,
stream=stream,
console=self.console,
execute_tool_fn=self.execute_tool,
agent_name=self.name,
@@ -1276,7 +1319,7 @@ Your Goal: {self.goal}
agent_tools=agent_tools
)
response = self._chat_completion(messages, temperature=temperature, tools=tools if tools else None, reasoning_steps=reasoning_steps, stream=stream)
response = self._chat_completion(messages, temperature=temperature, tools=tools if tools else None, reasoning_steps=reasoning_steps, stream=self.stream)
if not response:
return None
@@ -1371,7 +1414,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
logging.debug(f"{self.name} reflection count {reflection_count + 1}, continuing reflection process")
messages.append({"role": "user", "content": "Now regenerate your response using the reflection you made"})
response = self._chat_completion(messages, temperature=temperature, tools=None, stream=stream)
response = self._chat_completion(messages, temperature=temperature, tools=None, stream=self.stream)
response_text = response.choices[0].message.content.strip()
reflection_count += 1
continue # Continue the loop for more reflections
+118 -34
View File
@@ -296,6 +296,7 @@ class LLM:
agent_role: Optional[str] = None,
agent_tools: Optional[List[str]] = None,
execute_tool_fn: Optional[Callable] = None,
stream: bool = True,
**kwargs
) -> str:
"""Enhanced get_response with all OpenAI-like features"""
@@ -487,7 +488,7 @@ class LLM:
messages=messages,
tools=formatted_tools,
temperature=temperature,
stream=True,
stream=stream,
**kwargs
)
):
@@ -503,7 +504,7 @@ class LLM:
messages=messages,
tools=formatted_tools,
temperature=temperature,
stream=True,
stream=stream,
**kwargs
)
):
@@ -549,6 +550,7 @@ class LLM:
})
should_continue = False
tool_results = [] # Store all tool results
for tool_call in tool_calls:
# Handle both object and dict access patterns
if isinstance(tool_call, dict):
@@ -569,6 +571,7 @@ class LLM:
logging.debug(f"[TOOL_EXEC_DEBUG] About to execute tool {function_name} with args: {arguments}")
tool_result = execute_tool_fn(function_name, arguments)
logging.debug(f"[TOOL_EXEC_DEBUG] Tool execution result: {tool_result}")
tool_results.append(tool_result) # Store the result
if verbose:
display_message = f"Agent {agent_name} called function '{function_name}' with arguments: {arguments}\n"
@@ -601,7 +604,8 @@ class LLM:
# If we reach here, no more tool calls needed - get final response
# Make one more call to get the final summary response
# Special handling for Ollama models that don't automatically process tool results
if self.model and self.model.startswith("ollama/") and tool_result:
ollama_handled = False
if self.model and self.model.startswith("ollama/") and tool_results:
# For Ollama models, we need to explicitly ask the model to process the tool results
# First, check if the response is just a JSON tool call
try:
@@ -614,13 +618,30 @@ class LLM:
# Create a prompt that asks the model to process the tool results based on original context
# Extract the original user query from messages
original_query = ""
for msg in messages:
for msg in reversed(messages): # Look from the end to find the most recent user message
if msg.get("role") == "user":
original_query = msg.get("content", "")
break
content = msg.get("content", "")
# Handle list content (multimodal)
if isinstance(content, list):
for item in content:
if isinstance(item, dict) and item.get("type") == "text":
original_query = item.get("text", "")
break
else:
original_query = content
if original_query:
break
# Create a shorter follow-up prompt
follow_up_prompt = f"Results:\n{json.dumps(tool_result, indent=2)}\nProvide Answer to this Original Question based on the above results: '{original_query}'"
# Create a shorter follow-up prompt with all tool results
# If there's only one result, use it directly; otherwise combine them
if len(tool_results) == 1:
results_text = json.dumps(tool_results[0], indent=2)
else:
results_text = json.dumps(tool_results, indent=2)
follow_up_prompt = f"Results:\n{results_text}\nProvide Answer to this Original Question based on the above results: '{original_query}'"
logging.debug(f"[OLLAMA_DEBUG] Original query extracted: {original_query}")
logging.debug(f"[OLLAMA_DEBUG] Follow-up prompt: {follow_up_prompt[:200]}...")
# Make a follow-up call to process the results
follow_up_messages = [
@@ -635,7 +656,7 @@ class LLM:
**self._build_completion_params(
messages=follow_up_messages,
temperature=temperature,
stream=True
stream=stream
)
):
if chunk and chunk.choices and chunk.choices[0].delta.content:
@@ -648,17 +669,38 @@ class LLM:
**self._build_completion_params(
messages=follow_up_messages,
temperature=temperature,
stream=True
stream=stream
)
):
if chunk and chunk.choices and chunk.choices[0].delta.content:
response_text += chunk.choices[0].delta.content
# Set flag to indicate Ollama was handled
ollama_handled = True
final_response_text = response_text.strip()
logging.debug(f"[OLLAMA_DEBUG] Ollama follow-up response: {final_response_text[:200]}...")
# Display the response if we got one
if final_response_text and verbose:
display_interaction(
original_prompt,
final_response_text,
markdown=markdown,
generation_time=time.time() - start_time,
console=console
)
# Return the final response after processing Ollama's follow-up
if final_response_text:
return final_response_text
else:
logging.warning("[OLLAMA_DEBUG] Ollama follow-up returned empty response")
except (json.JSONDecodeError, KeyError):
# Not a JSON response or not a tool call format, continue normally
pass
# If reasoning_steps is True, do a single non-streaming call
elif reasoning_steps:
# If reasoning_steps is True and we haven't handled Ollama already, do a single non-streaming call
if reasoning_steps and not ollama_handled:
resp = litellm.completion(
**self._build_completion_params(
messages=messages,
@@ -688,8 +730,8 @@ class LLM:
console=console
)
# Otherwise do the existing streaming approach
else:
# Otherwise do the existing streaming approach if not already handled
elif not ollama_handled:
# Get response after tool calls with streaming
if verbose:
with Live(display_generating("", current_time), console=console, refresh_per_second=4) as live:
@@ -714,7 +756,7 @@ class LLM:
messages=messages,
tools=formatted_tools,
temperature=temperature,
stream=True,
stream=stream,
**kwargs
)
):
@@ -832,7 +874,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=reflection_messages,
temperature=temperature,
stream=True,
stream=stream,
response_format={"type": "json_object"},
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
@@ -847,7 +889,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=reflection_messages,
temperature=temperature,
stream=True,
stream=stream,
response_format={"type": "json_object"},
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
@@ -963,6 +1005,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
agent_role: Optional[str] = None,
agent_tools: Optional[List[str]] = None,
execute_tool_fn: Optional[Callable] = None,
stream: bool = True,
**kwargs
) -> str:
"""Async version of get_response with identical functionality."""
@@ -1163,7 +1206,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=messages,
temperature=temperature,
stream=True,
stream=stream,
**kwargs
)
):
@@ -1177,7 +1220,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=messages,
temperature=temperature,
stream=True,
stream=stream,
**kwargs
)
):
@@ -1225,6 +1268,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
"tool_calls": serializable_tool_calls
})
tool_results = [] # Store all tool results
for tool_call in tool_calls:
# Handle both object and dict access patterns
if isinstance(tool_call, dict):
@@ -1243,6 +1287,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
tool_call_id = f"tool_{id(tool_call)}"
tool_result = await execute_tool_fn(function_name, arguments)
tool_results.append(tool_result) # Store the result
if verbose:
display_message = f"Agent {agent_name} called function '{function_name}' with arguments: {arguments}\n"
@@ -1261,7 +1306,8 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
response_text = ""
# Special handling for Ollama models that don't automatically process tool results
if self._is_ollama_provider() and tool_result:
ollama_handled = False
if self._is_ollama_provider() and tool_results:
# For Ollama models, we need to explicitly ask the model to process the tool results
# First, check if the response is just a JSON tool call
try:
@@ -1274,13 +1320,30 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
# Create a prompt that asks the model to process the tool results based on original context
# Extract the original user query from messages
original_query = ""
for msg in messages:
for msg in reversed(messages): # Look from the end to find the most recent user message
if msg.get("role") == "user":
original_query = msg.get("content", "")
break
content = msg.get("content", "")
# Handle list content (multimodal)
if isinstance(content, list):
for item in content:
if isinstance(item, dict) and item.get("type") == "text":
original_query = item.get("text", "")
break
else:
original_query = content
if original_query:
break
# Create a shorter follow-up prompt
follow_up_prompt = f"Results:\n{json.dumps(tool_result, indent=2)}\nProvide Answer to this Original Question based on the above results: '{original_query}'"
# Create a shorter follow-up prompt with all tool results
# If there's only one result, use it directly; otherwise combine them
if len(tool_results) == 1:
results_text = json.dumps(tool_results[0], indent=2)
else:
results_text = json.dumps(tool_results, indent=2)
follow_up_prompt = f"Results:\n{results_text}\nProvide Answer to this Original Question based on the above results: '{original_query}'"
logging.debug(f"[OLLAMA_DEBUG] Original query extracted: {original_query}")
logging.debug(f"[OLLAMA_DEBUG] Follow-up prompt: {follow_up_prompt[:200]}...")
# Make a follow-up call to process the results
follow_up_messages = [
@@ -1294,7 +1357,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=follow_up_messages,
temperature=temperature,
stream=True
stream=stream
)
):
if chunk and chunk.choices and chunk.choices[0].delta.content:
@@ -1308,17 +1371,38 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=follow_up_messages,
temperature=temperature,
stream=True
stream=stream
)
):
if chunk and chunk.choices and chunk.choices[0].delta.content:
response_text += chunk.choices[0].delta.content
# Set flag to indicate Ollama was handled
ollama_handled = True
final_response_text = response_text.strip()
logging.debug(f"[OLLAMA_DEBUG] Ollama follow-up response: {final_response_text[:200]}...")
# Display the response if we got one
if final_response_text and verbose:
display_interaction(
original_prompt,
final_response_text,
markdown=markdown,
generation_time=time.time() - start_time,
console=console
)
# Return the final response after processing Ollama's follow-up
if final_response_text:
return final_response_text
else:
logging.warning("[OLLAMA_DEBUG] Ollama follow-up returned empty response")
except (json.JSONDecodeError, KeyError):
# Not a JSON response or not a tool call format, continue normally
pass
# If no special handling was needed or if it's not an Ollama model
elif reasoning_steps:
if reasoning_steps and not ollama_handled:
# Non-streaming call to capture reasoning
resp = await litellm.acompletion(
**self._build_completion_params(
@@ -1348,14 +1432,14 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
generation_time=time.time() - start_time,
console=console
)
else:
# Get response after tool calls with streaming
elif not ollama_handled:
# Get response after tool calls with streaming if not already handled
if verbose:
async for chunk in await litellm.acompletion(
**self._build_completion_params(
messages=messages,
temperature=temperature,
stream=True,
stream=stream,
tools=formatted_tools,
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
@@ -1371,7 +1455,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=messages,
temperature=temperature,
stream=True,
stream=stream,
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
):
@@ -1452,7 +1536,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=reflection_messages,
temperature=temperature,
stream=True,
stream=stream,
response_format={"type": "json_object"},
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
@@ -1467,7 +1551,7 @@ Output MUST be JSON with 'reflection' and 'satisfactory'.
**self._build_completion_params(
messages=reflection_messages,
temperature=temperature,
stream=True,
stream=stream,
response_format={"type": "json_object"},
**{k:v for k,v in kwargs.items() if k != 'reasoning_steps'}
)
@@ -379,6 +379,43 @@ class MCP:
"""
return iter(self._tools)
def _fix_array_schemas(self, schema):
"""
Fix array schemas by adding missing 'items' attribute required by OpenAI.
This ensures compatibility with OpenAI's function calling format which
requires array types to specify the type of items they contain.
Args:
schema: The schema dictionary to fix
Returns:
dict: The fixed schema
"""
if not isinstance(schema, dict):
return schema
# Create a copy to avoid modifying the original
fixed_schema = schema.copy()
# Fix array types at the current level
if fixed_schema.get("type") == "array" and "items" not in fixed_schema:
# Add a default items schema for arrays without it
fixed_schema["items"] = {"type": "string"}
# Recursively fix nested schemas
if "properties" in fixed_schema:
fixed_properties = {}
for prop_name, prop_schema in fixed_schema["properties"].items():
fixed_properties[prop_name] = self._fix_array_schemas(prop_schema)
fixed_schema["properties"] = fixed_properties
# Fix items schema if it exists
if "items" in fixed_schema:
fixed_schema["items"] = self._fix_array_schemas(fixed_schema["items"])
return fixed_schema
def to_openai_tool(self):
"""Convert the MCP tool to an OpenAI-compatible tool definition.
@@ -404,7 +441,8 @@ class MCP:
# Create OpenAI tool definition
parameters = {}
if hasattr(tool, 'inputSchema') and tool.inputSchema:
parameters = tool.inputSchema
# Fix array schemas to include 'items' attribute
parameters = self._fix_array_schemas(tool.inputSchema)
else:
# Create a minimal schema if none exists
parameters = {
@@ -88,14 +88,54 @@ class SSEMCPTool:
logger.error(f"Error in _async_call for {self.name}: {e}")
raise
def _fix_array_schemas(self, schema):
"""
Fix array schemas by adding missing 'items' attribute required by OpenAI.
This ensures compatibility with OpenAI's function calling format which
requires array types to specify the type of items they contain.
Args:
schema: The schema dictionary to fix
Returns:
dict: The fixed schema
"""
if not isinstance(schema, dict):
return schema
# Create a copy to avoid modifying the original
fixed_schema = schema.copy()
# Fix array types at the current level
if fixed_schema.get("type") == "array" and "items" not in fixed_schema:
# Add a default items schema for arrays without it
fixed_schema["items"] = {"type": "string"}
# Recursively fix nested schemas
if "properties" in fixed_schema:
fixed_properties = {}
for prop_name, prop_schema in fixed_schema["properties"].items():
fixed_properties[prop_name] = self._fix_array_schemas(prop_schema)
fixed_schema["properties"] = fixed_properties
# Fix items schema if it exists
if "items" in fixed_schema:
fixed_schema["items"] = self._fix_array_schemas(fixed_schema["items"])
return fixed_schema
def to_openai_tool(self):
"""Convert the tool to OpenAI format."""
# Fix array schemas to include 'items' attribute
fixed_schema = self._fix_array_schemas(self.input_schema)
return {
"type": "function",
"function": {
"name": self.name,
"description": self.description,
"parameters": self.input_schema
"parameters": fixed_schema
}
}
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "praisonaiagents"
version = "0.0.106"
version = "0.0.109"
description = "Praison AI agents for completing complex tasks with Self Reflection Agents"
requires-python = ">=3.10"
authors = [
+16 -26
View File
@@ -1,33 +1,23 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
import os
from dotenv import load_dotenv
from praisonaiagents import Agent, MCP
# Load .env before importing anything else
load_dotenv()
llm_config = {
"model": "openai/gpt-4o-mini",
"api_key": os.getenv('OPENAI_API_KEY'),
"temperature": 0.7,
"max_tokens": 2000
}
# Define allowed directories for filesystem access
allowed_dirs = [
"/Users/praison/praisonai-package/src/praisonai-agents",
]
blog_agent = Agent(
role="Blog Writer",
goal="Write a blog post about AI",
backstory="Expert at writing blog posts",
llm=llm_config,
# Use the correct pattern from filesystem MCP documentation
filesystem_agent = Agent(
instructions="""You are a helpful assistant that can interact with the filesystem.
Use the available tools when relevant to manage files and directories.""",
llm="gpt-4o-mini",
tools=MCP(
command="npx",
args=["-y", "@modelcontextprotocol/server-filesystem"] + allowed_dirs
)
)
blog_task = Task(
description="Write a blog post about AI trends in 1 paragraph",
expected_output="Well-written blog post about AI trends",
agent=blog_agent
)
agents = PraisonAIAgents(
agents=[blog_agent],
tasks=[blog_task],
memory=False
)
result = agents.start()
filesystem_agent.start("List files in /Users/praison/praisonai-package/src/praisonai-agents directory using MCP list_files")
@@ -0,0 +1,161 @@
#!/usr/bin/env python3
"""
Test script to verify Ollama empty response fix for both sync and async methods.
"""
import asyncio
import logging
from praisonaiagents import Agent, Task, PraisonAIAgents, TaskOutput
from typing import Dict, Any
# Enable debug logging
logging.basicConfig(level=logging.DEBUG)
# Define a simple tool for testing
def search_tool(query: str) -> Dict[str, Any]:
"""Simulate a search tool that returns results."""
logging.debug(f"[TEST] Search tool called with query: {query}")
results = {
"results": [
{"title": "Result 1", "description": f"Information about {query}"},
{"title": "Result 2", "description": f"More details on {query}"}
],
"total": 2
}
logging.debug(f"[TEST] Search tool returning: {results}")
return results
# Test with both sync and async workflows
async def test_model_async(model_name: str):
print(f"\n{'='*60}")
print(f"Testing ASYNC with model: {model_name}")
print('='*60)
# Create agent with the search tool
agent = Agent(
name="SearchAgent",
role="Information Researcher",
goal="Search for information and provide helpful answers",
backstory="You are an expert at finding and summarizing information.",
llm=model_name,
tools=[search_tool],
verbose=True
)
# Create a task that requires tool usage
task = Task(
name="search_task",
description="Search for information about 'Python programming' and provide a summary of what you found.",
expected_output="A clear summary of the search results",
agent=agent
)
# Create and run the workflow
workflow = PraisonAIAgents(
agents=[agent],
tasks=[task],
verbose=True
)
try:
result = await workflow.astart() # Use async start
print(f"\n{'='*60}")
print(f"ASYNC RESULT for {model_name}:")
print('='*60)
print(result)
# Check if result is empty
if not result or (isinstance(result, dict) and not result.get('task_results', {}).get('search_task', {}).get('output')):
print(f"\n❌ ERROR: Empty response from {model_name} (async)")
return False
else:
print(f"\n✅ SUCCESS: Got valid response from {model_name} (async)")
return True
except Exception as e:
print(f"\n❌ ERROR with {model_name} (async): {e}")
import traceback
traceback.print_exc()
return False
def test_model_sync(model_name: str):
print(f"\n{'='*60}")
print(f"Testing SYNC with model: {model_name}")
print('='*60)
# Create agent with the search tool
agent = Agent(
name="SearchAgent",
role="Information Researcher",
goal="Search for information and provide helpful answers",
backstory="You are an expert at finding and summarizing information.",
llm=model_name,
tools=[search_tool],
verbose=True
)
# Create a task that requires tool usage
task = Task(
name="search_task",
description="Search for information about 'Python programming' and provide a summary of what you found.",
expected_output="A clear summary of the search results",
agent=agent
)
# Create and run the workflow
workflow = PraisonAIAgents(
agents=[agent],
tasks=[task],
verbose=True
)
try:
result = workflow.start() # Use sync start
print(f"\n{'='*60}")
print(f"SYNC RESULT for {model_name}:")
print('='*60)
print(result)
# Check if result is empty
if not result or (isinstance(result, dict) and not result.get('task_results', {}).get('search_task', {}).get('output')):
print(f"\n❌ ERROR: Empty response from {model_name} (sync)")
return False
else:
print(f"\n✅ SUCCESS: Got valid response from {model_name} (sync)")
return True
except Exception as e:
print(f"\n❌ ERROR with {model_name} (sync): {e}")
import traceback
traceback.print_exc()
return False
async def main():
print("Testing Ollama empty response fix for both sync and async...")
# Test sync methods
print("\n1. Testing SYNC methods:")
openai_sync_success = test_model_sync("openai/gpt-4o-mini")
ollama_sync_success = test_model_sync("ollama/llama3.2")
# Test async methods
print("\n2. Testing ASYNC methods:")
openai_async_success = await test_model_async("openai/gpt-4o-mini")
ollama_async_success = await test_model_async("ollama/llama3.2")
# Summary
print(f"\n{'='*60}")
print("TEST SUMMARY:")
print('='*60)
print(f"OpenAI sync test: {'✅ PASSED' if openai_sync_success else '❌ FAILED'}")
print(f"Ollama sync test: {'✅ PASSED' if ollama_sync_success else '❌ FAILED'}")
print(f"OpenAI async test: {'✅ PASSED' if openai_async_success else '❌ FAILED'}")
print(f"Ollama async test: {'✅ PASSED' if ollama_async_success else '❌ FAILED'}")
if ollama_sync_success and ollama_async_success:
print("\n🎉 Ollama empty response issue has been fixed for both sync and async!")
else:
print("\n⚠️ Ollama empty response issue still exists in some cases.")
if __name__ == "__main__":
asyncio.run(main())
@@ -0,0 +1,101 @@
#!/usr/bin/env python3
"""
Test script to verify Ollama empty response fix.
"""
import logging
from praisonaiagents import Agent, Task, PraisonAIAgents, TaskOutput
from typing import Dict, Any
# Enable debug logging
logging.basicConfig(level=logging.DEBUG)
# Define a simple tool for testing
def search_tool(query: str) -> Dict[str, Any]:
"""Simulate a search tool that returns results."""
logging.debug(f"[TEST] Search tool called with query: {query}")
results = {
"results": [
{"title": "Result 1", "description": f"Information about {query}"},
{"title": "Result 2", "description": f"More details on {query}"}
],
"total": 2
}
logging.debug(f"[TEST] Search tool returning: {results}")
return results
# Test with both OpenAI and Ollama models
def test_model(model_name: str):
print(f"\n{'='*60}")
print(f"Testing with model: {model_name}")
print('='*60)
# Create agent with the search tool
agent = Agent(
name="SearchAgent",
role="Information Researcher",
goal="Search for information and provide helpful answers",
backstory="You are an expert at finding and summarizing information.",
llm=model_name,
tools=[search_tool],
verbose=True
)
# Create a task that requires tool usage
task = Task(
name="search_task",
description="Search for information about 'Python programming' and provide a summary of what you found.",
expected_output="A clear summary of the search results",
agent=agent
)
# Create and run the workflow
workflow = PraisonAIAgents(
agents=[agent],
tasks=[task],
verbose=True
)
try:
result = workflow.start()
print(f"\n{'='*60}")
print(f"FINAL RESULT for {model_name}:")
print('='*60)
print(result)
# Check if result is empty
if not result or (isinstance(result, dict) and not result.get('task_results', {}).get('search_task', {}).get('output')):
print(f"\n❌ ERROR: Empty response from {model_name}")
return False
else:
print(f"\n✅ SUCCESS: Got valid response from {model_name}")
return True
except Exception as e:
print(f"\n❌ ERROR with {model_name}: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
print("Testing Ollama empty response fix...")
# Test with OpenAI first (as baseline)
print("\n1. Testing with OpenAI (baseline):")
openai_success = test_model("openai/gpt-4o-mini")
# Test with Ollama
print("\n2. Testing with Ollama:")
ollama_success = test_model("ollama/llama3.2")
# Summary
print(f"\n{'='*60}")
print("TEST SUMMARY:")
print('='*60)
print(f"OpenAI test: {'✅ PASSED' if openai_success else '❌ FAILED'}")
print(f"Ollama test: {'✅ PASSED' if ollama_success else '❌ FAILED'}")
if ollama_success:
print("\n🎉 Ollama empty response issue has been fixed!")
else:
print("\n⚠️ Ollama empty response issue still exists.")
+2052 -2050
View File
File diff suppressed because it is too large. Load diff
+107
View File
@@ -0,0 +1,107 @@
#!/usr/bin/env python
from mcp.server.fastmcp import FastMCP
import logging
import datetime
from typing import Dict, List, Union
# Set up logging
logging.basicConfig(level=logging.INFO, filename="weather_server.log")
logger = logging.getLogger("weather-server")
# Initialize FastMCP server for weather tools
mcp = FastMCP("weather-tools")
# Mock weather data for cities
MOCK_WEATHER_DATA = {
"london": {
"temp": 15,
"feels_like": 13,
"temp_min": 12,
"temp_max": 17,
"humidity": 76,
"description": "Cloudy with occasional rain",
"wind_speed": 12,
"country": "GB"
},
"paris": {
"temp": 18,
"feels_like": 17,
"temp_min": 16,
"temp_max": 20,
"humidity": 65,
"description": "Partly cloudy",
"wind_speed": 8,
"country": "FR"
},
"new york": {
"temp": 22,
"feels_like": 24,
"temp_min": 20,
"temp_max": 25,
"humidity": 58,
"description": "Clear sky",
"wind_speed": 10,
"country": "US"
},
"tokyo": {
"temp": 26,
"feels_like": 28,
"temp_min": 24,
"temp_max": 29,
"humidity": 72,
"description": "Humid and warm",
"wind_speed": 7,
"country": "JP"
},
"sydney": {
"temp": 20,
"feels_like": 19,
"temp_min": 17,
"temp_max": 23,
"humidity": 60,
"description": "Sunny with light breeze",
"wind_speed": 15,
"country": "AU"
}
}
@mcp.tool()
def get_weather(location: Union[str, List[str]]) -> Dict:
"""Get current weather data for one or more locations.
Args:
location: City name (str) or list of city names (List[str]) to get weather for
Returns:
Dict with weather data for each location or error message
"""
def get_single_location_weather(loc: str) -> Dict:
"""Helper function to get weather for a single location"""
loc = loc.lower().strip()
if loc in MOCK_WEATHER_DATA:
weather_data = MOCK_WEATHER_DATA[loc].copy()
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
weather_data["time"] = current_time
weather_data["city"] = loc.title()
return weather_data
return {"city": loc.title(), "error": "Location not found in weather database"}
logger.info(f"Getting weather data for {location}")
# Handle list of locations
if isinstance(location, list):
results = {}
for loc in location:
if isinstance(loc, str):
results[loc] = get_single_location_weather(loc)
return {"results": results}
# Handle single location
if isinstance(location, str):
return get_single_location_weather(location)
return {"error": "Invalid location format. Please provide a string or list of strings."}
if __name__ == "__main__":
# Run the MCP server
mcp.run()
+3 -13
View File
@@ -1,16 +1,6 @@
# OpenAI / compatible API
OPENAI_API_KEY="Enter your API key"
OPENAI_MODEL_NAME="gpt-4o"
OPENAI_API_KEY="Enter your API key"
OPENAI_API_BASE="https://api.openai.com/v1"
# AG2 framework (uses same OPENAI_* vars above, or override below)
# MODEL_NAME=gpt-4o-mini
# AWS Bedrock (for ag2_bedrock.yaml example)
# AWS_DEFAULT_REGION=us-east-1
# AWS_ACCESS_KEY_ID=your-access-key
# AWS_SECRET_ACCESS_KEY=your-secret-key
# Chainlit (optional)
CHAINLIT_USERNAME=admin
CHAINLIT_AUTH_SECRET="chainlit create-secret to create"
CHAINLIT_USERNAME=admin
CHAINLIT_AUTH_SECRET="chainlit create-secret to create"
+2 -2
View File
@@ -3,8 +3,8 @@ class Praisonai < Formula
desc "AI tools for various AI applications"
homepage "https://github.com/MervinPraison/PraisonAI"
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.2.33.tar.gz"
sha256 `curl -sL https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.2.33.tar.gz | shasum -a 256`.split.first
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.2.36.tar.gz"
sha256 `curl -sL https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.2.36.tar.gz | shasum -a 256`.split.first
license "MIT"
depends_on "[email protected]"
+2 -164
View File
@@ -41,16 +41,6 @@ try:
except ImportError:
pass
AG2_AVAILABLE = False
try:
import importlib.metadata as _importlib_metadata
_importlib_metadata.distribution('ag2')
from autogen import LLMConfig as _AG2LLMConfig # noqa: F401 — AG2-exclusive class
AG2_AVAILABLE = True
del _AG2LLMConfig, _importlib_metadata
except Exception:
pass
try:
import agentops
AGENTOPS_AVAILABLE = True
@@ -61,7 +51,7 @@ except ImportError:
pass
# Only try to import praisonai_tools if either CrewAI or AutoGen is available
if CREWAI_AVAILABLE or AUTOGEN_AVAILABLE or PRAISONAI_AVAILABLE or AG2_AVAILABLE:
if CREWAI_AVAILABLE or AUTOGEN_AVAILABLE or PRAISONAI_AVAILABLE:
try:
from praisonai_tools import (
CodeDocsSearchTool, CSVSearchTool, DirectorySearchTool, DOCXSearchTool, DirectoryReadTool,
@@ -137,8 +127,6 @@ class AgentsGenerator:
raise ImportError("AutoGen is not installed. Please install it with 'pip install praisonai[autogen]'")
elif framework == "praisonai" and not PRAISONAI_AVAILABLE:
raise ImportError("PraisonAI is not installed. Please install it with 'pip install praisonaiagents'")
elif framework == "ag2" and not AG2_AVAILABLE:
raise ImportError("AG2 is not installed. Please install it with 'pip install praisonai[ag2]'")
def is_function_or_decorated(self, obj):
"""
@@ -286,7 +274,7 @@ class AgentsGenerator:
tools_dict = {}
# Only try to use praisonai_tools if it's available and needed
if PRAISONAI_TOOLS_AVAILABLE and (CREWAI_AVAILABLE or AUTOGEN_AVAILABLE or PRAISONAI_AVAILABLE or AG2_AVAILABLE):
if PRAISONAI_TOOLS_AVAILABLE and (CREWAI_AVAILABLE or AUTOGEN_AVAILABLE or PRAISONAI_AVAILABLE):
tools_dict = {
'CodeDocsSearchTool': CodeDocsSearchTool(),
'CSVSearchTool': CSVSearchTool(),
@@ -339,12 +327,6 @@ class AgentsGenerator:
if AGENTOPS_AVAILABLE:
agentops.init(os.environ.get("AGENTOPS_API_KEY"), default_tags=["praisonai"])
return self._run_praisonai(config, topic, tools_dict)
elif framework == "ag2":
if not AG2_AVAILABLE:
raise ImportError("AG2 is not installed. Please install it with 'pip install praisonai[ag2]'")
if AGENTOPS_AVAILABLE:
agentops.init(os.environ.get("AGENTOPS_API_KEY"), default_tags=["ag2"])
return self._run_ag2(config, topic, tools_dict)
else: # framework=crewai
if not CREWAI_AVAILABLE:
raise ImportError("CrewAI is not installed. Please install it with 'pip install praisonai[crewai]'")
@@ -425,150 +407,6 @@ class AgentsGenerator:
return result
def _run_ag2(self, config, topic, tools_dict):
"""
Run agents using the AG2 framework (community fork of AutoGen, PyPI: ag2).
AG2 installs under the 'autogen' namespace — there is no 'import ag2'.
Uses LLMConfig context manager + AssistantAgent + GroupChat pattern.
Args:
config (dict): Configuration dictionary parsed from YAML
topic (str): The topic/task to process
tools_dict (dict): Dictionary of available tools
Returns:
str: Result prefixed with '### AG2 Output ###'
"""
import re
from autogen import (
AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager, LLMConfig
)
model_config = self.config_list[0] if self.config_list else {}
# Allow YAML top-level llm block to override config_list values
yaml_llm = config.get("llm", {}) or {}
# Also check first role's llm block as a fallback
first_role_llm = {}
for role_details in config.get("roles", {}).values():
first_role_llm = role_details.get("llm", {}) or {}
break
# Priority: YAML top-level llm > first role llm > config_list > env vars
def _resolve(key, env_var=None, default=None):
return (yaml_llm.get(key) or first_role_llm.get(key)
or model_config.get(key)
or (os.environ.get(env_var) if env_var else None)
or default)
api_type = _resolve("api_type", default="openai").lower()
model_name = _resolve("model", default="gpt-4o-mini")
api_key = _resolve("api_key", env_var="OPENAI_API_KEY")
# Fix #3: also check OPENAI_API_BASE for consistency with rest of codebase
base_url = (model_config.get("base_url")
or yaml_llm.get("base_url")
or os.environ.get("OPENAI_BASE_URL")
or os.environ.get("OPENAI_API_BASE"))
# Build LLMConfig — pass a config dict; Bedrock needs no api_key
if api_type == "bedrock":
llm_config_entry = {"api_type": "bedrock", "model": model_name}
else:
llm_config_entry = {"model": model_name}
if api_key:
llm_config_entry["api_key"] = api_key
if base_url and base_url not in ("https://api.openai.com/v1", "https://api.openai.com/v1/"):
llm_config_entry["base_url"] = base_url
llm_config = LLMConfig(llm_config_entry)
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER",
is_termination_msg=lambda x: "TERMINATE" in (x.get("content") or ""),
code_execution_config=False,
)
# Create one AssistantAgent per role, passing llm_config directly
ag2_agent_entries = []
for role, details in config["roles"].items():
agent_name = details.get("role", role).replace("{topic}", topic)
backstory = details.get("backstory", "").replace("{topic}", topic)
agent_name_safe = re.sub(r"[^a-zA-Z0-9_\-]", "_", agent_name)
assistant = AssistantAgent(
name=agent_name_safe,
system_message=backstory + "\nWhen the task is done, reply 'TERMINATE'.",
llm_config=llm_config,
)
ag2_agent_entries.append((role, details, assistant))
# Register tools via AG2 decorator pattern
for role, details, assistant in ag2_agent_entries:
for tool_name in details.get("tools", []):
tool = tools_dict.get(tool_name)
if tool is None:
continue
func = tool if callable(tool) else getattr(tool, "run", None)
if func is None:
continue
def make_tool_fn(f):
def tool_fn(**kwargs):
return f(**kwargs) if callable(f) else str(f)
tool_fn.__name__ = tool_name
return tool_fn
wrapped = make_tool_fn(func)
assistant.register_for_llm(description=f"Tool: {tool_name}")(wrapped)
user_proxy.register_for_execution()(wrapped)
all_assistants = [a for _, _, a in ag2_agent_entries]
if not all_assistants:
return "### AG2 Output ###\nNo agents created from configuration."
# Build initial message from all task descriptions
task_lines = []
for role, details, _ in ag2_agent_entries:
for task_name, task_details in details.get("tasks", {}).items():
desc = task_details.get("description", "").replace("{topic}", topic)
if desc:
task_lines.append(desc)
initial_message = "\n".join(task_lines) if task_lines else topic
groupchat = GroupChat(
agents=[user_proxy] + all_assistants,
messages=[],
max_round=12,
)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
try:
chat_result = user_proxy.initiate_chat(manager, message=initial_message)
except Exception as e:
return f"### AG2 Error ###\n{str(e)}"
# Prefer ChatResult.summary if available, otherwise scan messages
result_content = ""
summary = getattr(chat_result, "summary", None)
if summary and isinstance(summary, str) and summary.strip():
result_content = re.sub(r'[\s\.\,]*TERMINATE[\s\.\,]*$', '', summary, flags=re.IGNORECASE).strip().rstrip('.')
if not result_content:
for msg in reversed(groupchat.messages):
# Skip the initial user proxy message
if msg.get("name") == "User":
continue
content = (msg.get("content") or "").strip()
if content:
result_content = re.sub(r'[\s\.\,]*TERMINATE[\s\.\,]*$', '', content, flags=re.IGNORECASE).strip().rstrip('.')
if result_content:
break
if not result_content:
result_content = "Task completed."
return f"### AG2 Output ###\n{result_content}"
def _run_crewai(self, config, topic, tools_dict):
"""
Run agents using the CrewAI framework.
-15
View File
@@ -32,16 +32,6 @@ try:
except ImportError:
pass
AG2_AVAILABLE = False
try:
import importlib.metadata as _importlib_metadata
_importlib_metadata.distribution('ag2')
from autogen import LLMConfig as _AG2LLMConfig # noqa: F401 — AG2-exclusive class
AG2_AVAILABLE = True
del _AG2LLMConfig, _importlib_metadata
except Exception:
pass
try:
from praisonai_tools import (
CodeDocsSearchTool, CSVSearchTool, DirectorySearchTool, DOCXSearchTool,
@@ -93,11 +83,6 @@ AutoGen is not installed. Please install with:
Praisonai is not installed. Please install with:
pip install praisonaiagents
""")
elif framework == "ag2" and not AG2_AVAILABLE:
raise ImportError("""
AG2 is not installed. Please install with:
pip install "praisonai[ag2]"
""")
# Only show tools message if using a framework and tools are needed
if (framework in ["crewai", "autogen"]) and not PRAISONAI_TOOLS_AVAILABLE:
+48 -9
View File
@@ -170,6 +170,25 @@ class PraisonAI:
pass
return None
def read_file_if_provided(self, file_path):
"""
Read content from a file if the file path is provided.
Returns the file content or None if file cannot be read.
"""
if not file_path:
return None
try:
with open(file_path, 'r', encoding='utf-8') as f:
file_content = f.read().strip()
return file_content if file_content else None
except FileNotFoundError:
print(f"[red]ERROR: File not found: {file_path}[/red]")
sys.exit(1)
except Exception as e:
print(f"[red]ERROR: Failed to read file: {e}[/red]")
sys.exit(1)
def main(self):
"""
The main function of the PraisonAI object. It parses the command-line arguments,
@@ -189,15 +208,24 @@ class PraisonAI:
# Check for piped input from stdin
stdin_input = self.read_stdin_if_available()
# Check for file input if --file is provided
file_input = self.read_file_if_provided(getattr(args, 'file', None))
if args.command:
if args.command.startswith("tests.test") or args.command.startswith("tests/test"): # Argument used for testing purposes
print("test")
return "test"
else:
# If stdin input is available, append it to the command
# Combine command with any available inputs (stdin and/or file)
combined_inputs = []
if stdin_input:
combined_prompt = f"{args.command} {stdin_input}"
combined_inputs.append(stdin_input)
if file_input:
combined_inputs.append(file_input)
if combined_inputs:
combined_prompt = f"{args.command} {' '.join(combined_inputs)}"
result = self.handle_direct_prompt(combined_prompt)
print(result)
return result
@@ -206,20 +234,30 @@ class PraisonAI:
elif hasattr(args, 'direct_prompt') and args.direct_prompt:
# Only handle direct prompt if agent_file wasn't explicitly set in constructor
if original_agent_file == "agents.yaml": # Default value, so safe to use direct prompt
# If stdin input is available, append it to the direct prompt
prompt = args.direct_prompt
# Combine direct prompt with any available inputs (stdin and/or file)
prompt_parts = [args.direct_prompt]
if stdin_input:
prompt = f"{args.direct_prompt} {stdin_input}"
prompt_parts.append(stdin_input)
if file_input:
prompt_parts.append(file_input)
prompt = ' '.join(prompt_parts)
result = self.handle_direct_prompt(prompt)
print(result)
return result
else:
# Agent file was explicitly set, ignore direct prompt and use the file
pass
elif stdin_input:
# If only stdin input is provided (no command), use it as direct prompt
if original_agent_file == "agents.yaml": # Default value, so safe to use stdin as prompt
result = self.handle_direct_prompt(stdin_input)
elif stdin_input or file_input:
# If only stdin/file input is provided (no command), use it as direct prompt
if original_agent_file == "agents.yaml": # Default value, so safe to use input as prompt
# Combine any available inputs
inputs = []
if stdin_input:
inputs.append(stdin_input)
if file_input:
inputs.append(file_input)
combined_input = ' '.join(inputs)
result = self.handle_direct_prompt(combined_input)
print(result)
return result
# If no command or direct_prompt, preserve agent_file from constructor (don't overwrite)
@@ -530,6 +568,7 @@ class PraisonAI:
parser.add_argument("--public", action="store_true", help="Use ngrok to expose the server publicly (only with --call)")
parser.add_argument("--merge", action="store_true", help="Merge existing agents.yaml with auto-generated agents instead of overwriting")
parser.add_argument("--claudecode", action="store_true", help="Enable Claude Code integration for file modifications and coding tasks")
parser.add_argument("--file", "-f", type=str, help="Read input from a file and append it to the prompt")
# If we're in a test environment, parse with empty args to avoid pytest interference
if in_test_env:
+1 -1
View File
@@ -56,7 +56,7 @@ class CloudDeployer:
file.write("FROM python:3.11-slim\n")
file.write("WORKDIR /app\n")
file.write("COPY . .\n")
file.write("RUN pip install flask praisonai==2.2.33 gunicorn markdown\n")
file.write("RUN pip install flask praisonai==2.2.36 gunicorn markdown\n")
file.write("EXPOSE 8080\n")
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
+4 -2
View File
@@ -467,10 +467,12 @@ async def ui_run_praisonai(config, topic, tools_dict):
role_tools.append(callable_func)
# Add API tool definition to task's tools
task_tools.append(tool_def)
# Also set the agent's tools to include both
agent.tools = role_tools
else:
logger.warning(f"Tool '{tool_name}' not found. Skipping.")
# Set the agent's tools after collecting all tools
if role_tools:
agent.tools = role_tools
for tname, tdetails in details.get('tasks', {}).items():
description_filled = tdetails['description'].format(topic=topic)
+136 -23
View File
@@ -7,6 +7,8 @@ import json
import asyncio
import io
import base64
import importlib.util
import inspect
# Third-party imports
from dotenv import load_dotenv
@@ -59,6 +61,76 @@ def load_setting(key: str) -> str:
cl_data._data_layer = db_manager
def load_custom_tools():
"""Load custom tools from tools.py if it exists"""
custom_tools = {}
try:
spec = importlib.util.spec_from_file_location("tools", "tools.py")
if spec is None:
logger.debug("tools.py not found in current directory")
return custom_tools
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
# Load all functions from tools.py
for name, obj in inspect.getmembers(module):
if not name.startswith('_') and callable(obj) and not inspect.isclass(obj):
# Store function in globals for access
globals()[name] = obj
# Get function signature to build parameters
sig = inspect.signature(obj)
params_properties = {}
required_params = []
for param_name, param in sig.parameters.items():
if param_name != 'self': # Skip self parameter
# Get type annotation if available
param_type = "string" # Default type
if param.annotation != inspect.Parameter.empty:
if param.annotation == int:
param_type = "integer"
elif param.annotation == float:
param_type = "number"
elif param.annotation == bool:
param_type = "boolean"
params_properties[param_name] = {
"type": param_type,
"description": f"Parameter {param_name}"
}
# Add to required if no default value
if param.default == inspect.Parameter.empty:
required_params.append(param_name)
# Build tool definition
tool_def = {
"type": "function",
"function": {
"name": name,
"description": obj.__doc__ or f"Function {name.replace('_', ' ')}",
"parameters": {
"type": "object",
"properties": params_properties,
"required": required_params
}
}
}
custom_tools[name] = tool_def
logger.info(f"Loaded custom tool: {name}")
logger.info(f"Loaded {len(custom_tools)} custom tools from tools.py")
except Exception as e:
logger.warning(f"Error loading custom tools: {e}")
return custom_tools
# Load custom tools
custom_tools_dict = load_custom_tools()
tavily_api_key = os.getenv("TAVILY_API_KEY")
tavily_client = TavilyClient(api_key=tavily_api_key) if tavily_api_key else None
@@ -72,7 +144,7 @@ async def tavily_web_search(query):
response = tavily_client.search(query)
logger.debug(f"Tavily search response: {response}")
async with AsyncAsyncWebCrawler() as crawler:
async with AsyncWebCrawler() as crawler:
results = []
for result in response.get('results', []):
url = result.get('url')
@@ -97,20 +169,28 @@ async def tavily_web_search(query):
"results": results
})
tools = [{
"type": "function",
"function": {
"name": "tavily_web_search",
"description": "Search the web using Tavily API and crawl the resulting URLs",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Search query"}
},
"required": ["query"]
# Build tools list with Tavily and custom tools
tools = []
# Add Tavily tool if API key is available
if tavily_api_key:
tools.append({
"type": "function",
"function": {
"name": "tavily_web_search",
"description": "Search the web using Tavily API and crawl the resulting URLs",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Search query"}
},
"required": ["query"]
}
}
}
}] if tavily_api_key else []
})
# Add custom tools from tools.py
tools.extend(list(custom_tools_dict.values()))
# Authentication configuration
AUTH_PASSWORD_ENABLED = os.getenv("AUTH_PASSWORD_ENABLED", "true").lower() == "true" # Password authentication enabled by default
@@ -235,7 +315,8 @@ User Question: {message.content}
]
}
if tavily_api_key:
# Pass tools if we have any (Tavily or custom)
if tools:
completion_params["tools"] = tools
completion_params["tool_choice"] = "auto"
@@ -254,7 +335,7 @@ User Question: {message.content}
await msg.stream_token(token)
full_response += token
if tavily_api_key and 'tool_calls' in delta and delta['tool_calls'] is not None:
if tools and 'tool_calls' in delta and delta['tool_calls'] is not None:
for tool_call in delta['tool_calls']:
if current_tool_call is None or tool_call.index != current_tool_call['index']:
if current_tool_call:
@@ -284,10 +365,17 @@ User Question: {message.content}
cl.user_session.set("message_history", message_history)
await msg.update()
if tavily_api_key and tool_calls:
available_functions = {
"tavily_web_search": tavily_web_search,
}
if tool_calls and tools: # Check if we have any tools and tool calls
available_functions = {}
# Add Tavily function if available
if tavily_api_key:
available_functions["tavily_web_search"] = tavily_web_search
# Add all custom tool functions from globals
for tool_name in custom_tools_dict:
if tool_name in globals():
available_functions[tool_name] = globals()[tool_name]
messages = message_history + [{"role": "assistant", "content": None, "function_call": {
"name": tool_calls[0]['function']['name'],
"arguments": tool_calls[0]['function']['arguments']
@@ -301,9 +389,25 @@ User Question: {message.content}
if function_args:
try:
function_args = json.loads(function_args)
function_response = await function_to_call(
query=function_args.get("query"),
)
# Call function based on whether it's async or sync
if asyncio.iscoroutinefunction(function_to_call):
# For async functions like tavily_web_search
if function_name == "tavily_web_search":
function_response = await function_to_call(
query=function_args.get("query"),
)
else:
# For custom async functions, pass all arguments
function_response = await function_to_call(**function_args)
else:
# For sync functions (most custom tools)
function_response = function_to_call(**function_args)
# Convert response to string if needed
if not isinstance(function_response, str):
function_response = json.dumps(function_response)
messages.append(
{
"role": "function",
@@ -313,6 +417,15 @@ User Question: {message.content}
)
except json.JSONDecodeError:
logger.error(f"Failed to parse function arguments: {function_args}")
except Exception as e:
logger.error(f"Error calling function {function_name}: {str(e)}")
messages.append(
{
"role": "function",
"name": function_name,
"content": f"Error: {str(e)}",
}
)
second_response = await acompletion(
model=model_name,
+4 -7
View File
@@ -1,6 +1,6 @@
[project]
name = "PraisonAI"
version = "2.2.33"
version = "2.2.36"
description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration."
readme = "README.md"
license = ""
@@ -12,7 +12,7 @@ dependencies = [
"rich>=13.7",
"markdown>=3.5",
"pyparsing>=3.0.0",
"praisonaiagents>=0.0.106",
"praisonaiagents>=0.0.109",
"python-dotenv>=0.19.0",
"instructor>=1.3.3",
"PyYAML>=6.0",
@@ -92,11 +92,10 @@ call = [
train = []
crewai = ["crewai>=0.32.0", "praisonai-tools>=0.0.15"]
autogen = ["pyautogen>=0.2.19", "praisonai-tools>=0.0.15", "crewai"]
ag2 = ["ag2>=0.11.0", "praisonai-tools>=0.0.15"]
[tool.poetry]
name = "PraisonAI"
version = "2.2.33"
version = "2.2.36"
description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration."
authors = ["Mervin Praison"]
license = ""
@@ -114,13 +113,12 @@ python = ">=3.10,<3.13"
rich = ">=13.7"
markdown = ">=3.5"
pyparsing = ">=3.0.0"
praisonaiagents = ">=0.0.106"
praisonaiagents = ">=0.0.109"
python-dotenv = ">=0.19.0"
instructor = ">=1.3.3"
PyYAML = ">=6.0"
mcp = ">=1.6.0"
pyautogen = {version = ">=0.2.19", optional = true}
ag2 = {version = ">=0.11.0", optional = true}
crewai = {version = ">=0.32.0", optional = true}
praisonai-tools = {version = ">=0.0.15", optional = true}
chainlit = {version = "==2.5.5", optional = true}
@@ -279,7 +277,6 @@ call = [
]
crewai = ["crewai", "praisonai-tools"]
autogen = ["pyautogen", "praisonai-tools", "crewai"]
ag2 = ["ag2", "praisonai-tools"]
[tool.poetry-dynamic-versioning]
enable = true
Whitespace-only changes.
@@ -1,477 +0,0 @@
"""
AG2 Mock Integration Tests — verifies PraisonAI correctly orchestrates AG2 agents.
Uses mocked AG2 responses — no real LLM API calls are made.
Fast: all tests should complete in < 1s each.
Run:
pytest tests/integration/ag2/test_ag2_integration.py -v
"""
import pytest
import os
import sys
from unittest.mock import patch, MagicMock
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../"))
# Stub heavy dependencies that auto.py (develop branch) imports at module level
# so that tests can import praisonai without a full installation.
for _stub in ("instructor",):
if _stub not in sys.modules:
sys.modules[_stub] = MagicMock()
import importlib as _importlib
if "openai" not in sys.modules:
try:
_importlib.import_module("openai")
except ImportError:
_mock_openai = MagicMock()
_mock_openai.__version__ = "1.0.0"
sys.modules["openai"] = _mock_openai
# ---------------------------------------------------------------------------
# Fixtures
# ---------------------------------------------------------------------------
@pytest.fixture
def single_agent_yaml():
return """
framework: ag2
topic: Write a short poem about Python
roles:
poet:
role: "Creative Poet"
goal: "Write elegant and concise poems"
backstory: "You are a creative poet who loves Python and technology."
tasks:
write_poem:
description: "Write a short 4-line poem about Python programming"
expected_output: "A 4-line poem about Python"
"""
@pytest.fixture
def multi_agent_yaml():
return """
framework: ag2
topic: Explain why open-source AI matters
roles:
researcher:
role: "Research Analyst"
goal: "Research and gather key facts"
backstory: "Expert in technology research and trend analysis."
tasks:
research:
description: "Research why open-source AI matters"
expected_output: "Key facts and data points"
writer:
role: "Technical Writer"
goal: "Write clear technical content"
backstory: "Professional technical writer with 10 years experience."
tasks:
write:
description: "Write a clear explanation of why open-source AI matters"
expected_output: "A 200-word explanation"
"""
@pytest.fixture
def mock_ag2_classes():
"""Mock all AG2 classes used in _run_ag2."""
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_assistant = MagicMock()
mock_assistant.name = "test_agent"
mock_user_proxy = MagicMock()
mock_user_proxy.name = "User"
mock_groupchat = MagicMock()
mock_groupchat.messages = [
{
"name": "test_agent",
"role": "assistant",
"content": "Task completed successfully. TERMINATE",
}
]
mock_manager = MagicMock()
return {
"llm_config": mock_llm_config,
"assistant": mock_assistant,
"user_proxy": mock_user_proxy,
"groupchat": mock_groupchat,
"manager": mock_manager,
}
# ---------------------------------------------------------------------------
# AG2 import detection
# ---------------------------------------------------------------------------
class TestAG2Import:
@pytest.mark.integration
def test_ag2_distribution_available(self):
"""ag2 PyPI distribution should be findable when installed.
Note: ag2 installs under the 'autogen' namespace — 'import ag2' does NOT work.
Detection uses importlib.metadata to check the 'ag2' distribution name.
"""
import importlib.metadata
try:
dist = importlib.metadata.distribution('ag2')
assert dist.metadata['Name'] == 'ag2'
except importlib.metadata.PackageNotFoundError:
pytest.skip("ag2 not installed — skipping AG2 integration tests")
@pytest.mark.integration
def test_autogen_namespace_importable_with_ag2(self):
"""When ag2 is installed, autogen namespace classes are importable."""
try:
from autogen import AssistantAgent, UserProxyAgent, GroupChat, LLMConfig
assert AssistantAgent is not None
assert UserProxyAgent is not None
assert GroupChat is not None
assert LLMConfig is not None
except ImportError:
pytest.skip("ag2 not installed — autogen namespace not available")
# ---------------------------------------------------------------------------
# Single-agent flow (mocked)
# ---------------------------------------------------------------------------
class TestAG2SingleAgentFlow:
@pytest.mark.integration
def test_single_agent_yaml_initialises_praisonai(self, single_agent_yaml, mock_ag2_classes):
"""PraisonAI initialises correctly with framework='ag2' from YAML."""
import tempfile
with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f:
f.write(single_agent_yaml)
yaml_path = f.name
try:
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai import PraisonAI
ai = PraisonAI(agent_file=yaml_path, framework="ag2")
assert ai.framework == "ag2"
except ImportError as e:
pytest.skip(f"PraisonAI not available: {e}")
finally:
os.unlink(yaml_path)
@pytest.mark.integration
def test_single_agent_run_returns_ag2_output(self, mock_ag2_classes):
"""_run_ag2 executes single-agent flow and returns '### AG2 Output ###'."""
config = {
"framework": "ag2",
"topic": "Write a poem",
"roles": {
"poet": {
"role": "Creative Poet",
"goal": "Write poems",
"backstory": "A creative poet.",
"tasks": {
"task1": {
"description": "Write a poem about Python",
"expected_output": "A short poem",
}
},
"tools": [],
}
},
}
m = mock_ag2_classes
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
with patch("autogen.LLMConfig", create=True, return_value=m["llm_config"]), \
patch("autogen.AssistantAgent", create=True, return_value=m["assistant"]), \
patch("autogen.UserProxyAgent", create=True, return_value=m["user_proxy"]), \
patch("autogen.GroupChat", create=True, return_value=m["groupchat"]), \
patch("autogen.GroupChatManager", create=True, return_value=m["manager"]):
result = gen._run_ag2(config, "Write a poem", {})
assert "### AG2 Output ###" in result
assert "Task completed successfully" in result
@pytest.mark.integration
def test_single_agent_calls_initiate_chat(self, mock_ag2_classes):
"""user_proxy.initiate_chat is called with the manager and initial message."""
config = {
"framework": "ag2",
"topic": "Test topic",
"roles": {
"agent": {
"role": "Agent",
"goal": "Help",
"backstory": "Helpful agent.",
"tasks": {
"t": {"description": "Do the task", "expected_output": "Done"}
},
"tools": [],
}
},
}
m = mock_ag2_classes
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
with patch("autogen.LLMConfig", create=True, return_value=m["llm_config"]), \
patch("autogen.AssistantAgent", create=True, return_value=m["assistant"]), \
patch("autogen.UserProxyAgent", create=True, return_value=m["user_proxy"]), \
patch("autogen.GroupChat", create=True, return_value=m["groupchat"]), \
patch("autogen.GroupChatManager", create=True, return_value=m["manager"]):
gen._run_ag2(config, "Test topic", {})
m["user_proxy"].initiate_chat.assert_called_once()
call_args = m["user_proxy"].initiate_chat.call_args
# First positional arg should be the manager
assert call_args[0][0] is m["manager"]
# message kwarg should be non-empty (task description or topic)
message = call_args[1].get("message", "")
assert message != ""
# ---------------------------------------------------------------------------
# Multi-agent GroupChat flow (mocked)
# ---------------------------------------------------------------------------
class TestAG2MultiAgentGroupChatFlow:
@pytest.mark.integration
def test_multi_agent_creates_correct_number_of_assistants(self, multi_agent_yaml, mock_ag2_classes):
"""Two roles in YAML → two AssistantAgents created."""
config = {
"framework": "ag2",
"topic": "Explain open-source AI",
"roles": {
"researcher": {
"role": "Research Analyst", "goal": "Research", "backstory": "Analyst.",
"tasks": {"r": {"description": "Research it", "expected_output": "Facts"}},
"tools": [],
},
"writer": {
"role": "Technical Writer", "goal": "Write", "backstory": "Writer.",
"tasks": {"w": {"description": "Write it", "expected_output": "Article"}},
"tools": [],
},
},
}
m = mock_ag2_classes
assistant_call_count = [0]
def count_assistant(**kwargs):
assistant_call_count[0] += 1
a = MagicMock()
a.name = kwargs.get("name", f"agent_{assistant_call_count[0]}")
return a
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
with patch("autogen.LLMConfig", create=True, return_value=m["llm_config"]), \
patch("autogen.AssistantAgent", create=True, side_effect=count_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=m["user_proxy"]), \
patch("autogen.GroupChat", create=True, return_value=m["groupchat"]), \
patch("autogen.GroupChatManager", create=True, return_value=m["manager"]):
gen._run_ag2(config, "Explain open-source AI", {})
assert assistant_call_count[0] == 2
@pytest.mark.integration
def test_multi_agent_groupchat_max_round_set(self, mock_ag2_classes):
"""GroupChat is created with max_round parameter."""
config = {
"framework": "ag2",
"topic": "Test",
"roles": {
"a": {
"role": "Agent", "goal": "Help", "backstory": "Helper.",
"tasks": {"t": {"description": "Do", "expected_output": "Done"}},
"tools": [],
}
},
}
m = mock_ag2_classes
groupchat_kwargs = {}
def capture_groupchat(**kwargs):
groupchat_kwargs.update(kwargs)
return m["groupchat"]
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
with patch("autogen.LLMConfig", create=True, return_value=m["llm_config"]), \
patch("autogen.AssistantAgent", create=True, return_value=m["assistant"]), \
patch("autogen.UserProxyAgent", create=True, return_value=m["user_proxy"]), \
patch("autogen.GroupChat", create=True, side_effect=capture_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=m["manager"]):
gen._run_ag2(config, "Test", {})
assert "max_round" in groupchat_kwargs
assert groupchat_kwargs["max_round"] > 0
# ---------------------------------------------------------------------------
# Backward-compatibility: existing autogen/crewai paths unaffected
# ---------------------------------------------------------------------------
class TestAG2BackwardCompatibility:
@pytest.mark.integration
def test_autogen_framework_still_works(self):
"""framework='autogen' dispatches to _run_autogen, not _run_ag2."""
import yaml
with patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", True), \
patch("praisonai.agents_generator.AG2_AVAILABLE", False), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="autogen",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
assert gen.framework == "autogen"
gen.agent_yaml = yaml.dump({
"framework": "autogen",
"topic": "Test",
"roles": {
"agent": {
"role": "Agent", "goal": "Help", "backstory": "Helper.",
"tasks": {"t": {"description": "Do", "expected_output": "Done"}},
"tools": [],
}
},
})
# Verify _run_ag2 is NOT called when framework='autogen'
with patch.object(gen, "_run_ag2") as mock_run_ag2, \
patch.object(gen, "_run_autogen", return_value="autogen result") as mock_run_autogen:
gen.generate_crew_and_kickoff()
mock_run_ag2.assert_not_called()
mock_run_autogen.assert_called_once()
@pytest.mark.integration
def test_ag2_framework_dispatches_to_run_ag2(self, mock_ag2_classes):
"""framework='ag2' dispatches to _run_ag2 and NOT to _run_autogen."""
import yaml
m = mock_ag2_classes
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
try:
from praisonai.agents_generator import AgentsGenerator
except ImportError as e:
pytest.skip(f"AgentsGenerator not available: {e}")
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
gen.agent_yaml = yaml.dump({
"framework": "ag2",
"topic": "Test",
"roles": {
"agent": {
"role": "Agent", "goal": "Help", "backstory": "Helper.",
"tasks": {"t": {"description": "Do", "expected_output": "Done"}},
"tools": [],
}
},
})
with patch.object(gen, "_run_autogen") as mock_autogen, \
patch("autogen.LLMConfig", create=True, return_value=m["llm_config"]), \
patch("autogen.AssistantAgent", create=True, return_value=m["assistant"]), \
patch("autogen.UserProxyAgent", create=True, return_value=m["user_proxy"]), \
patch("autogen.GroupChat", create=True, return_value=m["groupchat"]), \
patch("autogen.GroupChatManager", create=True, return_value=m["manager"]):
result = gen.generate_crew_and_kickoff()
mock_autogen.assert_not_called()
assert "### AG2 Output ###" in result
if __name__ == "__main__":
pytest.main([__file__, "-v"])
@@ -1,98 +0,0 @@
"""
Example of AG2 tool registration for use with PraisonAI's --framework ag2.
AG2 (community fork of AutoGen, PyPI package: ag2) installs under the
'autogen' namespace but is a distinct package from pyautogen/pyautogen2.
Usage with PraisonAI:
pip install "praisonai[ag2]"
praisonai --framework ag2 agents.yaml
Standalone run:
python tests/source/ag2_function_tools.py
"""
from typing import Annotated, Literal
import os
# ag2 installs under the 'autogen' namespace
from autogen import (
AssistantAgent,
UserProxyAgent,
GroupChat,
GroupChatManager,
LLMConfig,
)
Operator = Literal["+", "-", "*", "/"]
def calculator(
a: Annotated[int, "First operand"],
b: Annotated[int, "Second operand"],
operator: Annotated[Operator, "Arithmetic operator: +, -, *, /"],
) -> int:
"""Perform basic arithmetic operations."""
if operator == "+":
return a + b
elif operator == "-":
return a - b
elif operator == "*":
return a * b
elif operator == "/":
if b == 0:
raise ValueError("Division by zero")
return int(a / b)
else:
raise ValueError(f"Invalid operator: {operator}")
# Build LLMConfig — AG2 uses a context manager pattern so agents
# created inside the 'with' block automatically inherit the config.
llm_config = LLMConfig(
api_type="openai",
model=os.environ.get("MODEL_NAME", "gpt-4o-mini"),
api_key=os.environ.get("OPENAI_API_KEY"),
)
# Create AssistantAgent inside llm_config context
with llm_config:
assistant = AssistantAgent(
name="Calculator_Assistant",
system_message=(
"You are a helpful AI assistant that can perform arithmetic calculations. "
"Use the calculator tool when math operations are needed. "
"Return 'TERMINATE' when the task is done."
),
)
# UserProxyAgent does not use LLM — created outside context
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER",
is_termination_msg=lambda msg: (
msg.get("content") is not None and "TERMINATE" in msg["content"]
),
code_execution_config=False,
)
# AG2 tool registration pattern:
# @agent.register_for_llm(description="...") — exposes tool schema to the LLM
# @user_proxy.register_for_execution() — tells user_proxy to execute it
@assistant.register_for_llm(description="A simple calculator for arithmetic operations.")
@user_proxy.register_for_execution()
def calculator_tool(
a: Annotated[int, "First operand"],
b: Annotated[int, "Second operand"],
operator: Annotated[Operator, "Arithmetic operator"],
) -> int:
return calculator(a, b, operator)
if __name__ == "__main__":
chat_result = user_proxy.initiate_chat(
assistant,
message="What is (44232 + 13312 / (232 - 32)) * 5?",
)
print(f"\nResult: {chat_result.summary}")
@@ -0,0 +1,83 @@
#!/usr/bin/env python3
"""
Test script to verify the custom tools fix in chatbot integration.
This demonstrates that agents can now use multiple custom tools when integrated into the chatbot.
"""
import yaml
import os
# Create a sample agents.yaml file
agents_yaml_content = """
roles:
researcher:
name: "Research Agent"
role: "Information Researcher"
goal: "Find and analyze information using multiple tools"
backstory: "You are an expert researcher with access to multiple information sources"
llm: "gpt-4o-mini"
tools:
- search_web
- get_weather
- calculate
tasks:
test_task:
description: "Use all available tools to gather information about {topic}"
expected_output: "A comprehensive report using data from all tools"
"""
# Create a sample tools.py file
tools_py_content = '''
def search_web(query: str) -> str:
"""Search the web for information.
Args:
query: The search query
Returns:
Search results
"""
return f"Web search results for: {query}"
def get_weather(location: str) -> str:
"""Get weather information for a location.
Args:
location: The location to get weather for
Returns:
Weather information
"""
return f"Weather in {location}: Sunny, 25°C"
def calculate(expression: str) -> str:
"""Perform a calculation.
Args:
expression: Mathematical expression to evaluate
Returns:
Calculation result
"""
try:
result = eval(expression)
return f"Result: {result}"
except:
return "Invalid expression"
'''
# Write the test files
with open("test_agents.yaml", "w") as f:
f.write(agents_yaml_content)
with open("test_tools.py", "w") as f:
f.write(tools_py_content)
print("Test files created successfully!")
print("\nTo test the fix:")
print("1. Copy test_agents.yaml to agents.yaml")
print("2. Copy test_tools.py to tools.py")
print("3. Run the chatbot UI")
print("4. Ask the agent to use multiple tools")
print("\nThe agent should now be able to use all three tools (search_web, get_weather, calculate)")
print("instead of just the last one.")
@@ -1,542 +0,0 @@
"""
Unit tests for the AG2 framework integration in PraisonAI.
Tests cover:
- AG2 availability detection (AG2_AVAILABLE flag)
- Framework validation in AgentsGenerator.__init__
- _run_ag2 method: config parsing, agent creation, tool handling
- LLMConfig construction (OpenAI and Bedrock paths)
All external calls are mocked — no real LLM API calls made.
"""
import pytest
import os
import sys
from unittest.mock import patch, MagicMock, call
import importlib
# Ensure src is on path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../"))
# Stub heavy dependencies that auto.py (develop branch) imports at module level
# so that tests can import praisonai without a full installation.
for _stub in ("instructor",):
if _stub not in sys.modules:
sys.modules[_stub] = MagicMock()
# openai is installed (required by ag2/autogen internals), but auto.py also
# imports it at module level. Ensure it's really loaded, not a mock.
import importlib as _importlib
if "openai" not in sys.modules:
try:
_importlib.import_module("openai")
except ImportError:
_mock_openai = MagicMock()
_mock_openai.__version__ = "1.0.0"
sys.modules["openai"] = _mock_openai
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
def _make_config(roles=None, framework="ag2", topic="Test topic"):
"""Build a minimal agents config dict."""
if roles is None:
roles = {
"researcher": {
"role": "Researcher",
"goal": "Research things",
"backstory": "You are a researcher.",
"tasks": {
"task1": {
"description": "Research {topic}",
"expected_output": "A research report",
}
},
"tools": [],
}
}
return {"framework": framework, "topic": topic, "roles": roles}
# ---------------------------------------------------------------------------
# AG2_AVAILABLE flag detection
# ---------------------------------------------------------------------------
class TestAG2AvailabilityFlag:
def test_ag2_available_false_when_not_installed(self):
"""AG2_AVAILABLE is False when 'ag2' distribution is not found."""
import importlib.metadata as meta
original_fn = meta.distribution
def raise_not_found(name):
if name == 'ag2':
raise meta.PackageNotFoundError('ag2')
return original_fn(name)
# Verify detection logic directly without relying on cached module state
ag2_detected = True
try:
with patch('importlib.metadata.distribution', side_effect=raise_not_found):
meta.distribution('ag2')
except meta.PackageNotFoundError:
ag2_detected = False
assert ag2_detected is False
def test_ag2_available_true_when_installed(self):
"""AG2_AVAILABLE is True when 'ag2' distribution and LLMConfig are present."""
import importlib.metadata as meta
try:
dist = meta.distribution('ag2')
assert dist is not None
from autogen import LLMConfig # noqa: F401
except (meta.PackageNotFoundError, ImportError):
pytest.skip("ag2 not installed — skipping")
# ---------------------------------------------------------------------------
# AgentsGenerator.__init__ framework validation
# ---------------------------------------------------------------------------
class TestAgentsGeneratorAG2Validation:
def _make_generator(self, framework, ag2_available=True):
"""Create AgentsGenerator with mocked availability flags."""
with patch("praisonai.agents_generator.AG2_AVAILABLE", ag2_available), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
return AgentsGenerator(
agent_file="agents.yaml",
framework=framework,
config_list=[{"model": "gpt-4o-mini", "api_key": "test-key"}],
)
def test_ag2_framework_accepted_when_available(self):
"""No ImportError when framework='ag2' and AG2 is installed."""
gen = self._make_generator("ag2", ag2_available=True)
assert gen.framework == "ag2"
def test_ag2_framework_raises_when_not_available(self):
"""ImportError raised with helpful message when ag2 not installed."""
with pytest.raises(ImportError, match="AG2 is not installed"):
self._make_generator("ag2", ag2_available=False)
def test_autogen_framework_unaffected(self):
"""Existing autogen framework path still works independently."""
with patch("praisonai.agents_generator.AG2_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
gen = AgentsGenerator(
agent_file="agents.yaml",
framework="autogen",
config_list=[{"model": "gpt-4o-mini", "api_key": "test-key"}],
)
assert gen.framework == "autogen"
# ---------------------------------------------------------------------------
# _run_ag2: LLMConfig construction
# ---------------------------------------------------------------------------
class TestRunAG2LLMConfig:
def _make_gen_with_config(self, config_list):
"""Build an AgentsGenerator instance with given config_list."""
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
return AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=config_list,
)
@patch("praisonai.agents_generator.AG2_AVAILABLE", True)
def test_openai_llm_config_constructed(self):
"""LLMConfig is built with api_type='openai' for standard config."""
gen = self._make_gen_with_config([
{"model": "gpt-4o-mini", "api_key": "sk-test", "api_type": "openai"}
])
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_assistant = MagicMock()
mock_user_proxy = MagicMock()
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "Researcher", "content": "Done. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("autogen.LLMConfig", create=True, return_value=mock_llm_config) as mock_llmcfg, \
patch("autogen.AssistantAgent", create=True, return_value=mock_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
config = _make_config()
gen._run_ag2(config, "Test topic", {})
mock_llmcfg.assert_called_once()
# LLMConfig is called with a positional dict arg
call_args = mock_llmcfg.call_args[0][0]
assert call_args.get("model") == "gpt-4o-mini"
assert call_args.get("api_key") == "sk-test"
@patch("praisonai.agents_generator.AG2_AVAILABLE", True)
def test_bedrock_llm_config_constructed(self):
"""LLMConfig uses api_type='bedrock' when config specifies bedrock."""
gen = self._make_gen_with_config([
{
"model": "anthropic.claude-3-5-sonnet-20241022-v2:0",
"api_type": "bedrock",
}
])
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_assistant = MagicMock()
mock_user_proxy = MagicMock()
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "Agent", "content": "Report ready. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config) as mock_llmcfg, \
patch("autogen.AssistantAgent", create=True, return_value=mock_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
config = _make_config()
gen._run_ag2(config, "AWS deployment", {})
mock_llmcfg.assert_called_once()
# LLMConfig is called with a positional dict arg
call_args = mock_llmcfg.call_args[0][0]
assert call_args.get("api_type") == "bedrock"
assert "api_key" not in call_args # no api_key for bedrock
# ---------------------------------------------------------------------------
# _run_ag2: agent and GroupChat creation
# ---------------------------------------------------------------------------
class TestRunAG2AgentCreation:
def _make_gen(self):
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
return AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
def test_assistant_created_per_role(self):
"""One AssistantAgent is created for each role in the config."""
gen = self._make_gen()
config = _make_config(roles={
"role_a": {
"role": "Agent A", "goal": "Goal A", "backstory": "Backstory A",
"tasks": {"t1": {"description": "Do A", "expected_output": "A done"}},
"tools": [],
},
"role_b": {
"role": "Agent B", "goal": "Goal B", "backstory": "Backstory B",
"tasks": {"t2": {"description": "Do B", "expected_output": "B done"}},
"tools": [],
},
})
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
created_agents = []
def fake_assistant(**kwargs):
m = MagicMock()
m.name = kwargs.get("name", "agent")
created_agents.append(m)
return m
mock_user_proxy = MagicMock()
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "Agent A", "content": "Done. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, side_effect=fake_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
gen._run_ag2(config, "Test", {})
assert len(created_agents) == 2
def test_groupchat_includes_user_proxy_and_assistants(self):
"""GroupChat receives user_proxy + all assistants."""
gen = self._make_gen()
config = _make_config()
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_assistant = MagicMock()
mock_assistant.name = "Researcher"
mock_user_proxy = MagicMock()
mock_user_proxy.name = "User"
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "Researcher", "content": "Done. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
groupchat_call_args = {}
def capture_groupchat(**kwargs):
groupchat_call_args.update(kwargs)
return mock_groupchat
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, return_value=mock_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, side_effect=capture_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
gen._run_ag2(config, "Test", {})
agents_in_groupchat = groupchat_call_args.get("agents", [])
assert mock_user_proxy in agents_in_groupchat
assert mock_assistant in agents_in_groupchat
def test_empty_roles_returns_no_agents_message(self):
"""Returns a clear message when no roles are defined in config."""
gen = self._make_gen()
config = _make_config(roles={})
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_user_proxy = MagicMock()
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent"), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy):
result = gen._run_ag2(config, "Test", {})
assert "No agents" in result
# ---------------------------------------------------------------------------
# _run_ag2: system message composition
# ---------------------------------------------------------------------------
class TestRunAG2SystemMessage:
def _make_gen(self):
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
return AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
def test_system_message_contains_backstory(self):
"""AssistantAgent system_message includes the backstory from YAML."""
gen = self._make_gen()
config = _make_config(roles={
"agent1": {
"role": "Expert",
"goal": "Help users",
"backstory": "A unique backstory for testing purposes.",
"tasks": {"t": {"description": "Do it", "expected_output": "Done"}},
"tools": [],
}
})
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_user_proxy = MagicMock()
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "Expert", "content": "Done. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
assistant_kwargs = {}
def capture_assistant(**kwargs):
assistant_kwargs.update(kwargs)
m = MagicMock()
m.name = kwargs.get("name", "agent")
return m
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, side_effect=capture_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
gen._run_ag2(config, "Test", {})
assert "A unique backstory for testing purposes." in assistant_kwargs.get("system_message", "")
assert "TERMINATE" in assistant_kwargs.get("system_message", "")
def test_agent_name_sanitised(self):
"""Agent names with special characters are sanitised for AG2 compatibility."""
gen = self._make_gen()
config = _make_config(roles={
"agent1": {
"role": "AI & ML Expert (2024)", # contains special chars
"goal": "Help",
"backstory": "Expert.",
"tasks": {"t": {"description": "Do it", "expected_output": "Done"}},
"tools": [],
}
})
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_user_proxy = MagicMock()
mock_groupchat = MagicMock()
mock_groupchat.messages = [{"name": "AI___ML_Expert__2024_", "content": "Done. TERMINATE", "role": "assistant"}]
mock_manager = MagicMock()
created_name = {}
def capture_assistant(**kwargs):
created_name["name"] = kwargs.get("name", "")
m = MagicMock()
m.name = created_name["name"]
return m
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, side_effect=capture_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
gen._run_ag2(config, "Test", {})
name = created_name.get("name", "")
# Should not contain special chars that would break AG2
import re
assert re.match(r"^[a-zA-Z0-9_\-]+$", name), f"Name '{name}' contains invalid characters"
# ---------------------------------------------------------------------------
# _run_ag2: output extraction
# ---------------------------------------------------------------------------
class TestRunAG2OutputExtraction:
def _make_gen(self):
with patch("praisonai.agents_generator.AG2_AVAILABLE", True), \
patch("praisonai.agents_generator.CREWAI_AVAILABLE", False), \
patch("praisonai.agents_generator.AUTOGEN_AVAILABLE", False), \
patch("praisonai.agents_generator.PRAISONAI_AVAILABLE", True):
from praisonai.agents_generator import AgentsGenerator
return AgentsGenerator(
agent_file="agents.yaml",
framework="ag2",
config_list=[{"model": "gpt-4o-mini", "api_key": "sk-test"}],
)
def _run_with_messages(self, messages):
gen = self._make_gen()
config = _make_config()
mock_llm_config = MagicMock()
mock_assistant = MagicMock()
mock_assistant.name = "Researcher"
mock_user_proxy = MagicMock()
# chat_result with no summary so extraction falls back to messages
mock_chat_result = MagicMock()
mock_chat_result.summary = None
mock_user_proxy.initiate_chat.return_value = mock_chat_result
mock_groupchat = MagicMock()
mock_groupchat.messages = messages
mock_manager = MagicMock()
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, return_value=mock_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
return gen._run_ag2(config, "Test", {})
def test_output_prefixed_with_ag2_header(self):
"""Result always starts with '### AG2 Output ###'."""
result = self._run_with_messages([
{"name": "Researcher", "content": "Here are my findings. TERMINATE", "role": "assistant"}
])
assert result.startswith("### AG2 Output ###")
def test_terminate_marker_stripped_from_output(self):
"""TERMINATE keyword is removed from the extracted output."""
result = self._run_with_messages([
{"name": "Researcher", "content": "Detailed findings here. TERMINATE", "role": "assistant"}
])
assert "TERMINATE" not in result
assert "Detailed findings here" in result
def test_user_messages_skipped_in_extraction(self):
"""User proxy messages are not included in the extracted output."""
result = self._run_with_messages([
{"name": "User", "content": "This is the user message", "role": "user"},
{"name": "Researcher", "content": "This is the agent response. TERMINATE", "role": "assistant"},
])
assert "This is the user message" not in result
assert "This is the agent response" in result
def test_execution_error_returns_error_message(self):
"""Exception during initiate_chat returns a '### AG2 Error ###' message."""
gen = self._make_gen()
config = _make_config()
mock_llm_config = MagicMock()
mock_llm_config.__enter__ = MagicMock(return_value=mock_llm_config)
mock_llm_config.__exit__ = MagicMock(return_value=False)
mock_assistant = MagicMock()
mock_assistant.name = "Researcher"
mock_user_proxy = MagicMock()
mock_user_proxy.initiate_chat.side_effect = RuntimeError("Connection failed")
mock_groupchat = MagicMock()
mock_groupchat.messages = []
mock_manager = MagicMock()
with patch("autogen.LLMConfig", create=True, return_value=mock_llm_config), \
patch("autogen.AssistantAgent", create=True, return_value=mock_assistant), \
patch("autogen.UserProxyAgent", create=True, return_value=mock_user_proxy), \
patch("autogen.GroupChat", create=True, return_value=mock_groupchat), \
patch("autogen.GroupChatManager", create=True, return_value=mock_manager):
result = gen._run_ag2(config, "Test", {})
assert "### AG2 Error ###" in result
assert "Connection failed" in result
if __name__ == "__main__":
pytest.main([__file__, "-v"])
+2584 -2582
View File
File diff suppressed because it is too large. Load diff