-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathGeminiConfigForm.tsx
More file actions
99 lines (96 loc) · 3.1 KB
/
Copy pathGeminiConfigForm.tsx
File metadata and controls
99 lines (96 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import React from "react";
import { Link } from "@mui/material";
import { TextValidator } from "react-material-ui-form-validator";
import { GeminiVlmConfig } from "../../types/imageComparison";
import { Tooltip } from "../Tooltip";
import { useConfigHook } from "./useConfigHook";
import {
useProjectState,
useProjectDispatch,
setProjectEditState,
} from "../../contexts";
import {
VlmPromptField,
VlmTemperatureField,
VlmUseThinkingField,
} from "./VlmSharedFields";
export const GeminiConfigForm: React.FunctionComponent = () => {
const [config, updateConfig] = useConfigHook<GeminiVlmConfig>();
const { projectEditState: project } = useProjectState();
const projectDispatch = useProjectDispatch();
return (
<React.Fragment>
<Tooltip title="The Google Gemini model to use for image comparison.">
<div>
<TextValidator
name="model"
validators={["required"]}
errorMessages={["Model is required"]}
margin="dense"
id="model"
label="Gemini Model"
type="text"
fullWidth
required
value={config.model || ""}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
updateConfig("model", event.target.value);
}}
helperText={
<span>
Gemini model name.{" "}
<Link
href="https://ai.google.dev/models/gemini"
target="_blank"
rel="noopener noreferrer"
onClick={(e) => e.stopPropagation()}
>
View all available models
</Link>
</span>
}
/>
</div>
</Tooltip>
<Tooltip title="Your Google Gemini API key. Get one from https://makersuite.google.com/app/apikey">
<div>
<TextValidator
name="apiKey"
validators={["required"]}
errorMessages={["API key is required"]}
margin="dense"
id="apiKey"
label="Gemini API Key"
type="password"
fullWidth
required
value={config.apiKey || ""}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
const updatedConfig: GeminiVlmConfig = {
...config,
apiKey: event.target.value,
};
setProjectEditState(projectDispatch, {
...project,
imageComparisonConfig: JSON.stringify(updatedConfig),
});
}}
helperText="Enter your Google Gemini API key"
/>
</div>
</Tooltip>
<VlmPromptField
value={config.prompt}
onChange={(value) => updateConfig("prompt", value)}
/>
<VlmTemperatureField
value={config.temperature}
onChange={(value) => updateConfig("temperature", value)}
/>
<VlmUseThinkingField
value={config.useThinking || false}
onChange={(value) => updateConfig("useThinking", value)}
/>
</React.Fragment>
);
};