PyscoutAI / client_example.py
PyScoutAI's picture
Upload 15 files
ead2510 verified
import os
import json
import time
from typing import Dict, List, Any
from rich import print
from rich.console import Console
from rich.table import Table
from rich.panel import Panel
from deepinfra_client import DeepInfraClient
console = Console()
def print_proxy_status(client):
"""Print the proxy and IP rotation status"""
status = []
if client.use_proxy_rotation and client.proxy_finder:
proxy_counts = {k: len(v) for k, v in client.proxy_finder.proxy_dict.items()}
total_proxies = sum(proxy_counts.values())
status.append(f"Proxy rotation: [green]Enabled[/green] ({total_proxies} proxies)")
# Show available proxies per type
table = Table(title="Available Proxies")
table.add_column("Type", style="cyan")
table.add_column("Count", style="green")
for proxy_type, count in proxy_counts.items():
if count > 0:
table.add_row(proxy_type, str(count))
console.print(table)
else:
status.append("Proxy rotation: [red]Disabled[/red]")
if client.use_ip_rotation and client.ip_rotator:
status.append(f"IP rotation: [green]Enabled[/green] (AWS API Gateway - {len(client.ip_rotator.gateways)} regions)")
else:
status.append("IP rotation: [red]Disabled[/red]")
if client.use_random_user_agent:
status.append("User-Agent rotation: [green]Enabled[/green]")
else:
status.append("User-Agent rotation: [red]Disabled[/red]")
console.print(Panel("\n".join(status), title="Client Configuration", border_style="blue"))
def chat_with_model():
"""Demonstrate interactive chat with DeepInfra models"""
# Initialize the client with all rotation features enabled
client = DeepInfraClient(
api_key=os.getenv("DEEPINFRA_API_KEY"), # Set this environment variable if you have an API key
use_random_user_agent=True,
use_ip_rotation=True,
use_proxy_rotation=True,
proxy_types=['http', 'socks5'],
model="meta-llama/Llama-3.3-70B-Instruct-Turbo" # Use a good default model
)
print_proxy_status(client)
# Show available models
console.print("\n[bold cyan]Fetching available models...[/bold cyan]")
try:
models_response = client.models.list()
model_table = Table(title="Available Models")
model_table.add_column("Model", style="green")
for model in models_response["data"]:
model_table.add_row(model["id"])
console.print(model_table)
except Exception as e:
console.print(f"[red]Error fetching models: {str(e)}[/red]")
# Start interactive chat
console.print("\n[bold green]Starting interactive chat (type 'quit' to exit)[/bold green]")
console.print("[yellow]Note: Every 3 messages, the client will rotate IP and proxy[/yellow]\n")
messages = [{"role": "system", "content": "You are a helpful assistant."}]
message_count = 0
while True:
user_input = input("\nYou: ")
if user_input.lower() in ["quit", "exit", "bye"]:
break
messages.append({"role": "user", "content": user_input})
# Rotate IP and proxy every 3 messages
message_count += 1
if message_count % 3 == 0:
console.print("[yellow]Rotating IP and proxy...[/yellow]")
client.refresh_proxies()
client.refresh_session()
# Make the API call
console.print("\n[cyan]Waiting for response...[/cyan]")
start_time = time.time()
try:
response = client.chat.create(
messages=messages,
temperature=0.7,
max_tokens=1024
)
elapsed = time.time() - start_time
assistant_message = response["choices"][0]["message"]["content"]
# Add the assistant's message to our history
messages.append({"role": "assistant", "content": assistant_message})
console.print(f"\n[bold green]Assistant[/bold green] [dim]({elapsed:.2f}s)[/dim]:")
console.print(assistant_message)
except Exception as e:
console.print(f"[bold red]Error: {str(e)}[/bold red]")
console.print("[yellow]Refreshing session and trying again...[/yellow]")
client.refresh_session()
def stream_example():
"""Demonstrate streaming responses"""
client = DeepInfraClient(
use_random_user_agent=True,
use_ip_rotation=True,
use_proxy_rotation=True
)
print_proxy_status(client)
prompt = "Write a short story about a robot that learns to feel emotions."
console.print(f"\n[bold cyan]Prompt:[/bold cyan] {prompt}")
console.print("\n[bold green]Streaming response:[/bold green]")
try:
response_stream = client.completions.create(
prompt=prompt,
temperature=0.8,
max_tokens=1024,
stream=True
)
full_response = ""
for chunk in response_stream:
if 'choices' in chunk and len(chunk['choices']) > 0:
delta = chunk['choices'][0].get('delta', {})
if 'content' in delta:
content = delta['content']
print(content, end='', flush=True)
full_response += content
print("\n")
except Exception as e:
console.print(f"\n[bold red]Error: {str(e)}[/bold red]")
if __name__ == "__main__":
console.print(Panel.fit(
"[bold green]DeepInfra Client Example[/bold green]\n"
"This example demonstrates the enhanced client with proxy and IP rotation",
border_style="yellow"
))
while True:
console.print("\n[bold cyan]Choose an option:[/bold cyan]")
console.print("1. Interactive Chat")
console.print("2. Streaming Example")
console.print("3. Exit")
choice = input("\nEnter your choice (1-3): ")
if choice == "1":
chat_with_model()
elif choice == "2":
stream_example()
elif choice == "3":
console.print("[yellow]Exiting...[/yellow]")
break
else:
console.print("[red]Invalid choice. Please try again.[/red]")