diff --git a/deep-sea-stories/packages/backend/src/agent/gemini/session.ts b/deep-sea-stories/packages/backend/src/agent/gemini/session.ts index 5823d82..33fb701 100644 --- a/deep-sea-stories/packages/backend/src/agent/gemini/session.ts +++ b/deep-sea-stories/packages/backend/src/agent/gemini/session.ts @@ -1,4 +1,5 @@ import { + Behavior, type GoogleGenAI, type LiveConnectParameters, type LiveServerMessage, @@ -98,13 +99,11 @@ export class GeminiSession implements VoiceAgentSession { systemInstruction: getInstructionsForStory(this.config.story), outputAudioTranscription: {}, temperature: 0.5, - thinkingConfig: { - thinkingBudget: -1, - }, tools: [ { functionDeclarations: [ { + behavior: Behavior.BLOCKING, name: 'endGame', description: 'Call this function to end the game session. You MUST call this when: 1) The players have correctly solved the riddle, 2) The game time has expired, 3) You are saying goodbye or ending the conversation. Always call this function after delivering your final message to players.', @@ -112,9 +111,6 @@ export class GeminiSession implements VoiceAgentSession { ], }, ], - proactivity: { - proactiveAudio: true, - }, sessionResumption: { handle: this.previousHandle }, }, callbacks: { diff --git a/deep-sea-stories/packages/backend/src/config.ts b/deep-sea-stories/packages/backend/src/config.ts index 7482781..8976133 100644 --- a/deep-sea-stories/packages/backend/src/config.ts +++ b/deep-sea-stories/packages/backend/src/config.ts @@ -24,7 +24,7 @@ export const configSchema = z.object({ GOOGLE_CLOUD_LOCATION: z.string().optional(), }); -export const GEMINI_MODEL = 'gemini-2.5-flash-native-audio-preview-12-2025'; +export const GEMINI_MODEL = 'gemini-3.8-live'; export const stories: Story[] = JSON.parse( fs.readFileSync(join(__dirname, 'prompts', 'stories.json'), 'utf8'), diff --git a/deep-sea-stories/packages/backend/src/game/room.ts b/deep-sea-stories/packages/backend/src/game/room.ts index c27dd29..dd5c581 100644 --- a/deep-sea-stories/packages/backend/src/game/room.ts +++ b/deep-sea-stories/packages/backend/src/game/room.ts @@ -49,7 +49,6 @@ export class GameRoom { vertexai: CONFIG.GOOGLE_GENAI_USE_VERTEXAI, project: CONFIG.GOOGLE_CLOUD_PROJECT, location: CONFIG.GOOGLE_CLOUD_LOCATION, - httpOptions: { apiVersion: 'v1alpha' }, }); } diff --git a/deep-sea-stories/packages/web/src/components/AnnouncementBanner.tsx b/deep-sea-stories/packages/web/src/components/AnnouncementBanner.tsx new file mode 100644 index 0000000..4f57d56 --- /dev/null +++ b/deep-sea-stories/packages/web/src/components/AnnouncementBanner.tsx @@ -0,0 +1,24 @@ +import { X } from 'lucide-react'; +import { type PropsWithChildren, useState } from 'react'; + +export function AnnouncementBanner({ children }: PropsWithChildren) { + const [isVisible, setIsVisible] = useState(true); + + if (!isVisible) return null; + + return ( + + ); +} diff --git a/deep-sea-stories/packages/web/src/components/GameControlPanel.tsx b/deep-sea-stories/packages/web/src/components/GameControlPanel.tsx index b1372c4..b80b2e9 100644 --- a/deep-sea-stories/packages/web/src/components/GameControlPanel.tsx +++ b/deep-sea-stories/packages/web/src/components/GameControlPanel.tsx @@ -27,7 +27,7 @@ const GameControlPanel: FC = ({ onVolumeChange={onVolumeChange} /> -
+
diff --git a/deep-sea-stories/packages/web/src/components/RoomControls.tsx b/deep-sea-stories/packages/web/src/components/RoomControls.tsx index 017c3cb..a1b82b7 100644 --- a/deep-sea-stories/packages/web/src/components/RoomControls.tsx +++ b/deep-sea-stories/packages/web/src/components/RoomControls.tsx @@ -70,13 +70,13 @@ const RoomControls: FC = ({ roomId, userName }) => { }; return ( -
+
{!isStorySelected ? (
-
- - + + toast('Gameroom link copied to clipboard', Check)} value={url} > diff --git a/deep-sea-stories/packages/web/src/views/HomeView.tsx b/deep-sea-stories/packages/web/src/views/HomeView.tsx index a25ea28..e463186 100644 --- a/deep-sea-stories/packages/web/src/views/HomeView.tsx +++ b/deep-sea-stories/packages/web/src/views/HomeView.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; import { useNavigate } from 'react-router'; +import { AnnouncementBanner } from '@/components/AnnouncementBanner'; import Footer from '@/components/Footer'; import TitleBar from '@/components/TitleBar'; import { Button } from '@/components/ui/button'; @@ -27,6 +28,18 @@ export default function HomeView() { return (
+ + Deep Sea Stories is now powered by{' '} + + Gemini 3.8 Live + + . +