uncloseai.

Python Examples - Free LLM & TTS AI Service

Python Examples

This page demonstrates how to use the uncloseai. API endpoints with Python using the OpenAI client library. All examples use the same OpenAI-compatible API interface, making it easy to switch between different models and endpoints.

Available Endpoints:

Both chat hostnames currently serve the same model, turboderp/Qwen3.8-27B-exl3 (read live from /v1/models). Hostnames are routing labels, not model names: every example below asks the endpoint which model it serves instead of hard-coding an id, so a model swap on the cards never breaks your code. The served model reasons before it answers (the reasoning arrives in a separate reasoning field), so give it room: the samples ask for 600 tokens because at 150 the budget ran out before the answer began.

Many endpoints from environment variables

Our clients (uncloseai-cli, uncloseai.js, opencompletion and the downloadable implementation for every language on this site) share one convention, so an endpoint is configuration, never code:

VariableMeaning
MODEL_ENDPOINT_NBase URL of the N-th OpenAI-compatible endpoint, ending in /v1. The only required variable. Scan N from 0 upward and skip gaps: uncloseai-cli counts from 0, the per-language implementations from 1.
MODEL_API_KEY_NBearer key for endpoint N. Unset means no key, which is all our free relay needs; a cloud endpoint sets one.
MODEL_ID_NModel id to send. Unset means ask /v1/models and take the first id, the rule used by every sample on this page.
MODEL_LABEL_NA display name for endpoint N; defaults to its hostname.
TTS_ENDPOINT_NThe same shape for text-to-speech endpoints.
export MODEL_ENDPOINT_0="https://hermes.ai.unturf.com/v1"
export MODEL_ENDPOINT_1="https://qwen.ai.unturf.com/v1"
# export MODEL_API_KEY_1="sk-..."      # only for an endpoint that needs one
export TTS_ENDPOINT_0="https://speech.ai.unturf.com/v1"

The first endpoint is the default; the rest fail over, in order. The Python implementation under /languages/ reads these variables and discovers each endpoint's models at startup.

Building that client in Python with the OpenAI library:

import os
from openai import OpenAI

def endpoints_from_env():
    """One (label, client, model) per MODEL_ENDPOINT_N, in order. N may start at 0 or 1 and have gaps."""
    found = []
    for n in range(0, 1000):
        base_url = os.getenv(f"MODEL_ENDPOINT_{n}")
        if not base_url:
            continue
        client = OpenAI(base_url=base_url, api_key=os.getenv(f"MODEL_API_KEY_{n}") or "none")
        # MODEL_ID_N pins a model; unset means ask the endpoint which model it serves.
        model = os.getenv(f"MODEL_ID_{n}") or client.models.list().data[0].id
        found.append((os.getenv(f"MODEL_LABEL_{n}") or base_url, client, model))
    return found

def chat(messages, **options):
    """The first endpoint is the default; the rest fail over, in order."""
    for label, client, model in endpoints_from_env():
        try:
            return client.chat.completions.create(model=model, messages=messages, **options)
        except Exception as error:
            print(f"{label}: {error}; trying the next endpoint")
    raise RuntimeError("every endpoint failed")

response = chat(
    [{"role": "user", "content": "Give a Python Fizzbuzz solution in one line of code?"}],
    temperature=0.5,
    max_tokens=600,
)
print(response.choices[0].message.content)

Python Client Installation

To install the OpenAI package for Python, use pip:

pip install openai==2.3.0

Non-Streaming Examples

Non-streaming mode waits for the complete response before returning. This is simpler to use but provides no intermediate feedback during generation.

Using hermes.ai.unturf.com (RTX 4090)

# Python Fizzbuzz Example (hermes.ai.unturf.com)
from openai import OpenAI

client = OpenAI(base_url="https://hermes.ai.unturf.com/v1", api_key="choose-any-value")

# Ask the endpoint which model it serves; never hard-code an id.
MODEL = client.models.list().data[0].id

messages = [{"role": "user", "content": "Give a Python Fizzbuzz solution in one line of code?"}]

response = client.chat.completions.create(
    model=MODEL,
    messages=messages,
    temperature=0.5,
    max_tokens=600
)

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

Using qwen.ai.unturf.com (RTX 3090)

# Python Fizzbuzz Example (qwen.ai.unturf.com)
from openai import OpenAI

client = OpenAI(base_url="https://qwen.ai.unturf.com/v1", api_key="choose-any-value")

# Ask the endpoint which model it serves; never hard-code an id.
MODEL = client.models.list().data[0].id

messages = [{"role": "user", "content": "Give a Python Fizzbuzz solution in one line of code?"}]

response = client.chat.completions.create(
    model=MODEL,
    messages=messages,
    temperature=0.5,
    max_tokens=600
)

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

Streaming Examples

Streaming mode returns chunks of the response as they are generated, providing real-time feedback. This is ideal for interactive applications and long responses.

Using hermes.ai.unturf.com (RTX 4090)

# Streaming response in Python (hermes.ai.unturf.com)
from openai import OpenAI

client = OpenAI(base_url="https://hermes.ai.unturf.com/v1", api_key="choose-any-value")

# Ask the endpoint which model it serves; never hard-code an id.
MODEL = client.models.list().data[0].id

messages = [
    {"role": "user", "content": "Give a Python Fizzbuzz solution in one line of code?"}
]

response = client.chat.completions.create(
    model=MODEL,
    messages=messages,
    temperature=0.5,
    max_tokens=600,
    stream=True,  # Enable streaming
)

for chunk in response:
    if hasattr(chunk.choices[0].delta, "content"):
        print(chunk.choices[0].delta.content, end="")

Using qwen.ai.unturf.com (RTX 3090)

# Streaming response in Python (qwen.ai.unturf.com)
from openai import OpenAI

client = OpenAI(base_url="https://qwen.ai.unturf.com/v1", api_key="choose-any-value")

# Ask the endpoint which model it serves; never hard-code an id.
MODEL = client.models.list().data[0].id

messages = [
    {"role": "user", "content": "Give a Python Fizzbuzz solution in one line of code?"}
]

response = client.chat.completions.create(
    model=MODEL,
    messages=messages,
    temperature=0.5,
    max_tokens=600,
    stream=True,  # Enable streaming
)

for chunk in response:
    if hasattr(chunk.choices[0].delta, "content"):
        print(chunk.choices[0].delta.content, end="")

Text-to-Speech Example

Generate audio speech from text using the TTS endpoint. The audio is saved as an MP3 file.

# TTS Speech Example in Python
import openai

client = openai.OpenAI(
  api_key = "YOLO",
  base_url = "https://speech.ai.unturf.com/v1",
)

with client.audio.speech.with_streaming_response.create(
  model="tts-1-f5",
  voice="foxhop",
  speed=0.9,
  input="I think so therefore, Today is a wonderful day to grow something people love!"
) as response:
  response.stream_to_file("speech.mp3")