fix: hardcode model list — Raycast runtime doesn't expose AI.Model object
@raycast/api ships only types, no runtime JS. AI.Model is injected by Raycast at runtime and Object.entries() returned an unpredictable (and incomplete) subset — so half the current models were missing from the in-view dropdown. Replace the dynamic derivation with an explicit curated list covering all 55+ non-deprecated entries from the SDK type defs, ordered by provider with the strongest models first. Update README to point at src/ai.ts as the place to keep this in sync with future SDK bumps. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@ Alle Werte sind in den Raycast-Einstellungen pro Extension einstellbar.
|
||||
**Verhalten:**
|
||||
- `Standard-Sitzungsmodus` — `Aktive Sitzung wiederverwenden` (Default), `Neue Sitzung pro Anfrage`, `Tagessitzung`
|
||||
- `Ausgabe der Schnellbefehle` — `In die Zwischenablage kopieren` (Default) oder `Am Cursor einfügen`
|
||||
- `Standard-Modell für AI-Befehle` — Modell-ID, die in den AI-Views vorausgewählt ist (Default `anthropic-claude-sonnet-4-6`, benötigt Raycast Pro). Die vollständige Modellliste leiten die Views dynamisch aus `AI.Model` der Raycast-API ab — sobald ein neues Modell verfügbar ist, taucht es ohne Code-Änderung im View-Dropdown auf.
|
||||
- `Standard-Modell für AI-Befehle` — Modell-ID, die in den AI-Views vorausgewählt ist (Default `anthropic-claude-sonnet-4-6`, benötigt Raycast Pro). Die View-Dropdowns listen aktuelle Modelle aus `src/ai.ts`; neue Modelle dort eintragen, wenn Raycast sie ausrollt.
|
||||
- `Eigener Name` — Default-Signatur für AI-generierte Email-Antworten, im Antwort-Befehl pro Aufruf überschreibbar
|
||||
- `Maximale Anzahl gespeicherter Sitzungen` — älteste werden geprunt (Default 20)
|
||||
- `Raycast nach Kopieren/Einfügen schließen` — Auto-Close und Pop-To-Root nach AI-Workflow-Abschluss (Default an)
|
||||
|
||||
83
src/ai.ts
83
src/ai.ts
@@ -1,5 +1,3 @@
|
||||
import { AI } from "@raycast/api";
|
||||
|
||||
export type Creativity = "none" | "low" | "medium" | "high";
|
||||
|
||||
export const CREATIVITY_OPTIONS: Creativity[] = [
|
||||
@@ -11,20 +9,73 @@ export const CREATIVITY_OPTIONS: Creativity[] = [
|
||||
|
||||
export type ModelOption = { value: string; title: string };
|
||||
|
||||
function buildModelOptions(): ModelOption[] {
|
||||
const seen = new Set<string>();
|
||||
const options: ModelOption[] = [];
|
||||
for (const [key, value] of Object.entries(AI.Model) as Array<
|
||||
[string, string]
|
||||
>) {
|
||||
if (seen.has(value)) continue;
|
||||
seen.add(value);
|
||||
options.push({ value, title: key.replace(/_/g, " ") });
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
export const MODEL_OPTIONS: ModelOption[] = buildModelOptions();
|
||||
export const MODEL_OPTIONS: ModelOption[] = [
|
||||
{ value: "anthropic-claude-opus-4-7", title: "Claude 4.7 Opus" },
|
||||
{ value: "anthropic-claude-sonnet-4-6", title: "Claude 4.6 Sonnet" },
|
||||
{ value: "anthropic-claude-opus-4-6", title: "Claude 4.6 Opus" },
|
||||
{ value: "anthropic-claude-sonnet-4-5", title: "Claude 4.5 Sonnet" },
|
||||
{ value: "anthropic-claude-opus-4-5", title: "Claude 4.5 Opus" },
|
||||
{ value: "anthropic-claude-4-5-haiku", title: "Claude 4.5 Haiku" },
|
||||
{ value: "anthropic-claude-sonnet-4", title: "Claude 4 Sonnet" },
|
||||
{ value: "openai-gpt-5.4", title: "OpenAI GPT-5.4" },
|
||||
{ value: "openai-gpt-5.4-mini", title: "OpenAI GPT-5.4 Mini" },
|
||||
{ value: "openai-gpt-5.4-nano", title: "OpenAI GPT-5.4 Nano" },
|
||||
{ value: "openai-gpt-5.3-instant", title: "OpenAI GPT-5.3 Instant" },
|
||||
{ value: "openai-gpt-5.3-codex", title: "OpenAI GPT-5.3 Codex" },
|
||||
{ value: "openai-gpt-5.2", title: "OpenAI GPT-5.2" },
|
||||
{ value: "openai-gpt-5.2-instant", title: "OpenAI GPT-5.2 Instant" },
|
||||
{ value: "openai-gpt-5.1", title: "OpenAI GPT-5.1" },
|
||||
{ value: "openai-gpt-5.1-instant", title: "OpenAI GPT-5.1 Instant" },
|
||||
{ value: "openai-gpt-5.1-codex", title: "OpenAI GPT-5.1 Codex" },
|
||||
{ value: "openai_o1-gpt-5", title: "OpenAI GPT-5" },
|
||||
{ value: "openai-gpt-5-mini", title: "OpenAI GPT-5 Mini" },
|
||||
{ value: "openai-gpt-5-nano", title: "OpenAI GPT-5 Nano" },
|
||||
{ value: "openai-gpt-4.1", title: "OpenAI GPT-4.1" },
|
||||
{ value: "openai-gpt-4.1-mini", title: "OpenAI GPT-4.1 Mini" },
|
||||
{ value: "openai-gpt-4.1-nano", title: "OpenAI GPT-4.1 Nano" },
|
||||
{ value: "openai-gpt-4o", title: "OpenAI GPT-4o" },
|
||||
{ value: "openai-gpt-4o-mini", title: "OpenAI GPT-4o mini" },
|
||||
{ value: "openai_o1-o3", title: "OpenAI o3" },
|
||||
{ value: "openai_o1-o3-mini", title: "OpenAI o3-mini" },
|
||||
{ value: "openai_o1-o4-mini", title: "OpenAI o4-mini" },
|
||||
{ value: "openai_o1-o1", title: "OpenAI o1" },
|
||||
{ value: "google-gemini-3.1-pro", title: "Google Gemini 3.1 Pro" },
|
||||
{ value: "google-gemini-3-flash", title: "Google Gemini 3 Flash" },
|
||||
{
|
||||
value: "google-gemini-3.1-flash-lite",
|
||||
title: "Google Gemini 3.1 Flash Lite",
|
||||
},
|
||||
{ value: "google-gemini-2.5-pro", title: "Google Gemini 2.5 Pro" },
|
||||
{ value: "google-gemini-2.5-flash", title: "Google Gemini 2.5 Flash" },
|
||||
{
|
||||
value: "google-gemini-2.5-flash-lite",
|
||||
title: "Google Gemini 2.5 Flash Lite",
|
||||
},
|
||||
{ value: "xai-grok-4.20", title: "xAI Grok 4.20" },
|
||||
{ value: "xai-grok-4", title: "xAI Grok 4" },
|
||||
{ value: "xai-grok-4-fast", title: "xAI Grok 4 Fast" },
|
||||
{ value: "xai-grok-4-1-fast", title: "xAI Grok 4.1 Fast" },
|
||||
{ value: "xai-grok-code-fast", title: "xAI Grok Code Fast" },
|
||||
{ value: "perplexity-sonar-pro", title: "Perplexity Sonar Pro" },
|
||||
{ value: "perplexity-sonar", title: "Perplexity Sonar" },
|
||||
{ value: "mistral-mistral-large-latest", title: "Mistral Large" },
|
||||
{ value: "mistral-mistral-medium-latest", title: "Mistral Medium" },
|
||||
{ value: "mistral-mistral-small-latest", title: "Mistral Small" },
|
||||
{ value: "mistral-codestral-latest", title: "Mistral Codestral" },
|
||||
{ value: "mistral-open-mistral-nemo", title: "Mistral Nemo" },
|
||||
{ value: "groq-llama-3.3-70b-versatile", title: "Groq Llama 3.3 70B" },
|
||||
{
|
||||
value: "groq-meta-llama/llama-4-scout-17b-16e-instruct",
|
||||
title: "Groq Llama 4 Scout",
|
||||
},
|
||||
{ value: "groq-llama-3.1-8b-instant", title: "Groq Llama 3.1 8B" },
|
||||
{ value: "groq-qwen/qwen3-32b", title: "Groq Qwen3 32B" },
|
||||
{ value: "groq-openai/gpt-oss-120b", title: "Groq GPT-OSS 120B" },
|
||||
{ value: "groq-openai/gpt-oss-20b", title: "Groq GPT-OSS 20B" },
|
||||
{ value: "together-deepseek-ai/DeepSeek-R1", title: "DeepSeek R1" },
|
||||
{ value: "together-deepseek-ai/DeepSeek-V3", title: "DeepSeek V3" },
|
||||
{ value: "together-moonshotai/Kimi-K2.5", title: "Kimi K2.5" },
|
||||
];
|
||||
|
||||
export const STRICT_PLACEHOLDER_RULE = [
|
||||
"STRENGE REGEL: Gib jeden Platzhalter zeichengetreu (inklusive spitzer Klammern, Großbuchstaben und Unterstrich + Nummer) zurück.",
|
||||
|
||||
Reference in New Issue
Block a user