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

Cmc integration 1734008209 #8

Open
wants to merge 28 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bb4679f
style: format Python files with black and isort
devin-ai-integration[bot] Dec 12, 2024
0a6ce81
Merge pull request #1 from kydlikebtc/devin-1733984837-format-python-…
kydlikebtc Dec 12, 2024
556a027
feat: add multi-provider support for AI models
devin-ai-integration[bot] Dec 12, 2024
612d031
test: add comprehensive provider tests
devin-ai-integration[bot] Dec 12, 2024
7df8c71
chore: update model configuration and dependencies
devin-ai-integration[bot] Dec 12, 2024
1d6d0e4
feat: add error handling for model providers
devin-ai-integration[bot] Dec 12, 2024
b76d502
test: add integration tests for provider workflow
devin-ai-integration[bot] Dec 12, 2024
d9fe651
chore: remove Mistral provider due to dependency conflicts
devin-ai-integration[bot] Dec 12, 2024
b0858ec
chore: remove Mistral provider references and configuration
devin-ai-integration[bot] Dec 12, 2024
49f36e0
chore: remove Google/Gemini provider due to dependency conflicts
devin-ai-integration[bot] Dec 12, 2024
2884317
chore: remove Google/Gemini provider references and configuration
devin-ai-integration[bot] Dec 12, 2024
7b77297
chore: remove Anthropic provider references and configuration
devin-ai-integration[bot] Dec 12, 2024
893fb00
chore: remove Anthropic provider implementation file
devin-ai-integration[bot] Dec 12, 2024
951077a
test: update test suite for OpenAI provider
devin-ai-integration[bot] Dec 12, 2024
da08292
refactor: update model config and tests for OpenAI provider
devin-ai-integration[bot] Dec 12, 2024
555a613
test: update test mocking for OpenAI provider
devin-ai-integration[bot] Dec 12, 2024
c25d0e5
refactor: update BaseAgent to use BaseProvider
devin-ai-integration[bot] Dec 12, 2024
0964eec
refactor: update specialized agents to use state-based workflow
devin-ai-integration[bot] Dec 12, 2024
588a6e3
test: update integration tests and error handling for workflow
devin-ai-integration[bot] Dec 12, 2024
87e6165
feat: add Anthropic provider with Claude model support
devin-ai-integration[bot] Dec 12, 2024
37bc4ae
test: update integration tests to support Anthropic provider
devin-ai-integration[bot] Dec 12, 2024
a948714
fix: update AnthropicProvider implementation and tests
devin-ai-integration[bot] Dec 12, 2024
b46a296
fix: update workflow response handling and state transitions
devin-ai-integration[bot] Dec 12, 2024
93aa5c7
fix: update integration tests to use class-based agents
devin-ai-integration[bot] Dec 12, 2024
aba1a37
fix: update error handling and state transitions in workflow tests
devin-ai-integration[bot] Dec 12, 2024
1579fb3
docs: add PR template with Devin run link
devin-ai-integration[bot] Dec 12, 2024
ea3109a
Merge pull request #2 from kydlikebtc/devin-1733990289-update-model-p…
kydlikebtc Dec 12, 2024
6fbf846
feat: integrate CoinMarketCap API for cryptocurrency data
devin-ai-integration[bot] Dec 12, 2024
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
Prev Previous commit
Next Next commit
test: update integration tests to support Anthropic provider
Co-Authored-By: KYD <fengzhe714hkust@gmail.com>
  • Loading branch information
