ugly-app 0.1.1 → 0.1.2

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.
Files changed (41) hide show
  1. package/dist/cli/scaffold.js +6 -6
  2. package/dist/cli/scaffold.js.map +1 -1
  3. package/dist/server/ai/providers/Claude.d.ts.map +1 -1
  4. package/dist/server/ai/providers/Claude.js +77 -45
  5. package/dist/server/ai/providers/Claude.js.map +1 -1
  6. package/dist/server/ai/providers/FAL.d.ts.map +1 -1
  7. package/dist/server/ai/providers/FAL.js +43 -12
  8. package/dist/server/ai/providers/FAL.js.map +1 -1
  9. package/dist/server/ai/providers/Google.d.ts.map +1 -1
  10. package/dist/server/ai/providers/Google.js +64 -33
  11. package/dist/server/ai/providers/Google.js.map +1 -1
  12. package/dist/server/ai/providers/GoogleImage.d.ts.map +1 -1
  13. package/dist/server/ai/providers/GoogleImage.js +11 -12
  14. package/dist/server/ai/providers/GoogleImage.js.map +1 -1
  15. package/dist/server/ai/providers/Groq.d.ts.map +1 -1
  16. package/dist/server/ai/providers/Groq.js +62 -31
  17. package/dist/server/ai/providers/Groq.js.map +1 -1
  18. package/dist/server/ai/providers/OpenAIText.d.ts.map +1 -1
  19. package/dist/server/ai/providers/OpenAIText.js +69 -39
  20. package/dist/server/ai/providers/OpenAIText.js.map +1 -1
  21. package/dist/server/ai/providers/Together.d.ts.map +1 -1
  22. package/dist/server/ai/providers/Together.js +60 -30
  23. package/dist/server/ai/providers/Together.js.map +1 -1
  24. package/dist/server/ai/providers/TogetherImage.d.ts.map +1 -1
  25. package/dist/server/ai/providers/TogetherImage.js +17 -10
  26. package/dist/server/ai/providers/TogetherImage.js.map +1 -1
  27. package/package.json +2 -12
  28. package/templates/CLAUDE.md +17 -17
  29. package/templates/client/App.tsx +2 -2
  30. package/templates/client/main.tsx +1 -1
  31. package/templates/client/pages/AuthDemoPage.tsx +1 -1
  32. package/templates/client/pages/HomePage.tsx +2 -2
  33. package/templates/client/pages/SearchPage.tsx +1 -1
  34. package/templates/client/pages/UserPage.tsx +1 -1
  35. package/templates/client/router.ts +1 -1
  36. package/templates/package.json +18 -18
  37. package/templates/server/index.ts +1 -1
  38. package/templates/shared/api.ts +1 -1
  39. package/templates/shared/collections.ts +1 -1
  40. package/templates/shared/dbIndexes.ts +2 -2
  41. package/templates/shared/pages.ts +1 -1
