@game_ryo/lsji 1.0.0 → 1.2.0

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.
@@ -8,7 +8,7 @@
8
8
  * { box-sizing: border-box; margin: 0; padding: 0; }
9
9
  body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0d1117; color: #e6edf3; }
10
10
  </style>
11
- <script type="module" crossorigin src="/assets/main-DDUT9zbA.js"></script>
11
+ <script type="module" crossorigin src="/assets/main-v74qobjz.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="/assets/main-DNMVBaZA.css">
13
13
  </head>
14
14
  <body>
@@ -1,15 +1,81 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect } from 'react';
2
+
3
+ // Model definitions per provider (as of 2024 - from official API docs)
4
+ // Source: https://ai.google.dev/gemini-api/docs/models?hl=ja
5
+ const MODELS_BY_PROVIDER = {
6
+ gemini: [
7
+ // Gemini 3 (Latest)
8
+ { value: 'gemini-3.1-pro-preview', label: 'Gemini 3.1 Pro (Preview)' },
9
+ { value: 'gemini-3.5-flash', label: 'Gemini 3.5 Flash (Stable)' },
10
+ { value: 'gemini-3-flash-preview', label: 'Gemini 3 Flash (Preview)' },
11
+ { value: 'gemini-3.1-flash-lite', label: 'Gemini 3.1 Flash-Lite (Preview)' },
12
+ { value: 'gemini-3.1-flash-image', label: 'Nano Banana 2 (Image Generation)' },
13
+ { value: 'gemini-3.1-flash-lite-image', label: 'Nano Banana 2 Lite (Image Generation)' },
14
+ { value: 'gemini-3-pro-image', label: 'Nano Banana Pro (Image Generation)' },
15
+ { value: 'gemini-3.5-live-translate-preview', label: 'Gemini 3.5 Live Translate (Preview)' },
16
+ { value: 'gemini-3.1-flash-live-preview', label: 'Gemini 3.1 Flash Live (Preview)' },
17
+ { value: 'gemini-3.1-flash-tts-preview', label: 'Gemini 3.1 Flash TTS (Preview)' },
18
+ // Gemini 2.5 Flash
19
+ { value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash (Stable) - Best Price/Performance' },
20
+ { value: 'gemini-2.5-flash-image', label: 'Nano Banana (Image Generation)' },
21
+ { value: 'gemini-2.5-flash-native-audio-preview-12-2025', label: 'Gemini 2.5 Flash Live (Preview)' },
22
+ { value: 'gemini-2.5-flash-preview-tts', label: 'Gemini 2.5 Flash TTS (Preview)' },
23
+ // Gemini 2.5 Flash-Lite
24
+ { value: 'gemini-2.5-flash-lite', label: 'Gemini 2.5 Flash-Lite (Preview)' },
25
+ // Gemini 2.5 Pro
26
+ { value: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro (Stable) - Best Reasoning' },
27
+ { value: 'gemini-2.5-pro-preview-tts', label: 'Gemini 2.5 Pro TTS (Preview)' },
28
+ // Legacy (Shutdown)
29
+ { value: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash (Shutdown)' },
30
+ { value: 'gemini-2.0-flash-lite', label: 'Gemini 2.0 Flash-Lite (Shutdown)' },
31
+ ],
32
+ openai: [
33
+ { value: 'gpt-4o', label: 'GPT-4o (Latest)' },
34
+ { value: 'gpt-4o-mini', label: 'GPT-4o Mini' },
35
+ { value: 'gpt-4-turbo', label: 'GPT-4 Turbo' },
36
+ { value: 'gpt-4', label: 'GPT-4' },
37
+ { value: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo' },
38
+ ],
39
+ anthropic: [
40
+ { value: 'claude-3-5-sonnet-20241022', label: 'Claude 3.5 Sonnet (Latest)' },
41
+ { value: 'claude-3-5-haiku-20241022', label: 'Claude 3.5 Haiku' },
42
+ { value: 'claude-3-opus-20240229', label: 'Claude 3 Opus' },
43
+ { value: 'claude-3-sonnet-20240229', label: 'Claude 3 Sonnet' },
44
+ { value: 'claude-3-haiku-20240307', label: 'Claude 3 Haiku' },
45
+ ],
46
+ local: [
47
+ { value: 'llama3.2', label: 'Llama 3.2' },
48
+ { value: 'llama3.1', label: 'Llama 3.1' },
49
+ { value: 'mistral', label: 'Mistral' },
50
+ { value: 'codellama', label: 'Code Llama' },
51
+ { value: 'qwen2.5', label: 'Qwen 2.5' },
52
+ { value: 'phi3.5', label: 'Phi 3.5' },
53
+ ],
54
+ };
55
+
56
+ // Default models per provider
57
+ const DEFAULT_MODELS = {
58
+ gemini: 'gemini-2.5-flash', // Best price/performance for general use
59
+ openai: 'gpt-4o-mini',
60
+ anthropic: 'claude-3-5-sonnet-20241022',
61
+ local: 'llama3.2',
62
+ };
2
63
 
3
64
  function NewRunModal({ onClose, onStart }) {
4
65
  const [task, setTask] = useState('');
5
66
  const [workflowId, setWorkflowId] = useState('');
6
- const [provider, setProvider] = useState('openai');
7
- const [model, setModel] = useState('gpt-4o-mini');
67
+ const [provider, setProvider] = useState('gemini'); // Default to Gemini
68
+ const [model, setModel] = useState(DEFAULT_MODELS.gemini);
8
69
  const [maxCost, setMaxCost] = useState(10);
9
70
  const [maxTokens, setMaxTokens] = useState(100000);
10
71
  const [hitlEnabled, setHitlEnabled] = useState(true);
11
72
  const [submitting, setSubmitting] = useState(false);
12
73
 
74
+ // Update model when provider changes
75
+ useEffect(() => {
76
+ setModel(DEFAULT_MODELS[provider] || DEFAULT_MODELS.gemini);
77
+ }, [provider]);
78
+
13
79
  const handleSubmit = async (e) => {
14
80
  e.preventDefault();
15
81
  if (!task.trim()) return;
@@ -28,6 +94,8 @@ function NewRunModal({ onClose, onStart }) {
28
94
  }
29
95
  };
30
96
 
97
+ const currentModels = MODELS_BY_PROVIDER[provider] || MODELS_BY_PROVIDER.gemini;
98
+
31
99
  return (
32
100
  <div className="modal-overlay" onClick={onClose}>
33
101
  <div className="modal" onClick={e => e.stopPropagation()}>
@@ -59,6 +127,7 @@ function NewRunModal({ onClose, onStart }) {
59
127
  <div className="form-group">
60
128
  <label className="form-label">LLM Provider</label>
61
129
  <select className="form-select" value={provider} onChange={(e) => setProvider(e.target.value)}>
130
+ <option value="gemini">Google Gemini</option>
62
131
  <option value="openai">OpenAI</option>
63
132
  <option value="anthropic">Anthropic</option>
64
133
  <option value="local">Local (Ollama)</option>
@@ -66,12 +135,13 @@ function NewRunModal({ onClose, onStart }) {
66
135
  </div>
67
136
  <div className="form-group">
68
137
  <label className="form-label">Model</label>
69
- <input
70
- type="text"
71
- className="form-input"
72
- value={model}
73
- onChange={(e) => setModel(e.target.value)}
74
- />
138
+ <select className="form-select" value={model} onChange={(e) => setModel(e.target.value)}>
139
+ {currentModels.map(m => (
140
+ <option key={m.value} value={m.value}>
141
+ {m.label}
142
+ </option>
143
+ ))}
144
+ </select>
75
145
  </div>
76
146
  </div>
77
147