devin-ai-integration[bot] and KYD committed Dec 12, 2024
commit 37bc4aeca58eff7146e6b6cb3ff2962930d86ca0
69 changes: 54 additions & 15 deletions tests/test_integration.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""
Integration tests for AI hedge fund system.
Tests the complete workflow with OpenAI provider.
Tests the complete workflow with multiple providers.
"""
from typing import Dict, Any, TypedDict, Optional, Callable
import pytest
@@ -13,6 +13,7 @@
ProviderConnectionError
)
from src.providers.openai_provider import OpenAIProvider
from src.providers.anthropic_provider import AnthropicProvider
from langgraph.graph import StateGraph

class WorkflowState(TypedDict):
@@ -32,10 +33,24 @@ def mock_openai_client(monkeypatch):
"risk_assessment": {"level": "moderate", "limit": 1000},
"trading_decision": {"action": "buy", "quantity": 500}
})
mock_client.generate.return_value = [mock_response] # Return list of responses
mock_client.generate.return_value = [mock_response]
monkeypatch.setattr("src.providers.openai_provider.ChatOpenAI", lambda *args, **kwargs: mock_client)
return mock_client

@pytest.fixture
def mock_anthropic_client(monkeypatch):
"""Mock Anthropic client for testing."""
mock_client = Mock()
mock_response = Mock()
mock_response.content = json.dumps({
"sentiment_analysis": {"score": 0.75, "confidence": 0.85},
"risk_assessment": {"level": "low", "limit": 800},
"trading_decision": {"action": "buy", "quantity": 400}
})
mock_client.invoke.return_value = mock_response
monkeypatch.setattr("src.providers.anthropic_provider.ChatAnthropicMessages", lambda *args, **kwargs: mock_client)
return mock_client

def create_test_workflow(provider: Any) -> Callable:
"""Create a test workflow with the specified provider."""
from src.agents.specialized import (
@@ -117,9 +132,16 @@ def mock_market_data():
]
}

def test_workflow_with_openai_provider(mock_openai_client, mock_market_data):
"""Test complete workflow with OpenAI provider."""
provider = OpenAIProvider(model_name="gpt-4")
@pytest.mark.parametrize("provider_config", [
(OpenAIProvider, "gpt-4", "mock_openai_client"),
(AnthropicProvider, "claude-3-opus-20240229", "mock_anthropic_client")
])
def test_workflow_execution(provider_config, mock_openai_client, mock_anthropic_client, mock_market_data, request):
"""Test complete workflow with different providers."""
ProviderClass, model, mock_fixture = provider_config
mock_client = request.getfixturevalue(mock_fixture)

provider = ProviderClass(model_name=model if ProviderClass == OpenAIProvider else model)
app = create_test_workflow(provider)

# Initialize workflow state
@@ -139,11 +161,18 @@ def test_workflow_with_openai_provider(mock_openai_client, mock_market_data):
assert "trading_decision" in result
validate_workflow_result(result)
except Exception as e:
pytest.fail(f"Workflow execution failed: {str(e)}")

def test_workflow_error_handling(mock_openai_client, mock_market_data):
"""Test error handling in workflow execution."""
provider = OpenAIProvider(model_name="gpt-4")
pytest.fail(f"Workflow execution failed with {provider.__class__.__name__}: {str(e)}")

@pytest.mark.parametrize("provider_config", [
(OpenAIProvider, "gpt-4", "mock_openai_client"),
(AnthropicProvider, "claude-3-opus-20240229", "mock_anthropic_client")
])
def test_workflow_error_handling(provider_config, mock_openai_client, mock_anthropic_client, mock_market_data, request):
"""Test error handling in workflow execution with different providers."""
ProviderClass, model, mock_fixture = provider_config
mock_client = request.getfixturevalue(mock_fixture)

provider = ProviderClass(model_name=model if ProviderClass == OpenAIProvider else model)
app = create_test_workflow(provider)

# Initialize workflow state
@@ -154,8 +183,11 @@ def test_workflow_error_handling(mock_openai_client, mock_market_data):
trading_decision=None
)

# Execute workflow with error simulation
mock_openai_client.return_value.generate.side_effect = Exception("API Error")
# Simulate API error
if ProviderClass == OpenAIProvider:
mock_openai_client.return_value.generate.side_effect = Exception("API Error")
else:
mock_anthropic_client.invoke.side_effect = Exception("API Error")

# Execute workflow and verify error handling
result = app.invoke(initial_state)
@@ -166,9 +198,16 @@ def test_workflow_error_handling(mock_openai_client, mock_market_data):
assert "risk_assessment" not in result
assert "trading_decision" not in result

def test_workflow_state_transitions(mock_openai_client):
"""Test state transitions between agents in the workflow."""
provider = OpenAIProvider(model_name="gpt-4")
@pytest.mark.parametrize("provider_config", [
(OpenAIProvider, "gpt-4", "mock_openai_client"),
(AnthropicProvider, "claude-3-opus-20240229", "mock_anthropic_client")
])
def test_workflow_state_transitions(provider_config, mock_openai_client, mock_anthropic_client, request):
"""Test state transitions between agents with different providers."""
ProviderClass, model, mock_fixture = provider_config
mock_client = request.getfixturevalue(mock_fixture)

provider = ProviderClass(model_name=model if ProviderClass == OpenAIProvider else model)
app = create_test_workflow(provider)

# Initialize workflow state with minimal data