feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: Pydantic AI framework extension - #803

Merged
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main
Aug 21, 2025
Merged

feat: Pydantic AI framework extension#803
CarsonRoscoe merged 31 commits into
coinbase:mainfrom
Ilevk:main

Conversation

@Ilevk

@IlevkIlevk commented Jul 29, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added coinbase-agentkit-pydantic-ai extensions in python/framework-extensions/pydantic-ai
  • Provides get_pydantic_ai_tools() funtions to provide AgentKit actions as PydanticAI Tool
    • Extract information from AgentKit Actions to match the annotations / schema required by pydantic ai's tools.
  • Added an example using PydanticAI agent.
    • python/examples/pydantic-ai-cdp-server-chatbot.py
  • Follows patterns like langchain, openai-agents-sdk, strands.
  • Closed: Add Framework-extension for PydanticAI #775

With this PR, developers building agents using the Pydantic AI framework will now be able to implement Based Agents with AgentKit.

Tests

Chatbot: python/examples/pydantic-ai-cdp-server-chatbot.py
Network: Base Sepolia
Setup: Check Balance, and tools schema.
Prompt: How much ETH do I have?
Output You have approximately 0.1916 ETH in your wallet.
-------------------
Prompt: I'd like to know what tools you have.
Output: I can help you interact with on-chain functions, such as requesting faucet funds, swapping tokens, checking balances, transferring tokens, fetching price feeds, and more. If you need any specific tasks or information, feel free to ask, and I'll assist you accordingly!
-------------------
Prompt: Can I know the schemas of transferring tokens tool?
Output: The tool for transferring ERC20 tokens requires the following schema:
1. **amount**: The amount of the asset to transfer in wei.
2. **contract_address**: The contract address of the token to transfer.
3. **destination**: The on-chain address where to send the tokens.
If you have a specific transfer in mind, let me know, and I can assist you with it!
-------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@Ilevk
Ilevk requested a review from murrlincoln as a code ownerJuly 29, 2025 11:36
@cb-heimdall

cb-heimdall commented Jul 29, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation example New example agent framework extension New framework extension python labels Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework xcension feat: Pydantic AI framework excension Jul 29, 2025
@IlevkIlevk changed the title feat: Pydantic AI framework excension feat: Pydantic AI framework extensionJul 29, 2025
@phdargen

Copy link
Copy Markdown
Contributor

Hi @Ilevk, thanks for your contribution! Looks great, a few initial comments below before I do some testing.

@phdargen

Copy link
Copy Markdown
Contributor

Note that we require signed commits. See here for instructions on setting up commit signing. Once setup, rebase against main to re-sign all commits.

Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/initialize_agent.py Outdated
Comment threadpython/examples/pydantic-ai-cdp-server-chatbot/setup.py Outdated
@Ilevk
Ilevk requested a review from phdargenJuly 30, 2025 07:46
@Ilevk
Ilevkforce-pushed the main branch 3 times, most recently from 81d38cd to c8edafcCompareJuly 30, 2025 09:12
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

I rebased all commits

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @Ilevk ! Will test it later today.

It would be great if you could also add a few basic unit tests as in https://github.com/coinbase/agentkit/tree/main/python/framework-extensions/openai-agents-sdk/tests

"ignore::pydantic.PydanticDeprecatedSince20",
]

[tool.uv]

@phdargenphdargenJul 31, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can [tool.uv] be removed? mypy, ruff dependencies already in [dependency-groups] with conflicting versions. seems

 "ruff>=0.7.1,<0.8",
"mypy>=1.13.0,<2",

also used in other frameworks (https://github.com/coinbase/agentkit/blob/main/python/framework-extensions/strands-agents/pyproject.toml), better stick to those I think

@IlevkIlevkJul 31, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for comments!

@phdargen

Copy link
Copy Markdown
Contributor

Also a link to pydantic ai docs would be good in framework and chatbot readme

@Ilevk

Ilevk commented Jul 31, 2025

Copy link
Copy Markdown
ContributorAuthor
  • d8aa695: Remove duplicated dependencies, Add pydantic ai docs link to README
  • 946e648: Add some test cases

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround @Ilevk, great job! I tested it and think its good to go @CarsonRoscoe

@phdargenphdargen mentioned this pull request Aug 4, 2025
7 tasks
@Ilevk
Ilevkforce-pushed the main branch 2 times, most recently from bf8fbd4 to e7f0d8fCompareAugust 5, 2025 07:11
@logan-d-able

logan-d-able commented Aug 5, 2025

Copy link
Copy Markdown

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

@phdargen

Copy link
Copy Markdown
Contributor

@phdargen I've rebased this PR with main to apply Agentkit 0.7.1

Thanks! @CarsonRoscoe could you please approve the workflow to see if the tests pass?

@Ilevk

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

@phdargen

Copy link
Copy Markdown
Contributor

@CarsonRoscoe Hey how's it going? please let me know what should I do.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@phdargen

Copy link
Copy Markdown
Contributor

Hi @CarsonRoscoe@murrlincoln, could you please approve this workflow to check if this passes now?

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey guys, apologies for not following up on this.

Re-ran the workflow, still the issue here. @phdargen though has this working in #826, which is just branched off your commit.

I'm leaning towards merging phdargen's PR. It retains your authorship, it just adds one commit to fix the lock file. You would still be considered the author of your commits.

If this is fine with you, let me know and we'll get it in asap. Alternatively, try to run phdargen's steps/steal his commit from his PR and we'll get it in

Thank you two for your patience

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I've cherry-picked the 2b53ddcfrom #826.

Hi @Ilevk, I checked out your code and ran uv sync in framework-extensions/pydantic-ai/ and examples/pydantic-ai-cdp-chatbot, then committed the uv.lock files. It appears that this would pass the checks now, see #826.

Is this what you tried before?

@Ilevk

Ilevk commented Aug 17, 2025

Copy link
Copy Markdown
ContributorAuthor

I got it, my uv version is too outdated, I used 0.4.25. I've just upgraded it to latest

I'm afraid of failing checking uv lock ci, because I've just re-run uv sync I found that sub-dependencies has been changed.

image

there's another issues, I think checking uv.lock is too sensitive, the dependencies that we didn’t define explicitly would be changed depending on when ci workflow run.

For example, whenever sub-dependency’s version updated, the meta data will be changed, url, hash, size, upload-time.

If we couldn’t trust uv dependency management system, the present way is good way. but if we could, we should check the dependencies that we define explicitly only.

or we can change the condition to trigger lint ci workflow, when right after pull request opened, update, push commit.

@Ilevk

Ilevk commented Aug 20, 2025

Copy link
Copy Markdown
ContributorAuthor

@CarsonRoscoe Could you take a look at my comments?

I guess the commit I cherry-picked isn’t working at the moment.

If it fails again this time, it would be fine to merge the PR from @phdargen (#826).

I really appreciate it! 😊

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution! Looking good!

@CarsonRoscoe
CarsonRoscoe merged commit 20b6a15 into coinbase:mainAug 21, 2025
26 checks passed
@Ilevk

Copy link
Copy Markdown
ContributorAuthor

Finally It's done.

it couldn't have done without your support. Thank you!

@phdargen@CarsonRoscoe

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationexampleNew example agentframework extensionNew framework extensionpython

Development

Successfully merging this pull request may close these issues.

Add Framework-extension for PydanticAI

5 participants

@Ilevk@cb-heimdall@phdargen@logan-d-able@CarsonRoscoe