Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ai/ai-samples/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
dist
.env
.env.local
9 changes: 9 additions & 0 deletions ai/ai-samples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Firebase AI Samples

A modular migration of the Firebase AI logic, demonstrating different capabilities:
- Text Generation
- Chat
- Multimodal
- Structured Output
- Function Calling
- Image Generation
12 changes: 12 additions & 0 deletions ai/ai-samples/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Firebase AI Samples</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
24 changes: 24 additions & 0 deletions ai/ai-samples/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"name": "ai-samples",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"firebase": "12.2.1",
"react": "^19.2.1",
"react-dom": "^19.2.1"
},
"devDependencies": {
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@vitejs/plugin-react": "^4.3.4",
"typescript": "~5.7.2",
"vite": "^6.3.1"
}
}
10 changes: 10 additions & 0 deletions ai/ai-samples/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import React from 'react'

export default function App() {
return (
<div>
<h1>Firebase AI Samples</h1>
<p>Modular Firebase AI capabilities.</p>
</div>
)
}
12 changes: 12 additions & 0 deletions ai/ai-samples/src/config/firebase-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { initializeApp } from "firebase/app";

export const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID",
};

export const app = initializeApp(firebaseConfig);
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/chat/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function ChatFeature() {
return (
<div>
<h2>chat</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/chat/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for chat
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/function-calling/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function FunctionCallingFeature() {
return (
<div>
<h2>function-calling</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/function-calling/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for function-calling
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/image-generation/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function ImageGenerationFeature() {
return (
<div>
<h2>image-generation</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/image-generation/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for image-generation
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/multimodal/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function MultimodalFeature() {
return (
<div>
<h2>multimodal</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/multimodal/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for multimodal
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/structured-output/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function StructuredOutputFeature() {
return (
<div>
<h2>structured-output</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/structured-output/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for structured-output
9 changes: 9 additions & 0 deletions ai/ai-samples/src/features/text-generation/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';

export default function TextGenerationFeature() {
return (
<div>
<h2>text-generation</h2>
</div>
);
}
1 change: 1 addition & 0 deletions ai/ai-samples/src/features/text-generation/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Service for text-generation
9 changes: 9 additions & 0 deletions ai/ai-samples/src/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React, { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App'

createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
1 change: 1 addition & 0 deletions ai/ai-samples/src/services/firebaseAIService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Core Firebase AI service setup
21 changes: 21 additions & 0 deletions ai/ai-samples/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
11 changes: 11 additions & 0 deletions ai/ai-samples/tsconfig.node.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"strict": true
},
"include": ["vite.config.ts"]
}
6 changes: 6 additions & 0 deletions ai/ai-samples/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
plugins: [react()],
})
Loading