usf-p1-chatbot-sdk


Nameusf-p1-chatbot-sdk JSON
Version 1.0.1 PyPI version JSON
download
home_pageNone
SummaryPython SDK for USF P1 Chatbot API - (Fixed PDF ingestion bug)
upload_time2025-10-14 11:37:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
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

[![PyPI version](https://badge.fury.io/py/usf-p1-chatbot-sdk.svg)](https://badge.fury.io/py/usf-p1-chatbot-sdk)
[![Python Versions](https://img.shields.io/pypi/pyversions/usf-p1-chatbot-sdk.svg)](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[![PyPI version](https://badge.fury.io/py/usf-p1-chatbot-sdk.svg)](https://badge.fury.io/py/usf-p1-chatbot-sdk)\r\n[![Python Versions](https://img.shields.io/pypi/pyversions/usf-p1-chatbot-sdk.svg)](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"
}
        
Elapsed time: 2.29879s