use crate::coding::program_task_by_alias;
use crate::engine::{normalize_prompt, SymbolicAnswer};
use crate::event_log::EventLog;
use crate::knowledge::CodingOracle;
use crate::solver::BlueprintComposition;
use crate::solver_handlers::{finalize_simple, try_program_blueprint};
pub fn try_unsupported_write_program(
prompt: &str,
task: Option<&str>,
language: Option<&str>,
composition: BlueprintComposition,
log: &mut EventLog,
) -> Option<SymbolicAnswer> {
let normalized = normalize_prompt(prompt);
try_program_blueprint(prompt, &normalized, language, composition, log)
.or_else(|| try_write_program_from_oracle(prompt, &normalized, task, language, log))
}
pub fn try_write_program_from_oracle(
prompt: &str,
normalized: &str,
task_hint: Option<&str>,
language_hint: Option<&str>,
log: &mut EventLog,
) -> Option<SymbolicAnswer> {
let language = language_hint?.trim();
if language.is_empty() {
return None;
}
let task_slug = task_hint
.map(str::to_owned)
.or_else(|| program_task_by_alias(normalized).map(|task| task.slug.to_owned()))?;
let snippet = CodingOracle::lookup(&task_slug, language)?;
let body = format!(
"Here is a minimal {} program ({}):\n\n```{}\n{}\n```\n\nOutput:\n```text\n{}\n```\n\
Source: {} ({}), cached locally as a popular example.",
snippet.language_label,
snippet.task_slug.replace('_', " "),
snippet.language_slug,
snippet.code,
snippet.expected_output,
snippet.source.display_name(),
snippet.source_url,
);
log.append("knowledge_source", snippet.source.slug().to_owned());
log.append("knowledge_source_url", snippet.source_url.to_owned());
log.append(
"execution_status",
"not run (cached external snippet)".to_owned(),
);
log.append(
"execution_environment",
"no compile/run sandbox configured for cached external snippets".to_owned(),
);
log.append(
"program_parameter:language",
snippet.language_slug.to_owned(),
);
log.append("program_parameter:task", snippet.task_slug.to_owned());
let intent = format!(
"write_program_oracle_{}_{}",
snippet.task_slug, snippet.language_slug
);
let response_link = format!(
"response:write_program:{}:{}:{}",
snippet.task_slug,
snippet.language_slug,
snippet.source.slug()
);
Some(finalize_simple(
prompt,
log,
&intent,
&response_link,
&body,
1.0,
))
}