open-prompt / src /types /prompt.ts
GitHub Action
Automated sync to Hugging Face
bcce530
import { Prompt } from "@prisma/client"
export interface VariableSchema {
name: string
type: "text" | "textarea" | "dropdown" | "number" | "boolean"
label: string
placeholder?: string
description?: string
required?: boolean
default?: string | number | boolean
options?: string[] // For dropdown type
min?: number // For number type
max?: number // For number type
}
export interface PromptSchema {
variables: VariableSchema[]
output?: {
format: "markdown" | "text" | "code"
streaming: boolean
}
}
export interface PromptWithCreator extends Prompt {
creator: {
id: string
name: string | null
username: string | null
image: string | null
} | null
parent?: {
id: string
slug: string
title: string
} | null
_count?: {
remixes: number
stars: number
}
}
export interface RunConfig {
promptId: string
template: string
variables: Record<string, string | number | boolean>
model: string
maxTokens?: number
}
// Cloud AI Model configurations
export const AI_MODELS = {
"gemini-2.5-flash": {
name: "Gemini 2.5 Flash",
provider: "google",
description: "Latest & fastest Gemini model",
maxTokens: 8192,
},
"gemini-2.0-flash": {
name: "Gemini 2.0 Flash",
provider: "google",
description: "Fast multimodal",
maxTokens: 4096,
},
"gpt-4o-mini": {
name: "GPT-4o Mini",
provider: "openai",
description: "Fast and affordable",
maxTokens: 4096,
},
"gpt-4o": {
name: "GPT-4o",
provider: "openai",
description: "Most capable GPT",
maxTokens: 4096,
},
"claude-3-5-sonnet": {
name: "Claude 3.5 Sonnet",
provider: "anthropic",
description: "Great for long content",
maxTokens: 4096,
},
} as const
// Ollama Model configurations (local models)
export const OLLAMA_MODELS = {
// Vision-Language Models
"qwen3-vl:2b": { name: "Qwen3-VL 2B", description: "Smallest vision-language model", maxTokens: 4096 },
"qwen3-vl:4b": { name: "Qwen3-VL 4B", description: "Compact vision-language model", maxTokens: 4096 },
"qwen3-vl:8b": { name: "Qwen3-VL 8B", description: "Balanced vision-language model", maxTokens: 4096 },
"qwen3-vl:30b": { name: "Qwen3-VL 30B", description: "Powerful vision-language model", maxTokens: 8192 },
// Coding Models
"devstral-small-2:24b": { name: "Devstral Small 2", description: "24B coding agent model", maxTokens: 8192 },
"qwen3-coder:30b": { name: "Qwen3 Coder 30B", description: "Coding & agentic tasks", maxTokens: 8192 },
"rnj-1:8b": { name: "RNJ-1 8B", description: "Code & STEM optimized", maxTokens: 4096 },
// General Models
"gemma3:12b": { name: "Gemma 3 12B", description: "Capable single GPU model", maxTokens: 4096 },
"gemma3:27b": { name: "Gemma 3 27B", description: "Largest Gemma model", maxTokens: 4096 },
"ministral-3:3b": { name: "Ministral 3 3B", description: "Edge deployment model", maxTokens: 4096 },
"ministral-3:8b": { name: "Ministral 3 8B", description: "Balanced edge model", maxTokens: 4096 },
"glm-4.6": { name: "GLM 4.6", description: "Advanced agentic & reasoning", maxTokens: 4096 },
// Thinking/Reasoning Models
"gpt-oss:20b": { name: "GPT-OSS 20B", description: "OpenAI open-weight model", maxTokens: 4096 },
"gpt-oss:120b": { name: "GPT-OSS 120B", description: "Large reasoning model", maxTokens: 8192 },
"deepseek-v3.1:671b": { name: "DeepSeek V3.1", description: "Hybrid thinking model", maxTokens: 8192 },
"deepseek-v3.2": { name: "DeepSeek V3.2", description: "Efficient reasoning & agents", maxTokens: 8192 },
"cogito-2.1:671b": { name: "Cogito 2.1", description: "MIT licensed, commercial use", maxTokens: 8192 },
"kimi-k2": { name: "Kimi K2", description: "MoE model for coding agents", maxTokens: 8192 },
"kimi-k2-thinking": { name: "Kimi K2 Thinking", description: "Best open thinking model", maxTokens: 8192 },
"qwen3-next:80b": { name: "Qwen3 Next 80B", description: "Efficient inference thinking", maxTokens: 8192 },
// Generic fallbacks
"llama3.2:3b": { name: "Llama 3.2 3B", description: "Compact Llama model", maxTokens: 4096 },
"llama3.2:8b": { name: "Llama 3.2 8B", description: "Balanced Llama model", maxTokens: 4096 },
"mistral:7b": { name: "Mistral 7B", description: "Fast general model", maxTokens: 4096 },
"mixtral:8x7b": { name: "Mixtral 8x7B", description: "MoE general model", maxTokens: 8192 },
} as const
export type ModelId = keyof typeof AI_MODELS
export type OllamaModelId = keyof typeof OLLAMA_MODELS
export type AnyModelId = ModelId | OllamaModelId | string
// Gemini 2.5 Flash as default since user has that API key
export const DEFAULT_MODEL: ModelId = "gemini-2.5-flash"
// Helper to check if model is Ollama
export function isOllamaModel(modelId: string): boolean {
return modelId in OLLAMA_MODELS || modelId.includes(":")
}
// Get all models for selection
export function getAllModels() {
const cloudModels = Object.entries(AI_MODELS).map(([id, config]) => ({
id,
...config,
provider: config.provider,
isOllama: false,
}))
const ollamaModels = Object.entries(OLLAMA_MODELS).map(([id, config]) => ({
id,
...config,
provider: "ollama",
isOllama: true,
}))
return { cloudModels, ollamaModels }
}