recallrai


Namerecallrai JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryOfficial Python SDK for RecallrAI - Revolutionary contextual memory system that enables AI assistants to form meaningful connections between conversations, just like human memory.
upload_time2025-07-16 05:46:22
maintainerNone
docs_urlNone
authorDevasheesh Mishra
requires_python<3.14,>=3.9
licenseMIT
keywords ai memory context llm mem0 getzep zep
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RecallrAI Python SDK

Official Python SDK for RecallrAI – a revolutionary contextual memory system that enables AI assistants to form meaningful connections between conversations, just like human memory.

## Installation

Install the SDK via Poetry or pip:

```bash
poetry add recallrai
# or
pip install recallrai
```

## Initialization

Create a client instance with your API key and project ID:

```python
from recallrai import RecallrAI

api_key = "rai_yourapikey"
project_id = "project-uuid"
client = RecallrAI(api_key=api_key, project_id=project_id)
```

## User Management

### Create a User

```python
from recallrai.exceptions import UserAlreadyExistsError
try:
    user = client.create_user(user_id="user123", metadata={"name": "John Doe"})
    print(f"Created user: {user.user_id}")
    print(f"User metadata: {user.metadata}")
    print(f"Created at: {user.created_at}")
except UserAlreadyExistsError as e:
    print(f"Error: {e}")
```

### Get a User

```python
from recallrai.exceptions import UserNotFoundError
try:
    user = client.get_user("user123")
    print(f"User metadata: {user.metadata}")
    print(f"Last active: {user.last_active_at}")
except UserNotFoundError as e:
    print(f"Error: {e}")
```

### List Users

```python
user_list = client.list_users(offset=0, limit=10)
print(f"Total users: {user_list.total}")
print(f"Has more users: {user_list.has_more}")

for user in user_list.users:
    print(f"User ID: {user.user_id}")
    print(f"Metadata: {user.metadata}")
    print(f"Created at: {user.created_at}")
    print(f"Last active: {user.last_active_at}")
    print("---")
```

### Update a User

```python
from recallrai.exceptions import UserNotFoundError, UserAlreadyExistsError
try:
    user = client.get_user("user123")
    updated_user = user.update(
        new_metadata={"name": "John Doe", "role": "admin"},
        new_user_id="john_doe"
    )
    print(f"Updated user ID: {updated_user.user_id}")
    print(f"Updated metadata: {updated_user.metadata}")
except UserNotFoundError as e:
    print(f"Error: {e}")
except UserAlreadyExistsError as e:
    print(f"Error: {e}")
```

### Delete a User

```python
from recallrai.exceptions import UserNotFoundError
try:
    user = client.get_user("john_doe")
    user.delete()
    print("User deleted successfully")
except UserNotFoundError as e:
    print(f"Error: {e}")
```

## Session Management

### Create a Session

```python
from recallrai.exceptions import UserNotFoundError
from recallrai.session import Session

try:
    # First, get the user
    user = client.get_user("user123")
    
    # Create a session for the user; auto_process_after_minutes set to -1 disables auto-processing
    session: Session = user.create_session(auto_process_after_minutes=5)
    print("Created session id:", session.session_id)
except UserNotFoundError as e:
    print(f"Error: {e}")
```

### Get an Existing Session

```python
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError

try:
    # First, get the user
    user = client.get_user("user123")
    
    # Retrieve an existing session by its ID
    session = user.get_session(session_id="session-uuid")
    print("Session status:", session.get_status())
except UserNotFoundError as e:
    print(f"Error: {e}")
except SessionNotFoundError as e:
    print(f"Error: {e}")
```

### List Sessions

```python
from recallrai.exceptions import UserNotFoundError

try:
    # First, get the user
    user = client.get_user("user123")
    
    # List sessions for this user
    session_list = user.list_sessions(offset=0, limit=10)
    for session in session_list.sessions:
        print(session.session_id, session.status)
except UserNotFoundError as e:
    print(f"Error: {e}")
```

### Session – Adding Messages

