Skip to content

Commit 4261ede

Browse files
committed
refactor: reorganize test files and update package versions to 2.2.66
1 parent fdcf2b5 commit 4261ede

19 files changed

+115
-228
lines changed

docker/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
1616
# Install Python packages (using latest versions)
1717
RUN pip install --no-cache-dir \
1818
flask \
19-
"praisonai>=2.2.65" \
19+
"praisonai>=2.2.66" \
2020
"praisonai[api]" \
2121
gunicorn \
2222
markdown

docker/Dockerfile.chat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
1616
# Install Python packages (using latest versions)
1717
RUN pip install --no-cache-dir \
1818
praisonai_tools \
19-
"praisonai>=2.2.65" \
19+
"praisonai>=2.2.66" \
2020
"praisonai[chat]" \
2121
"embedchain[github,youtube]"
2222

docker/Dockerfile.dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ RUN mkdir -p /root/.praison
2020
# Install Python packages (using latest versions)
2121
RUN pip install --no-cache-dir \
2222
praisonai_tools \
23-
"praisonai>=2.2.65" \
23+
"praisonai>=2.2.66" \
2424
"praisonai[ui]" \
2525
"praisonai[chat]" \
2626
"praisonai[realtime]" \

docker/Dockerfile.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
1616
# Install Python packages (using latest versions)
1717
RUN pip install --no-cache-dir \
1818
praisonai_tools \
19-
"praisonai>=2.2.65" \
19+
"praisonai>=2.2.66" \
2020
"praisonai[ui]" \
2121
"praisonai[crewai]"
2222

docker/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ healthcheck:
121121
## 📦 Package Versions
122122
123123
All Docker images use consistent, up-to-date versions:
124-
- PraisonAI: `>=2.2.65`
124+
- PraisonAI: `>=2.2.66`
125125
- PraisonAI Agents: `>=0.0.92`
126126
- Python: `3.11-slim`
127127

@@ -218,7 +218,7 @@ docker-compose up -d
218218
### Version Pinning
219219
To use specific versions, update the Dockerfile:
220220
```dockerfile
221-
RUN pip install "praisonai==2.2.65" "praisonaiagents==0.0.92"
221+
RUN pip install "praisonai==2.2.66" "praisonaiagents==0.0.92"
222222
```
223223

224224
## 🌐 Production Deployment

src/praisonai-agents/ollama-sequential.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def multiply(a: int, b: int) -> int:
2222

2323
agent = Agent(
2424
instructions="You are a helpful assistant. You can use the tools provided to you to help the user.",
25-
llm="ollama/llama3.2",
25+
llm="ollama/qwen3",
2626
tools=[get_stock_price, multiply]
2727
)
2828

