everydaycats commited on
Commit
1152807
·
verified ·
1 Parent(s): 1e3696d

Update ai_engine.js

Browse files
Files changed (1) hide show
  1. ai_engine.js +18 -18
ai_engine.js CHANGED
@@ -18,11 +18,8 @@ const getModelId = (modelName) => {
18
  case "nemotron-12b": return "nvidia/nemotron-nano-12b-v2-vl:free";
19
  case "gpt": case "gpt-5.4-nano": return "openai/gpt-5.4-nano";
20
  case "qwen-non": return "qwen/qwen3-vl-30b-a3b-instruct";
21
-
22
- case "bytedance-1.6": return "bytedance-seed/seed-1.6-flash:floor";
23
- case "mistral-small": return "mistralai/mistral-small-2603";
24
-
25
-
26
  case "qwen": default: return "qwen/qwen3-vl-30b-a3b-thinking:floor";
27
  }
28
  };
@@ -30,8 +27,8 @@ const getModelId = (modelName) => {
30
  // --- IMAGE MODEL ROUTER ---
31
  const getImageModelId = (tier) => {
32
  switch (tier) {
33
- case "premium": return "bytedance-seed/seedream-4.5"; // $0.04/img
34
- case "quick": return "sourceful/riverflow-v2-fast"; // $0.002/img
35
  default: return "sourceful/riverflow-v2-fast";
36
  }
37
  };
@@ -50,7 +47,9 @@ const logOpenRouterError = (error, context) => {
50
  };
51
 
52
  // --- TEXT COMPLETION ---
53
- export const generateCompletion = async ({ model, prompt, system_prompt, images }) => {
 
 
54
  try {
55
  const targetModel = getModelId(model);
56
  let messagesPayload = [
@@ -70,12 +69,19 @@ export const generateCompletion = async ({ model, prompt, system_prompt, images
70
  messagesPayload.push({ role: "user", content: prompt });
71
  }
72
 
73
- const response = await openRouterAI.chat.completions.create({
74
  model: targetModel,
75
  messages: messagesPayload,
76
- response_format: { type: "json_object" },
77
  max_tokens: 1200,
78
- });
 
 
 
 
 
 
 
 
79
 
80
  return {
81
  success: true,
@@ -136,7 +142,6 @@ export const streamCompletion = async ({ model, prompt, system_prompt, images, r
136
  };
137
 
138
  // --- IMAGE GENERATION ---
139
- // Uses OpenRouter's image generation endpoint directly (not chat completions)
140
  export const generateImage = async ({ prompt, tier = "quick" }) => {
141
  try {
142
  const model = getImageModelId(tier);
@@ -149,12 +154,7 @@ export const generateImage = async ({ prompt, tier = "quick" }) => {
149
  "HTTP-Referer": process.env.YOUR_SITE_URL || "https://everydaycats.web.app",
150
  "X-Title": process.env.YOUR_SITE_NAME || "lightnovel.ai",
151
  },
152
- body: JSON.stringify({
153
- model,
154
- prompt,
155
- n: 1,
156
- size: "1024x1024",
157
- })
158
  });
159
 
160
  if (!response.ok) {
 
18
  case "nemotron-12b": return "nvidia/nemotron-nano-12b-v2-vl:free";
19
  case "gpt": case "gpt-5.4-nano": return "openai/gpt-5.4-nano";
20
  case "qwen-non": return "qwen/qwen3-vl-30b-a3b-instruct";
21
+ case "bytedance-1.6": return "bytedance-seed/seed-1.6-flash:floor";
22
+ case "mistral-small": return "mistralai/mistral-small-2603";
 
 
 
23
  case "qwen": default: return "qwen/qwen3-vl-30b-a3b-thinking:floor";
24
  }
25
  };
 
27
  // --- IMAGE MODEL ROUTER ---
28
  const getImageModelId = (tier) => {
29
  switch (tier) {
30
+ case "premium": return "bytedance-seed/seedream-4.5";
31
+ case "quick": return "sourceful/riverflow-v2-fast";
32
  default: return "sourceful/riverflow-v2-fast";
33
  }
34
  };
 
47
  };
48
 
49
  // --- TEXT COMPLETION ---
50
+ // forceJson: true → response_format json_object (structured calls, e.g. aura scan)
51
+ // forceJson: false → plain text (e.g. ReplyGenius chat replies)
52
+ export const generateCompletion = async ({ model, prompt, system_prompt, images, forceJson = true }) => {
53
  try {
54
  const targetModel = getModelId(model);
55
  let messagesPayload = [
 
69
  messagesPayload.push({ role: "user", content: prompt });
70
  }
71
 
72
+ const requestParams = {
73
  model: targetModel,
74
  messages: messagesPayload,
 
75
  max_tokens: 1200,
76
+ };
77
+
78
+ // ✅ Only enforce JSON schema when explicitly requested.
79
+ // Sending response_format with a plain-text prompt causes 400 on most providers.
80
+ if (forceJson) {
81
+ requestParams.response_format = { type: "json_object" };
82
+ }
83
+
84
+ const response = await openRouterAI.chat.completions.create(requestParams);
85
 
86
  return {
87
  success: true,
 
142
  };
143
 
144
  // --- IMAGE GENERATION ---
 
145
  export const generateImage = async ({ prompt, tier = "quick" }) => {
146
  try {
147
  const model = getImageModelId(tier);
 
154
  "HTTP-Referer": process.env.YOUR_SITE_URL || "https://everydaycats.web.app",
155
  "X-Title": process.env.YOUR_SITE_NAME || "lightnovel.ai",
156
  },
157
+ body: JSON.stringify({ model, prompt, n: 1, size: "1024x1024" })
 
 
 
 
 
158
  });
159
 
160
  if (!response.ok) {