```python
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError, InvalidSessionStateError

try:
    # Add a user message
    session.add_user_message("Hello! How are you?")
    
    # Add an assistant message
    session.add_assistant_message("I'm an assistant. How can I help you?")
except UserNotFoundError as e:
    print(f"Error: {e}")
except SessionNotFoundError as e:
    print(f"Error: {e}")
except InvalidSessionStateError as e:
    print(f"Error: {e}")
```

### Session – Retrieving Context

```python
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError

try:
    context = session.get_context()
    print("Memory used:", context.memory_used)
    print("Context:", context.context)
except UserNotFoundError as e:
    print(f"Error: {e}")
except SessionNotFoundError as e:
    print(f"Error: {e}")
```

### Session – Process Session

```python
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError, InvalidSessionStateError

try:
    session.process()
except UserNotFoundError as e:
    print(f"Error: {e}")
except SessionNotFoundError as e:
    print(f"Error: {e}")
except InvalidSessionStateError as e:
    print(f"Error: {e}")
```

### Session – Get Status and Messages

```python
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError
from recallrai.models import SessionStatus

try:
    status = session.get_status()
    print("Session status:", status)
    
    # Check if the session is in a specific state
    if status == SessionStatus.PROCESSED:
        print("Session has been processed")
    
    messages = session.get_messages()
    for message in messages:
        print(f"{message.role}: {message.content} at {message.timestamp}")
except UserNotFoundError as e:
    print(f"Error: {e}")
except SessionNotFoundError as e:
    print(f"Error: {e}")
```

## Example Usage with LLMs

```python
import openai
from recallrai import RecallrAI
from recallrai.exceptions import UserNotFoundError

# Initialize RecallrAI and OpenAI clients
rai_client = RecallrAI(
    api_key="rai_yourapikey", 
    project_id="your-project-uuid"
)
oai_client = openai.OpenAI(api_key="your-openai-api-key")

def chat_with_memory(user_id, session_id=None):
    # Get or create user
    try:
        user = rai_client.get_user(user_id)
    except UserNotFoundError:
        user = rai_client.create_user(user_id)
    
    # Create a new session or get an existing one
    if session_id:
        session = user.get_session(session_id=session_id)
    else:
        session = user.create_session(auto_process_after_minutes=30)
        print(f"Created new session: {session.session_id}")
    
    print("Chat session started. Type 'exit' to end the conversation.")
    
    while True:
        # Get user input
        user_message = input("You: ")
        if user_message.lower() == 'exit':
            break
        
        # Add the user message to RecallrAI
        session.add_user_message(user_message)
        
        # Get context from RecallrAI after adding the user message
        context = session.get_context()
        
        # Create a system prompt that includes the context
        system_prompt = f"""You are a helpful assistant with memory of previous conversations.
        
        MEMORIES ABOUT THE USER:
        {context.context}
        
        You can use the above memories to provide better responses to the user.
        Don't mention that you have access to memories unless you are explicitly asked."""
        
        # Get previous messages
        previous_messages = session.get_messages()
        previous_messages = [{"role": message.role, "content": message.content} for message in previous_messages]

        # Call the LLM with the system prompt and conversation history
        response = oai_client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[
                {"role": "system", "content": system_prompt},
                **previous_messages,
            ],
            temperature=0.7
        )
        
        assistant_message = response.choices[0].message.content
        
        # Print the assistant's response
        print(f"Assistant: {assistant_message}")
        
        # Add the assistant's response to RecallrAI
        session.add_assistant_message(assistant_message)
    
    # Process the session at the end of the conversation
    print("Processing session to update memory...")
    session.process()
    print(f"Session ended. Session ID: {session.session_id}")
    return session.session_id

# Example usage
if __name__ == "__main__":
    user_id = "user123"
    # To continue a previous session, uncomment below and provide the session ID
    # previous_session_id = "previously-saved-session-uuid"
    # session_id = chat_with_memory(user_id, previous_session_id)
    
    # Start a new session
    session_id = chat_with_memory(user_id)
    print(f"To continue this conversation later, use session ID: {session_id}")
```

## Exception Handling

The RecallrAI SDK implements a comprehensive exception hierarchy to help you handle different error scenarios gracefully:

### Base Exception

- **RecallrAIError**: The base exception for all SDK-specific errors. All other exceptions inherit from this.

### Authentication Errors

