Agent workflows ยท 2026-09-20

Moving from an EVREN row to a global model: one field changes

What changes and what does not when an agent starts on an EVREN row and moves to a global model. Verifying capability without a key, the silent failure of an undeclared capability, and what the usage record holds.

Flow diagram showing the same request body sent first to a Turkey-hosted row and then to a global row with only the model field changed.

Short answer

To move from an EVREN row to a global model, change the model field in the request body. The endpoint, the authorization header and the body schema stay the same.

This follows from both rows sharing one schema. Request validation runs before the model is resolved, so the shape of the body does not depend on which model you named.

The only thing that changes is the model field

In the example below the same client, the same key and the same body reach two different rows. The Turkey-hosted row bills against your EVREN account and the global row against your LLMTR balance; the calling code knows nothing about it.

Keeping model ids in a mapping table is the cheapest way to collect model selection into one place in an agent loop.

Same body, two rows

from openai import OpenAI
import os

client = OpenAI(base_url=os.environ["LLMTR_BASE_URL"] + "/v1", api_key=os.environ["LLMTR_API_KEY"])

# Turkey-hosted, billed on your own EVREN account.
TURKEY_MODEL = "evren/glm-5.3-fp8"
# A global row in the same catalog, billed from your LLMTR balance.
GLOBAL_MODEL = "zai/glm-5.3"

def ask(model: str, question: str) -> str:
    completion = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": question}],
        max_tokens=1024,
    )
    return completion.choices[0].message.content

# Same client, same body, same key. Only the model id differs.
print(ask(TURKEY_MODEL, "Ozetle: ..."))
print(ask(GLOBAL_MODEL, "Ozetle: ..."))

An agent verifies capability before it calls

The model list endpoint is open without a key and lets an agent verify capability without opening an account. Each record carries a supported_operations field stating which operations the model is bound to.

The right order is: check the supported operation in the catalog first, then send the request. That order keeps an agent step that depends on an undeclared capability from being discovered in production.

Capability check without a key

# No API key. The discovery endpoint is open on purpose.
curl "$LLMTR_BASE_URL/v1/models" \
  | jq '.data[] | select(.id == "evren/glm-5.3-fp8") | {id, supported_operations}'

An undeclared capability fails silently

If an agent framework reads a model card, assumes tool calling and the model does not implement that field, no error appears. HTTP 200 comes back with a response; only the content is wrong, because the model may invent in prose what the tool should have returned instead of calling it.

That is why the order matters: verify the row's capability in the catalog before you call it. EVREN rows do not offer tool calling, JSON mode or thinking controls, so give work that needs those steps to a row that carries them.

What EVREN rows offer today

The table shows the fields that affect the decision on the agent side. Context and input type come from EVREN's published table.

Streaming on these rows is not real streaming: the response is delivered in pieces after it completes. An agent loop that waits on time to first token should account for that.

EVREN rows: the fields that affect an agent's decision (catalog value, 20 September 2026)
Model idContextInput
evren/deepseek-v4-flash-tr1,000,000Text
evren/glm-5.3-fp8512,000Text
evren/gemma-4-31b256,000Text, image
evren/qwen3.8-flash-next256,000Text, image, video
evren/qwen3-vl-30b256,000Text, image, video

What the usage record holds

Request and response bodies are not written to our database. The usage record holds the model, token counts, message count, cost, status code and duration; there is no field for prompt or completion text.

The honesty cuts both ways: the third-party model provider that processes the request may keep records, and every model card says so. On EVREN rows that provider is EVREN itself, and the account and key are yours; the relevant commitments have to be read from the provider's own terms.

If you are sending sensitive data, take the decision from the data note on the model card rather than inferring it from the model name.

Why come in through this door

Choosing a provider for an agent is not a one-time decision; as the job changes, the model changes. When the cost of switching is near zero, the choice becomes reversible.

You can connect to EVREN directly; what connecting through LLMTR changes is that the same code also reaches other Turkey-hosted models and global models. Your agent loop is written against one contract and model selection drops to a configuration line.

The catalog holds twelve live rows marked as hosted in Turkey today, seven of them outside EVREN. The same key reaches all of them, and the global rows as well.

Frequently asked questions

Can I start with EVREN and move to a global model later?

Yes. You can connect to EVREN directly; what connecting through LLMTR changes is that the same code also reaches other Turkey-hosted models and global models. The only thing that changes on the way is the model field in the request body.

Can I read the model list without a key?

Yes. The model list endpoint requires no authentication, and that is deliberate. An agent can read the catalog's models, prices and supported operations before any account exists.

Do EVREN rows support tool calling?

No, tool calling is not offered on these rows. If you send a tool definition you may get a prose answer rather than an error. For a step that needs tool calling, pick a catalog row that carries the capability.

Does LLMTR store my prompts?

Request and response bodies are not written to our database; the usage record consists of the model, token counts, message count, cost, status code and duration. The third-party model provider that processes the request may keep records, and every model card says so.

How does streaming work on these rows?

Streaming on EVREN rows is not real streaming: the response is delivered in pieces after it completes. Account for that if your agent loop reacts to time to first token.

Related posts