Name | sovant JSON |
Version |
1.0.0
JSON |
| download |
home_page | None |
Summary | Official Python SDK for Sovant Memory API |
upload_time | 2025-07-31 02:25:20 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT License
Copyright (c) 2024 Sovant AI
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
sovant
memory
api
ai
sdk
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Sovant Python SDK
Official Python SDK for the Sovant Memory API. Build AI applications with persistent memory, semantic search, and intelligent context management.
> **Note: Coming Soon!** This SDK is currently in development and will be available on PyPI soon. In the meantime, you can use our REST API directly.
## Installation
```bash
# Coming soon
pip install sovant
```
For async support:
```bash
# Coming soon
pip install sovant[async]
```
## Quick Start
```python
from sovant import SovantClient
# Initialize the client
client = SovantClient(api_key="YOUR_API_KEY")
# Create a memory
memory = client.memories.create({
"content": "User prefers Python for data science projects",
"type": "preference",
"metadata": {
"confidence": 0.95,
"context": "programming_languages"
}
})
print(f"Created memory: {memory.id}")
# Search memories
results = client.memories.search({
"query": "What programming languages does the user prefer?",
"limit": 5
})
for result in results:
print(f"- {result.content} (relevance: {result.relevance_score:.2f})")
```
## Features
- ๐ **Full Type Hints** - Complete type annotations for better IDE support
- ๐ **Async/Await Support** - Built for modern Python applications
- ๐ **Automatic Retries** - Configurable retry logic with exponential backoff
- ๐ฆ **Batch Operations** - Efficient bulk create/delete operations
- ๐ฏ **Smart Search** - Semantic, keyword, and hybrid search modes
- ๐งต **Thread Management** - Organize memories into contextual threads
- ๐ **Analytics** - Built-in insights and statistics
- ๐ก๏ธ **Comprehensive Error Handling** - Typed exceptions for all error cases
## Configuration
```python
from sovant import SovantClient, Config
# Using configuration object
config = Config(
api_key="YOUR_API_KEY",
base_url="https://api.sovant.ai/v1", # Optional
timeout=30, # Request timeout in seconds
max_retries=3, # Number of retries for failed requests
retry_delay=1.0 # Initial delay between retries
)
client = SovantClient(config)
```
You can also use environment variables:
```bash
export SOVANT_API_KEY="YOUR_API_KEY"
```
```python
from sovant import SovantClient
# Automatically reads from SOVANT_API_KEY env var
client = SovantClient()
```
## Memory Operations
### Create a Memory
```python
from sovant import MemoryType, EmotionType
memory = client.memories.create({
"content": "User completed the onboarding tutorial",
"type": MemoryType.EVENT,
"importance": 0.8,
"metadata": {
"step_completed": "tutorial",
"duration_seconds": 180
},
"tags": ["onboarding", "milestone"],
"emotion": {
"type": EmotionType.POSITIVE,
"intensity": 0.7
},
"action_items": ["Send welcome email", "Unlock advanced features"]
})
```
### Update a Memory
```python
updated = client.memories.update(memory.id, {
"importance": 0.9,
"follow_up_required": True,
"follow_up_due": "2024-12-31T23:59:59Z"
})
```
### Search Memories
```python
# Semantic search
semantic_results = client.memories.search({
"query": "user achievements and milestones",
"search_type": "semantic",
"limit": 10
})
# Filtered search
from sovant import MemoryType
filtered_results = client.memories.search({
"query": "preferences",
"type": [MemoryType.PREFERENCE, MemoryType.DECISION],
"tags": ["important"],
"created_after": "2024-01-01",
"sort_by": "importance",
"sort_order": "desc"
})
```
### Batch Operations
```python
# Batch create
memories_data = [
{"content": "User is a data scientist", "type": "observation"},
{"content": "User works with ML models", "type": "learning"},
{"content": "User prefers Jupyter notebooks", "type": "preference"}
]
batch_result = client.memories.create_batch(memories_data)
print(f"Created {batch_result.success_count} memories")
print(f"Failed {batch_result.failed_count} memories")
# Batch delete
result = client.memories.delete_batch(["mem_123", "mem_456", "mem_789"])
print(f"Deleted {result['deleted']} memories")
```
## Thread Management
### Create a Thread
```python
thread = client.threads.create({
"name": "Customer Support Chat",
"description": "Tracking customer issues and resolutions",
"tags": ["support", "customer", "priority"]
})
```
### Add Memories to Thread
```python
# Add existing memories
client.threads.add_memories(thread.id, [memory1.id, memory2.id])
# Create and add in one operation
new_memory = client.memories.create({
"content": "Customer reported login issue",
"type": "conversation",
"thread_ids": [thread.id]
})
```
### Get Thread with Memories
```python
# Get thread with all memories included
thread_with_memories = client.threads.get(thread.id, include_memories=True)
print(f"Thread: {thread_with_memories.name}")
print(f"Total memories: {len(thread_with_memories.memories)}")
for memory in thread_with_memories.memories:
print(f"- {memory.content}")
```
### Thread Analytics
```python
stats = client.threads.get_stats(thread.id)
print(f"Total memories: {stats.memory_count}")
print(f"Average importance: {stats.avg_importance:.2f}")
print(f"Decisions made: {stats.total_decisions}")
print(f"Open questions: {stats.total_questions}")
print(f"Action items: {stats.total_action_items}")
```
## Async Support
```python
import asyncio
from sovant import AsyncSovantClient
async def main():
# Use async client for better performance
async with AsyncSovantClient(api_key="YOUR_API_KEY") as client:
# Create multiple memories concurrently
memories = await asyncio.gather(
client.memories.create({"content": "Memory 1"}),
client.memories.create({"content": "Memory 2"}),
client.memories.create({"content": "Memory 3"})
)
print(f"Created {len(memories)} memories")
# Async search
results = await client.memories.search({
"query": "user preferences",
"search_type": "semantic"
})
for result in results:
print(f"- {result.content}")
asyncio.run(main())
```
## Error Handling
The SDK provides typed exceptions for different error scenarios:
```python
from sovant import (
AuthenticationError,
RateLimitError,
ValidationError,
NotFoundError,
NetworkError
)
try:
memory = client.memories.get("invalid_id")
except NotFoundError:
print("Memory not found")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except ValidationError as e:
print(f"Validation errors: {e.errors}")
except AuthenticationError:
print("Invalid API key")
except NetworkError:
print("Network error occurred")
```
## Advanced Usage
### Memory Insights
```python
insights = client.memories.get_insights(
time_range="last_30_days",
group_by="type"
)
print(f"Total memories: {insights['total_count']}")
print(f"Type distribution: {insights['type_distribution']}")
print(f"Emotion distribution: {insights['emotion_distribution']}")
print(f"Average importance: {insights['importance_stats']['avg']}")
print(f"Growth rate: {insights['growth_rate']}%")
```
### Related Memories
```python
# Find memories related to a specific memory
related = client.memories.get_related(
memory_id=memory.id,
limit=5,
threshold=0.7 # Minimum similarity score
)
for r in related:
print(f"- {r.content} (similarity: {r.relevance_score:.2f})")
```
### Thread Operations
```python
# Archive a thread
archived = client.threads.archive(thread.id)
# Search threads
threads = client.threads.search(
query="customer support",
status="active",
tags=["priority"]
)
# Merge threads
merged = client.threads.merge(
target_id=main_thread.id,
source_ids=[thread2.id, thread3.id]
)
# Clone a thread
cloned = client.threads.clone(
thread_id=thread.id,
name="Cloned Thread",
include_memories=True
)
```
### Pagination
```python
# List memories with pagination
page1 = client.memories.list(limit=20, offset=0)
print(f"Total memories: {page1.total}")
print(f"Has more: {page1.has_more}")
# Get next page
if page1.has_more:
page2 = client.memories.list(limit=20, offset=20)
```
## Type Safety
The SDK uses Pydantic for data validation and provides enums for better type safety:
```python
from sovant import MemoryType, EmotionType, ThreadStatus
# Using enums ensures valid values
memory = client.memories.create({
"content": "Important decision made",
"type": MemoryType.DECISION, # Type-safe enum
"emotion": {
"type": EmotionType.NEUTRAL, # Type-safe enum
"intensity": 0.5
}
})
# IDE will provide autocompletion for all fields
thread = client.threads.create({
"name": "Project Planning",
"status": ThreadStatus.ACTIVE # Type-safe enum
})
```
## Best Practices
1. **Use batch operations for bulk actions**
```python
# Good - single API call
batch_result = client.memories.create_batch(memories_list)
# Avoid - multiple API calls
for memory_data in memories_list:
client.memories.create(memory_data)
```
2. **Use async client for concurrent operations**
```python
async with AsyncSovantClient() as client:
results = await asyncio.gather(*tasks)
```
3. **Handle errors gracefully**
```python
try:
result = client.memories.search({"query": "test"})
except RateLimitError as e:
await asyncio.sleep(e.retry_after)
# Retry the request
```
4. **Use type hints for better IDE support**
```python
from sovant import Memory, SearchResult
def process_memory(memory: Memory) -> None:
print(f"Processing {memory.id}")
def handle_results(results: list[SearchResult]) -> None:
for result in results:
print(f"Score: {result.relevance_score}")
```
## Examples
Check out the [examples directory](https://github.com/sovant-ai/python-sdk/tree/main/examples) for complete working examples:
- Basic CRUD operations
- Advanced search techniques
- Thread management workflows
- Async patterns
- Error handling
- Data analysis with pandas integration
## Support
- ๐ [Documentation](https://docs.sovant.ai)
- ๐ฌ [Discord Community](https://discord.gg/sovant)
- ๐ [Issue Tracker](https://github.com/sovant-ai/python-sdk/issues)
- ๐ง [Email Support](mailto:support@sovant.ai)
## License
MIT ยฉ Sovant AI
Raw data
{
"_id": null,
"home_page": null,
"name": "sovant",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "sovant, memory, api, ai, sdk",
"author": null,
"author_email": "Sovant AI <support@sovant.ai>",
"download_url": "https://files.pythonhosted.org/packages/72/d8/4b4540d354e9234264aff88f90470ba1201010be1dd7a636bc4ee7e6f682/sovant-1.0.0.tar.gz",
"platform": null,
"description": "# Sovant Python SDK\n\nOfficial Python SDK for the Sovant Memory API. Build AI applications with persistent memory, semantic search, and intelligent context management.\n\n> **Note: Coming Soon!** This SDK is currently in development and will be available on PyPI soon. In the meantime, you can use our REST API directly.\n\n## Installation\n\n```bash\n# Coming soon\npip install sovant\n```\n\nFor async support:\n\n```bash\n# Coming soon\npip install sovant[async]\n```\n\n## Quick Start\n\n```python\nfrom sovant import SovantClient\n\n# Initialize the client\nclient = SovantClient(api_key=\"YOUR_API_KEY\")\n\n# Create a memory\nmemory = client.memories.create({\n \"content\": \"User prefers Python for data science projects\",\n \"type\": \"preference\",\n \"metadata\": {\n \"confidence\": 0.95,\n \"context\": \"programming_languages\"\n }\n})\n\nprint(f\"Created memory: {memory.id}\")\n\n# Search memories\nresults = client.memories.search({\n \"query\": \"What programming languages does the user prefer?\",\n \"limit\": 5\n})\n\nfor result in results:\n print(f\"- {result.content} (relevance: {result.relevance_score:.2f})\")\n```\n\n## Features\n\n- \ud83d\udc0d **Full Type Hints** - Complete type annotations for better IDE support\n- \ud83d\udd04 **Async/Await Support** - Built for modern Python applications\n- \ud83d\udd01 **Automatic Retries** - Configurable retry logic with exponential backoff\n- \ud83d\udce6 **Batch Operations** - Efficient bulk create/delete operations\n- \ud83c\udfaf **Smart Search** - Semantic, keyword, and hybrid search modes\n- \ud83e\uddf5 **Thread Management** - Organize memories into contextual threads\n- \ud83d\udcca **Analytics** - Built-in insights and statistics\n- \ud83d\udee1\ufe0f **Comprehensive Error Handling** - Typed exceptions for all error cases\n\n## Configuration\n\n```python\nfrom sovant import SovantClient, Config\n\n# Using configuration object\nconfig = Config(\n api_key=\"YOUR_API_KEY\",\n base_url=\"https://api.sovant.ai/v1\", # Optional\n timeout=30, # Request timeout in seconds\n max_retries=3, # Number of retries for failed requests\n retry_delay=1.0 # Initial delay between retries\n)\n\nclient = SovantClient(config)\n```\n\nYou can also use environment variables:\n\n```bash\nexport SOVANT_API_KEY=\"YOUR_API_KEY\"\n```\n\n```python\nfrom sovant import SovantClient\n\n# Automatically reads from SOVANT_API_KEY env var\nclient = SovantClient()\n```\n\n## Memory Operations\n\n### Create a Memory\n\n```python\nfrom sovant import MemoryType, EmotionType\n\nmemory = client.memories.create({\n \"content\": \"User completed the onboarding tutorial\",\n \"type\": MemoryType.EVENT,\n \"importance\": 0.8,\n \"metadata\": {\n \"step_completed\": \"tutorial\",\n \"duration_seconds\": 180\n },\n \"tags\": [\"onboarding\", \"milestone\"],\n \"emotion\": {\n \"type\": EmotionType.POSITIVE,\n \"intensity\": 0.7\n },\n \"action_items\": [\"Send welcome email\", \"Unlock advanced features\"]\n})\n```\n\n### Update a Memory\n\n```python\nupdated = client.memories.update(memory.id, {\n \"importance\": 0.9,\n \"follow_up_required\": True,\n \"follow_up_due\": \"2024-12-31T23:59:59Z\"\n})\n```\n\n### Search Memories\n\n```python\n# Semantic search\nsemantic_results = client.memories.search({\n \"query\": \"user achievements and milestones\",\n \"search_type\": \"semantic\",\n \"limit\": 10\n})\n\n# Filtered search\nfrom sovant import MemoryType\n\nfiltered_results = client.memories.search({\n \"query\": \"preferences\",\n \"type\": [MemoryType.PREFERENCE, MemoryType.DECISION],\n \"tags\": [\"important\"],\n \"created_after\": \"2024-01-01\",\n \"sort_by\": \"importance\",\n \"sort_order\": \"desc\"\n})\n```\n\n### Batch Operations\n\n```python\n# Batch create\nmemories_data = [\n {\"content\": \"User is a data scientist\", \"type\": \"observation\"},\n {\"content\": \"User works with ML models\", \"type\": \"learning\"},\n {\"content\": \"User prefers Jupyter notebooks\", \"type\": \"preference\"}\n]\n\nbatch_result = client.memories.create_batch(memories_data)\nprint(f\"Created {batch_result.success_count} memories\")\nprint(f\"Failed {batch_result.failed_count} memories\")\n\n# Batch delete\nresult = client.memories.delete_batch([\"mem_123\", \"mem_456\", \"mem_789\"])\nprint(f\"Deleted {result['deleted']} memories\")\n```\n\n## Thread Management\n\n### Create a Thread\n\n```python\nthread = client.threads.create({\n \"name\": \"Customer Support Chat\",\n \"description\": \"Tracking customer issues and resolutions\",\n \"tags\": [\"support\", \"customer\", \"priority\"]\n})\n```\n\n### Add Memories to Thread\n\n```python\n# Add existing memories\nclient.threads.add_memories(thread.id, [memory1.id, memory2.id])\n\n# Create and add in one operation\nnew_memory = client.memories.create({\n \"content\": \"Customer reported login issue\",\n \"type\": \"conversation\",\n \"thread_ids\": [thread.id]\n})\n```\n\n### Get Thread with Memories\n\n```python\n# Get thread with all memories included\nthread_with_memories = client.threads.get(thread.id, include_memories=True)\n\nprint(f\"Thread: {thread_with_memories.name}\")\nprint(f\"Total memories: {len(thread_with_memories.memories)}\")\n\nfor memory in thread_with_memories.memories:\n print(f\"- {memory.content}\")\n```\n\n### Thread Analytics\n\n```python\nstats = client.threads.get_stats(thread.id)\n\nprint(f\"Total memories: {stats.memory_count}\")\nprint(f\"Average importance: {stats.avg_importance:.2f}\")\nprint(f\"Decisions made: {stats.total_decisions}\")\nprint(f\"Open questions: {stats.total_questions}\")\nprint(f\"Action items: {stats.total_action_items}\")\n```\n\n## Async Support\n\n```python\nimport asyncio\nfrom sovant import AsyncSovantClient\n\nasync def main():\n # Use async client for better performance\n async with AsyncSovantClient(api_key=\"YOUR_API_KEY\") as client:\n # Create multiple memories concurrently\n memories = await asyncio.gather(\n client.memories.create({\"content\": \"Memory 1\"}),\n client.memories.create({\"content\": \"Memory 2\"}),\n client.memories.create({\"content\": \"Memory 3\"})\n )\n\n print(f\"Created {len(memories)} memories\")\n\n # Async search\n results = await client.memories.search({\n \"query\": \"user preferences\",\n \"search_type\": \"semantic\"\n })\n\n for result in results:\n print(f\"- {result.content}\")\n\nasyncio.run(main())\n```\n\n## Error Handling\n\nThe SDK provides typed exceptions for different error scenarios:\n\n```python\nfrom sovant import (\n AuthenticationError,\n RateLimitError,\n ValidationError,\n NotFoundError,\n NetworkError\n)\n\ntry:\n memory = client.memories.get(\"invalid_id\")\nexcept NotFoundError:\n print(\"Memory not found\")\nexcept RateLimitError as e:\n print(f\"Rate limited. Retry after {e.retry_after} seconds\")\nexcept ValidationError as e:\n print(f\"Validation errors: {e.errors}\")\nexcept AuthenticationError:\n print(\"Invalid API key\")\nexcept NetworkError:\n print(\"Network error occurred\")\n```\n\n## Advanced Usage\n\n### Memory Insights\n\n```python\ninsights = client.memories.get_insights(\n time_range=\"last_30_days\",\n group_by=\"type\"\n)\n\nprint(f\"Total memories: {insights['total_count']}\")\nprint(f\"Type distribution: {insights['type_distribution']}\")\nprint(f\"Emotion distribution: {insights['emotion_distribution']}\")\nprint(f\"Average importance: {insights['importance_stats']['avg']}\")\nprint(f\"Growth rate: {insights['growth_rate']}%\")\n```\n\n### Related Memories\n\n```python\n# Find memories related to a specific memory\nrelated = client.memories.get_related(\n memory_id=memory.id,\n limit=5,\n threshold=0.7 # Minimum similarity score\n)\n\nfor r in related:\n print(f\"- {r.content} (similarity: {r.relevance_score:.2f})\")\n```\n\n### Thread Operations\n\n```python\n# Archive a thread\narchived = client.threads.archive(thread.id)\n\n# Search threads\nthreads = client.threads.search(\n query=\"customer support\",\n status=\"active\",\n tags=[\"priority\"]\n)\n\n# Merge threads\nmerged = client.threads.merge(\n target_id=main_thread.id,\n source_ids=[thread2.id, thread3.id]\n)\n\n# Clone a thread\ncloned = client.threads.clone(\n thread_id=thread.id,\n name=\"Cloned Thread\",\n include_memories=True\n)\n```\n\n### Pagination\n\n```python\n# List memories with pagination\npage1 = client.memories.list(limit=20, offset=0)\nprint(f\"Total memories: {page1.total}\")\nprint(f\"Has more: {page1.has_more}\")\n\n# Get next page\nif page1.has_more:\n page2 = client.memories.list(limit=20, offset=20)\n```\n\n## Type Safety\n\nThe SDK uses Pydantic for data validation and provides enums for better type safety:\n\n```python\nfrom sovant import MemoryType, EmotionType, ThreadStatus\n\n# Using enums ensures valid values\nmemory = client.memories.create({\n \"content\": \"Important decision made\",\n \"type\": MemoryType.DECISION, # Type-safe enum\n \"emotion\": {\n \"type\": EmotionType.NEUTRAL, # Type-safe enum\n \"intensity\": 0.5\n }\n})\n\n# IDE will provide autocompletion for all fields\nthread = client.threads.create({\n \"name\": \"Project Planning\",\n \"status\": ThreadStatus.ACTIVE # Type-safe enum\n})\n```\n\n## Best Practices\n\n1. **Use batch operations for bulk actions**\n\n ```python\n # Good - single API call\n batch_result = client.memories.create_batch(memories_list)\n\n # Avoid - multiple API calls\n for memory_data in memories_list:\n client.memories.create(memory_data)\n ```\n\n2. **Use async client for concurrent operations**\n\n ```python\n async with AsyncSovantClient() as client:\n results = await asyncio.gather(*tasks)\n ```\n\n3. **Handle errors gracefully**\n\n ```python\n try:\n result = client.memories.search({\"query\": \"test\"})\n except RateLimitError as e:\n await asyncio.sleep(e.retry_after)\n # Retry the request\n ```\n\n4. **Use type hints for better IDE support**\n\n ```python\n from sovant import Memory, SearchResult\n\n def process_memory(memory: Memory) -> None:\n print(f\"Processing {memory.id}\")\n\n def handle_results(results: list[SearchResult]) -> None:\n for result in results:\n print(f\"Score: {result.relevance_score}\")\n ```\n\n## Examples\n\nCheck out the [examples directory](https://github.com/sovant-ai/python-sdk/tree/main/examples) for complete working examples:\n\n- Basic CRUD operations\n- Advanced search techniques\n- Thread management workflows\n- Async patterns\n- Error handling\n- Data analysis with pandas integration\n\n## Support\n\n- \ud83d\udcda [Documentation](https://docs.sovant.ai)\n- \ud83d\udcac [Discord Community](https://discord.gg/sovant)\n- \ud83d\udc1b [Issue Tracker](https://github.com/sovant-ai/python-sdk/issues)\n- \ud83d\udce7 [Email Support](mailto:support@sovant.ai)\n\n## License\n\nMIT \u00a9 Sovant AI\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Sovant AI\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "Official Python SDK for Sovant Memory API",
"version": "1.0.0",
"project_urls": {
"Documentation": "https://docs.sovant.ai",
"Homepage": "https://sovant.ai",
"Issues": "https://github.com/sovant-ai/python-sdk/issues",
"Repository": "https://github.com/sovant-ai/python-sdk"
},
"split_keywords": [
"sovant",
" memory",
" api",
" ai",
" sdk"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "0360e5761a828e7dc523e33e40979399fffe210eba3e33ce389369f953ffa931",
"md5": "32240519c09d80a17d08f8521f1bdd74",
"sha256": "b6ca2f1366852269496383ec3ac14d847ccdaf3cfd815f3bcbac41516a03871b"
},
"downloads": -1,
"filename": "sovant-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "32240519c09d80a17d08f8521f1bdd74",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 15678,
"upload_time": "2025-07-31T02:25:19",
"upload_time_iso_8601": "2025-07-31T02:25:19.551336Z",
"url": "https://files.pythonhosted.org/packages/03/60/e5761a828e7dc523e33e40979399fffe210eba3e33ce389369f953ffa931/sovant-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "72d84b4540d354e9234264aff88f90470ba1201010be1dd7a636bc4ee7e6f682",
"md5": "57583672c4c06df8abb9cf49605c3896",
"sha256": "60cca374375e15f85a6a533d28acac3ef6f315e5e2ebff0c27bc2d8b545ed7a1"
},
"downloads": -1,
"filename": "sovant-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "57583672c4c06df8abb9cf49605c3896",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 17532,
"upload_time": "2025-07-31T02:25:20",
"upload_time_iso_8601": "2025-07-31T02:25:20.871592Z",
"url": "https://files.pythonhosted.org/packages/72/d8/4b4540d354e9234264aff88f90470ba1201010be1dd7a636bc4ee7e6f682/sovant-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-31 02:25:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sovant-ai",
"github_project": "python-sdk",
"github_not_found": true,
"lcname": "sovant"
}