- **AuthenticationError**: Raised when there's an issue with your API key or project ID authentication.

### Network-Related Errors

- **NetworkError**: Base exception for all network-related issues.
- **TimeoutError**: Occurs when a request takes too long to complete.
- **ConnectionError**: Happens when the SDK cannot establish a connection to the RecallrAI API.

### Server Errors

- **ServerError**: Base class for server-side errors.
- **InternalServerError**: Raised when the RecallrAI API returns a 5xx error code.

### User-Related Errors

- **UserError**: Base for all user-related exceptions.
- **UserNotFoundError**: Raised when attempting to access a user that doesn't exist.
- **UserAlreadyExistsError**: Occurs when creating a user with an ID that already exists.

### Session-Related Errors

- **SessionError**: Base for all session-related exceptions.
- **SessionNotFoundError**: Raised when attempting to access a non-existent session.
- **InvalidSessionStateError**: Occurs when performing an operation that's not valid for the current session state (e.g., adding a message to a processed session).

### Input Validation Errors

- **ValidationError**: Raised when provided data doesn't meet the required format or constraints.

### Importing Exceptions

You can import exceptions directly from the `recallrai.exceptions` module:

```python
# Import specific exceptions
from recallrai.exceptions import UserNotFoundError, SessionNotFoundError

# Import all exceptions
from recallrai.exceptions import (
    RecallrAIError,
    AuthenticationError,
    NetworkError,
    TimeoutError,
    ConnectionError,
    ServerError, 
    InternalServerError,
    SessionError, 
    SessionNotFoundError, 
    InvalidSessionStateError,
    UserError, 
    UserNotFoundError, 
    UserAlreadyExistsError,
    ValidationError,
)
```

### Best Practices for Error Handling

When implementing error handling with the RecallrAI SDK, consider these best practices:

1. **Handle specific exceptions first**: Catch more specific exceptions before general ones.

   ```python
   try:
       # SDK operation
   except UserNotFoundError:
       # Specific handling
   except RecallrAIError:
       # General fallback
   ```

2. **Implement retry logic for transient errors**: Network and timeout errors might be temporary.

3. **Log detailed error information**: Exceptions contain useful information for debugging.

4. **Handle common user flows**: For example, check if a user exists before operations, or create them if they don't:

   ```python
   try:
       user = client.get_user(user_id)
   except UserNotFoundError:
       user = client.create_user(user_id)
   ```

For more detailed information on specific exceptions, refer to the API documentation.

## Conclusion

