Professional Python client for COE AI LLM inference API with text and vision support
Project description
coeai - Professional Python Client for COE AI LLM API
Professional Python client for interacting with high-capacity multimodal Large Language Models hosted on the COE AI GPU cluster.
⚠️ Network Requirement: This API is only accessible from UPES's internal network (UPESNET). Ensure you are connected to UPES Wi-Fi to use this package.
The coeai package provides seamless LLM inference over the UPES local network, supporting both text-to-text and image-to-text operations with advanced streaming capabilities.
🚀 Quick Start
pip install coeai
from coeai import LLMinfer
# Initialize client (requires UPESNET connectivity)
llm = LLMinfer(api_key="your-api-key")
# Generate text
response = llm.generate(
model="tinyllama:latest",
prompt="Explain quantum computing in simple terms",
max_tokens=256
)
print(response)
✨ Features
| Feature | Description |
|---|---|
| Text Generation | Support for all available LLM models |
| Vision Models | Image-to-text with multimodal models |
| Streaming | Real-time response streaming |
| Error Handling | Comprehensive error messages with actionable guidance |
| File Management | Automatic cleanup of file handles |
| Logging | Optional debug logging for troubleshooting |
| Model Discovery | Programmatic model listing |
📋 Available Models
Get the latest list programmatically:
models = llm.list_models()
print(f"Available models: {', '.join(models)}")
Current models (as of February 2026):
Text Models
tinyllama:latest- Compact model for basic taskstinyllama:1.1b- Small efficient modeldeepseek-r1:70b- Advanced reasoning modelgpt-oss:120b- Large general-purpose modelllama4:16x17b- High-quality multimodal modelllama4:128x17b- Largest available model
Vision Models (Image + Text)
llama3.2-vision:11b- Vision-capable modelllama4:16x17b- Recommended for image analysis
Embedding Model
bge-m3:567m- Text embeddings model
📖 Usage Examples
1. Basic Text Generation
from coeai import LLMinfer
llm = LLMinfer(api_key="your-api-key")
response = llm.generate(
model="tinyllama:latest",
prompt="Write a haiku about programming",
max_tokens=100,
temperature=0.8
)
print(response)
2. Streaming Response
response = llm.generate(
model="deepseek-r1:70b",
prompt="Explain the theory of relativity",
max_tokens=512,
stream=True,
print_stream=True # Print as it generates
)
3. Single Image Analysis
response = llm.generate(
model="llama3.2-vision:11b",
inference_type="image-to-text",
files=["/path/to/image.jpg"],
prompt="Describe this image in detail",
max_tokens=512
)
print(response)
4. Multiple Image Comparison
response = llm.generate(
model="llama4:16x17b",
inference_type="image-to-text",
files=["/path/to/image1.jpg", "/path/to/image2.jpg"],
prompt="Compare these images and identify differences",
max_tokens=1024,
temperature=0.7
)
5. Custom Conversation
messages = [
{"role": "system", "content": [{"type": "text", "text": "You are a helpful coding assistant."}]},
{"role": "user", "content": [{"type": "text", "text": "Explain Python decorators"}]}
]
response = llm.generate(
model="gpt-oss:120b",
messages=messages,
max_tokens=512
)
6. Advanced Parameters
response = llm.generate(
model="deepseek-r1:70b",
prompt="Solve: What is 15! (factorial)?",
max_tokens=400,
temperature=0.1, # Lower = more deterministic
top_p=0.9 # Nucleus sampling
)
🔧 API Reference
LLMinfer Class
Initialization
LLMinfer(api_key: str, host: str = "http://10.9.6.165:8000")
| Parameter | Type | Description | Default |
|---|---|---|---|
api_key |
str | Your COE AI API key (required) | - |
host |
str | API server URL | http://10.9.6.165:8000 |
Methods
generate()
generate(
model: str,
inference_type: str = "text-to-text",
prompt: Optional[str] = None,
messages: Optional[List[Dict]] = None,
files: Optional[List[str]] = None,
max_tokens: int = 512,
temperature: float = 0.7,
top_p: float = 1.0,
stream: bool = False,
print_stream: bool = True
) -> Dict
| Parameter | Type | Description |
|---|---|---|
model |
str | Model name (required) |
inference_type |
str | "text-to-text" or "image-to-text" |
prompt |
str | Text prompt (optional if messages provided) |
messages |
list | Custom conversation history |
files |
list | Image file paths for vision models |
max_tokens |
int | Maximum tokens to generate |
temperature |
float | Sampling temperature (0.0–2.0) |
top_p |
float | Nucleus sampling (0.0–1.0) |
stream |
bool | Enable streaming response |
print_stream |
bool | Print stream to console |
Returns: Dictionary with API response
list_models()
list_models() -> List[str]
Returns list of all available model names.
🔑 Getting an API Key
Option 1: Web Dashboard (Recommended)
- Connect to UPESNET (UPES Wi-Fi)
- Visit https://coeai.ddn.upes.ac.in
- Sign in with your UPES credentials
- Generate an API key from the dashboard
Option 2: Email Request
Send an email to hpc-access@ddn.upes.ac.in from your UPES account:
Subject: API Key Request for COE AI LLM Access
Dear COE AI Team,
I am requesting access to the LLM API for my project work.
Project Details:
- Project Name: <Your Project>
- Description: <Brief description>
- Expected Usage: <How you'll use the API>
Name: <Your Name>
Email: <Your UPES Email>
Department: <Your Department>
Thank you!
Allow 2-3 business days for processing.
⚠️ Error Handling
The client provides detailed error messages:
from coeai import LLMinfer, AuthenticationError, ModelNotFoundError, InferenceError
llm = LLMinfer(api_key="your-key")
try:
response = llm.generate(
model="tinyllama:latest",
prompt="Hello world"
)
except AuthenticationError as e:
print(f"Auth failed: {e}")
except ModelNotFoundError as e:
print(f"Model not found: {e}")
except InferenceError as e:
print(f"Inference failed: {e}")
except FileNotFoundError as e:
print(f"Image file missing: {e}")
Common Errors
| Error | Cause | Solution |
|---|---|---|
AuthenticationError |
Invalid API key | Check key or get new one |
ModelNotFoundError |
Model doesn't exist | Use llm.list_models() to see available models |
InferenceError (429) |
Rate limit exceeded | Wait and retry |
FileNotFoundError |
Image path wrong | Verify file exists |
ConnectionError |
Can't reach server | Verify you're on UPESNET, check server status |
🔍 Troubleshooting
Enable Debug Logging
import logging
logging.basicConfig(level=logging.DEBUG)
from coeai import LLMinfer
llm = LLMinfer(api_key="your-key")
Check Package Version
import coeai
print(f"coeai version: {coeai.__version__}")
Test Connection
llm = LLMinfer(api_key="your-key")
try:
models = llm.list_models()
print(f"✅ Connected! Found {len(models)} models")
except Exception as e:
print(f"❌ Connection failed: {e}")
📊 Performance Tips
-
Model Selection
- Use
tinyllamafor quick responses - Use
deepseek-r1:70bfor reasoning tasks - Use
llama4:16x17borllama3.2-visionfor image analysis
- Use
-
Temperature Settings
- 0.1-0.3: Factual/technical content
- 0.7-0.9: Balanced creativity
- 1.0-2.0: Maximum creativity
-
Token Limits
- Set
max_tokensappropriately to balance quality and speed - Typical: 100-256 for summaries, 512-1024 for detailed responses
- Set
-
Streaming
- Enable
stream=Truefor long responses to see progress
- Enable
🔄 Migration from v2.x
Breaking Changes in v4.0.0
⚠️ Important: Requires UPESNET (UPES internal network) connectivity
Update Your Code:
Before (v2.x/v3.x):
llm = LLMinfer(api_key="key", host="http://10.9.6.165:8001") # Wrong port
After (v4.0.0):
# Correct - uses port 8000 (default)
llm = LLMinfer(api_key="key")
# Or explicitly specify
llm = LLMinfer(api_key="key", host="http://10.9.6.165:8000")
New Features in v4.0
- ✅ Automatic file handle cleanup
- ✅ Comprehensive error handling with custom exceptions
- ✅
list_models()method for model discovery - ✅ Debug logging support
- ✅ Relaxed vision model restrictions
- ✅ Version export (
coeai.__version__)
📜 Changelog
v4.0.0 (Current)
- BREAKING: Fixed default port from 8001 to 8000
- REQUIREMENT: Only accessible from UPES internal network (UPESNET)
- API Keys: Get your key from https://coeai.ddn.upes.ac.in
- Added
list_models()method - Improved error handling with custom exceptions
- Fixed file handle leaks
- Added logging support
- Relaxed vision model restrictions
- Added
__version__export - Updated documentation with current models
v2.3.0
- Production release with text-to-text and image-to-text support
- Streaming capabilities
- Multiple image processing
📄 License
Released under the MIT License. See LICENSE for details.
👥 Authors
Konal Puri & Sawai Pratap Khatri
Centre of Excellence: AI (COE AI), HPC Project, UPES
- PyPI: https://pypi.org/project/coeai
- GitHub: https://github.com/pkonal23/COE-AI-HPC-Project
- API Server: http://10.9.6.165:8000 (UPESNET only)
- Get API Key: https://coeai.ddn.upes.ac.in
🤝 Contributing
Contributions are welcome! Please feel free to submit issues or pull requests on GitHub.
📞 Support
For issues or questions:
- Open an issue on GitHub
- Contact:
hpc-access@ddn.upes.ac.in
Made with ❤️ at UPES Centre of Excellence: AI
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file coeai-4.0.0.tar.gz.
File metadata
- Download URL: coeai-4.0.0.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8334c2b783f6d22b2bbd3ca5fb60195956377836965c021f17b869f75da4b809
|
|
| MD5 |
93d9285afc8a309f7bf702c97743609a
|
|
| BLAKE2b-256 |
73f393fcb2f952e068937e6575603ffe45391d1d711ba70fec5dccd745d75de8
|
File details
Details for the file coeai-4.0.0-py3-none-any.whl.
File metadata
- Download URL: coeai-4.0.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45fa324ba3f9a1a5f5435eda3ed67ffb7558531c87070e287d8dee716ad5f269
|
|
| MD5 |
c4f0e4908e2734410857bf9936587e0c
|
|
| BLAKE2b-256 |
dbfda84effe9be83dc7f1507196ae8b18c0229e3967dfcd5e2846744ade251f5
|