|
|
|
|
|
""" |
|
|
Test script for OpenRouter API connection with z-ai/glm-4.5-air:free model. |
|
|
Tests basic functionality and tool calling capabilities. |
|
|
""" |
|
|
|
|
|
import json |
|
|
import os |
|
|
import sys |
|
|
import logging |
|
|
from dotenv import load_dotenv |
|
|
from openai import OpenAI |
|
|
|
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
MODEL_NAME = "z-ai/glm-4.5-air:free" |
|
|
|
|
|
def test_basic_connection(): |
|
|
"""Test basic API connection with a simple prompt.""" |
|
|
print("=" * 60) |
|
|
print("Testing Basic OpenRouter Connection") |
|
|
print("=" * 60) |
|
|
|
|
|
try: |
|
|
|
|
|
openrouter_api_key = os.getenv("OPENROUTER_API_KEY") |
|
|
if not openrouter_api_key: |
|
|
print("β OPENROUTER_API_KEY not found in environment variables") |
|
|
return False |
|
|
|
|
|
client = OpenAI( |
|
|
base_url="https://openrouter.ai/api/v1", |
|
|
api_key=openrouter_api_key |
|
|
) |
|
|
|
|
|
|
|
|
messages = [ |
|
|
{"role": "user", "content": "Hello! Please respond with a simple greeting and your name."} |
|
|
] |
|
|
|
|
|
print("Sending test request to OpenRouter API...") |
|
|
response = client.chat.completions.create( |
|
|
model=MODEL_NAME, |
|
|
messages=messages |
|
|
) |
|
|
|
|
|
|
|
|
content = response.choices[0].message.content |
|
|
print(f"β
SUCCESS: API connection works!") |
|
|
print(f"Model: {response.model}") |
|
|
print(f"Response: {content}") |
|
|
print(f"Usage: {response.usage}") |
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β FAILED: Basic connection test failed") |
|
|
print(f"Error: {str(e)}") |
|
|
return False |
|
|
|
|
|
def test_tool_calling(): |
|
|
"""Test tool calling functionality.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Testing Tool Calling Functionality") |
|
|
print("=" * 60) |
|
|
|
|
|
try: |
|
|
|
|
|
client = OpenAI( |
|
|
base_url="https://openrouter.ai/api/v1", |
|
|
api_key=os.getenv("OPENROUTER_API_KEY") |
|
|
) |
|
|
|
|
|
|
|
|
tools = [ |
|
|
{ |
|
|
"type": "function", |
|
|
"function": { |
|
|
"name": "get_weather", |
|
|
"description": "Get current weather information", |
|
|
"parameters": { |
|
|
"type": "object", |
|
|
"properties": { |
|
|
"location": { |
|
|
"type": "string", |
|
|
"description": "The city name for weather information" |
|
|
} |
|
|
}, |
|
|
"required": ["location"] |
|
|
} |
|
|
} |
|
|
} |
|
|
] |
|
|
|
|
|
|
|
|
messages = [ |
|
|
{"role": "user", "content": "What's the weather like in New York?"} |
|
|
] |
|
|
|
|
|
print("Sending test request with tool calling capability...") |
|
|
response = client.chat.completions.create( |
|
|
model=MODEL_NAME, |
|
|
messages=messages, |
|
|
tools=tools |
|
|
) |
|
|
|
|
|
|
|
|
finish_reason = response.choices[0].finish_reason |
|
|
message = response.choices[0].message |
|
|
|
|
|
print(f"β
SUCCESS: Tool calling test completed!") |
|
|
print(f"Model: {response.model}") |
|
|
print(f"Finish Reason: {finish_reason}") |
|
|
|
|
|
if finish_reason == "tool_calls": |
|
|
print("π§ Tool calls detected:") |
|
|
if hasattr(message, 'tool_calls') and message.tool_calls: |
|
|
for tool_call in message.tool_calls: |
|
|
print(f" - Tool: {tool_call.function.name}") |
|
|
print(f" - Arguments: {tool_call.function.arguments}") |
|
|
else: |
|
|
print(" - No tool calls found in response") |
|
|
else: |
|
|
print(f" - Response content: {message.content}") |
|
|
|
|
|
print(f"Usage: {response.usage}") |
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β FAILED: Tool calling test failed") |
|
|
print(f"Error: {str(e)}") |
|
|
return False |
|
|
|
|
|
def test_error_handling(): |
|
|
"""Test error handling with invalid requests.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Testing Error Handling") |
|
|
print("=" * 60) |
|
|
|
|
|
try: |
|
|
|
|
|
client = OpenAI( |
|
|
base_url="https://openrouter.ai/api/v1", |
|
|
api_key=os.getenv("OPENROUTER_API_KEY") |
|
|
) |
|
|
|
|
|
|
|
|
print("Testing empty messages...") |
|
|
try: |
|
|
response = client.chat.completions.create( |
|
|
model="z-ai/glm-4.5-air:free", |
|
|
messages=[] |
|
|
) |
|
|
print("β οΈ Unexpected: Empty messages request succeeded") |
|
|
except Exception as e: |
|
|
print(f"β
Expected error caught: {str(e)}") |
|
|
|
|
|
|
|
|
print("Testing invalid model...") |
|
|
try: |
|
|
response = client.chat.completions.create( |
|
|
model="invalid-model-name", |
|
|
messages=[{"role": "user", "content": "Hello"}] |
|
|
) |
|
|
print("β οΈ Unexpected: Invalid model request succeeded") |
|
|
except Exception as e: |
|
|
print(f"β
Expected error caught: {str(e)}") |
|
|
|
|
|
print("β
SUCCESS: Error handling tests completed") |
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β FAILED: Error handling test failed") |
|
|
print(f"Error: {str(e)}") |
|
|
return False |
|
|
|
|
|
def test_conversation_flow(): |
|
|
"""Test a multi-turn conversation.""" |
|
|
print("\n" + "=" * 60) |
|
|
print("Testing Multi-turn Conversation") |
|
|
print("=" * 60) |
|
|
|
|
|
try: |
|
|
|
|
|
client = OpenAI( |
|
|
base_url="https://openrouter.ai/api/v1", |
|
|
api_key=os.getenv("OPENROUTER_API_KEY") |
|
|
) |
|
|
|
|
|
|
|
|
messages = [ |
|
|
{"role": "user", "content": "Hello! Can you help me understand what AI is?"} |
|
|
] |
|
|
|
|
|
print("Starting conversation flow...") |
|
|
|
|
|
|
|
|
response = client.chat.completions.create( |
|
|
model=MODEL_NAME, |
|
|
messages=messages |
|
|
) |
|
|
|
|
|
content = response.choices[0].message.content |
|
|
print(f"Assistant: {content}") |
|
|
|
|
|
|
|
|
messages.append({"role": "assistant", "content": content}) |
|
|
messages.append({"role": "user", "content": "Can you give me a simple example?"}) |
|
|
|
|
|
response = client.chat.completions.create( |
|
|
model=MODEL_NAME, |
|
|
messages=messages |
|
|
) |
|
|
|
|
|
content = response.choices[0].message.content |
|
|
print(f"Assistant: {content}") |
|
|
|
|
|
print("β
SUCCESS: Multi-turn conversation completed") |
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β FAILED: Conversation flow test failed") |
|
|
print(f"Error: {str(e)}") |
|
|
return False |
|
|
|
|
|
def main(): |
|
|
"""Main test function.""" |
|
|
print("π Starting OpenRouter API Connection Tests") |
|
|
print(f"Model: {MODEL_NAME}") |
|
|
print(f"API Base URL: https://openrouter.ai/api/v1") |
|
|
|
|
|
|
|
|
tests = [ |
|
|
("Basic Connection", test_basic_connection), |
|
|
("Tool Calling", test_tool_calling), |
|
|
("Error Handling", test_error_handling), |
|
|
("Conversation Flow", test_conversation_flow) |
|
|
] |
|
|
|
|
|
results = [] |
|
|
for test_name, test_func in tests: |
|
|
try: |
|
|
result = test_func() |
|
|
results.append((test_name, result)) |
|
|
except Exception as e: |
|
|
print(f"β CRITICAL ERROR in {test_name}: {str(e)}") |
|
|
results.append((test_name, False)) |
|
|
|
|
|
|
|
|
print("\n" + "=" * 60) |
|
|
print("TEST SUMMARY") |
|
|
print("=" * 60) |
|
|
|
|
|
passed = 0 |
|
|
total = len(results) |
|
|
|
|
|
for test_name, result in results: |
|
|
status = "β
PASSED" if result else "β FAILED" |
|
|
print(f"{status}: {test_name}") |
|
|
if result: |
|
|
passed += 1 |
|
|
|
|
|
print(f"\nOverall: {passed}/{total} tests passed") |
|
|
|
|
|
if passed == total: |
|
|
print("π All tests passed! OpenRouter integration is working correctly.") |
|
|
return 0 |
|
|
else: |
|
|
print("β οΈ Some tests failed. Please check the configuration and API credentials.") |
|
|
return 1 |
|
|
|
|
|
if __name__ == "__main__": |
|
|
sys.exit(main()) |