Compare commits

...
1 Commits
Author SHA1 Message Date
Mervin Praison de9d4bd3c6 Release v2.4.4 2025-12-26 01:21:26 +00:00
13 changed files with 196 additions and 15 deletions

No files matched your search

+4 -4
View File
@@ -2763,11 +2763,11 @@ agent.chat("Hello!") # Auto-persists messages, runs, traces
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Pinecone | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Weaviate | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| LanceDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Pinecone | Knowledge | `pip install pinecone` | [pinecone_wow.py](examples/vector/pinecone_wow.py) | [docs](https://docs.praison.ai/docs/databases/pinecone) |
| Weaviate | Knowledge | `pip install weaviate-client` | [weaviate_wow.py](examples/vector/weaviate_wow.py) | [docs](https://docs.praison.ai/docs/databases/weaviate) |
| LanceDB | Knowledge | `pip install lancedb` | [lancedb_real_wow.py](examples/vector/lancedb_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/lancedb) |
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| PGVector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| PGVector | Knowledge | `pip install psycopg2-binary` | [pgvector_real_wow.py](examples/vector/pgvector_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/pgvector) |
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.4.3" \
"praisonai>=2.4.4" \
"praisonai[chat]" \
"embedchain[github,youtube]"
+1 -1
View File
@@ -20,7 +20,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.4.3" \
"praisonai>=2.4.4" \
"praisonai[ui]" \
"praisonai[chat]" \
"praisonai[realtime]" \
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=2.4.3" \
"praisonai>=2.4.4" \
"praisonai[ui]" \
"praisonai[crewai]"
+40
View File
@@ -0,0 +1,40 @@
"""Multi-Agent Shared Session - DB Persistence Test"""
import sys
sys.path.insert(0, 'src/praisonai')
from praisonai.persistence import create_conversation_store
from praisonai.persistence.conversation.base import ConversationSession, ConversationMessage
# Create shared session for multiple agents
store = create_conversation_store("sqlite", path="/tmp/multi_agent.db")
session_id = "shared-session-123"
# Create session
session = ConversationSession(session_id=session_id, agent_id="multi")
try:
store.create_session(session)
except Exception:
pass
# Agent 1 writes
msg1 = ConversationMessage(session_id=session_id, role="user", content="Agent1: Hello")
store.add_message(session_id, msg1)
msg2 = ConversationMessage(session_id=session_id, role="assistant", content="Agent1: Hi there!")
store.add_message(session_id, msg2)
# Agent 2 writes to same session
msg3 = ConversationMessage(session_id=session_id, role="user", content="Agent2: What did Agent1 say?")
store.add_message(session_id, msg3)
msg4 = ConversationMessage(session_id=session_id, role="assistant", content="Agent2: Agent1 said Hello")
store.add_message(session_id, msg4)
# Verify both agents' messages are in session
messages = store.get_messages(session_id)
print(f"Total messages in shared session: {len(messages)}")
assert len(messages) >= 4, "Should have messages from both agents"
# Verify content
contents = [m.content for m in messages]
assert any("Agent1" in c for c in contents), "Should have Agent1 messages"
assert any("Agent2" in c for c in contents), "Should have Agent2 messages"
print("PASSED: Multi-agent shared session persistence")
+31
View File
@@ -0,0 +1,31 @@
"""LanceDB Vector Store - Local Test"""
import sys
import os
import shutil
try:
import lancedb
except ImportError:
print("SKIPPED: LanceDB - lancedb not installed")
sys.exit(0)
# Clean up previous test
db_path = "/tmp/lancedb_test"
if os.path.exists(db_path):
shutil.rmtree(db_path)
db = lancedb.connect(db_path)
# Create table with vectors
data = [
{"id": "1", "text": "Machine learning is AI", "vector": [0.1] * 128},
{"id": "2", "text": "Deep learning uses neural nets", "vector": [0.2] * 128},
]
table = db.create_table("demo", data)
# Search
results = table.search([0.1] * 128).limit(1).to_list()
print(f"Found: {len(results)} results")
print(f"Top result: {results[0]['text'][:30]}...")
assert len(results) >= 1
print("PASSED: LanceDB vector store")
+59
View File
@@ -0,0 +1,59 @@
"""PGVector Vector Store - Docker Test"""
import sys
import os
# Docker: docker run -d --name pgvector -e POSTGRES_PASSWORD=postgres -p 5433:5432 pgvector/pgvector:pg16
url = os.getenv("PGVECTOR_URL", "postgresql://postgres:postgres@localhost:5433/postgres")
try:
import psycopg2
except ImportError:
print("SKIPPED: PGVector - psycopg2 not installed")
sys.exit(0)
try:
conn = psycopg2.connect(url)
cur = conn.cursor()
# Ensure extension
cur.execute("CREATE EXTENSION IF NOT EXISTS vector")
conn.commit()
# Create test table
cur.execute("DROP TABLE IF EXISTS test_vectors")
cur.execute("""
CREATE TABLE test_vectors (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(128)
)
""")
conn.commit()
# Insert vectors
cur.execute("""
INSERT INTO test_vectors (content, embedding) VALUES
('Machine learning is AI', %s),
('Deep learning uses neural nets', %s)
""", ([0.1] * 128, [0.2] * 128))
conn.commit()
# Search (cosine similarity)
cur.execute("""
SELECT content, embedding <=> %s::vector AS distance
FROM test_vectors
ORDER BY distance
LIMIT 1
""", ([0.1] * 128,))
row = cur.fetchone()
print(f"Top result: {row[0][:30]}... (distance: {row[1]:.4f})")
# Cleanup
cur.execute("DROP TABLE test_vectors")
conn.commit()
conn.close()
print("PASSED: PGVector vector store")
except Exception as e:
print(f"SKIPPED: PGVector - {e}")
+27
View File
@@ -0,0 +1,27 @@
"""Pinecone Vector Store - Real API Test"""
import os
import sys
sys.path.insert(0, 'src/praisonai')
# Requires: export PINECONE_API_KEY=...
api_key = os.getenv("PINECONE_API_KEY")
if not api_key:
print("SKIPPED: Pinecone - PINECONE_API_KEY not set")
sys.exit(0)
from pinecone import Pinecone
pc = Pinecone(api_key=api_key)
indexes = pc.list_indexes()
print(f"Pinecone connected! Found {len(list(indexes))} indexes")
# Use existing 'test' index or create one
index_name = "test"
if index_name not in [idx.name for idx in pc.list_indexes()]:
print(f"SKIPPED: Pinecone - index '{index_name}' not found")
sys.exit(0)
index = pc.Index(index_name)
stats = index.describe_index_stats()
print(f"Index '{index_name}' has {stats.total_vector_count} vectors")
print("PASSED: Pinecone vector store")
+24
View File
@@ -0,0 +1,24 @@
"""Weaviate Cloud Vector Store - Real API Test"""
import os
import sys
# Requires: export WEAVIATE_URL=... and WEAVIATE_API_KEY=...
weaviate_url = os.getenv("WEAVIATE_URL", "https://thhoyczshsawyt16ot3uw.c0.europe-west3.gcp.weaviate.cloud")
weaviate_key = os.getenv("WEAVIATE_API_KEY")
if not weaviate_key:
print("SKIPPED: Weaviate - WEAVIATE_API_KEY not set")
sys.exit(0)
import weaviate
from weaviate.classes.init import Auth
client = weaviate.connect_to_weaviate_cloud(
cluster_url=weaviate_url,
auth_credentials=Auth.api_key(weaviate_key)
)
print(f"Weaviate connected: {client.is_ready()}")
collections = client.collections.list_all()
print(f"Found {len(collections)} collections")
client.close()
print("PASSED: Weaviate cloud vector store")
+4 -4
View File
@@ -2763,11 +2763,11 @@ agent.chat("Hello!") # Auto-persists messages, runs, traces
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Pinecone | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Weaviate | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| LanceDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Pinecone | Knowledge | `pip install pinecone` | [pinecone_wow.py](examples/vector/pinecone_wow.py) | [docs](https://docs.praison.ai/docs/databases/pinecone) |
| Weaviate | Knowledge | `pip install weaviate-client` | [weaviate_wow.py](examples/vector/weaviate_wow.py) | [docs](https://docs.praison.ai/docs/databases/weaviate) |
| LanceDB | Knowledge | `pip install lancedb` | [lancedb_real_wow.py](examples/vector/lancedb_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/lancedb) |
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| PGVector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| PGVector | Knowledge | `pip install psycopg2-binary` | [pgvector_real_wow.py](examples/vector/pgvector_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/pgvector) |
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
+2 -2
View File
@@ -3,8 +3,8 @@ class Praisonai < Formula
desc "AI tools for various AI applications"
homepage "https://github.com/MervinPraison/PraisonAI"
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.4.3.tar.gz"
sha256 `curl -sL https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.4.3.tar.gz | shasum -a 256`.split.first
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.4.4.tar.gz"
sha256 `curl -sL https://github.com/MervinPraison/PraisonAI/archive/refs/tags/v2.4.4.tar.gz | shasum -a 256`.split.first
license "MIT"
depends_on "[email protected]"
+1 -1
View File
@@ -57,7 +57,7 @@ class CloudDeployer:
file.write("FROM python:3.11-slim\n")
file.write("WORKDIR /app\n")
file.write("COPY . .\n")
file.write("RUN pip install flask praisonai==2.4.3 gunicorn markdown\n")
file.write("RUN pip install flask praisonai==2.4.4 gunicorn markdown\n")
file.write("EXPOSE 8080\n")
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
+1 -1
View File
@@ -1 +1 @@
__version__ = "2.4.3"
__version__ = "2.4.4"