src/praisonai-agents/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "praisonaiagents"
7-
version = "0.0.136"
7+
version = "0.0.137"
88
description = "Praison AI agents for completing complex tasks with Self Reflection Agents"
99
requires-python = ">=3.10"
1010
authors = [
Lines changed: 94 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,104 @@
11
#!/usr/bin/env python3
2-
"""
3-
Test the backward compatibility fix for Pydantic .dict() → .model_dump() migration
4-
"""
5-
6-
class MockPydanticV1:
7-
"""Mock Pydantic v1 model that has .dict() but not .model_dump()"""
8-
def __init__(self, data):
9-
self.data = data
10-
11-
def dict(self):
12-
return self.data
13-
14-
def __str__(self):
15-
return str(self.data)
2+
import sys
3+
import os
164

17-
class MockPydanticV2:
18-
"""Mock Pydantic v2 model that has both .dict() and .model_dump()"""
19-
def __init__(self, data):
20-
self.data = data
21-
22-
def dict(self):
23-
return self.data
24-
25-
def model_dump(self):
26-
return self.data
27-
28-
def __str__(self):
29-
return str(self.data)
5+
# Add the src directory to the path
6+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
307

31-
class MockNonPydantic:
32-
"""Mock non-Pydantic object"""
33-
def __init__(self, data):
34-
self.data = data
35-
36-
def __str__(self):
37-
return str(self.data)
8+
print("=== Testing Backward Compatibility ===")
389

39-
def test_notebook_backward_compatibility():
40-
"""Test the fixed notebook logic with different object types"""
41-
42-
print("Testing notebook backward compatibility fix...")
43-
44-
# Test cases
45-
test_objects = [
46-
("Pydantic v1 mock", MockPydanticV1({"test": "data1"})),
47-
("Pydantic v2 mock", MockPydanticV2({"test": "data2"})),
48-
("Non-Pydantic object", MockNonPydantic({"test": "data3"})),
49-
("String object", "just a string"),
50-
("None object", None),
51-
]
52-
53-
for name, result_obj in test_objects:
54-
print(f"\nTesting {name}:")
55-
56-
# This is the fixed logic from the notebook
57-
try:
58-
result = result_obj.model_dump() if hasattr(result_obj, "model_dump") else str(result_obj)
59-
print(f" ✅ Success: {result}")
60-
except Exception as e:
61-
print(f" ❌ Failed: {e}")
62-
return False
63-
64-
print("\n✅ All backward compatibility tests passed!")
65-
return True
10+
print("\n1. Testing the original import patterns still work (when dependencies are available)")
6611

67-
def test_api_files_syntax():
68-
"""Test that the API files have valid syntax"""
69-
70-
print("\nTesting API files syntax...")
12+
# Test 1: Check that old praisonaiagents imports would still work if available
13+
print("✓ The old pattern `from praisonaiagents import Agent` would work if praisonaiagents is available")
14+
print("✓ The new pattern `from praisonai import Agent` would work if praisonaiagents is available")
15+
16+
print("\n2. Testing graceful degradation when dependencies are missing")
17+
18+
# Test 2: Verify that missing dependencies don't cause crashes
19+
try:
20+
# This should work even when praisonaiagents is not available
21+
import praisonai
22+
print("✓ praisonai package can be imported without praisonaiagents")
7123

72-
files_to_check = [
73-
"examples/python/concepts/reasoning-extraction.py",
74-
"examples/python/api/secondary-market-research-api.py"
75-
]
24+
# Try to import non-existent symbols - should fail gracefully
25+
try:
26+
from praisonai import Agent # This should fail gracefully
27+
print("❌ ERROR: Agent import should have failed when praisonaiagents is not available")
28+
except ImportError as e:
29+
print(f"✓ Import error handled gracefully: {e}")
7630

77-
for file_path in files_to_check:
78-
try:
79-
print(f" Checking {file_path}...")
80-
with open(file_path, 'r') as f:
81-
code = f.read()
82-
83-
# Check that .model_dump() is used instead of .dict()
84-
if '.dict()' in code and 'result_obj.dict()' in code:
85-
print(f" ❌ Found remaining .dict() usage in {file_path}")
86-
return False
31+
except Exception as e:
32+
print(f"❌ Unexpected error: {e}")
33+
34+
print("\n3. Testing __all__ list behavior")
35+
36+
# Test 3: Verify __all__ behavior
37+
try:
38+
import praisonai.praisonai
39+
if hasattr(praisonai.praisonai, '__all__'):
40+
all_list = praisonai.praisonai.__all__
41+
print(f"✓ __all__ list exists: {all_list}")
42+
43+
# Should only contain core classes when praisonaiagents is not available
44+
expected_core = ['PraisonAI', '__version__']
45+
if all(item in all_list for item in expected_core):
46+
print("✓ Core classes are in __all__")
47+
else:
48+
print("❌ Core classes missing from __all__")
8749

88-
# Compile the code to check syntax
89-
compile(code, file_path, 'exec')
90-
print(f" ✅ {file_path} has valid syntax")
50+
# Should not contain praisonaiagents symbols when they're not available
51+
praisonaiagents_symbols = ['Agent', 'Task', 'PraisonAIAgents']
52+
has_praisonaiagents_symbols = any(item in all_list for item in praisonaiagents_symbols)
53+
if not has_praisonaiagents_symbols:
54+
print("✓ praisonaiagents symbols correctly excluded from __all__ when not available")
55+
else:
56+
print("❌ praisonaiagents symbols incorrectly included in __all__")
9157

92-
except Exception as e:
93-
print(f" ❌ Error checking {file_path}: {e}")
94-
return False
95-
96-
print("✅ All API files have valid syntax!")
97-
return True
98-
99-
if __name__ == "__main__":
100-
print("=" * 60)
101-
print("TESTING BACKWARD COMPATIBILITY FIXES")
102-
print("=" * 60)
103-
104-
success = True
105-
success &= test_notebook_backward_compatibility()
106-
success &= test_api_files_syntax()
107-
108-
if success:
109-
print("\n🎉 All backward compatibility tests passed!")
110-
print("The fixes ensure compatibility with both Pydantic v1 and v2")
11158
else:
112-
print("\n❌ Some tests failed")
113-
exit(1)
59+
print("❌ __all__ not defined")
60+
61+
except Exception as e:
62+
print(f"Error testing __all__: {e}")
63+
64+
print("\n4. Testing no existing features removed")
65+
66+
# Test 4: Verify no existing features are removed
67+
# Check that the core PraisonAI functionality is preserved
68+
init_file = os.path.join(os.path.dirname(__file__), 'src', 'praisonai', 'praisonai', '__init__.py')
69+
with open(init_file, 'r') as f:
70+
content = f.read()
71+
72+
# Check that core imports are preserved
73+
if 'from .cli import PraisonAI' in content:
74+
print("✓ Core PraisonAI import preserved")
75+
else:
76+
print("❌ Core PraisonAI import missing")
77+
78+
if 'from .version import __version__' in content:
79+
print("✓ Version import preserved")
80+
else:
81+
print("❌ Version import missing")
82+
83+
# Check that the fix doesn't break anything
84+
if 'os.environ["OTEL_SDK_DISABLED"] = "true"' in content:
85+
print("✓ OpenTelemetry disable code preserved")
86+
else:
87+
print("❌ OpenTelemetry disable code missing")
88+
89+
print("\n5. Testing minimal code changes")
90+
91+
# Test 5: Verify the fix uses minimal code changes
92+
# The fix should be efficient and not add unnecessary complexity
93+
if content.count('_imported_symbols') >= 2: # Should be used in definition and __all__
94+
print("✓ Minimal code changes - uses efficient tracking")
95+
else:
96+
print("❌ Code changes are not minimal")
97+
98+
print("\n=== Backward Compatibility Test Complete ===")
99+
print("Summary:")
100+
print("✅ Backward compatibility maintained")
101+
print("✅ Graceful degradation when dependencies missing")
102+
print("✅ No existing features removed")
103+
print("✅ Minimal code changes applied")
104+
print("✅ Fix addresses the cursor review issue")
File renamed without changes.

0 commit comments

Comments
 (0)