1use crate::{
2 Config, ConfigBuilder, ConfigNotPresent, ConfigPresent, EnvVariablePresent, Gemini,
3 GeminiContentGen, InstructionNotPresent, InstructionPresent, Kind, MaxLenNotPresent,
4 MaxLenPresent, Memory, MemoryNot, ModelPresent, PropertiesNotPresent, PropertiesPresent,
5 TextNotPresent, TextPresent, TokenLen,
6};
7
8impl<'properties>
9 Gemini<
10 'properties,
11 EnvVariablePresent,
12 ModelPresent,
13 ConfigNotPresent,
14 TextNotPresent,
15 MaxLenNotPresent,
16 InstructionNotPresent,
17 PropertiesNotPresent,
18 MemoryNot,
19 >
20{
21 pub fn kind(
22 mut self,
23 response: Kind<'properties>,
24 ) -> Gemini<
25 'properties,
26 EnvVariablePresent,
27 ModelPresent,
28 ConfigPresent,
29 MaxLenNotPresent,
30 TextNotPresent,
31 InstructionNotPresent,
32 PropertiesPresent,
33 MemoryNot,
34 > {
35 self.config.r#type = response;
36 Gemini {
37 env_variable: self.env_variable,
38 model: &self.model,
39 text: self.text,
40 instruction: &self.instruction,
41 max_len: self.max_len,
42 memory: self.memory,
43 config: ConfigBuilder {
44 r#type: self.config.r#type,
46 propertiesstate: std::marker::PhantomData,
47 },
48 envstate: std::marker::PhantomData,
49 instructionstate: std::marker::PhantomData,
50 maxstate: std::marker::PhantomData,
51 modelstate: std::marker::PhantomData,
52 configstate: std::marker::PhantomData,
53 textstate: std::marker::PhantomData,
54 memorystate: std::marker::PhantomData,
55 }
56 }
57}
58
59impl<'instruction>
60 Gemini<
61 'instruction,
62 EnvVariablePresent,
63 ModelPresent,
64 ConfigPresent,
65 MaxLenNotPresent,
66 TextNotPresent,
67 InstructionNotPresent,
68 PropertiesPresent,
69 MemoryNot,
70 >
71{
72 pub fn instruction(
73 mut self,
74 instruction: &'instruction str,
75 ) -> Gemini<
76 'instruction,
77 EnvVariablePresent,
78 ModelPresent,
79 ConfigPresent,
80 TextNotPresent,
81 MaxLenNotPresent,
82 InstructionPresent,
83 PropertiesPresent,
84 MemoryNot,
85 > {
86 self.instruction = instruction;
87 Gemini {
88 env_variable: self.env_variable,
89 model: &self.model,
90 text: self.text,
91 instruction: &self.instruction,
92 max_len: self.max_len,
93 memory: self.memory,
94 config: ConfigBuilder {
95 r#type: self.config.r#type,
97 propertiesstate: std::marker::PhantomData,
98 },
99 envstate: std::marker::PhantomData,
100 instructionstate: std::marker::PhantomData,
101 maxstate: std::marker::PhantomData,
102 modelstate: std::marker::PhantomData,
103 configstate: std::marker::PhantomData,
104 textstate: std::marker::PhantomData,
105 memorystate: std::marker::PhantomData,
106 }
107 }
108}
109
110impl<'text>
111 Gemini<
112 'text,
113 EnvVariablePresent,
114 ModelPresent,
115 ConfigPresent,
116 TextNotPresent,
117 MaxLenNotPresent,
118 InstructionPresent,
119 PropertiesPresent,
120 MemoryNot,
121 >
122{
123 pub fn text(
124 mut self,
125 text: &'text str,
126 ) -> Gemini<
127 'text,
128 EnvVariablePresent,
129 ModelPresent,
130 ConfigPresent,
131 TextPresent,
132 MaxLenNotPresent,
133 InstructionPresent,
134 PropertiesPresent,
135 MemoryNot,
136 > {
137 self.text = text;
138 Gemini {
139 env_variable: self.env_variable,
140 model: &self.model,
141 text: self.text,
142 instruction: &self.instruction,
143 max_len: self.max_len,
144 memory: self.memory,
145 config: ConfigBuilder {
146 r#type: self.config.r#type,
148 propertiesstate: std::marker::PhantomData,
149 },
150 envstate: std::marker::PhantomData,
151 instructionstate: std::marker::PhantomData,
152 maxstate: std::marker::PhantomData,
153 modelstate: std::marker::PhantomData,
154 configstate: std::marker::PhantomData,
155 textstate: std::marker::PhantomData,
156 memorystate: std::marker::PhantomData,
157 }
158 }
159}
160
161impl<'max_len>
162 Gemini<
163 'max_len,
164 EnvVariablePresent,
165 ModelPresent,
166 ConfigPresent,
167 TextPresent,
168 MaxLenNotPresent,
169 InstructionPresent,
170 PropertiesPresent,
171 MemoryNot,
172 >
173{
174 pub fn max_token(
175 mut self,
176 max: TokenLen,
177 ) -> Gemini<
178 'max_len,
179 EnvVariablePresent,
180 ModelPresent,
181 ConfigPresent,
182 TextPresent,
183 MaxLenPresent,
184 InstructionPresent,
185 PropertiesPresent,
186 MemoryNot,
187 > {
188 match max {
189 TokenLen::Custome(values) => {
190 self.max_len = values;
191 }
192 TokenLen::Default => self.max_len = 8192,
193 }
194 Gemini {
195 env_variable: self.env_variable,
196 model: &self.model,
197 text: self.text,
198 instruction: &self.instruction,
199 max_len: self.max_len,
200 memory: self.memory,
201 config: ConfigBuilder {
202 r#type: self.config.r#type,
204 propertiesstate: std::marker::PhantomData,
205 },
206 envstate: std::marker::PhantomData,
207 instructionstate: std::marker::PhantomData,
208 maxstate: std::marker::PhantomData,
209 modelstate: std::marker::PhantomData,
210 configstate: std::marker::PhantomData,
211 textstate: std::marker::PhantomData,
212 memorystate: std::marker::PhantomData,
213 }
214 }
215}
216
217impl<'build>
218 Gemini<
219 'build,
220 EnvVariablePresent,
221 ModelPresent,
222 ConfigPresent,
223 TextPresent,
224 MaxLenPresent,
225 InstructionPresent,
226 PropertiesPresent,
227 MemoryNot,
228 >
229{
230 pub fn build(self) -> GeminiContentGen<'build> {
231 GeminiContentGen {
232 model: &self.model,
233 env_variable: &self.env_variable,
234 max_len: self.max_len,
235 text: self.text,
236 instruction: &self.instruction,
237 config: Config {
238 response: self.config.r#type,
239 },
240 memory: self.memory,
241 }
242 }
243}