This README outlines the basic usage of the RecallrAI SDK functions for user and session management. For additional documentation and advanced usage, please see the [official documentation](https://recallrai.com) or the source code repository on [GitHub](https://github.com/recallrai/sdk-python).


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "recallrai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.14,>=3.9",
    "maintainer_email": null,
    "keywords": "ai, memory, context, llm, mem0, getzep, zep",
    "author": "Devasheesh Mishra",
    "author_email": "devasheeshmishra4@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/a0/8e/166bac8118c67db4f1291b2c890595e55bcc73f0c8b8724669a5e48eac41/recallrai-0.2.0.tar.gz",
    "platform": null,
    "description": "# RecallrAI Python SDK\n\nOfficial Python SDK for RecallrAI \u2013 a revolutionary contextual memory system that enables AI assistants to form meaningful connections between conversations, just like human memory.\n\n## Installation\n\nInstall the SDK via Poetry or pip:\n\n```bash\npoetry add recallrai\n# or\npip install recallrai\n```\n\n## Initialization\n\nCreate a client instance with your API key and project ID:\n\n```python\nfrom recallrai import RecallrAI\n\napi_key = \"rai_yourapikey\"\nproject_id = \"project-uuid\"\nclient = RecallrAI(api_key=api_key, project_id=project_id)\n```\n\n## User Management\n\n### Create a User\n\n```python\nfrom recallrai.exceptions import UserAlreadyExistsError\ntry:\n    user = client.create_user(user_id=\"user123\", metadata={\"name\": \"John Doe\"})\n    print(f\"Created user: {user.user_id}\")\n    print(f\"User metadata: {user.metadata}\")\n    print(f\"Created at: {user.created_at}\")\nexcept UserAlreadyExistsError as e:\n    print(f\"Error: {e}\")\n```\n\n### Get a User\n\n```python\nfrom recallrai.exceptions import UserNotFoundError\ntry:\n    user = client.get_user(\"user123\")\n    print(f\"User metadata: {user.metadata}\")\n    print(f\"Last active: {user.last_active_at}\")\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n### List Users\n\n```python\nuser_list = client.list_users(offset=0, limit=10)\nprint(f\"Total users: {user_list.total}\")\nprint(f\"Has more users: {user_list.has_more}\")\n\nfor user in user_list.users:\n    print(f\"User ID: {user.user_id}\")\n    print(f\"Metadata: {user.metadata}\")\n    print(f\"Created at: {user.created_at}\")\n    print(f\"Last active: {user.last_active_at}\")\n    print(\"---\")\n```\n\n### Update a User\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, UserAlreadyExistsError\ntry:\n    user = client.get_user(\"user123\")\n    updated_user = user.update(\n        new_metadata={\"name\": \"John Doe\", \"role\": \"admin\"},\n        new_user_id=\"john_doe\"\n    )\n    print(f\"Updated user ID: {updated_user.user_id}\")\n    print(f\"Updated metadata: {updated_user.metadata}\")\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept UserAlreadyExistsError as e:\n    print(f\"Error: {e}\")\n```\n\n### Delete a User\n\n```python\nfrom recallrai.exceptions import UserNotFoundError\ntry:\n    user = client.get_user(\"john_doe\")\n    user.delete()\n    print(\"User deleted successfully\")\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n## Session Management\n\n### Create a Session\n\n```python\nfrom recallrai.exceptions import UserNotFoundError\nfrom recallrai.session import Session\n\ntry:\n    # First, get the user\n    user = client.get_user(\"user123\")\n    \n    # Create a session for the user; auto_process_after_minutes set to -1 disables auto-processing\n    session: Session = user.create_session(auto_process_after_minutes=5)\n    print(\"Created session id:\", session.session_id)\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n### Get an Existing Session\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError\n\ntry:\n    # First, get the user\n    user = client.get_user(\"user123\")\n    \n    # Retrieve an existing session by its ID\n    session = user.get_session(session_id=\"session-uuid\")\n    print(\"Session status:\", session.get_status())\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept SessionNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n### List Sessions\n\n```python\nfrom recallrai.exceptions import UserNotFoundError\n\ntry:\n    # First, get the user\n    user = client.get_user(\"user123\")\n    \n    # List sessions for this user\n    session_list = user.list_sessions(offset=0, limit=10)\n    for session in session_list.sessions:\n        print(session.session_id, session.status)\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n### Session \u2013 Adding Messages\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError, InvalidSessionStateError\n\ntry:\n    # Add a user message\n    session.add_user_message(\"Hello! How are you?\")\n    \n    # Add an assistant message\n    session.add_assistant_message(\"I'm an assistant. How can I help you?\")\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept SessionNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept InvalidSessionStateError as e:\n    print(f\"Error: {e}\")\n```\n\n### Session \u2013 Retrieving Context\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError\n\ntry:\n    context = session.get_context()\n    print(\"Memory used:\", context.memory_used)\n    print(\"Context:\", context.context)\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept SessionNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n### Session \u2013 Process Session\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError, InvalidSessionStateError\n\ntry:\n    session.process()\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept SessionNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept InvalidSessionStateError as e:\n    print(f\"Error: {e}\")\n```\n\n### Session \u2013 Get Status and Messages\n\n```python\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError\nfrom recallrai.models import SessionStatus\n\ntry:\n    status = session.get_status()\n    print(\"Session status:\", status)\n    \n    # Check if the session is in a specific state\n    if status == SessionStatus.PROCESSED:\n        print(\"Session has been processed\")\n    \n    messages = session.get_messages()\n    for message in messages:\n        print(f\"{message.role}: {message.content} at {message.timestamp}\")\nexcept UserNotFoundError as e:\n    print(f\"Error: {e}\")\nexcept SessionNotFoundError as e:\n    print(f\"Error: {e}\")\n```\n\n## Example Usage with LLMs\n\n```python\nimport openai\nfrom recallrai import RecallrAI\nfrom recallrai.exceptions import UserNotFoundError\n\n# Initialize RecallrAI and OpenAI clients\nrai_client = RecallrAI(\n    api_key=\"rai_yourapikey\", \n    project_id=\"your-project-uuid\"\n)\noai_client = openai.OpenAI(api_key=\"your-openai-api-key\")\n\ndef chat_with_memory(user_id, session_id=None):\n    # Get or create user\n    try:\n        user = rai_client.get_user(user_id)\n    except UserNotFoundError:\n        user = rai_client.create_user(user_id)\n    \n    # Create a new session or get an existing one\n    if session_id:\n        session = user.get_session(session_id=session_id)\n    else:\n        session = user.create_session(auto_process_after_minutes=30)\n        print(f\"Created new session: {session.session_id}\")\n    \n    print(\"Chat session started. Type 'exit' to end the conversation.\")\n    \n    while True:\n        # Get user input\n        user_message = input(\"You: \")\n        if user_message.lower() == 'exit':\n            break\n        \n        # Add the user message to RecallrAI\n        session.add_user_message(user_message)\n        \n        # Get context from RecallrAI after adding the user message\n        context = session.get_context()\n        \n        # Create a system prompt that includes the context\n        system_prompt = f\"\"\"You are a helpful assistant with memory of previous conversations.\n        \n        MEMORIES ABOUT THE USER:\n        {context.context}\n        \n        You can use the above memories to provide better responses to the user.\n        Don't mention that you have access to memories unless you are explicitly asked.\"\"\"\n        \n        # Get previous messages\n        previous_messages = session.get_messages()\n        previous_messages = [{\"role\": message.role, \"content\": message.content} for message in previous_messages]\n\n        # Call the LLM with the system prompt and conversation history\n        response = oai_client.chat.completions.create(\n            model=\"gpt-4o-mini\",\n            messages=[\n                {\"role\": \"system\", \"content\": system_prompt},\n                **previous_messages,\n            ],\n            temperature=0.7\n        )\n        \n        assistant_message = response.choices[0].message.content\n        \n        # Print the assistant's response\n        print(f\"Assistant: {assistant_message}\")\n        \n        # Add the assistant's response to RecallrAI\n        session.add_assistant_message(assistant_message)\n    \n    # Process the session at the end of the conversation\n    print(\"Processing session to update memory...\")\n    session.process()\n    print(f\"Session ended. Session ID: {session.session_id}\")\n    return session.session_id\n\n# Example usage\nif __name__ == \"__main__\":\n    user_id = \"user123\"\n    # To continue a previous session, uncomment below and provide the session ID\n    # previous_session_id = \"previously-saved-session-uuid\"\n    # session_id = chat_with_memory(user_id, previous_session_id)\n    \n    # Start a new session\n    session_id = chat_with_memory(user_id)\n    print(f\"To continue this conversation later, use session ID: {session_id}\")\n```\n\n## Exception Handling\n\nThe RecallrAI SDK implements a comprehensive exception hierarchy to help you handle different error scenarios gracefully:\n\n### Base Exception\n\n- **RecallrAIError**: The base exception for all SDK-specific errors. All other exceptions inherit from this.\n\n### Authentication Errors\n\n- **AuthenticationError**: Raised when there's an issue with your API key or project ID authentication.\n\n### Network-Related Errors\n\n- **NetworkError**: Base exception for all network-related issues.\n- **TimeoutError**: Occurs when a request takes too long to complete.\n- **ConnectionError**: Happens when the SDK cannot establish a connection to the RecallrAI API.\n\n### Server Errors\n\n- **ServerError**: Base class for server-side errors.\n- **InternalServerError**: Raised when the RecallrAI API returns a 5xx error code.\n\n### User-Related Errors\n\n- **UserError**: Base for all user-related exceptions.\n- **UserNotFoundError**: Raised when attempting to access a user that doesn't exist.\n- **UserAlreadyExistsError**: Occurs when creating a user with an ID that already exists.\n\n### Session-Related Errors\n\n- **SessionError**: Base for all session-related exceptions.\n- **SessionNotFoundError**: Raised when attempting to access a non-existent session.\n- **InvalidSessionStateError**: Occurs when performing an operation that's not valid for the current session state (e.g., adding a message to a processed session).\n\n### Input Validation Errors\n\n- **ValidationError**: Raised when provided data doesn't meet the required format or constraints.\n\n### Importing Exceptions\n\nYou can import exceptions directly from the `recallrai.exceptions` module:\n\n```python\n# Import specific exceptions\nfrom recallrai.exceptions import UserNotFoundError, SessionNotFoundError\n\n# Import all exceptions\nfrom recallrai.exceptions import (\n    RecallrAIError,\n    AuthenticationError,\n    NetworkError,\n    TimeoutError,\n    ConnectionError,\n    ServerError, \n    InternalServerError,\n    SessionError, \n    SessionNotFoundError, \n    InvalidSessionStateError,\n    UserError, \n    UserNotFoundError, \n    UserAlreadyExistsError,\n    ValidationError,\n)\n```\n\n### Best Practices for Error Handling\n\nWhen implementing error handling with the RecallrAI SDK, consider these best practices:\n\n1. **Handle specific exceptions first**: Catch more specific exceptions before general ones.\n\n   ```python\n   try:\n       # SDK operation\n   except UserNotFoundError:\n       # Specific handling\n   except RecallrAIError:\n       # General fallback\n   ```\n\n2. **Implement retry logic for transient errors**: Network and timeout errors might be temporary.\n\n3. **Log detailed error information**: Exceptions contain useful information for debugging.\n\n4. **Handle common user flows**: For example, check if a user exists before operations, or create them if they don't:\n\n   ```python\n   try:\n       user = client.get_user(user_id)\n   except UserNotFoundError:\n       user = client.create_user(user_id)\n   ```\n\nFor more detailed information on specific exceptions, refer to the API documentation.\n\n## Conclusion\n\nThis README outlines the basic usage of the RecallrAI SDK functions for user and session management. For additional documentation and advanced usage, please see the [official documentation](https://recallrai.com) or the source code repository on [GitHub](https://github.com/recallrai/sdk-python).\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Official Python SDK for RecallrAI - Revolutionary contextual memory system that enables AI assistants to form meaningful connections between conversations, just like human memory.",
    "version": "0.2.0",
    "project_urls": {
        "Homepage": "https://recallrai.com",
        "Repository": "https://github.com/recallrai/sdk-python"
    },
    "split_keywords": [
        "ai",
        " memory",
        " context",
        " llm",
        " mem0",
        " getzep",
        " zep"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "104058bc767c860a4d62989f9dbf3d16cd0f635b77010b1cd243d29ce2a21255",
                "md5": "29a1a590646991683bd703efd88464ab",
                "sha256": "7e476de8ec0f1d9440213ba407d1ff1662f97a6d7cbd845621dbbeddb56c764a"
            },
            "downloads": -1,
            "filename": "recallrai-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "29a1a590646991683bd703efd88464ab",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.14,>=3.9",
            "size": 18769,
            "upload_time": "2025-07-16T05:46:21",
            "upload_time_iso_8601": "2025-07-16T05:46:21.898994Z",
            "url": "https://files.pythonhosted.org/packages/10/40/58bc767c860a4d62989f9dbf3d16cd0f635b77010b1cd243d29ce2a21255/recallrai-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a08e166bac8118c67db4f1291b2c890595e55bcc73f0c8b8724669a5e48eac41",
                "md5": "a048dfaadf515dfb040b6b81b7643992",
                "sha256": "d15cd873197b8850c346d65947b37bf258f9d0ed83e98c563c5a180118400f37"
            },
            "downloads": -1,
            "filename": "recallrai-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a048dfaadf515dfb040b6b81b7643992",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.14,>=3.9",
            "size": 14530,
            "upload_time": "2025-07-16T05:46:22",
            "upload_time_iso_8601": "2025-07-16T05:46:22.734355Z",
            "url": "https://files.pythonhosted.org/packages/a0/8e/166bac8118c67db4f1291b2c890595e55bcc73f0c8b8724669a5e48eac41/recallrai-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-16 05:46:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "recallrai",
    "github_project": "sdk-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "recallrai"
}
        
Elapsed time: 0.53414s