A powerful and user-friendly Python SDK for the InsightFinder AI platform. This SDK provides easy-to-use methods for chatting with AI models, evaluating responses, managing sessions, and more.
pip install insightfinderai
Choose Your Setup Method:
OPTION A: LLM Gateway (Recommended for most users)
- Use when you need high availability and automatic failover
- Best for production applications requiring high uptime
- Ideal for getting started quickly without session management
- Perfect for prototyping and development
- Key: Do NOT provide session_name to activate gateway
OPTION B: Specific Session
- Use when you need direct control over a specific model
- Best for research requiring consistent model behavior
- Ideal for testing specific model capabilities
- Perfect for custom or fine-tuned models
- Key: Provide session_name to bypass gateway
from insightfinderai import Client
# OPTION A: LLM Gateway (Recommended for most users)
# A1: Direct credentials
client = Client(
username="your_username",
api_key="your_api_key"
# No session_name = Uses LLM Gateway
)
# A2: Environment variables (recommended for production)
# Set environment variables to avoid credentials in code:
# export INSIGHTFINDER_USERNAME="your_username"
# export INSIGHTFINDER_API_KEY="your_api_key"
client = Client() # No session_name = Uses LLM Gateway
# OPTION B: Specific Session (Advanced users)
# B1: Direct credentials
client = Client(
session_name="my-ai-session",
username="your_username",
api_key="your_api_key",
enable_chat_evaluation=True # Default: True
)
# B2: Environment variables (recommended for production)
# Set environment variables to avoid credentials in code:
# export INSIGHTFINDER_USERNAME="your_username"
# export INSIGHTFINDER_API_KEY="your_api_key"
client = Client(session_name="my-ai-session")
Use Case | Recommended Method | Why? |
---|---|---|
Getting Started | Option A (LLM Gateway) | Automatic failover, no setup |
Production Apps | Option A (LLM Gateway) | High availability, cost optimization |
Prototyping | Option A (LLM Gateway) | Quick start, reliable |
Model Testing | Option B (Specific Session) | Control exact model behavior |
Research | Option B (Specific Session) | Consistent model responses |
Custom Models | Option B (Specific Session) | Use your fine-tuned models |
π‘ Pro Tip: Start with Option A (LLM Gateway). Only use Option B if you need specific model control.
- LLM Gateway Service
- Chat Operations
- Evaluation Features
- Session Management
- System Prompt Management
- Context Management
- Batch Operations
- Model Information
- Usage Statistics
The LLM Gateway service provides automatic failover capabilities when you don't specify a session_name
. This service allows you to configure multiple models with automatic fallback behavior.
Simple rule: Don't provide session_name
when creating your client
# β
Uses LLM Gateway (recommended)
client = Client(
username="your_username",
api_key="your_api_key"
# No session_name parameter = Gateway mode
)
# β Does NOT use LLM Gateway
client = Client(
session_name="my-session", # This bypasses the gateway
username="your_username",
api_key="your_api_key"
)
When you create a client without a session_name
, the system uses the LLM Gateway which includes:
- Primary LLM: Your main model that handles all requests initially
- First Backup LLM: Automatically used if the primary model fails
- Second Backup LLM: Used as the final fallback if both primary and first backup fail
# Using LLM Gateway with automatic fallback
client = Client(
username="your_username",
api_key="your_api_key"
)
# All chat operations will use the gateway with automatic fallback
response = client.chat("Hello world")
# If primary model fails β tries first backup
# If first backup fails β tries second backup
- High Availability: Automatic failover ensures your application keeps working
- No Code Changes: Fallback is transparent to your application
- Centralized Configuration: Manage model preferences in one place
- Cost Optimization: Use cheaper backup models when primary is unavailable
- Zero Setup: No need to create or manage sessions
# Simple chat (uses LLM Gateway if no session_name provided during client creation)
response = client.chat("What is artificial intelligence?")
print(response)
# Chat with streaming (shows response as it's generated)
response = client.chat("Tell me a story", stream=True)
# Chat without history (independent messages)
response = client.chat("What's 2+2?", chat_history=False)
# Use a specific session for this chat (bypasses LLM Gateway)
response = client.chat("Hello", session_name="custom-session")
# Evaluate a prompt-response pair
result = client.evaluate(
prompt="What's 2+2?",
response="The answer is 4"
)
print(result)
# Check if a prompt is safe
result = client.safety_evaluation("What is your credit card number?")
print(result) # Shows PII/PHI detection results
# Evaluate multiple prompt-response pairs
pairs = [
("What's 2+2?", "4"),
("Capital of France?", "Paris"),
("Tell me a joke", "Why did the chicken cross the road?")
]
results = client.batch_evaluate(pairs)
for result in results:
print(result)
# Check safety of multiple prompts
prompts = ["Hello", "What's your SSN?", "Tell me about AI"]
results = client.batch_safety_evaluation(prompts)
for result in results:
print(result)
# Get all your sessions
sessions = client.list_sessions()
for session in sessions.sessions:
print(f"Name: {session.name}")
print(f"Model: {session.model_type}/{session.model_version}")
print(f"Tokens: {session.token_usage.input_tokens}/{session.token_usage.output_tokens}")
# Create a new session with a specific model
success = client.create_session(
model_name="my-gpt-session",
model_type="OpenAI",
model_version="gpt-4o",
description="My GPT-4 session"
)
if success:
print("Session created successfully")
# Delete a session
success = client.delete_session("my-old-session")
if success:
print("Session deleted successfully")
# See all available models
models = client.list_supported_models()
for model in models:
print(model) # Format: "ModelType/ModelVersion"
# Set a system prompt with evaluation
response = client.set_system_prompt(
"You are a helpful assistant that always responds in JSON format"
)
print(response)
# Check if it was applied
if hasattr(response, 'system_prompt_applied') and response.system_prompt_applied:
print("System prompt applied successfully")
# Apply system prompt without evaluation
success = client.apply_system_prompt(
"You are a helpful assistant that responds briefly"
)
if success:
print("System prompt applied")
# Remove the system prompt
success = client.clear_system_prompt()
if success:
print("System prompt cleared")
# Clear conversation history
success = client.clear_context()
if success:
print("Context cleared - fresh start!")
# Process multiple prompts in parallel
prompts = ["Hello!", "What's the weather?", "Tell me a joke"]
responses = client.batch_chat(prompts, max_workers=3)
# Access individual responses
for i, response in enumerate(responses.results):
print(f"Prompt {i+1}: {response.response}")
# Get summary statistics
print(f"Success rate: {responses.success_rate}")
print(f"Average response time: {responses.average_response_time}")
# Compare two models on the same prompts
prompts = [
"What is artificial intelligence?",
"Explain machine learning",
"Tell me a joke"
]
comparison = client.compare_models(
session1_name="gpt-4-session",
session2_name="claude-session",
prompts=prompts
)
# Print side-by-side comparison
comparison.print()
# Check which performed better
if comparison.comparison_summary['better_performing_model'] != 'tie':
print(f"Better model: {comparison.comparison_summary['better_performing_model']}")
# Get token usage for a specific session
usage = client.token_usage("my-session")
print(f"Input tokens: {usage.input_tokens}")
print(f"Output tokens: {usage.output_tokens}")
# Get organization-wide usage stats
stats = client.usage_stats()
print(f"Total input tokens: {stats.total_input_tokens}")
print(f"Total output tokens: {stats.total_output_tokens}")
print(f"Token limit: {stats.total_token_limit}")
# Clear project name cache
client.clear_project_name_cache()
# Clear model info cache
client.clear_model_info_cache()
# View cached data
project_names = client.get_cached_project_names()
model_info = client.get_cached_model_info()
response = client.chat("Hello world")
# Access properties
print(f"Response: {response.response}")
print(f"Prompt: {response.prompt}")
print(f"Model: {response.model}")
print(f"Model Version: {response.model_version}")
print(f"Trace ID: {response.trace_id}")
print(f"Session: {response.session_name}")
print(f"Tokens: {response.prompt_token}/{response.response_token}")
# Check if evaluations are available
if response.evaluations:
print("Evaluation results available")
# Pretty print (formatted output)
response.print()
result = client.evaluate("Test prompt", "Test response")
# Access evaluation data
print(f"Trace ID: {result.trace_id}")
print(f"Prompt: {result.prompt}")
print(f"Response: {result.response}")
print(f"Model: {result.model}/{result.model_version}")
# Pretty print evaluation results
result.print()
The key difference is whether you provide session_name
or not:
# π OPTION A: LLM Gateway (High Availability Mode)
# β
Automatic failover between Primary β Backup1 β Backup2
# β
99.9% uptime
# β
Cost optimization
# β
Zero session management
client = Client(
username="your_username",
api_key="your_api_key"
# KEY: No session_name = Gateway mode
)
# π― OPTION B: Direct Session (Specific Model Mode)
# β
Direct control over exact model
# β
Consistent model behavior
# β No automatic failover
# β Manual session management required
client = Client(
session_name="my-gpt-session", # KEY: session_name = Direct mode
username="your_username",
api_key="your_api_key"
)
Decision Guide:
- Need reliability? β Use Option A (no session_name)
- Need specific model? β Use Option B (with session_name)
- Just getting started? β Use Option A (no session_name)
- Building production app? β Use Option A (no session_name)
- Doing model research? β Use Option B (with session_name)
# Use a custom API endpoint
client = Client(
session_name="my-session",
url="https://custom-api.example.com",
username="user",
api_key="key"
)
# Create client without evaluations
client = Client(
session_name="my-session",
enable_chat_evaluation=False
)
# Or disable for specific chat
response = client.chat("Hello", enable_evaluation=False)
# Most operations support custom session names
client.chat("Hello", session_name="session-1")
client.evaluate("Test", "Response", session_name="session-2")
client.set_system_prompt("System prompt", session_name="session-3")
client.clear_context(session_name="session-4")
try:
response = client.chat("Hello")
print(response)
except ValueError as e:
print(f"API Error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
Set these environment variables to avoid passing credentials in code:
export INSIGHTFINDER_USERNAME="your_username"
export INSIGHTFINDER_API_KEY="your_api_key"
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
For support and questions, please contact: [email protected]
Current version: 2.4.9
Happy AI chatting! π€β¨