9router/gitbook/content/en/integration/other-tools.md
2026-05-11 11:50:24 +07:00

8.8 KiB

Other Tools Integration

9Router is compatible with any tool that supports the OpenAI API format. This guide covers generic integration patterns for various tools and custom applications.

Overview

9Router provides an OpenAI-compatible API endpoint that works with:

  • Custom scripts and applications
  • API clients and testing tools
  • CLI tools and utilities
  • Third-party integrations
  • Development frameworks

Generic Setup Pattern

Any OpenAI-compatible tool can connect to 9Router using these settings:

Local 9Router:

Base URL: http://localhost:20128/v1
API Key: your-api-key-from-dashboard
Model: any 9Router model (cc/*, cx/*, glm/*, etc.)

Cloud 9Router:

Base URL: https://9router.com/v1
API Key: your-api-key-from-dashboard
Model: any 9Router model (cc/*, cx/*, glm/*, etc.)

Available Models

Claude Models (Anthropic)

  • cc/claude-opus-4-5-20251101
  • cc/claude-sonnet-4-20250514
  • cc/claude-haiku-4-20250514

DeepSeek Models

  • cx/deepseek-chat
  • cx/deepseek-reasoner

GLM Models (Zhipu AI)

  • glm/glm-4-plus
  • glm/glm-4-flash

Integration Examples

Python with OpenAI SDK

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key-from-dashboard",
    base_url="http://localhost:20128/v1"
)

response = client.chat.completions.create(
    model="cc/claude-sonnet-4-20250514",
    messages=[
        {"role": "user", "content": "Hello, how are you?"}
    ]
)

print(response.choices[0].message.content)

Node.js with OpenAI SDK

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "your-api-key-from-dashboard",
  baseURL: "http://localhost:20128/v1"
});

const response = await client.chat.completions.create({
  model: "cc/claude-sonnet-4-20250514",
  messages: [
    { role: "user", content: "Hello, how are you?" }
  ]
});

console.log(response.choices[0].message.content);

cURL Command

curl http://localhost:20128/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-api-key-from-dashboard" \
  -d '{
    "model": "cc/claude-sonnet-4-20250514",
    "messages": [
      {"role": "user", "content": "Hello, how are you?"}
    ]
  }'

HTTP Client (Postman, Insomnia)

Request:

POST http://localhost:20128/v1/chat/completions

Headers:

Content-Type: application/json
Authorization: Bearer your-api-key-from-dashboard

Body:

{
  "model": "cc/claude-sonnet-4-20250514",
  "messages": [
    {"role": "user", "content": "Hello, how are you?"}
  ],
  "temperature": 0.7,
  "max_tokens": 1000
}

LangChain Integration

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

llm = ChatOpenAI(
    model_name="cc/claude-sonnet-4-20250514",
    openai_api_key="your-api-key-from-dashboard",
    openai_api_base="http://localhost:20128/v1",
    temperature=0.7
)

messages = [HumanMessage(content="Explain quantum computing")]
response = llm(messages)
print(response.content)

LlamaIndex Integration

from llama_index.llms import OpenAI

llm = OpenAI(
    model="cc/claude-sonnet-4-20250514",
    api_key="your-api-key-from-dashboard",
    api_base="http://localhost:20128/v1"
)

response = llm.complete("What is machine learning?")
print(response.text)

Custom Script Examples

Batch Processing Script

import openai
import json

openai.api_key = "your-api-key-from-dashboard"
openai.api_base = "http://localhost:20128/v1"

def process_batch(prompts, model="cx/deepseek-chat"):
    results = []
    for prompt in prompts:
        response = openai.ChatCompletion.create(
            model=model,
            messages=[{"role": "user", "content": prompt}]
        )
        results.append({
            "prompt": prompt,
            "response": response.choices[0].message.content
        })
    return results

prompts = [
    "Explain AI in one sentence",
    "What is machine learning?",
    "Define neural networks"
]

results = process_batch(prompts)
print(json.dumps(results, indent=2))

Streaming Response Handler

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "your-api-key-from-dashboard",
  baseURL: "http://localhost:20128/v1"
});

async function streamResponse(prompt) {
  const stream = await client.chat.completions.create({
    model: "cc/claude-sonnet-4-20250514",
    messages: [{ role: "user", content: prompt }],
    stream: true
  });

  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content || "";
    process.stdout.write(content);
  }
}

streamResponse("Write a short story about AI");

Multi-Model Comparison

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key-from-dashboard",
    base_url="http://localhost:20128/v1"
)

models = [
    "cc/claude-sonnet-4-20250514",
    "cx/deepseek-chat",
    "glm/glm-4-plus"
]

prompt = "Explain quantum computing in simple terms"

for model in models:
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}]
    )
    print(f"\n=== {model} ===")
    print(response.choices[0].message.content)

Common Integration Patterns

Environment Variables

Store credentials securely:

# .env file
ROUTER_API_KEY=your-api-key-from-dashboard
ROUTER_BASE_URL=http://localhost:20128/v1
ROUTER_MODEL=cc/claude-sonnet-4-20250514
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("ROUTER_API_KEY"),
    base_url=os.getenv("ROUTER_BASE_URL")
)

Error Handling

from openai import OpenAI, OpenAIError

client = OpenAI(
    api_key="your-api-key",
    base_url="http://localhost:20128/v1"
)

try:
    response = client.chat.completions.create(
        model="cc/claude-sonnet-4-20250514",
        messages=[{"role": "user", "content": "Hello"}]
    )
    print(response.choices[0].message.content)
except OpenAIError as e:
    print(f"Error: {e}")

Retry Logic

import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    api_key="your-api-key",
    base_url="http://localhost:20128/v1"
)

def chat_with_retry(prompt, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="cc/claude-sonnet-4-20250514",
                messages=[{"role": "user", "content": prompt}]
            )
            return response.choices[0].message.content
        except RateLimitError:
            if attempt < max_retries - 1:
                time.sleep(2 ** attempt)  # Exponential backoff
            else:
                raise

Troubleshooting

Connection Issues

Problem: Cannot connect to 9Router

# Check if 9Router is running
curl http://localhost:20128/health

# Expected response:
{"status": "ok"}

Solution:

  • Verify 9Router is running
  • Check port 20128 is not blocked
  • Ensure correct base URL (include /v1)

Authentication Errors

Problem: 401 Unauthorized

Error: Invalid API key

Solution:

  • Verify API key from dashboard
  • Check Authorization header format: Bearer your-api-key
  • Ensure no extra spaces or newlines in API key

Model Not Found

Problem: 404 Model not found

Error: Model 'cc/claude-opus' not found

Solution:

  • Use exact model name (case-sensitive)
  • Check available models: curl http://localhost:20128/v1/models
  • Verify model is enabled in your plan

Timeout Issues

Problem: Request timeout

Error: Request timed out after 30s

Solution:

  • Increase timeout in client configuration
  • Use faster models for time-sensitive tasks
  • Check network connection to 9Router

Rate Limiting

Problem: 429 Too Many Requests

Error: Rate limit exceeded

Solution:

  • Implement exponential backoff
  • Reduce request frequency
  • Check rate limits in dashboard
  • Consider upgrading plan

Best Practices

Security

  • Store API keys in environment variables
  • Never commit API keys to version control
  • Use HTTPS for cloud deployments
  • Rotate API keys regularly

Performance

  • Use appropriate models for task complexity
  • Implement caching for repeated queries
  • Use streaming for long responses
  • Batch requests when possible

Error Handling

  • Always implement try-catch blocks
  • Add retry logic with exponential backoff
  • Log errors for debugging
  • Provide fallback mechanisms

Cost Optimization

  • Choose cost-effective models for simple tasks
  • Cache responses when appropriate
  • Monitor usage in dashboard
  • Set request limits in code

Next Steps