Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fireworks langchain integration (python) #236

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,25 @@ class CdpToolkit(BaseToolkit):
.. code-block:: bash

export CDP_API_KEY_NAME="cdp-api-key-name"
export CDP_API_KEY_PRIVATE_KEY="cdp-api-key-private-key"
export CDP_API_KEY_PRIVATE_KEY="cdp-api-key-private-key"
export NETWORK_ID="network-id"
export CDP_MODEL_NAME="gpt-4o-mini" # Optional
export CDP_MODEL_PROVIDER="openai" # Optional
export OPENAI_API_KEY="your-api-key" # Required for OpenAI
export ANTHROPIC_API_KEY="your-api-key" # Required for Anthropic
export FIREWORKS_API_KEY="your-api-key" # Required for Fireworks

Instantiate:
.. code-block:: python

from cdp_langchain.agent_toolkits import CdpToolkit
from cdp_langchain.utils import CdpAgentkitWrapper

cdp = CdpAgentkitWrapper()
# Custom model configuration
cdp = CdpAgentkitWrapper(
model_name="claude-3-sonnet",
provider="anthropic"
)
cdp_toolkit = CdpToolkit.from_cdp_agentkit_wrapper(cdp)

Tools:
Expand Down Expand Up @@ -77,7 +86,27 @@ class CdpToolkit(BaseToolkit):
tools = [tool for tool in toolkit.get_tools() if tool.name == "get_wallet_details"]
assert len(tools) == 1

llm = ChatOpenAI(model="gpt-4o-mini")
# Dynamic LLM initialization based on provider
if cdp_agentkit_wrapper.provider == "openai":
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model=cdp_agentkit_wrapper.model_name,
openai_api_key=os.getenv("OPENAI_API_KEY")
)
elif cdp_agentkit_wrapper.provider == "anthropic":
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(
model=cdp_agentkit_wrapper.model_name,
anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")
)
elif cdp_agentkit_wrapper.provider == "fireworks":
from langchain_fireworks import ChatFireworks
llm = ChatFireworks(
model=cdp_agentkit_wrapper.model_name,
fireworks_api_key=os.getenv("FIREWORKS_API_KEY")
)
else:
raise ValueError(f"Unsupported provider: {cdp_agentkit_wrapper.provider}. Supported providers: openai, anthropic, cerebras, fireworks")
agent_executor = create_react_agent(llm, tools)

example_query = "Tell me about your wallet"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class CdpAgentkitWrapper(BaseModel):
cdp_api_key_name: str | None = None
cdp_api_key_private_key: str | None = None
network_id: str | None = None
model_name: str = "gpt-4o-mini"
provider: str = "openai"

@model_validator(mode="before")
@classmethod
Expand All @@ -29,6 +31,8 @@ def validate_environment(cls, values: dict) -> Any:
cdp_api_key_private_key = get_from_dict_or_env(
values, "cdp_api_key_private_key", "CDP_API_KEY_PRIVATE_KEY"
).replace("\\n", "\n")
model_name = get_from_dict_or_env(values, "model_name", "CDP_MODEL_NAME", "gpt-4o-mini")
provider = get_from_dict_or_env(values, "provider", "CDP_MODEL_PROVIDER", "openai")
mnemonic_phrase = get_from_dict_or_env(values, "mnemonic_phrase", "MNEMONIC_PHRASE", "")
network_id = get_from_dict_or_env(values, "network_id", "NETWORK_ID", "base-sepolia")
wallet_data_json = values.get("cdp_wallet_data")
Expand Down
58 changes: 58 additions & 0 deletions python/cdp-langchain/docs/fireworks_integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Fireworks Integration Guide

## Prerequisites
- Python 3.8+
- CDP SDK: `pip install cdp-sdk`
- Fireworks Package: `pip install langchain-fireworks`

## Configuration
1. Get Fireworks API key from [Fireworks Dashboard](https://fireworks.ai)
2. Set environment variables:
```bash
export FIREWORKS_API_KEY="your-api-key"
export CDP_MODEL_PROVIDER="fireworks"
export CDP_MODEL_NAME="accounts/fireworks/models/llama-v2-7b" # Example Fireworks model
```

## Basic Usage
```python
from cdp_langchain.utils import CdpAgentkitWrapper
from cdp_langchain.agent_toolkits import FireworksToolkit

# Initialize with Fireworks
cdp = CdpAgentkitWrapper(
provider="fireworks",
model_name="accounts/fireworks/models/llama-v2-7b"
)

toolkit = FireworksToolkit.from_cdp_agentkit_wrapper(cdp)
```

## Advanced Features
### Streaming Responses
```python
from langchain_fireworks import ChatFireworks

llm = ChatFireworks(model="accounts/fireworks/models/llama-v2-7b")
agent = create_react_agent(llm, toolkit.get_tools())

for chunk in agent.stream({"messages": [("user", "Explain my transactions")]}):
print(chunk.content, end="", flush=True)
```

### Async Operations
```python
async for chunk in agent.astream({
"messages": [("user", "Analyze NFT holdings")]
}):
print(chunk.content, end="", flush=True)
```

## Troubleshooting
| Error | Solution |
|-------|----------|
| MissingFireworksAPIKey | Set FIREWORKS_API_KEY environment var |
| InvalidModelName | Verify model at [Fireworks Model Catalog](https://app.fireworks.ai) |
| ProviderMismatch | Ensure provider="fireworks" in CdpAgentkitWrapper |

[Full Fireworks Documentation](https://docs.fireworks.ai)
1 change: 1 addition & 0 deletions python/cdp-langchain/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ langgraph = "^0.2.39"
cdp-sdk = "^0.15.0"
pydantic = "^2.0"
cdp-agentkit-core = "^0.0.11"
langchain-fireworks = "^0.2.0"

[tool.poetry.group.dev.dependencies]
ruff = "^0.7.1"
Expand Down