gencow 0.1.129 → 0.1.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gencow",
3
- "version": "0.1.129",
3
+ "version": "0.1.131",
4
4
  "description": "Gencow — AI Backend Engine",
5
5
  "type": "module",
6
6
  "bin": {
@@ -39,6 +39,10 @@ let _fallbackAttempted = false; // 404 fallback 무한 재시도 방지 플래
39
39
  let _cachedProvider = createOpenAI({
40
40
  apiKey: API_KEY || "sk-not-configured",
41
41
  ...(PROXY_URL ? { baseURL: PROXY_URL } : {}),
42
+ // Gencow 프록시는 /v1/chat/completions 만 지원.
43
+ // @ai-sdk/openai v3+는 기본적으로 /v1/responses (Responses API)를 호출하므로,
44
+ // compatibility: "compatible" 를 설정하여 Chat Completions API를 사용하도록 강제.
45
+ compatibility: "compatible",
42
46
  });
43
47
 
44
48
  async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
@@ -67,7 +71,7 @@ async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
67
71
  " 프록시 URL: " + PROXY_URL + "\n" +
68
72
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
69
73
  );
70
- _cachedProvider = createOpenAI({ apiKey: directKey });
74
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
71
75
  } else {
72
76
  console.error(
73
77
  "\n🔴 AI 프록시 미응답 + OPENAI_API_KEY 미설정\n" +
@@ -90,14 +94,18 @@ function ensureProvider(): Promise<ReturnType<typeof createOpenAI>> {
90
94
  /**
91
95
  * string model名을 LanguageModel 객체로 자동 변환.
92
96
  * ai.chat({ model: "gpt-4o-mini" }) 처럼 string을 전달해도 정상 동작하도록 방어.
93
- * AI SDK v6에서 string model은 글로벌 프로바이더(Vercel AI Gateway)를 사용하므로,
94
- * 명시적으로 provider() 거쳐 설정된 API 키/프록시를 사용하게 한다.
97
+ *
98
+ * ⚠️ @ai-sdk/openai v3에서 provider(model) Responses API (/v1/responses)를 호출.
99
+ * Gencow 프록시는 /v1/chat/completions 만 지원하므로,
100
+ * 명시적으로 provider.chat(model) 을 사용하여 Chat Completions API로 강제.
95
101
  */
96
102
  async function resolveModel(model?: Parameters<typeof generateText>[0]["model"]) {
97
103
  const provider = await ensureProvider();
98
- if (typeof model === "string") return provider(model);
104
+ // provider.chat() = Chat Completions API (/v1/chat/completions)
105
+ // provider() = Responses API (/v1/responses) — 프록시 미지원!
106
+ if (typeof model === "string") return provider.chat(model);
99
107
  // defaultModel도 lazy: fallback 전환 후에도 올바른 provider가 적용되도록
100
- return model ?? provider("gpt-4o-mini");
108
+ return model ?? provider.chat("gpt-4o-mini");
101
109
  }
102
110
 
103
111
  /**
@@ -128,7 +136,7 @@ function _tryProxyFallback(err: unknown): boolean {
128
136
  " 프록시 URL: " + PROXY_URL + "\n" +
129
137
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
130
138
  );
131
- _cachedProvider = createOpenAI({ apiKey: directKey });
139
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
132
140
  _providerPromise = Promise.resolve(_cachedProvider); // ensureProvider()가 직접 provider를 반환하도록 고정
133
141
  _fallbackAttempted = true;
134
142
  return true;
package/templates/ai.ts CHANGED
@@ -39,6 +39,10 @@ let _fallbackAttempted = false; // 404 fallback 무한 재시도 방지 플래
39
39
  let _cachedProvider = createOpenAI({
40
40
  apiKey: API_KEY || "sk-not-configured",
41
41
  ...(PROXY_URL ? { baseURL: PROXY_URL } : {}),
42
+ // Gencow 프록시는 /v1/chat/completions 만 지원.
43
+ // @ai-sdk/openai v3+는 기본적으로 /v1/responses (Responses API)를 호출하므로,
44
+ // compatibility: "compatible" 를 설정하여 Chat Completions API를 사용하도록 강제.
45
+ compatibility: "compatible",
42
46
  });
43
47
 
44
48
  async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
@@ -67,7 +71,7 @@ async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
67
71
  " 프록시 URL: " + PROXY_URL + "\n" +
68
72
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
69
73
  );
70
- _cachedProvider = createOpenAI({ apiKey: directKey });
74
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
71
75
  } else {
72
76
  console.error(
73
77
  "\n🔴 AI 프록시 미응답 + OPENAI_API_KEY 미설정\n" +
@@ -90,14 +94,18 @@ function ensureProvider(): Promise<ReturnType<typeof createOpenAI>> {
90
94
  /**
91
95
  * string model名을 LanguageModel 객체로 자동 변환.
92
96
  * ai.chat({ model: "gpt-4o-mini" }) 처럼 string을 전달해도 정상 동작하도록 방어.
93
- * AI SDK v6에서 string model은 글로벌 프로바이더(Vercel AI Gateway)를 사용하므로,
94
- * 명시적으로 provider() 거쳐 설정된 API 키/프록시를 사용하게 한다.
97
+ *
98
+ * ⚠️ @ai-sdk/openai v3에서 provider(model) Responses API (/v1/responses)를 호출.
99
+ * Gencow 프록시는 /v1/chat/completions 만 지원하므로,
100
+ * 명시적으로 provider.chat(model) 을 사용하여 Chat Completions API로 강제.
95
101
  */
96
102
  async function resolveModel(model?: Parameters<typeof generateText>[0]["model"]) {
97
103
  const provider = await ensureProvider();
98
- if (typeof model === "string") return provider(model);
104
+ // provider.chat() = Chat Completions API (/v1/chat/completions)
105
+ // provider() = Responses API (/v1/responses) — 프록시 미지원!
106
+ if (typeof model === "string") return provider.chat(model);
99
107
  // defaultModel도 lazy: fallback 전환 후에도 올바른 provider가 적용되도록
100
- return model ?? provider("gpt-4o-mini");
108
+ return model ?? provider.chat("gpt-4o-mini");
101
109
  }
102
110
 
103
111
  /**
@@ -128,7 +136,7 @@ function _tryProxyFallback(err: unknown): boolean {
128
136
  " 프록시 URL: " + PROXY_URL + "\n" +
129
137
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
130
138
  );
131
- _cachedProvider = createOpenAI({ apiKey: directKey });
139
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
132
140
  _providerPromise = Promise.resolve(_cachedProvider); // ensureProvider()가 직접 provider를 반환하도록 고정
133
141
  _fallbackAttempted = true;
134
142
  return true;
@@ -39,6 +39,10 @@ let _fallbackAttempted = false; // 404 fallback 무한 재시도 방지 플래
39
39
  let _cachedProvider = createOpenAI({
40
40
  apiKey: API_KEY || "sk-not-configured",
41
41
  ...(PROXY_URL ? { baseURL: PROXY_URL } : {}),
42
+ // Gencow 프록시는 /v1/chat/completions 만 지원.
43
+ // @ai-sdk/openai v3+는 기본적으로 /v1/responses (Responses API)를 호출하므로,
44
+ // compatibility: "compatible" 를 설정하여 Chat Completions API를 사용하도록 강제.
45
+ compatibility: "compatible",
42
46
  });
43
47
 
44
48
  async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
@@ -67,7 +71,7 @@ async function _doHealthCheck(): Promise<ReturnType<typeof createOpenAI>> {
67
71
  " 프록시 URL: " + PROXY_URL + "\n" +
68
72
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
69
73
  );
70
- _cachedProvider = createOpenAI({ apiKey: directKey });
74
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
71
75
  } else {
72
76
  console.error(
73
77
  "\n🔴 AI 프록시 미응답 + OPENAI_API_KEY 미설정\n" +
@@ -90,14 +94,18 @@ function ensureProvider(): Promise<ReturnType<typeof createOpenAI>> {
90
94
  /**
91
95
  * string model名을 LanguageModel 객체로 자동 변환.
92
96
  * ai.chat({ model: "gpt-4o-mini" }) 처럼 string을 전달해도 정상 동작하도록 방어.
93
- * AI SDK v6에서 string model은 글로벌 프로바이더(Vercel AI Gateway)를 사용하므로,
94
- * 명시적으로 provider() 거쳐 설정된 API 키/프록시를 사용하게 한다.
97
+ *
98
+ * ⚠️ @ai-sdk/openai v3에서 provider(model) Responses API (/v1/responses)를 호출.
99
+ * Gencow 프록시는 /v1/chat/completions 만 지원하므로,
100
+ * 명시적으로 provider.chat(model) 을 사용하여 Chat Completions API로 강제.
95
101
  */
96
102
  async function resolveModel(model?: Parameters<typeof generateText>[0]["model"]) {
97
103
  const provider = await ensureProvider();
98
- if (typeof model === "string") return provider(model);
104
+ // provider.chat() = Chat Completions API (/v1/chat/completions)
105
+ // provider() = Responses API (/v1/responses) — 프록시 미지원!
106
+ if (typeof model === "string") return provider.chat(model);
99
107
  // defaultModel도 lazy: fallback 전환 후에도 올바른 provider가 적용되도록
100
- return model ?? provider("gpt-4o-mini");
108
+ return model ?? provider.chat("gpt-4o-mini");
101
109
  }
102
110
 
103
111
  /**
@@ -128,7 +136,7 @@ function _tryProxyFallback(err: unknown): boolean {
128
136
  " 프록시 URL: " + PROXY_URL + "\n" +
129
137
  " 이 모드에서는 크레딧이 차감되지 않으며, 직접 OpenAI에 요청됩니다.\n"
130
138
  );
131
- _cachedProvider = createOpenAI({ apiKey: directKey });
139
+ _cachedProvider = createOpenAI({ apiKey: directKey, compatibility: "compatible" });
132
140
  _providerPromise = Promise.resolve(_cachedProvider); // ensureProvider()가 직접 provider를 반환하도록 고정
133
141
  _fallbackAttempted = true;
134
142
  return true;