| Name | usf-p1-chatbot-sdk JSON |
| Version |
1.0.1
JSON |
| download |
| home_page | None |
| Summary | Python SDK for USF P1 Chatbot API - (Fixed PDF ingestion bug) |
| upload_time | 2025-10-14 11:37:51 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.9 |
| license | None |
| keywords |
chatbot
api
sdk
client
usf
civie
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# USF P1 Chatbot SDK
A Python SDK for interacting with the USF P1 Chatbot API
[](https://badge.fury.io/py/usf-p1-chatbot-sdk)
[](https://pypi.org/project/usf-p1-chatbot-sdk/)
## Features
- ✅ **Complete API Coverage** - All 33 endpoints wrapped
- ✅ **Easy to Use** - Simple, intuitive interface
- ✅ **Type Hints** - Full type annotations for IDE support
- ✅ **Async Support** - Streaming chat responses
- ✅ **Production Ready** - Proper error handling and timeouts
- ✅ **Well Documented** - Comprehensive examples and API reference
## Installation
```bash
pip install usf-p1-chatbot-sdk
```
## Quick Start
```python
from usf_p1_chatbot_sdk import ChatbotClient
# Initialize client with your API key and base URL
client = ChatbotClient(
api_key="your-api-key-here",
base_url="https://your-api-endpoint.com"
)
# Check API health
health = client.health_check()
print(f"API Status: {health['status']}")
# List collections
collections = client.list_collections()
print(f"Collections: {collections}")
# Create a new collection
collection = client.create_collection(
collection_name="my_documents",
description="My document collection"
)
collection_id = collection["collection_info"]["collection_id"]
# Register a patient
patient = client.register_patient(
collection_id=collection_id,
patient_name="John Doe",
age=35,
gender="M"
)
# Ingest documents from URLs
result = client.ingest_urls(
collection_id=collection_id,
urls=["https://example.com/document.html"],
patient_user_name="John Doe"
)
print(f"Ingestion started: {result['task_id']}")
# Or ingest PDF files
result = client.ingest_pdfs(
collection_id=collection_id,
files=["report1.pdf", "report2.pdf", "report3.pdf"],
patient_user_name="John Doe"
)
print(f"PDF ingestion started: {result['request_id']}")
# Chat with the AI
response = client.chat(
collection_id=collection_id,
patient_user_name="John Doe",
message="What information do you have about me?"
)
print(f"AI Response: {response['response']}")
# Close the client
client.close()
```
## API Reference
### Initialization
```python
client = ChatbotClient(
api_key="your-api-key", # Required
base_url="https://your-api-endpoint.com", # Required
timeout=300.0 # Optional, request timeout in seconds
)
```
### All 33 Available Methods
#### Health Check (1 method)
- `client.health_check()` - Check API health
#### Collections (3 methods)
- `client.create_collection(name, description)` - Create a new collection
- `client.list_collections()` - List all collections
- `client.delete_collection(collection_id)` - Delete a collection
#### Patients (7 methods)
- `client.register_patient(collection_id, patient_name, **data)` - Register a patient
- `client.validate_patient(collection_id, patient_name)` - Validate patient exists
- `client.get_patient(patient_name)` - Get patient information
- `client.delete_patient(patient_name)` - Delete a patient
- `client.list_patients()` - List all patients
- `client.list_patients_by_collection(collection_id)` - List patients in a collection
- `client.get_patient_data_summary(patient_name)` - Get patient data summary
#### Data Ingestion (3 methods)
- `client.ingest_pdfs(collection_id, files, patient_name)` - Ingest PDF files
- `client.ingest_urls(collection_id, urls, patient_name)` - Ingest from URLs
- `client.ingest_default(collection_id, files, urls, patient_name)` - Ingest files and/or URLs
#### Ingestion Status (4 methods)
- `client.get_ingestion_progress(request_id)` - Get ingestion progress
- `client.list_ingestion_requests()` - List recent ingestion requests
- `client.get_ingestion_status()` - Get ingestion service status
- `client.cancel_ingestion_request(request_id)` - Cancel an ingestion request
#### Chat (2 methods)
- `client.chat(collection_id, patient_name, message, ...)` - Send a chat message
- `client.chat_stream(collection_id, patient_name, message, ...)` - Stream chat response (async)
#### Logging (8 methods)
- `client.get_log_collections()` - List log collections
- `client.get_log_stats()` - Get log statistics
- `client.get_recent_logs(limit)` - Get recent logs
- `client.get_logs_from_collection(collection_name, limit)` - Get logs from a collection
- `client.clear_logs_collection(collection_name)` - Clear a log collection
- `client.get_patient_logs(collection_id, patient_name, minutes)` - Get patient logs
- `client.get_patient_logs_from_collection(...)` - Get patient logs from specific collection
- `client.get_logs_by_collection_and_log_collection(...)` - Get logs by collection
#### File Operations (5 methods)
- `client.get_db_files()` - Get all database files
- `client.get_db_files_by_collection(collection_id)` - Get DB files by collection
- `client.get_s3_files()` - Get all S3 files
- `client.get_s3_files_by_collection(collection_id)` - Get S3 files by collection
- `client.delete_document(document_uuid)` - Delete a document
## Advanced Usage
### Context Manager
```python
with ChatbotClient(
api_key="your-api-key",
base_url="https://your-api-endpoint.com"
) as client:
collections = client.list_collections()
# Client automatically closed
```
### Async Streaming Chat
```python
import asyncio
async def stream_chat():
client = ChatbotClient(
api_key="your-api-key",
base_url="https://your-api-endpoint.com"
)
async for chunk in client.chat_stream(
collection_id="col-123",
patient_user_name="John Doe",
message="Tell me about my documents"
):
print(chunk, end="", flush=True)
await client.aclose()
asyncio.run(stream_chat())
```
### Error Handling
```python
from usf_p1_chatbot_sdk import ChatbotClient, ChatbotClientError
client = ChatbotClient(
api_key="your-api-key",
base_url="https://your-api-endpoint.com"
)
try:
response = client.chat(
collection_id="col-123",
patient_user_name="John Doe",
message="Hello!"
)
except ChatbotClientError as e:
print(f"API Error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
finally:
client.close()
```
### Custom Timeout
```python
# Set custom timeout for long-running operations
client = ChatbotClient(
api_key="your-api-key",
base_url="https://your-api-endpoint.com",
timeout=600.0 # 10 minutes
)
```
### PDF Ingestion with Progress Monitoring
```python
from usf_p1_chatbot_sdk import ChatbotClient
import time
client = ChatbotClient(
api_key="your-api-key",
base_url="https://your-api-endpoint.com"
)
# Start PDF ingestion
result = client.ingest_pdfs(
collection_id="col-123",
files=["report1.pdf", "report2.pdf", "report3.pdf"],
patient_user_name="John_Doe" # Use underscores in names
)
request_id = result.get('request_id') or result.get('task_id')
print(f"✅ Ingestion started: {request_id}")
# Monitor progress
print("⏳ Monitoring ingestion progress...")
while True:
progress = client.get_ingestion_progress(request_id)
status = progress['status']
percentage = progress.get('progress_percentage', 0)
print(f" Status: {status} ({percentage}%)")
if status in ['completed', 'failed']:
print(f"✅ Ingestion {status}")
break
time.sleep(5) # Check every 5 seconds
client.close()
```
## Complete Example
```python
from usf_p1_chatbot_sdk import ChatbotClient
import time
# Initialize
client = ChatbotClient(
api_key="your-api-key-here",
base_url="https://your-api-endpoint.com"
)
try:
# 1. Health check
health = client.health_check()
print(f"✅ API Status: {health['status']}")
# 2. Create collection
collection = client.create_collection("medical_reports", "Patient medical reports")
cid = collection["collection_info"]["collection_id"]
print(f"✅ Created collection: {cid}")
# 3. Register patient (use underscores in names)
patient = client.register_patient(
collection_id=cid,
patient_name="John_Doe",
age=35,
gender="M",
blood_type="O+"
)
print("✅ Registered patient: John_Doe")
# 4. Ingest PDF documents
result = client.ingest_pdfs(
collection_id=cid,
files=["report1.pdf", "report2.pdf", "report3.pdf"],
patient_user_name="John_Doe"
)
request_id = result.get('request_id') or result.get('task_id')
print(f"✅ Started PDF ingestion: {request_id}")
# 5. Monitor ingestion progress
print("⏳ Monitoring ingestion...")
while True:
progress = client.get_ingestion_progress(request_id)
status = progress['status']
percentage = progress.get('progress_percentage', 0)
print(f" Status: {status} ({percentage}%)")
if status in ['completed', 'failed']:
print(f"✅ Ingestion {status}")
break
time.sleep(5)
# 6. Chat with AI about the documents
response = client.chat(
collection_id=cid,
patient_user_name="John_Doe",
message="Summarize my medical reports and highlight any concerns."
)
print(f"\n💬 AI Response:\n{response['response']}")
# 7. Get patient logs
logs = client.get_patient_logs(
collection_id=cid,
patient_name="John_Doe",
minutes=60
)
print(f"\n✅ Found {len(logs.get('logs', []))} log entries")
# 8. Get patient data summary
summary = client.get_patient_data_summary("John_Doe")
print(f"✅ Patient has {summary.get('document_count', 0)} documents")
except Exception as e:
print(f"❌ Error: {e}")
finally:
client.close()
print("✅ Client closed")
```
## API Documentation
Contact your API provider for detailed API documentation.
## Requirements
- Python 3.9+
- httpx >= 0.24.0
Raw data
{
"_id": null,
"home_page": null,
"name": "usf-p1-chatbot-sdk",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "chatbot, api, sdk, client, usf, civie",
"author": null,
"author_email": "UltraSafe <ravi.kumar@us.inc>",
"download_url": "https://files.pythonhosted.org/packages/b2/b3/0df2e412a633f7f0fdf4e08a534907c086d20c0bfa6ea4e14d44291664ea/usf_p1_chatbot_sdk-1.0.1.tar.gz",
"platform": null,
"description": "# USF P1 Chatbot SDK\r\n\r\nA Python SDK for interacting with the USF P1 Chatbot API\r\n\r\n[](https://badge.fury.io/py/usf-p1-chatbot-sdk)\r\n[](https://pypi.org/project/usf-p1-chatbot-sdk/)\r\n\r\n## Features\r\n\r\n- \u2705 **Complete API Coverage** - All 33 endpoints wrapped\r\n- \u2705 **Easy to Use** - Simple, intuitive interface\r\n- \u2705 **Type Hints** - Full type annotations for IDE support\r\n- \u2705 **Async Support** - Streaming chat responses\r\n- \u2705 **Production Ready** - Proper error handling and timeouts\r\n- \u2705 **Well Documented** - Comprehensive examples and API reference\r\n\r\n## Installation\r\n\r\n```bash\r\npip install usf-p1-chatbot-sdk\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\nfrom usf_p1_chatbot_sdk import ChatbotClient\r\n\r\n# Initialize client with your API key and base URL\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key-here\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n)\r\n\r\n# Check API health\r\nhealth = client.health_check()\r\nprint(f\"API Status: {health['status']}\")\r\n\r\n# List collections\r\ncollections = client.list_collections()\r\nprint(f\"Collections: {collections}\")\r\n\r\n# Create a new collection\r\ncollection = client.create_collection(\r\n collection_name=\"my_documents\",\r\n description=\"My document collection\"\r\n)\r\ncollection_id = collection[\"collection_info\"][\"collection_id\"]\r\n\r\n# Register a patient\r\npatient = client.register_patient(\r\n collection_id=collection_id,\r\n patient_name=\"John Doe\",\r\n age=35,\r\n gender=\"M\"\r\n)\r\n\r\n# Ingest documents from URLs\r\nresult = client.ingest_urls(\r\n collection_id=collection_id,\r\n urls=[\"https://example.com/document.html\"],\r\n patient_user_name=\"John Doe\"\r\n)\r\nprint(f\"Ingestion started: {result['task_id']}\")\r\n\r\n# Or ingest PDF files\r\nresult = client.ingest_pdfs(\r\n collection_id=collection_id,\r\n files=[\"report1.pdf\", \"report2.pdf\", \"report3.pdf\"],\r\n patient_user_name=\"John Doe\"\r\n)\r\nprint(f\"PDF ingestion started: {result['request_id']}\")\r\n\r\n# Chat with the AI\r\nresponse = client.chat(\r\n collection_id=collection_id,\r\n patient_user_name=\"John Doe\",\r\n message=\"What information do you have about me?\"\r\n)\r\nprint(f\"AI Response: {response['response']}\")\r\n\r\n# Close the client\r\nclient.close()\r\n```\r\n\r\n## API Reference\r\n\r\n### Initialization\r\n\r\n```python\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key\", # Required\r\n base_url=\"https://your-api-endpoint.com\", # Required\r\n timeout=300.0 # Optional, request timeout in seconds\r\n)\r\n```\r\n\r\n### All 33 Available Methods\r\n\r\n#### Health Check (1 method)\r\n- `client.health_check()` - Check API health\r\n\r\n#### Collections (3 methods)\r\n- `client.create_collection(name, description)` - Create a new collection\r\n- `client.list_collections()` - List all collections\r\n- `client.delete_collection(collection_id)` - Delete a collection\r\n\r\n#### Patients (7 methods)\r\n- `client.register_patient(collection_id, patient_name, **data)` - Register a patient\r\n- `client.validate_patient(collection_id, patient_name)` - Validate patient exists\r\n- `client.get_patient(patient_name)` - Get patient information\r\n- `client.delete_patient(patient_name)` - Delete a patient\r\n- `client.list_patients()` - List all patients\r\n- `client.list_patients_by_collection(collection_id)` - List patients in a collection\r\n- `client.get_patient_data_summary(patient_name)` - Get patient data summary\r\n\r\n#### Data Ingestion (3 methods)\r\n- `client.ingest_pdfs(collection_id, files, patient_name)` - Ingest PDF files\r\n- `client.ingest_urls(collection_id, urls, patient_name)` - Ingest from URLs\r\n- `client.ingest_default(collection_id, files, urls, patient_name)` - Ingest files and/or URLs\r\n\r\n#### Ingestion Status (4 methods)\r\n- `client.get_ingestion_progress(request_id)` - Get ingestion progress\r\n- `client.list_ingestion_requests()` - List recent ingestion requests\r\n- `client.get_ingestion_status()` - Get ingestion service status\r\n- `client.cancel_ingestion_request(request_id)` - Cancel an ingestion request\r\n\r\n#### Chat (2 methods)\r\n- `client.chat(collection_id, patient_name, message, ...)` - Send a chat message\r\n- `client.chat_stream(collection_id, patient_name, message, ...)` - Stream chat response (async)\r\n\r\n#### Logging (8 methods)\r\n- `client.get_log_collections()` - List log collections\r\n- `client.get_log_stats()` - Get log statistics\r\n- `client.get_recent_logs(limit)` - Get recent logs\r\n- `client.get_logs_from_collection(collection_name, limit)` - Get logs from a collection\r\n- `client.clear_logs_collection(collection_name)` - Clear a log collection\r\n- `client.get_patient_logs(collection_id, patient_name, minutes)` - Get patient logs\r\n- `client.get_patient_logs_from_collection(...)` - Get patient logs from specific collection\r\n- `client.get_logs_by_collection_and_log_collection(...)` - Get logs by collection\r\n\r\n#### File Operations (5 methods)\r\n- `client.get_db_files()` - Get all database files\r\n- `client.get_db_files_by_collection(collection_id)` - Get DB files by collection\r\n- `client.get_s3_files()` - Get all S3 files\r\n- `client.get_s3_files_by_collection(collection_id)` - Get S3 files by collection\r\n- `client.delete_document(document_uuid)` - Delete a document\r\n\r\n## Advanced Usage\r\n\r\n### Context Manager\r\n\r\n```python\r\nwith ChatbotClient(\r\n api_key=\"your-api-key\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n) as client:\r\n collections = client.list_collections()\r\n # Client automatically closed\r\n```\r\n\r\n### Async Streaming Chat\r\n\r\n```python\r\nimport asyncio\r\n\r\nasync def stream_chat():\r\n client = ChatbotClient(\r\n api_key=\"your-api-key\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n )\r\n \r\n async for chunk in client.chat_stream(\r\n collection_id=\"col-123\",\r\n patient_user_name=\"John Doe\",\r\n message=\"Tell me about my documents\"\r\n ):\r\n print(chunk, end=\"\", flush=True)\r\n \r\n await client.aclose()\r\n\r\nasyncio.run(stream_chat())\r\n```\r\n\r\n### Error Handling\r\n\r\n```python\r\nfrom usf_p1_chatbot_sdk import ChatbotClient, ChatbotClientError\r\n\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n)\r\n\r\ntry:\r\n response = client.chat(\r\n collection_id=\"col-123\",\r\n patient_user_name=\"John Doe\",\r\n message=\"Hello!\"\r\n )\r\nexcept ChatbotClientError as e:\r\n print(f\"API Error: {e}\")\r\nexcept Exception as e:\r\n print(f\"Unexpected error: {e}\")\r\nfinally:\r\n client.close()\r\n```\r\n\r\n### Custom Timeout\r\n\r\n```python\r\n# Set custom timeout for long-running operations\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key\",\r\n base_url=\"https://your-api-endpoint.com\",\r\n timeout=600.0 # 10 minutes\r\n)\r\n```\r\n\r\n### PDF Ingestion with Progress Monitoring\r\n\r\n```python\r\nfrom usf_p1_chatbot_sdk import ChatbotClient\r\nimport time\r\n\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n)\r\n\r\n# Start PDF ingestion\r\nresult = client.ingest_pdfs(\r\n collection_id=\"col-123\",\r\n files=[\"report1.pdf\", \"report2.pdf\", \"report3.pdf\"],\r\n patient_user_name=\"John_Doe\" # Use underscores in names\r\n)\r\n\r\nrequest_id = result.get('request_id') or result.get('task_id')\r\nprint(f\"\u2705 Ingestion started: {request_id}\")\r\n\r\n# Monitor progress\r\nprint(\"\u23f3 Monitoring ingestion progress...\")\r\nwhile True:\r\n progress = client.get_ingestion_progress(request_id)\r\n status = progress['status']\r\n percentage = progress.get('progress_percentage', 0)\r\n \r\n print(f\" Status: {status} ({percentage}%)\")\r\n \r\n if status in ['completed', 'failed']:\r\n print(f\"\u2705 Ingestion {status}\")\r\n break\r\n \r\n time.sleep(5) # Check every 5 seconds\r\n\r\nclient.close()\r\n```\r\n\r\n## Complete Example\r\n\r\n```python\r\nfrom usf_p1_chatbot_sdk import ChatbotClient\r\nimport time\r\n\r\n# Initialize\r\nclient = ChatbotClient(\r\n api_key=\"your-api-key-here\",\r\n base_url=\"https://your-api-endpoint.com\"\r\n)\r\n\r\ntry:\r\n # 1. Health check\r\n health = client.health_check()\r\n print(f\"\u2705 API Status: {health['status']}\")\r\n \r\n # 2. Create collection\r\n collection = client.create_collection(\"medical_reports\", \"Patient medical reports\")\r\n cid = collection[\"collection_info\"][\"collection_id\"]\r\n print(f\"\u2705 Created collection: {cid}\")\r\n \r\n # 3. Register patient (use underscores in names)\r\n patient = client.register_patient(\r\n collection_id=cid,\r\n patient_name=\"John_Doe\",\r\n age=35,\r\n gender=\"M\",\r\n blood_type=\"O+\"\r\n )\r\n print(\"\u2705 Registered patient: John_Doe\")\r\n \r\n # 4. Ingest PDF documents\r\n result = client.ingest_pdfs(\r\n collection_id=cid,\r\n files=[\"report1.pdf\", \"report2.pdf\", \"report3.pdf\"],\r\n patient_user_name=\"John_Doe\"\r\n )\r\n request_id = result.get('request_id') or result.get('task_id')\r\n print(f\"\u2705 Started PDF ingestion: {request_id}\")\r\n \r\n # 5. Monitor ingestion progress\r\n print(\"\u23f3 Monitoring ingestion...\")\r\n while True:\r\n progress = client.get_ingestion_progress(request_id)\r\n status = progress['status']\r\n percentage = progress.get('progress_percentage', 0)\r\n \r\n print(f\" Status: {status} ({percentage}%)\")\r\n \r\n if status in ['completed', 'failed']:\r\n print(f\"\u2705 Ingestion {status}\")\r\n break\r\n \r\n time.sleep(5)\r\n \r\n # 6. Chat with AI about the documents\r\n response = client.chat(\r\n collection_id=cid,\r\n patient_user_name=\"John_Doe\",\r\n message=\"Summarize my medical reports and highlight any concerns.\"\r\n )\r\n print(f\"\\n\ud83d\udcac AI Response:\\n{response['response']}\")\r\n \r\n # 7. Get patient logs\r\n logs = client.get_patient_logs(\r\n collection_id=cid,\r\n patient_name=\"John_Doe\",\r\n minutes=60\r\n )\r\n print(f\"\\n\u2705 Found {len(logs.get('logs', []))} log entries\")\r\n \r\n # 8. Get patient data summary\r\n summary = client.get_patient_data_summary(\"John_Doe\")\r\n print(f\"\u2705 Patient has {summary.get('document_count', 0)} documents\")\r\n \r\nexcept Exception as e:\r\n print(f\"\u274c Error: {e}\")\r\nfinally:\r\n client.close()\r\n print(\"\u2705 Client closed\")\r\n```\r\n\r\n## API Documentation\r\n\r\nContact your API provider for detailed API documentation.\r\n\r\n## Requirements\r\n\r\n- Python 3.9+\r\n- httpx >= 0.24.0\r\n",
"bugtrack_url": null,
"license": null,
"summary": "Python SDK for USF P1 Chatbot API - (Fixed PDF ingestion bug)",
"version": "1.0.1",
"project_urls": {
"Issues": "https://github.com/ultrasafe/usf-p1-chatbot-sdk/issues",
"Repository": "https://github.com/ultrasafe/usf-p1-chatbot-sdk"
},
"split_keywords": [
"chatbot",
" api",
" sdk",
" client",
" usf",
" civie"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b8551d8fe39dbea59baac29486118a75db5392b28e4ee7adb8fc7e2cb4abbbef",
"md5": "0986ed9ebc9df5c6c160d9a46899e43a",
"sha256": "21d4d27ae1e1af7185ac0d128801c59aed9b46f99a1c0927a2b7bd3108c990c5"
},
"downloads": -1,
"filename": "usf_p1_chatbot_sdk-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0986ed9ebc9df5c6c160d9a46899e43a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 9222,
"upload_time": "2025-10-14T11:37:50",
"upload_time_iso_8601": "2025-10-14T11:37:50.119605Z",
"url": "https://files.pythonhosted.org/packages/b8/55/1d8fe39dbea59baac29486118a75db5392b28e4ee7adb8fc7e2cb4abbbef/usf_p1_chatbot_sdk-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b2b30df2e412a633f7f0fdf4e08a534907c086d20c0bfa6ea4e14d44291664ea",
"md5": "b8ae9e40147f9e564a17bf6c74814663",
"sha256": "729e4b23aee43d278f5d2cd5ebc1b40de7f86bf9da5fb8824a47d2200f83ef49"
},
"downloads": -1,
"filename": "usf_p1_chatbot_sdk-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "b8ae9e40147f9e564a17bf6c74814663",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 12048,
"upload_time": "2025-10-14T11:37:51",
"upload_time_iso_8601": "2025-10-14T11:37:51.520360Z",
"url": "https://files.pythonhosted.org/packages/b2/b3/0df2e412a633f7f0fdf4e08a534907c086d20c0bfa6ea4e14d44291664ea/usf_p1_chatbot_sdk-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-14 11:37:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ultrasafe",
"github_project": "usf-p1-chatbot-sdk",
"github_not_found": true,
"lcname": "usf-p1-chatbot-sdk"
}