From 74064b9c7a7cf54032f478a19fd23deae083e771 Mon Sep 17 00:00:00 2001 From: Wes Souza Date: Wed, 6 May 2026 19:00:30 +0100 Subject: [PATCH 1/2] Pin deps :o --- package.json | 42 +++++++++++++++++++++--------------------- pnpm-lock.yaml | 42 +++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 7afcd91..301b6d2 100644 --- a/package.json +++ b/package.json @@ -33,36 +33,36 @@ }, "packageManager": "pnpm@9.4.0", "dependencies": { - "@astrojs/cloudflare": "^13.3.1", + "@astrojs/cloudflare": "13.3.1", "@astrojs/solid-js": "6.0.1", - "@atproto/api": "^0.19.13", - "@solid-primitives/resize-observer": "^2.1.5", + "@atproto/api": "0.19.13", + "@solid-primitives/resize-observer": "2.1.5", "@trpc/client": "11.17.0", "@trpc/server": "11.17.0", - "anchorme": "^3.0.8", + "anchorme": "3.0.8", "astro": "6.2.2", - "solid-js": "^1.9.12", - "solid-markdown": "^2.1.1", - "tsx": "^4.21.0", - "zod": "^4.4.3", - "zod-search-params": "^0.2.1" + "solid-js": "1.9.12", + "solid-markdown": "2.1.1", + "tsx": "4.21.0", + "zod": "4.4.3", + "zod-search-params": "0.2.1" }, "devDependencies": { - "@astrojs/check": "^0.9.9", - "@eslint/js": "^10.0.1", - "@types/license-checker": "^25.0.6", + "@astrojs/check": "0.9.9", + "@eslint/js": "10.0.1", + "@types/license-checker": "25.0.6", "@types/node": "25.6.0", - "@types/spritesmith": "^3.4.5", - "@types/youtube": "^0.2.0", - "eslint": "^10.3.0", - "eslint-config-prettier": "^10.1.8", - "globals": "^17.6.0", - "license-checker": "^25.0.1", + "@types/spritesmith": "3.4.5", + "@types/youtube": "0.2.0", + "eslint": "10.3.0", + "eslint-config-prettier": "10.1.8", + "globals": "17.6.0", + "license-checker": "25.0.1", "prettier": "3.8.3", - "rollup-plugin-visualizer": "^7.0.1", - "spritesmith": "^3.5.1", + "rollup-plugin-visualizer": "7.0.1", + "spritesmith": "3.5.1", "typescript": "6.0.3", "typescript-eslint": "8.59.2", - "wrangler": "^4.88.0" + "wrangler": "4.88.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bc6bfc..40f2dff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,16 +9,16 @@ importers: .: dependencies: '@astrojs/cloudflare': - specifier: ^13.3.1 + specifier: 13.3.1 version: 13.3.1(@types/node@25.6.0)(astro@6.2.2(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.3)(tsx@4.21.0)(yaml@2.8.4))(jiti@2.7.0)(tsx@4.21.0)(workerd@1.20260504.1)(wrangler@4.88.0)(yaml@2.8.4) '@astrojs/solid-js': specifier: 6.0.1 version: 6.0.1(@types/node@25.6.0)(jiti@2.7.0)(solid-js@1.9.12)(tsx@4.21.0)(yaml@2.8.4) '@atproto/api': - specifier: ^0.19.13 + specifier: 0.19.13 version: 0.19.13 '@solid-primitives/resize-observer': - specifier: ^2.1.5 + specifier: 2.1.5 version: 2.1.5(solid-js@1.9.12) '@trpc/client': specifier: 11.17.0 @@ -27,65 +27,65 @@ importers: specifier: 11.17.0 version: 11.17.0(typescript@6.0.3) anchorme: - specifier: ^3.0.8 + specifier: 3.0.8 version: 3.0.8 astro: specifier: 6.2.2 version: 6.2.2(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.3)(tsx@4.21.0)(yaml@2.8.4) solid-js: - specifier: ^1.9.12 + specifier: 1.9.12 version: 1.9.12 solid-markdown: - specifier: ^2.1.1 + specifier: 2.1.1 version: 2.1.1(solid-js@1.9.12) tsx: - specifier: ^4.21.0 + specifier: 4.21.0 version: 4.21.0 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 zod-search-params: - specifier: ^0.2.1 + specifier: 0.2.1 version: 0.2.1(zod@4.4.3) devDependencies: '@astrojs/check': - specifier: ^0.9.9 + specifier: 0.9.9 version: 0.9.9(prettier@3.8.3)(typescript@6.0.3) '@eslint/js': - specifier: ^10.0.1 + specifier: 10.0.1 version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) '@types/license-checker': - specifier: ^25.0.6 + specifier: 25.0.6 version: 25.0.6 '@types/node': specifier: 25.6.0 version: 25.6.0 '@types/spritesmith': - specifier: ^3.4.5 + specifier: 3.4.5 version: 3.4.5 '@types/youtube': - specifier: ^0.2.0 + specifier: 0.2.0 version: 0.2.0 eslint: - specifier: ^10.3.0 + specifier: 10.3.0 version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^10.1.8 + specifier: 10.1.8 version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) globals: - specifier: ^17.6.0 + specifier: 17.6.0 version: 17.6.0 license-checker: - specifier: ^25.0.1 + specifier: 25.0.1 version: 25.0.1 prettier: specifier: 3.8.3 version: 3.8.3 rollup-plugin-visualizer: - specifier: ^7.0.1 + specifier: 7.0.1 version: 7.0.1(rollup@4.60.3) spritesmith: - specifier: ^3.5.1 + specifier: 3.5.1 version: 3.5.1 typescript: specifier: 6.0.3 @@ -94,7 +94,7 @@ importers: specifier: 8.59.2 version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) wrangler: - specifier: ^4.88.0 + specifier: 4.88.0 version: 4.88.0 packages: From b288120336a9c1a8c0acef1c60479df0bbedafcf Mon Sep 17 00:00:00 2001 From: Wes Souza Date: Thu, 7 May 2026 11:12:46 +0100 Subject: [PATCH 2/2] LLM --- package.json | 1 + pnpm-lock.yaml | 9 + src/env.d.ts | 52 +++++ src/pages/gemini-nano/index.astro | 359 ++++++++++++++++++++++++++++++ 4 files changed, 421 insertions(+) create mode 100644 src/pages/gemini-nano/index.astro diff --git a/package.json b/package.json index 301b6d2..26cdc30 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "astro": "6.2.2", "solid-js": "1.9.12", "solid-markdown": "2.1.1", + "streaming-markdown": "0.2.15", "tsx": "4.21.0", "zod": "4.4.3", "zod-search-params": "0.2.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40f2dff..571dbc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: solid-markdown: specifier: 2.1.1 version: 2.1.1(solid-js@1.9.12) + streaming-markdown: + specifier: 0.2.15 + version: 0.2.15 tsx: specifier: 4.21.0 version: 4.21.0 @@ -2816,6 +2819,10 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + streaming-markdown@0.2.15: + resolution: {integrity: sha512-eSWjdvLSTznl2+FIzuxw1TRXwhjZiY1RfSygGCMpcNY8CrsaUM2zHtxe/JFcPoXCQxeO3TSJ72QMDIN5B/Ui1w==} + engines: {node: '>=20'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -6501,6 +6508,8 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 + streaming-markdown@0.2.15: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 diff --git a/src/env.d.ts b/src/env.d.ts index d121688..950ef92 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -5,6 +5,58 @@ interface Window { onYouTubeIframeAPIReady: () => void; } +type LanguageModelAvailability = + | 'available' + | 'downloadable' + | 'downloading' + | 'unavailable'; + +type LanguageModelPrompt = { + role: 'system' | 'user' | 'assistant'; + content: string; +}; + +type LanguageModelOptions = { + expectedInputs?: Array<{ type: 'text'; languages: string[] }>; + expectedOutputs?: Array<{ type: 'text'; languages: string[] }>; + initialPrompts?: LanguageModelPrompt[]; + monitor?: (monitor: CreateMonitor) => void; +}; + +type LanguageModelSession = { + promptStreaming(text: string): AsyncIterable; +}; + +interface CreateMonitor extends EventTarget { + addEventListener( + type: 'downloadprogress', + listener: (event: ProgressEvent) => void, + options?: AddEventListenerOptions | boolean, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject | null, + options?: AddEventListenerOptions | boolean, + ): void; + removeEventListener( + type: 'downloadprogress', + listener: (event: ProgressEvent) => void, + options?: EventListenerOptions | boolean, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean, + ): void; +} + +type LanguageModelApi = { + availability(options?: LanguageModelOptions): Promise; + create(options?: LanguageModelOptions): Promise; +}; + +declare const LanguageModel: LanguageModelApi; + interface ImportMetaEnv { readonly PUBLIC_CLOUDFLARE_WEB_ANALYTICS_TOKEN?: string; } diff --git a/src/pages/gemini-nano/index.astro b/src/pages/gemini-nano/index.astro new file mode 100644 index 0000000..4600a35 --- /dev/null +++ b/src/pages/gemini-nano/index.astro @@ -0,0 +1,359 @@ +--- +import HeadMeta from '../../components/HeadMeta.astro'; +--- + + + + + + + + + +
+ Status: unknown +
+ +
+ + + +