Name | recallrai JSON |
Version |
0.2.0
JSON |
| download |
home_page | None |
Summary | Official Python SDK for RecallrAI - Revolutionary contextual memory system that enables AI assistants to form meaningful connections between conversations, just like human memory. |
upload_time | 2025-07-16 05:46:22 |
maintainer | None |
docs_url | None |
author | Devasheesh Mishra |
requires_python | <3.14,>=3.9 |
license | MIT |
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"
}