@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.
- package/LICENSE +21 -185
- package/README.md +3 -3
- package/package.json +2 -2
- package/src/cli.js +3 -3
- package/src/core/qlearning.js +5 -1
- package/src/execution/budget/circuit-breaker.js +4 -1
- package/src/execution/budget/cost-tracker.js +40 -5
- package/src/execution/engine.js +4 -2
- package/src/execution/idempotency.js +49 -28
- package/src/index.js +1 -0
- package/src/llm/index.js +2 -1
- package/src/llm/providers/base.js +4 -0
- package/src/llm/providers/gemini.js +323 -0
- package/src/llm/tools/registry.js +5 -2
- package/src/server/ui/dist/assets/{main-DDUT9zbA.js → main-v74qobjz.js} +8 -8
- package/src/server/ui/dist/index.html +1 -1
- package/src/server/ui/src/components/NewRunModal.jsx +79 -9
|
@@ -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-
|
|
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('
|
|
7
|
-
const [model, setModel] = useState(
|
|
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
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|