diff --git a/models/alibaba/qwen3-30b-a3b-instruct-2507.toml b/models/alibaba/qwen3-30b-a3b-instruct-2507.toml new file mode 100644 index 00000000000..8c7cd79c1f8 --- /dev/null +++ b/models/alibaba/qwen3-30b-a3b-instruct-2507.toml @@ -0,0 +1,21 @@ +# https://huggingface.co/Qwen/Qwen3-30B-A3B-Instruct-2507 (accessed 2026-09-02) +name = "Qwen3 30B-A3B Instruct 2507" +description = "Qwen3 Mixture-of-Experts instruction model for multilingual chat, coding, and tool use" +family = "qwen" +release_date = "2025-07-29" +last_updated = "2025-07-29" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "apache-2.0" + +[limit] +context = 262_144 +output = 16_384 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/alibaba/qwen3-embedding-8b.toml b/models/alibaba/qwen3-embedding-8b.toml new file mode 100644 index 00000000000..6d2f4839d91 --- /dev/null +++ b/models/alibaba/qwen3-embedding-8b.toml @@ -0,0 +1,20 @@ +# https://huggingface.co/Qwen/Qwen3-Embedding-8B (accessed 2026-09-02) +name = "Qwen3 Embedding 8B" +description = "Text embedding model for semantic search, retrieval, clustering, and reranking" +family = "text-embedding" +release_date = "2025-06-05" +last_updated = "2025-06-05" +attachment = false +reasoning = false +temperature = false +tool_call = false +open_weights = true +license = "apache-2.0" + +[limit] +context = 32_768 +output = 0 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/google/gemma-3-27b-it.toml b/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..314e549c5e6 --- /dev/null +++ b/models/google/gemma-3-27b-it.toml @@ -0,0 +1,24 @@ +# Gemma 3 has no native function calling: the served endpoint accepts a tools +# array but the model answers in prose instead of emitting tool_calls. +# https://ai.google.dev/gemma/docs/core/model_card_3 (accessed 2026-09-02) +name = "Gemma 3 27B IT" +description = "Open multimodal Gemma instruction model for efficient chat, vision, and self-hosted deployments" +family = "gemma" +release_date = "2025-03-12" +last_updated = "2025-03-12" +attachment = true +reasoning = false +temperature = true +tool_call = false +structured_output = true +knowledge = "2024-08" +open_weights = true +license = "gemma" + +[limit] +context = 131_072 +output = 8_192 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/nousresearch/hermes-4-405b.toml b/models/nousresearch/hermes-4-405b.toml new file mode 100644 index 00000000000..9e98652cf51 --- /dev/null +++ b/models/nousresearch/hermes-4-405b.toml @@ -0,0 +1,21 @@ +# https://hermes4.nousresearch.com (accessed 2026-09-02) +name = "Hermes 4 405B" +description = "Hybrid reasoning model from Nous Research, built on Llama 3.1 405B for deliberate analysis, math, code, and tool use" +family = "hermes" +release_date = "2025-08-26" +last_updated = "2025-08-26" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "llama3.1" + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/nousresearch/hermes-4-70b.toml b/models/nousresearch/hermes-4-70b.toml new file mode 100644 index 00000000000..3c0c8b4781a --- /dev/null +++ b/models/nousresearch/hermes-4-70b.toml @@ -0,0 +1,21 @@ +# https://hermes4.nousresearch.com (accessed 2026-09-02) +name = "Hermes 4 70B" +description = "Hybrid reasoning model from Nous Research, built on Llama 3.1 70B for deliberate analysis, math, code, and tool use" +family = "hermes" +release_date = "2025-08-26" +last_updated = "2025-08-26" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +license = "llama3.1" + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/models/nvidia/cosmos3-super-reasoner.toml b/models/nvidia/cosmos3-super-reasoner.toml new file mode 100644 index 00000000000..fd966425449 --- /dev/null +++ b/models/nvidia/cosmos3-super-reasoner.toml @@ -0,0 +1,22 @@ +# Reasoning tower of NVIDIA Cosmos 3 Super, a 64B two-tower Mixture-of-Transformers +# built on the Qwen3-VL 32B architecture. +# https://developer.nvidia.com/blog/develop-physical-ai-reasoning-world-and-action-models-with-nvidia-cosmos-3/ +# (accessed 2026-09-02) +name = "Cosmos3 Super Reasoner" +description = "Physical-AI reasoning model for spatial understanding, multi-agent planning, and vision grounding" +release_date = "2026-06" +last_updated = "2026-06" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 256_000 +output = 256_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/models/openbmb/minicpm-v-4_5.toml b/models/openbmb/minicpm-v-4_5.toml new file mode 100644 index 00000000000..e6195a3fb26 --- /dev/null +++ b/models/openbmb/minicpm-v-4_5.toml @@ -0,0 +1,20 @@ +# 8.7B vision-language model with controllable hybrid fast/deep thinking. +# https://huggingface.co/openbmb/MiniCPM-V-4_5 (accessed 2026-09-02) +name = "MiniCPM-V 4.5" +description = "Compact vision-language model for OCR, document parsing, and video understanding" +release_date = "2025-08" +last_updated = "2025-09" +attachment = true +reasoning = true +temperature = true +tool_call = false +open_weights = true +license = "apache-2.0" + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/lyceum/logo.svg b/providers/lyceum/logo.svg new file mode 100644 index 00000000000..93ab5eddaef --- /dev/null +++ b/providers/lyceum/logo.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/providers/lyceum/models/deepseek/deepseek-v4-flash-0731.toml b/providers/lyceum/models/deepseek/deepseek-v4-flash-0731.toml new file mode 100644 index 00000000000..42a9dcabde2 --- /dev/null +++ b/providers/lyceum/models/deepseek/deepseek-v4-flash-0731.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# The unlisted values are accepted but collapse onto these, as on DeepSeek's own API. +base_model = "deepseek/deepseek-v4-flash-0731" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.25 +output = 0.3 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/deepseek/deepseek-v4-pro.toml b/providers/lyceum/models/deepseek/deepseek-v4-pro.toml new file mode 100644 index 00000000000..3182906b129 --- /dev/null +++ b/providers/lyceum/models/deepseek/deepseek-v4-pro.toml @@ -0,0 +1,12 @@ +# Effort: reasoning_effort = none|high|max; none disables thinking. +# low and medium map to high upstream, and minimal skips thinking like none. +base_model = "deepseek/deepseek-v4-pro" +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] +interleaved = true + +[cost] +input = 1.75 +output = 3.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/google/gemma-3-27b-it.toml b/providers/lyceum/models/google/gemma-3-27b-it.toml new file mode 100644 index 00000000000..05c6b0b10ae --- /dev/null +++ b/providers/lyceum/models/google/gemma-3-27b-it.toml @@ -0,0 +1,5 @@ +base_model = "google/gemma-3-27b-it" + +[cost] +input = 0.1 +output = 0.3 diff --git a/providers/lyceum/models/lyceum/complex.toml b/providers/lyceum/models/lyceum/complex.toml new file mode 100644 index 00000000000..24c5a0c3144 --- /dev/null +++ b/providers/lyceum/models/lyceum/complex.toml @@ -0,0 +1,18 @@ +# Router alias resolved server-side to minimax/minimax-m3; controls and price are its own. +# No caller control: reasoning_effort, enable_thinking, thinking, thinking.type, +# reasoning.enabled and chat_template_kwargs.enable_thinking all leave the +# reasoning on. +base_model = "minimax/MiniMax-M3" +name = "Lyceum Complex" +description = "Routing alias that Lyceum resolves to minimax/minimax-m3" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.4 +output = 2 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/lyceum/reasoning.toml b/providers/lyceum/models/lyceum/reasoning.toml new file mode 100644 index 00000000000..62abc4d159f --- /dev/null +++ b/providers/lyceum/models/lyceum/reasoning.toml @@ -0,0 +1,15 @@ +# Router alias resolved server-side to z-ai/glm-5.2; controls and price are its own. +# Effort: reasoning_effort = none|high|max; none disables thinking. +# low and medium map to high upstream, and minimal skips thinking like none. +base_model = "zhipuai/glm-5.2" +name = "Lyceum Reasoning" +description = "Routing alias that Lyceum resolves to z-ai/glm-5.2" +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] +interleaved = true + +[cost] +input = 1.5 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/lyceum/simple.toml b/providers/lyceum/models/lyceum/simple.toml new file mode 100644 index 00000000000..406bc6ee859 --- /dev/null +++ b/providers/lyceum/models/lyceum/simple.toml @@ -0,0 +1,13 @@ +# Router alias resolved server-side to qwen/qwen3.5-9b; controls and price are its own. +# Toggle: reasoning_effort = none disables thinking, any other accepted value enables it. +base_model = "alibaba/qwen3.5-9b" +name = "Lyceum Simple" +description = "Routing alias that Lyceum resolves to qwen/qwen3.5-9b" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.2 diff --git a/providers/lyceum/models/meta-llama/llama-3.3-70b-instruct.toml b/providers/lyceum/models/meta-llama/llama-3.3-70b-instruct.toml new file mode 100644 index 00000000000..ec761624c33 --- /dev/null +++ b/providers/lyceum/models/meta-llama/llama-3.3-70b-instruct.toml @@ -0,0 +1,8 @@ +# The lab row carries attachment = true next to text-only modalities; this host +# rejects an image_url content part outright, so the override is a real delta. +base_model = "meta/llama-3.3-70b-instruct" +attachment = false + +[cost] +input = 0.13 +output = 0.4 diff --git a/providers/lyceum/models/minimax/minimax-m2.5.toml b/providers/lyceum/models/minimax/minimax-m2.5.toml new file mode 100644 index 00000000000..98404bca440 --- /dev/null +++ b/providers/lyceum/models/minimax/minimax-m2.5.toml @@ -0,0 +1,16 @@ +# Always reasons. reasoning_effort = none is rejected, and no other wire control +# turns it off: enable_thinking, thinking, thinking.type, reasoning.enabled and +# chat_template_kwargs.enable_thinking all leave it on. reasoning.exclude = true +# only hides the reasoning, which still burns the whole max_tokens budget. +base_model = "minimax/MiniMax-M2.5" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 1.2 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/minimax/minimax-m3.toml b/providers/lyceum/models/minimax/minimax-m3.toml new file mode 100644 index 00000000000..67f7f2b9fe9 --- /dev/null +++ b/providers/lyceum/models/minimax/minimax-m3.toml @@ -0,0 +1,15 @@ +# No caller control: reasoning_effort, enable_thinking, thinking, thinking.type, +# reasoning.enabled and chat_template_kwargs.enable_thinking all leave the +# reasoning on. +base_model = "minimax/MiniMax-M3" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.4 +output = 2 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/moonshotai/kimi-k2.6.toml b/providers/lyceum/models/moonshotai/kimi-k2.6.toml new file mode 100644 index 00000000000..2a49efbb1e1 --- /dev/null +++ b/providers/lyceum/models/moonshotai/kimi-k2.6.toml @@ -0,0 +1,13 @@ +# Toggle: reasoning_effort = none disables thinking, any other accepted value enables it. +base_model = "moonshotai/kimi-k2.6" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1 +output = 4 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/moonshotai/kimi-k2.7-code.toml b/providers/lyceum/models/moonshotai/kimi-k2.7-code.toml new file mode 100644 index 00000000000..7cbc5d3535f --- /dev/null +++ b/providers/lyceum/models/moonshotai/kimi-k2.7-code.toml @@ -0,0 +1,15 @@ +# No caller control: reasoning_effort, enable_thinking, thinking, thinking.type, +# reasoning.enabled and chat_template_kwargs.enable_thinking all leave the +# reasoning on. +base_model = "moonshotai/kimi-k2.7-code" +reasoning_options = [] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.25 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/moonshotai/kimi-k3.toml b/providers/lyceum/models/moonshotai/kimi-k3.toml new file mode 100644 index 00000000000..5b48f3a3cf0 --- /dev/null +++ b/providers/lyceum/models/moonshotai/kimi-k3.toml @@ -0,0 +1,12 @@ +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# medium is rejected upstream; the rest collapse onto these levels. +base_model = "moonshotai/kimi-k3" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] +interleaved = true + +[cost] +input = 3 +output = 15 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nousresearch/hermes-4-405b.toml b/providers/lyceum/models/nousresearch/hermes-4-405b.toml new file mode 100644 index 00000000000..d6487a83328 --- /dev/null +++ b/providers/lyceum/models/nousresearch/hermes-4-405b.toml @@ -0,0 +1,11 @@ +# Hybrid reasoner driven by the system prompt, not a request field: it emits +# blocks inside content, and reasoning_effort changes nothing. +base_model = "nousresearch/hermes-4-405b" +reasoning_options = [] + +[cost] +input = 1 +output = 3 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nousresearch/hermes-4-70b.toml b/providers/lyceum/models/nousresearch/hermes-4-70b.toml new file mode 100644 index 00000000000..d83de1a2ba1 --- /dev/null +++ b/providers/lyceum/models/nousresearch/hermes-4-70b.toml @@ -0,0 +1,11 @@ +# Hybrid reasoner driven by the system prompt, not a request field: it emits +# blocks inside content, and reasoning_effort changes nothing. +base_model = "nousresearch/hermes-4-70b" +reasoning_options = [] + +[cost] +input = 0.13 +output = 0.4 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nvidia/cosmos3-super-reasoner.toml b/providers/lyceum/models/nvidia/cosmos3-super-reasoner.toml new file mode 100644 index 00000000000..37b6bf9bc70 --- /dev/null +++ b/providers/lyceum/models/nvidia/cosmos3-super-reasoner.toml @@ -0,0 +1,11 @@ +# Reasons into blocks inside content when the system prompt asks for it; +# reasoning_effort is accepted but changes nothing. +base_model = "nvidia/cosmos3-super-reasoner" +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.3 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nvidia/llama-3_1-nemotron-ultra-253b-v1.toml b/providers/lyceum/models/nvidia/llama-3_1-nemotron-ultra-253b-v1.toml new file mode 100644 index 00000000000..cb7f804c5eb --- /dev/null +++ b/providers/lyceum/models/nvidia/llama-3_1-nemotron-ultra-253b-v1.toml @@ -0,0 +1,9 @@ +# Reasoning is switched by the "detailed thinking on" system prompt, not by a +# request field: the block arrives inside content and reasoning_effort +# changes nothing. +base_model = "nvidia/llama-3.1-nemotron-ultra-253b" +reasoning_options = [] + +[cost] +input = 0.6 +output = 1.8 diff --git a/providers/lyceum/models/nvidia/nemotron-3-nano-omni.toml b/providers/lyceum/models/nvidia/nemotron-3-nano-omni.toml new file mode 100644 index 00000000000..28b1cb1d319 --- /dev/null +++ b/providers/lyceum/models/nvidia/nemotron-3-nano-omni.toml @@ -0,0 +1,9 @@ +# Effort: reasoning_effort = none|low|medium|high|max; none disables thinking. +# This is the set the relay peers author for the same model. +base_model = "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "max"] }] +interleaved = true + +[cost] +input = 0.06 +output = 0.24 diff --git a/providers/lyceum/models/nvidia/nemotron-3-super-120b-a12b.toml b/providers/lyceum/models/nvidia/nemotron-3-super-120b-a12b.toml new file mode 100644 index 00000000000..07adc5dbcbb --- /dev/null +++ b/providers/lyceum/models/nvidia/nemotron-3-super-120b-a12b.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = low|medium|high. This host rejects none, so there is +# no way to turn the reasoning off. +base_model = "nvidia/nemotron-3-super-120b-a12b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.3 +output = 0.9 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nvidia/nemotron-3-ultra-550b-a55b.toml b/providers/lyceum/models/nvidia/nemotron-3-ultra-550b-a55b.toml new file mode 100644 index 00000000000..907db8e796f --- /dev/null +++ b/providers/lyceum/models/nvidia/nemotron-3-ultra-550b-a55b.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = none|medium|high; none disables thinking. +# This is the set the relay peers author for the same model. +base_model = "nvidia/nemotron-3-ultra-550b-a55b" +reasoning_options = [{ type = "effort", values = ["none", "medium", "high"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1 +output = 3 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/nvidia/nvidia-nemotron-3-nano-30b-a3b.toml b/providers/lyceum/models/nvidia/nvidia-nemotron-3-nano-30b-a3b.toml new file mode 100644 index 00000000000..4fe856e7866 --- /dev/null +++ b/providers/lyceum/models/nvidia/nvidia-nemotron-3-nano-30b-a3b.toml @@ -0,0 +1,14 @@ +# Toggle: chat_template_kwargs.enable_thinking = false. reasoning_effort is +# accepted but ignored; the template switch is the only control, and it cuts the +# completion from 278 to 131 tokens on a fixed prompt rather than just hiding the +# reasoning. +base_model = "nvidia/nemotron-3-nano-30b-a3b" +reasoning_options = [{ type = "toggle" }] +interleaved = true + +[cost] +input = 0.06 +output = 0.24 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/openai/gpt-oss-120b.toml b/providers/lyceum/models/openai/gpt-oss-120b.toml new file mode 100644 index 00000000000..d46e5346b8b --- /dev/null +++ b/providers/lyceum/models/openai/gpt-oss-120b.toml @@ -0,0 +1,8 @@ +# Effort: reasoning_effort = low|medium|high; none and minimal are rejected. +base_model = "openai/gpt-oss-120b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] +interleaved = true + +[cost] +input = 0.15 +output = 0.6 diff --git a/providers/lyceum/models/openbmb/minicpm-v-4_5.toml b/providers/lyceum/models/openbmb/minicpm-v-4_5.toml new file mode 100644 index 00000000000..36675384be4 --- /dev/null +++ b/providers/lyceum/models/openbmb/minicpm-v-4_5.toml @@ -0,0 +1,12 @@ +# Serving caps max_tokens at 24576 and rejects a tools array. The hybrid thinking +# mode is not reachable here: reasoning_effort is rejected and no block or +# reasoning field ever comes back. +base_model = "openbmb/minicpm-v-4_5" +reasoning = false + +[cost] +input = 0.66 +output = 1.11 + +[limit] +output = 24_576 diff --git a/providers/lyceum/models/qwen/qwen2.5-vl-72b-instruct.toml b/providers/lyceum/models/qwen/qwen2.5-vl-72b-instruct.toml new file mode 100644 index 00000000000..f71fa713820 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen2.5-vl-72b-instruct.toml @@ -0,0 +1,7 @@ +# Vision confirmed end to end: it names the colour of a solid-colour test image. +base_model = "alibaba/qwen2-5-vl-72b-instruct" +attachment = true + +[cost] +input = 0.25 +output = 0.75 diff --git a/providers/lyceum/models/qwen/qwen3-235b-a22b-instruct-2507.toml b/providers/lyceum/models/qwen/qwen3-235b-a22b-instruct-2507.toml new file mode 100644 index 00000000000..0295ca49833 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3-235b-a22b-instruct-2507.toml @@ -0,0 +1,5 @@ +base_model = "alibaba/qwen3-235b-a22b-instruct-2507" + +[cost] +input = 0.2 +output = 0.6 diff --git a/providers/lyceum/models/qwen/qwen3-30b-a3b-instruct-2507.toml b/providers/lyceum/models/qwen/qwen3-30b-a3b-instruct-2507.toml new file mode 100644 index 00000000000..61795e3e78c --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3-30b-a3b-instruct-2507.toml @@ -0,0 +1,5 @@ +base_model = "alibaba/qwen3-30b-a3b-instruct-2507" + +[cost] +input = 0.1 +output = 0.3 diff --git a/providers/lyceum/models/qwen/qwen3-32b.toml b/providers/lyceum/models/qwen/qwen3-32b.toml new file mode 100644 index 00000000000..dd14b11c931 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3-32b.toml @@ -0,0 +1,8 @@ +# Reasoning is prompt-driven (Qwen's /think and /no_think convention): the +# block arrives inside content and reasoning_effort changes nothing. +base_model = "alibaba/qwen3-32b" +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.3 diff --git a/providers/lyceum/models/qwen/qwen3-embedding-8b.toml b/providers/lyceum/models/qwen/qwen3-embedding-8b.toml new file mode 100644 index 00000000000..f310b15558c --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3-embedding-8b.toml @@ -0,0 +1,5 @@ +base_model = "alibaba/qwen3-embedding-8b" + +[cost] +input = 0.01 +output = 0 diff --git a/providers/lyceum/models/qwen/qwen3-next-80b-a3b-thinking.toml b/providers/lyceum/models/qwen/qwen3-next-80b-a3b-thinking.toml new file mode 100644 index 00000000000..da029f301bf --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3-next-80b-a3b-thinking.toml @@ -0,0 +1,10 @@ +# No caller control: reasoning_effort, enable_thinking, thinking, thinking.type, +# reasoning.enabled and chat_template_kwargs.enable_thinking all leave the +# reasoning on. +base_model = "alibaba/qwen3-next-80b-a3b-thinking" +reasoning_options = [] +interleaved = true + +[cost] +input = 0.15 +output = 1.2 diff --git a/providers/lyceum/models/qwen/qwen3.5-397b-a17b.toml b/providers/lyceum/models/qwen/qwen3.5-397b-a17b.toml new file mode 100644 index 00000000000..3f9868014b9 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.5-397b-a17b.toml @@ -0,0 +1,14 @@ +# Toggle: reasoning_effort = none disables thinking, any other accepted value enables it. +# Rejects an image_url content part, so this host serves it text-only. +base_model = "alibaba/qwen3.5-397b-a17b" +attachment = false +reasoning_options = [{ type = "toggle" }] +interleaved = true + +[cost] +input = 0.6 +output = 3.6 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/lyceum/models/qwen/qwen3.5-9b.toml b/providers/lyceum/models/qwen/qwen3.5-9b.toml new file mode 100644 index 00000000000..648711def3b --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.5-9b.toml @@ -0,0 +1,10 @@ +# Toggle: reasoning_effort = none disables thinking, any other accepted value enables it. +base_model = "alibaba/qwen3.5-9b" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.15 +output = 0.2 diff --git a/providers/lyceum/models/qwen/qwen3.8-2.4t-a95b.toml b/providers/lyceum/models/qwen/qwen3.8-2.4t-a95b.toml new file mode 100644 index 00000000000..bb2e62b8e2c --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.8-2.4t-a95b.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = low|medium|xhigh, matching Alibaba's own qwen3.8 +# entries. This host rejects none, so the reasoning cannot be turned off. +base_model = "alibaba/qwen3.8-2.4t-a95b" +reasoning_options = [{ type = "effort", values = ["low", "medium", "xhigh"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 2.5 +output = 6 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/qwen/qwen3.8-27b-instant.toml b/providers/lyceum/models/qwen/qwen3.8-27b-instant.toml new file mode 100644 index 00000000000..3b52fe7734b --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.8-27b-instant.toml @@ -0,0 +1,11 @@ +# Name-encoded alias for qwen/qwen3.8-27b: Lyceum sends the request with +# chat_template_kwargs.enable_thinking = false, so this id never reasons. +# Same weights and price as qwen/qwen3.8-27b; it exists for clients that cannot set +# request parameters, such as GitHub Copilot and Cursor. +base_model = "alibaba/qwen3.8-27b" +name = "Qwen3.8 27B (Instant)" +reasoning = false + +[cost] +input = 0.4 +output = 2.4 diff --git a/providers/lyceum/models/qwen/qwen3.8-27b.toml b/providers/lyceum/models/qwen/qwen3.8-27b.toml new file mode 100644 index 00000000000..32e0710bbb5 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.8-27b.toml @@ -0,0 +1,11 @@ +# Effort: reasoning_effort = none|low|medium|xhigh; none disables thinking. +# high and max are rejected upstream, matching Alibaba's own qwen3.8 entries. +base_model = "alibaba/qwen3.8-27b" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.4 +output = 2.4 diff --git a/providers/lyceum/models/qwen/qwen3.8-flash-next-instant.toml b/providers/lyceum/models/qwen/qwen3.8-flash-next-instant.toml new file mode 100644 index 00000000000..dc94414f73f --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.8-flash-next-instant.toml @@ -0,0 +1,14 @@ +# Name-encoded alias for qwen/qwen3.8-flash-next: Lyceum sends the request with +# chat_template_kwargs.enable_thinking = false, so this id never reasons. +# Same weights and price as qwen/qwen3.8-flash-next; it exists for clients that cannot set +# request parameters, such as GitHub Copilot and Cursor. +base_model = "alibaba/qwen3.8-flash-next" +name = "Qwen3.8 Flash Next (Instant)" +reasoning = false + +[cost] +input = 0.2 +output = 0.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/qwen/qwen3.8-flash-next.toml b/providers/lyceum/models/qwen/qwen3.8-flash-next.toml new file mode 100644 index 00000000000..2c735215768 --- /dev/null +++ b/providers/lyceum/models/qwen/qwen3.8-flash-next.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = none|low|medium|xhigh; none disables thinking. +# high and max are rejected upstream, matching Alibaba's own qwen3.8 entries. +base_model = "alibaba/qwen3.8-flash-next" +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "xhigh"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.2 +output = 0.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.1.toml b/providers/lyceum/models/z-ai/glm-5.1.toml new file mode 100644 index 00000000000..31c6fe91fd6 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.1.toml @@ -0,0 +1,15 @@ +# Toggle: reasoning_effort = none disables thinking, any other accepted value enables it. +# An image_url part is accepted but not actually read (it misnames a solid-colour +# test image), so the lab's text-only modalities stand. +base_model = "zhipuai/glm-5.1" +reasoning_options = [{ type = "toggle" }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 1.4 +output = 4.4 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.2-instant.toml b/providers/lyceum/models/z-ai/glm-5.2-instant.toml new file mode 100644 index 00000000000..cb1c1200c45 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.2-instant.toml @@ -0,0 +1,14 @@ +# Name-encoded alias for z-ai/glm-5.2: Lyceum sends the request with +# chat_template_kwargs.enable_thinking = false, so this id never reasons. +# Same weights and price as z-ai/glm-5.2; it exists for clients that cannot set +# request parameters, such as GitHub Copilot and Cursor. +base_model = "zhipuai/glm-5.2" +name = "GLM-5.2 (Instant)" +reasoning = false + +[cost] +input = 1.5 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.2.toml b/providers/lyceum/models/z-ai/glm-5.2.toml new file mode 100644 index 00000000000..c7e93f97694 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.2.toml @@ -0,0 +1,12 @@ +# Effort: reasoning_effort = none|high|max; none disables thinking. +# low and medium map to high upstream, and minimal skips thinking like none. +base_model = "zhipuai/glm-5.2" +reasoning_options = [{ type = "effort", values = ["none", "high", "max"] }] +interleaved = true + +[cost] +input = 1.5 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.3-flash-instant.toml b/providers/lyceum/models/z-ai/glm-5.3-flash-instant.toml new file mode 100644 index 00000000000..1b2224d80ad --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.3-flash-instant.toml @@ -0,0 +1,14 @@ +# Name-encoded alias for z-ai/glm-5.3-flash: Lyceum sends the request with +# chat_template_kwargs.enable_thinking = false, so this id never reasons. +# Same weights and price as z-ai/glm-5.3-flash; it exists for clients that cannot set +# request parameters, such as GitHub Copilot and Cursor. +base_model = "zhipuai/glm-5.3-flash" +name = "GLM-5.3 Flash (Instant)" +reasoning = false + +[cost] +input = 0.2 +output = 0.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.3-flash.toml b/providers/lyceum/models/z-ai/glm-5.3-flash.toml new file mode 100644 index 00000000000..e93acc97078 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.3-flash.toml @@ -0,0 +1,14 @@ +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# The unlisted values are accepted but collapse onto these, as on Z.ai's own API. +base_model = "zhipuai/glm-5.3-flash" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] + +[interleaved] +field = "reasoning_content" + +[cost] +input = 0.2 +output = 0.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.3-instant.toml b/providers/lyceum/models/z-ai/glm-5.3-instant.toml new file mode 100644 index 00000000000..cf6b0b5ae61 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.3-instant.toml @@ -0,0 +1,14 @@ +# Name-encoded alias for z-ai/glm-5.3: Lyceum sends the request with +# chat_template_kwargs.enable_thinking = false, so this id never reasons. +# Same weights and price as z-ai/glm-5.3; it exists for clients that cannot set +# request parameters, such as GitHub Copilot and Cursor. +base_model = "zhipuai/glm-5.3" +name = "GLM-5.3 (Instant)" +reasoning = false + +[cost] +input = 1.75 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/models/z-ai/glm-5.3.toml b/providers/lyceum/models/z-ai/glm-5.3.toml new file mode 100644 index 00000000000..80a4d5e6aa0 --- /dev/null +++ b/providers/lyceum/models/z-ai/glm-5.3.toml @@ -0,0 +1,12 @@ +# Effort: reasoning_effort = none|low|high|max; none disables thinking. +# The unlisted values are accepted but collapse onto these, as on Z.ai's own API. +base_model = "zhipuai/glm-5.3" +reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }] +interleaved = true + +[cost] +input = 1.75 +output = 4.5 + +[limit] +output = 65_536 diff --git a/providers/lyceum/provider.toml b/providers/lyceum/provider.toml new file mode 100644 index 00000000000..abd148dec16 --- /dev/null +++ b/providers/lyceum/provider.toml @@ -0,0 +1,12 @@ +# OpenAI-compatible surface: POST https://api.lyceum.technology/openai/v1/chat/completions, +# GET /openai/v1/models. An Anthropic Messages surface exists at +# https://api.lyceum.technology/anthropic/v1/messages. +# Reasoning control is `reasoning_effort`; the accepted values differ per model +# and are recorded on each model file. `max_tokens` is capped at 65536 for every +# model, so every entry resolves limit.output to at most that. +# https://docs.lyceum.technology/docs/inference/serverless (accessed 2026-09-02) +name = "Lyceum" +env = ["LYCEUM_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://api.lyceum.technology/openai/v1" +doc = "https://docs.lyceum.technology/docs/inference/serverless"