Generate `SAMPLE_N` programs by chatting with instructions.
(&self, prompt: &super::prompt::Prompt)
| 108 | impl Handler for OpenAIHanler { |
| 109 | /// Generate `SAMPLE_N` programs by chatting with instructions. |
| 110 | fn generate(&self, prompt: &super::prompt::Prompt) -> eyre::Result<Vec<Program>> { |
| 111 | let start = std::time::Instant::now(); |
| 112 | let chat_msgs = prompt.to_chatgpt_message(); |
| 113 | let mut futures = Vec::new(); |
| 114 | for _ in 0..get_config().n_sample { |
| 115 | let future = generate_program_by_chat(chat_msgs.clone()); |
| 116 | futures.push(future); |
| 117 | } |
| 118 | let results = self.rt.block_on(join_all(futures)); |
| 119 | |
| 120 | let mut programs = Vec::new(); |
| 121 | let mut total_usage = TokenUsage::default(); |
| 122 | |
| 123 | for result in results { |
| 124 | if let Ok((program, usage)) = result { |
| 125 | programs.push(program); |
| 126 | total_usage.add(&usage); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | let elapsed = start.elapsed(); |
| 131 | log::info!("OpenAI Generate time: {}s", elapsed.as_secs()); |
| 132 | log::info!("Response Tokens\nCompletion Tokens: {}\nPrompt Tokens: {}\nTotal Tokens: {}\nCached Tokens: {}", |
| 133 | total_usage.completion_tokens, |
| 134 | total_usage.prompt_tokens, |
| 135 | total_usage.total_tokens, |
| 136 | total_usage.cached_tokens); |
| 137 | |
| 138 | Ok(programs) |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | /// Get the OpenAI interface client. |
no test coverage detected