package models

const (
	ProviderOpenAI ModelProvider = "openai"

	GPT41        ModelID = "gpt-4.1"
	GPT41Mini    ModelID = "gpt-4.1-mini"
	GPT41Nano    ModelID = "gpt-4.1-nano"
	GPT45Preview ModelID = "gpt-4.5-preview"
	GPT4o        ModelID = "gpt-4o"
	GPT4oMini    ModelID = "gpt-4o-mini"
	O1           ModelID = "o1"
	O1Pro        ModelID = "o1-pro"
	O1Mini       ModelID = "o1-mini"
	O3           ModelID = "o3"
	O3Mini       ModelID = "o3-mini"
	O4Mini       ModelID = "o4-mini"
)

var OpenAIModels = map[ModelID]Model{
	GPT41: {
		ID:                 GPT41,
		Name:               "GPT 4.1",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4.1",
		CostPer1MIn:        2.00,
		CostPer1MInCached:  0.50,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       8.00,
		ContextWindow:      1_047_576,
		DefaultMaxTokens:   20000,
	},
	GPT41Mini: {
		ID:                 GPT41Mini,
		Name:               "GPT 4.1 mini",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4.1",
		CostPer1MIn:        0.40,
		CostPer1MInCached:  0.10,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       1.60,
		ContextWindow:      200_000,
		DefaultMaxTokens:   20000,
	},
	GPT41Nano: {
		ID:                 GPT41Nano,
		Name:               "GPT 4.1 nano",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4.1-nano",
		CostPer1MIn:        0.10,
		CostPer1MInCached:  0.025,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       0.40,
		ContextWindow:      1_047_576,
		DefaultMaxTokens:   20000,
	},
	GPT45Preview: {
		ID:                 GPT45Preview,
		Name:               "GPT 4.5 preview",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4.5-preview",
		CostPer1MIn:        75.00,
		CostPer1MInCached:  37.50,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       150.00,
		ContextWindow:      128_000,
		DefaultMaxTokens:   15000,
	},
	GPT4o: {
		ID:                 GPT4o,
		Name:               "GPT 4o",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4o",
		CostPer1MIn:        2.50,
		CostPer1MInCached:  1.25,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       10.00,
		ContextWindow:      128_000,
		DefaultMaxTokens:   4096,
	},
	GPT4oMini: {
		ID:                 GPT4oMini,
		Name:               "GPT 4o mini",
		Provider:           ProviderOpenAI,
		APIModel:           "gpt-4o-mini",
		CostPer1MIn:        0.15,
		CostPer1MInCached:  0.075,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       0.60,
		ContextWindow:      128_000,
	},
	O1: {
		ID:                 O1,
		Name:               "O1",
		Provider:           ProviderOpenAI,
		APIModel:           "o1",
		CostPer1MIn:        15.00,
		CostPer1MInCached:  7.50,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       60.00,
		ContextWindow:      200_000,
		DefaultMaxTokens:   50000,
		CanReason:          true,
	},
	O1Pro: {
		ID:                 O1Pro,
		Name:               "o1 pro",
		Provider:           ProviderOpenAI,
		APIModel:           "o1-pro",
		CostPer1MIn:        150.00,
		CostPer1MInCached:  0.0,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       600.00,
		ContextWindow:      200_000,
		DefaultMaxTokens:   50000,
		CanReason:          true,
	},
	O1Mini: {
		ID:                 O1Mini,
		Name:               "o1 mini",
		Provider:           ProviderOpenAI,
		APIModel:           "o1-mini",
		CostPer1MIn:        1.10,
		CostPer1MInCached:  0.55,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       4.40,
		ContextWindow:      128_000,
		DefaultMaxTokens:   50000,
		CanReason:          true,
	},
	O3: {
		ID:                 O3,
		Name:               "o3",
		Provider:           ProviderOpenAI,
		APIModel:           "o3",
		CostPer1MIn:        10.00,
		CostPer1MInCached:  2.50,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       40.00,
		ContextWindow:      200_000,
		CanReason:          true,
	},
	O3Mini: {
		ID:                 O3Mini,
		Name:               "o3 mini",
		Provider:           ProviderOpenAI,
		APIModel:           "o3-mini",
		CostPer1MIn:        1.10,
		CostPer1MInCached:  0.55,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       4.40,
		ContextWindow:      200_000,
		DefaultMaxTokens:   50000,
		CanReason:          true,
	},
	O4Mini: {
		ID:                 O4Mini,
		Name:               "o4 mini",
		Provider:           ProviderOpenAI,
		APIModel:           "o4-mini",
		CostPer1MIn:        1.10,
		CostPer1MInCached:  0.275,
		CostPer1MOutCached: 0.0,
		CostPer1MOut:       4.40,
		ContextWindow:      128_000,
		DefaultMaxTokens:   50000,
		CanReason:          true,
	},
}
