Download client_example.py from PyScoutAI/PyscoutAI: direct link, hf CLI and curl.
- Browser
- Download file 6.65 kB
-
https://huggingface.co/spaces/PyScoutAI/PyscoutAI/resolve/main/client_example.py
- Command line
-
hf download hf://spaces/PyScoutAI/PyscoutAI/client_example.py
-
curl -L -o client_example.py https://huggingface.co/spaces/PyScoutAI/PyscoutAI/resolve/main/client_example.py
6.65 kB
| 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]") | |