@@ -11,15 +11,15 @@ export async function scaffoldProject(projectName) {
11
11
  if (await fs.pathExists(destDir)) {
12
12
  throw new Error(`Directory '${projectName}' already exists`);
13
13
  }
14
- console.log(`[website-core] Creating project: ${projectName}`);
14
+ console.log(`[ugly-app] Creating project: ${projectName}`);
15
15
  await fs.copy(TEMPLATES_DIR, destDir);
16
16
  // Rename package.json name field
17
17
  const pkgPath = path.join(destDir, 'package.json');
18
18
  const pkg = await fs.readJson(pkgPath);
19
19
  pkg.name = projectName;
20
20
  await fs.writeJson(pkgPath, pkg, { spaces: 2 });
21
- console.log('[website-core] Installing dependencies...');
22
- execSync('yarn install', { cwd: destDir, stdio: 'inherit' });
21
+ console.log('[ugly-app] Installing dependencies...');
22
+ execSync('npm install', { cwd: destDir, stdio: 'inherit' });
23
23
  const portStart = 3000;
24
24
  const projectId = nanoid(10);
25
25
  writeUglyAppConfig(destDir, { projectId, portStart });
@@ -27,11 +27,11 @@ export async function scaffoldProject(projectName) {
27
27
  printPortTable(portStart);
28
28
  console.log('Edit .uglyapp to change portStart if running multiple projects simultaneously.');
29
29
  console.log(`
30
- [website-core] Done! Next steps:
30
+ [ugly-app] Done! Next steps:
31
31
  cd ${projectName}
32
32
  cp .env.example .env # fill in JWT_SECRET and TOGETHER_API_KEY
33
- yarn dev # start everything
34
- yarn db:init # create indexes
33
+ npm run dev # start everything
34
+ npm run db:init # create indexes
35
35
  `);
36
36
  }
37
37
  //# sourceMappingURL=scaffold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEzD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAEtC,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;IACjE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CACT,gFAAgF,CACjF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC;;OAEP,WAAW;;;;CAIjB,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEzD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAEtC,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5D,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,kBAAkB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;IACjE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CACT,gFAAgF,CACjF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC;;OAEP,WAAW;;;;CAIjB,CAAC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Claude.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Claude.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AA+BrB,eAAO,MAAM,kBAAkB,EAAE,eAiHhC,CAAC"}
1
+ {"version":3,"file":"Claude.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAkCrB,eAAO,MAAM,kBAAkB,EAAE,eAoIhC,CAAC"}
@@ -1,12 +1,13 @@
1
1
  // src/server/ai/providers/Claude.ts
2
- import Anthropic from '@anthropic-ai/sdk';
3
2
  import { z } from 'zod';
4
3
  const MODEL = 'claude-sonnet-4-6';
5
- function getClient() {
6
- const apiKey = process.env.ANTHROPIC_API_KEY;
7
- if (!apiKey)
8
- throw new Error('[Claude] ANTHROPIC_API_KEY is required');
9
- return new Anthropic({ apiKey });
4
+ const ENDPOINT = 'https://api.anthropic.com/v1/messages';
5
+ function headers(apiKey) {
6
+ return {
7
+ 'Content-Type': 'application/json',
8
+ 'x-api-key': apiKey,
9
+ 'anthropic-version': '2023-06-01',
10
+ };
10
11
  }
11
12
  // Note: image_url parts are not forwarded to the API (text-only in current implementation)
12
13
  function toText(content) {
@@ -38,72 +39,103 @@ export const claudeTextProvider = {
38
39
  costPerMillionInputTokens: 3.0,
39
40
  costPerMillionOutputTokens: 15.0,
40
41
  async generate(messages, options = {}) {
41
- const res = await getClient().messages.create({
42
- model: MODEL,
43
- max_tokens: options.maxTokens ?? 1024,
44
- temperature: options.temperature ?? 0.7,
45
- system: extractSystem(messages),
46
- messages: normalizeMessages(messages),
42
+ const apiKey = process.env.ANTHROPIC_API_KEY;
43
+ if (!apiKey)
44
+ throw new Error('[Claude] ANTHROPIC_API_KEY is required');
45
+ const system = extractSystem(messages);
46
+ const res = await fetch(ENDPOINT, {
47
+ method: 'POST',
48
+ headers: headers(apiKey),
49
+ body: JSON.stringify({
50
+ model: MODEL,
51
+ max_tokens: options.maxTokens ?? 1024,
52
+ temperature: options.temperature ?? 0.7,
53
+ ...(system !== undefined ? { system } : {}),
54
+ messages: normalizeMessages(messages),
55
+ }),
47
56
  });
48
- const block = res.content[0];
49
- return block?.type === 'text' ? block.text : '';
57
+ if (!res.ok)
58
+ throw new Error(`[Claude] API error ${res.status}: ${await res.text()}`);
59
+ const data = (await res.json());
60
+ return data.content[0]?.text ?? '';
50
61
  },
51
62
  async generateJson(schema, messages, options = {}) {
52
- const res = await getClient().messages.create({
53
- model: MODEL,
54
- max_tokens: options.maxTokens ?? 1024,
55
- system: extractSystem(messages),
56
- messages: normalizeMessages(messages),
57
- tools: [
58
- {
59
- name: 'respond',
60
- description: 'Respond with structured data',
61
- input_schema: z.toJSONSchema(schema),
62
- },
63
- ],
64
- tool_choice: { type: 'tool', name: 'respond' },
63
+ const apiKey = process.env.ANTHROPIC_API_KEY;
64
+ if (!apiKey)
65
+ throw new Error('[Claude] ANTHROPIC_API_KEY is required');
66
+ const system = extractSystem(messages);
67
+ const res = await fetch(ENDPOINT, {
68
+ method: 'POST',
69
+ headers: headers(apiKey),
70
+ body: JSON.stringify({
71
+ model: MODEL,
72
+ max_tokens: options.maxTokens ?? 1024,
73
+ temperature: options.temperature ?? 0.7,
74
+ ...(system !== undefined ? { system } : {}),
75
+ messages: normalizeMessages(messages),
76
+ tools: [
77
+ {
78
+ name: 'respond',
79
+ description: 'Respond with structured data',
80
+ input_schema: z.toJSONSchema(schema),
81
+ },
82
+ ],
83
+ tool_choice: { type: 'tool', name: 'respond' },
84
+ }),
65
85
  });
66
- const block = res.content.find((b) => b.type === 'tool_use');
67
- if (!block || block.type !== 'tool_use')
86
+ if (!res.ok)
87
+ throw new Error(`[Claude] API error ${res.status}: ${await res.text()}`);
88
+ const data = (await res.json());
89
+ const block = data.content.find((b) => b.type === 'tool_use');
90
+ if (!block)
68
91
  throw new Error('[Claude] No tool_use block');
69
92
  return schema.parse(block.input);
70
93
  },
71
94
  async generateWithTools(messages, tools, options = {}) {
72
- const anthropicTools = Object.entries(tools).map(([name, def]) => ({
95
+ const apiKey = process.env.ANTHROPIC_API_KEY;
96
+ if (!apiKey)
97
+ throw new Error('[Claude] ANTHROPIC_API_KEY is required');
98
+ const apiTools = Object.entries(tools).map(([name, def]) => ({
73
99
  name,
74
100
  description: def.description,
75
101
  input_schema: z.toJSONSchema(def.input),
76
102
  }));
103
+ const system = extractSystem(messages);
77
104
  const convMessages = normalizeMessages(messages);
78
105
  const allToolCalls = [];
79
106
  for (let round = 0; round < 5; round++) {
80
- const res = await getClient().messages.create({
81
- model: MODEL,
82
- max_tokens: options.maxTokens ?? 1024,
83
- system: extractSystem(messages),
84
- messages: convMessages,
85
- tools: anthropicTools,
107
+ const res = await fetch(ENDPOINT, {
108
+ method: 'POST',
109
+ headers: headers(apiKey),
110
+ body: JSON.stringify({
111
+ model: MODEL,
112
+ max_tokens: options.maxTokens ?? 1024,
113
+ ...(system !== undefined ? { system } : {}),
114
+ messages: convMessages,
115
+ tools: apiTools,
116
+ }),
86
117
  });
87
- if (res.stop_reason === 'end_turn') {
88
- const text = res.content.find((b) => b.type === 'text');
118
+ if (!res.ok)
119
+ throw new Error(`[Claude] API error ${res.status}: ${await res.text()}`);
120
+ const data = (await res.json());
121
+ if (data.stop_reason === 'end_turn') {
122
+ const text = data.content.find((b) => b.type === 'text');
89
123
  return {
90
- response: text?.type === 'text' ? text.text : '',
124
+ response: text?.text ?? '',
91
125
  toolCalls: allToolCalls,
92
126
  };
93
127
  }
94
- const useBlocks = res.content.filter((b) => b.type === 'tool_use');
128
+ const useBlocks = data.content.filter((b) => b.type === 'tool_use');
95
129
  if (!useBlocks.length) {
96
- const text = res.content.find((b) => b.type === 'text');
130
+ const text = data.content.find((b) => b.type === 'text');
97
131
  return {
98
- response: text?.type === 'text' ? text.text : '',
132
+ response: text?.text ?? '',
99
133
  toolCalls: allToolCalls,
100
134
  };
101
135
  }
102
- convMessages.push({ role: 'assistant', content: res.content });
136
+ convMessages.push({ role: 'assistant', content: data.content });
103
137
  const results = [];
104
138
  for (const block of useBlocks) {
105
- if (block.type !== 'tool_use')
106
- continue;
107
139
  const tool = tools[block.name];
108
140
  if (!tool)
109
141
  throw new Error(`[Claude] Unknown tool: ${block.name}`);
@@ -1 +1 @@
1
- {"version":3,"file":"Claude.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/Claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Claude.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/Claude.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FAL.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/FAL.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,gBAAgB,EAAE,gBAoB9B,CAAC"}
1
+ {"version":3,"file":"FAL.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/FAL.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmCrE,eAAO,MAAM,gBAAgB,EAAE,gBAyB9B,CAAC"}
@@ -1,3 +1,30 @@
1
+ const BASE_URL = 'https://queue.fal.run/fal-ai/flux-pro/v1.1';
2
+ async function poll(apiKey, requestId) {
3
+ for (let i = 0; i < 60; i++) {
4
+ await new Promise((r) => setTimeout(r, 2000));
5
+ const res = await fetch(`${BASE_URL}/requests/${requestId}/status`, {
6
+ headers: { Authorization: `Key ${apiKey}` },
7
+ });
8
+ if (!res.ok)
9
+ throw new Error(`[FAL] API error ${res.status}: ${await res.text()}`);
10
+ const data = (await res.json());
11
+ if (data.status === 'COMPLETED') {
12
+ const resultRes = await fetch(`${BASE_URL}/requests/${requestId}`, {
13
+ headers: { Authorization: `Key ${apiKey}` },
14
+ });
15
+ if (!resultRes.ok)
16
+ throw new Error(`[FAL] API error ${resultRes.status}: ${await resultRes.text()}`);
17
+ const result = (await resultRes.json());
18
+ const url = result.images[0]?.url;
19
+ if (!url)
20
+ throw new Error('[FAL] No image URL in response');
21
+ return url;
22
+ }
23
+ if (data.status === 'FAILED')
24
+ throw new Error('[FAL] Generation failed');
25
+ }
26
+ throw new Error('[FAL] Timed out waiting for image');
27
+ }
1
28
  export const falImageProvider = {
2
29
  name: 'fal',
3
30
  apiKeyEnv: 'FAL_API_KEY',
@@ -5,20 +32,24 @@ export const falImageProvider = {
5
32
  const apiKey = process.env.FAL_API_KEY;
6
33
  if (!apiKey)
7
34
  throw new Error('[FAL] FAL_API_KEY is required');
8
- const { fal } = await import('@fal-ai/client');
9
- fal.config({ credentials: apiKey });
10
- const result = await fal.subscribe('fal-ai/flux-pro/v1.1', {
11
- // width/height may not be in SDK types but are accepted by the API
12
- input: {
13
- prompt,
14
- width: options.width ?? 1024,
15
- height: options.height ?? 1024,
35
+ const res = await fetch(BASE_URL, {
36
+ method: 'POST',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ Authorization: `Key ${apiKey}`,
16
40
  },
41
+ body: JSON.stringify({
42
+ input: {
43
+ prompt,
44
+ width: options.width ?? 1024,
45
+ height: options.height ?? 1024,
46
+ },
47
+ }),
17
48
  });
18
- const url = result.data?.images?.[0]?.url;
19
- if (!url)
20
- throw new Error('[FAL] No image URL in response');
21
- return url;
49
+ if (!res.ok)
50
+ throw new Error(`[FAL] API error ${res.status}: ${await res.text()}`);
51
+ const data = (await res.json());
52
+ return poll(apiKey, data.request_id);
22
53
  },
23
54
  };
24
55
  //# sourceMappingURL=FAL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FAL.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/FAL.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,aAAa;IACxB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,UAA2B,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/C,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,sBAAsB,EAAE;YACzD,mEAAmE;YACnE,KAAK,EAAE;gBACL,MAAM;gBACN,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;aACxB;SACT,CAAC,CAAC;QACH,MAAM,GAAG,GAAI,MAAM,CAAC,IAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC5D,OAAO,GAAa,CAAC;IACvB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"FAL.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/FAL.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Google.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Google.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AA+BrB,eAAO,MAAM,kBAAkB,EAAE,eAsFhC,CAAC"}
1
+ {"version":3,"file":"Google.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Google.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAmCrB,eAAO,MAAM,kBAAkB,EAAE,eAqHhC,CAAC"}
@@ -1,12 +1,14 @@
1
1
  // src/server/ai/providers/Google.ts
2
- import { GoogleGenerativeAI } from '@google/generative-ai';
3
2
  import { z } from 'zod';
4
3
  const MODEL = 'gemini-2.0-flash';
5
- function getClient() {
4
+ function getApiKey() {
6
5
  const apiKey = process.env.GOOGLE_API_KEY;
7
6
  if (!apiKey)
8
7
  throw new Error('[Google] GOOGLE_API_KEY is required');
9
- return new GoogleGenerativeAI(apiKey);
8
+ return apiKey;
9
+ }
10
+ function getUrl() {
11
+ return `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${getApiKey()}`;
10
12
  }
11
13
  // Note: image_url parts are not forwarded to the API (text-only in current implementation)
12
14
  function toText(content) {
@@ -38,30 +40,47 @@ export const googleTextProvider = {
38
40
  costPerMillionInputTokens: 0.075,
39
41
  costPerMillionOutputTokens: 0.3,
40
42
  async generate(messages, options = {}) {
41
- const contents = normalizeContents(messages);
42
- const model = getClient().getGenerativeModel({
43
- model: MODEL,
44
- systemInstruction: extractSystem(messages),
43
+ const system = extractSystem(messages);
44
+ const body = {
45
+ contents: normalizeContents(messages),
46
+ };
47
+ if (system) {
48
+ body.systemInstruction = { parts: [{ text: system }] };
49
+ }
50
+ const res = await fetch(getUrl(), {
51
+ method: 'POST',
52
+ headers: { 'Content-Type': 'application/json' },
53
+ body: JSON.stringify(body),
45
54
  });
46
- const chat = model.startChat({ history: contents.slice(0, -1) });
47
- const last = contents.at(-1);
48
- const res = await chat.sendMessage(last?.parts[0]?.text ?? '');
49
- return res.response.text();
55
+ if (!res.ok)
56
+ throw new Error(`[Google] API error ${res.status}: ${await res.text()}`);
57
+ const data = await res.json();
58
+ return data.candidates[0]?.content?.parts?.[0]?.text ?? '';
50
59
  },
51
60
  async generateJson(schema, messages, options = {}) {
52
- const contents = normalizeContents(messages);
53
- const model = getClient().getGenerativeModel({
54
- model: MODEL,
55
- systemInstruction: extractSystem(messages),
61
+ const system = extractSystem(messages);
62
+ const body = {
63
+ contents: normalizeContents(messages),
56
64
  generationConfig: {
57
65
  responseMimeType: 'application/json',
58
66
  responseSchema: z.toJSONSchema(schema),
59
67
  },
68
+ };
69
+ if (system) {
70
+ body.systemInstruction = { parts: [{ text: system }] };
71
+ }
72
+ const res = await fetch(getUrl(), {
73
+ method: 'POST',
74
+ headers: { 'Content-Type': 'application/json' },
75
+ body: JSON.stringify(body),
60
76
  });
61
- const res = await model.generateContent({ contents });
62
- return schema.parse(JSON.parse(res.response.text()));
77
+ if (!res.ok)
78
+ throw new Error(`[Google] API error ${res.status}: ${await res.text()}`);
79
+ const data = await res.json();
80
+ return schema.parse(JSON.parse(data.candidates[0].content.parts[0].text));
63
81
  },
64
82
  async generateWithTools(messages, tools, options = {}) {
83
+ const system = extractSystem(messages);
65
84
  const googleTools = [
66
85
  {
67
86
  functionDeclarations: Object.entries(tools).map(([name, def]) => ({
@@ -72,34 +91,46 @@ export const googleTextProvider = {
72
91
  },
73
92
  ];
74
93
  const contents = normalizeContents(messages);
75
- const model = getClient().getGenerativeModel({
76
- model: MODEL,
77
- systemInstruction: extractSystem(messages),
78
- tools: googleTools,
79
- });
80
- const chat = model.startChat({ history: contents.slice(0, -1) });
81
- const last = contents.at(-1);
82
94
  const allToolCalls = [];
83
- let res = await chat.sendMessage(last?.parts[0]?.text ?? '');
84
95
  for (let round = 0; round < 5; round++) {
85
- const calls = res.response.functionCalls();
86
- if (!calls?.length)
87
- return { response: res.response.text(), toolCalls: allToolCalls };
88
- const toolResponses = [];
89
- for (const call of calls) {
96
+ const body = {
97
+ contents,
98
+ tools: googleTools,
99
+ };
100
+ if (system) {
101
+ body.systemInstruction = { parts: [{ text: system }] };
102
+ }
103
+ const res = await fetch(getUrl(), {
104
+ method: 'POST',
105
+ headers: { 'Content-Type': 'application/json' },
106
+ body: JSON.stringify(body),
107
+ });
108
+ if (!res.ok)
109
+ throw new Error(`[Google] API error ${res.status}: ${await res.text()}`);
110
+ const data = await res.json();
111
+ const parts = data.candidates[0]?.content?.parts ?? [];
112
+ const functionCallParts = parts.filter((p) => p.functionCall);
113
+ if (!functionCallParts.length) {
114
+ const text = parts.find((p) => p.text)?.text ?? '';
115
+ return { response: text, toolCalls: allToolCalls };
116
+ }
117
+ contents.push({ role: 'model', parts });
118
+ const functionResponseParts = [];
119
+ for (const part of functionCallParts) {
120
+ const call = part.functionCall;
90
121
  const tool = tools[call.name];
91
122
  if (!tool)
92
123
  throw new Error(`[Google] Unknown tool: ${call.name}`);
93
124
  const input = tool.input.parse(call.args);
94
125
  const output = await tool.handler(input);
95
126
  allToolCalls.push({ name: call.name, input, output });
96
- toolResponses.push({
127
+ functionResponseParts.push({
97
128
  functionResponse: { name: call.name, response: { output } },
98
129
  });
99
130
  }
100
- res = await chat.sendMessage(toolResponses);
131
+ contents.push({ role: 'user', parts: functionResponseParts });
101
132
  }
102
- return { response: res.response.text(), toolCalls: allToolCalls };
133
+ return { response: '', toolCalls: allToolCalls };
103
134
  },
104
135
  };
105
136
  //# sourceMappingURL=Google.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Google.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/Google.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Google.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/Google.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleImage.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/GoogleImage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,mBAAmB,EAAE,gBAoBjC,CAAC"}
1
+ {"version":3,"file":"GoogleImage.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/GoogleImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,mBAAmB,EAAE,gBAuBjC,CAAC"}
@@ -5,20 +5,19 @@ export const googleImageProvider = {
5
5
  const apiKey = process.env.GOOGLE_API_KEY;
6
6
  if (!apiKey)
7
7
  throw new Error('[GoogleImage] GOOGLE_API_KEY is required');
8
- const { GoogleGenerativeAI } = await import('@google/generative-ai');
9
- const genAI = new GoogleGenerativeAI(apiKey);
10
- const model = genAI.getGenerativeModel({
11
- model: 'imagen-3.0-generate-001',
8
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-001:predict?key=${apiKey}`;
9
+ const res = await fetch(url, {
10
+ method: 'POST',
11
+ headers: { 'Content-Type': 'application/json' },
12
+ body: JSON.stringify({ instances: [{ prompt }], parameters: { sampleCount: 1 } }),
12
13
  });
13
- // @ts-ignore — Imagen API types may lag SDK
14
- const res = await model.generateImages({
15
- prompt,
16
- numberOfImages: 1,
17
- });
18
- const bytes = res?.images?.[0]?.imageBytes;
19
- if (!bytes)
14
+ if (!res.ok)
15
+ throw new Error(`[GoogleImage] API error ${res.status}: ${await res.text()}`);
16
+ const data = await res.json();
17
+ const prediction = data?.predictions?.[0];
18
+ if (!prediction?.bytesBase64Encoded || !prediction?.mimeType)
20
19
  throw new Error('[GoogleImage] No image data in response');
21
- return `data:image/png;base64,${bytes}`;
20
+ return `data:${prediction.mimeType};base64,${prediction.bytesBase64Encoded}`;
22
21
  },
23
22
  };
24
23
  //# sourceMappingURL=GoogleImage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleImage.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/GoogleImage.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,gBAAgB;IAC3B,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,WAA4B,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACrC,KAAK,EAAE,yBAAyB;SACjC,CAAC,CAAC;QACH,4CAA4C;QAC5C,MAAM,GAAG,GAAG,MAAO,KAAa,CAAC,cAAc,CAAC;YAC9C,MAAM;YACN,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACvE,OAAO,yBAAyB,KAAK,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"GoogleImage.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/GoogleImage.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,gBAAgB;IAC3B,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,WAA4B,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAEzE,MAAM,GAAG,GAAG,+FAA+F,MAAM,EAAE,CAAC;QACpH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;SAClF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE3F,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,kBAAkB,IAAI,CAAC,UAAU,EAAE,QAAQ;YAC1D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAE7D,OAAO,QAAQ,UAAU,CAAC,QAAQ,WAAW,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAC/E,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Groq.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Groq.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAuBrB,eAAO,MAAM,gBAAgB,EAAE,eA8F9B,CAAC"}
1
+ {"version":3,"file":"Groq.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/Groq.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAiBrB,eAAO,MAAM,gBAAgB,EAAE,eA4H9B,CAAC"}