use std::sync::Arc;
use rust_decimal::Decimal;
use uuid::Uuid;
use crate::access_control::{AccessControlManager, AccessTier, AiFeature, TokenHolder};
use crate::ai_evaluator::{AiEvaluator, AiFraudDetector, EvaluatorConfig};
use crate::batch::{BatchCodeEvaluator, BatchConfig};
use crate::error::Result;
use crate::evaluator::QualityEvaluator;
use crate::llm::{LlmClient, OpenAiClient};
use crate::oracle::AiOracle;
use crate::presets::{AccessTierPresets, ProductionPreset};
use crate::service::{AiServiceBuilder, AiServiceHub};
pub struct BasicCodeEvaluationExample;
impl BasicCodeEvaluationExample {
pub async fn run(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = LlmClient::new(Box::new(openai));
let evaluator = AiEvaluator::with_config(llm_client, EvaluatorConfig::default());
let code = r"
fn factorial(n: u64) -> u64 {
if n == 0 { 1 } else { n * factorial(n - 1) }
}
";
let result = evaluator.evaluate_code(code, "rust").await?;
println!("Quality Score: {}", result.quality_score);
println!("Complexity Score: {}", result.complexity_score);
println!("Originality Score: {}", result.originality_score);
println!("Feedback: {}", result.feedback);
Ok(())
}
}
pub struct BatchProcessingExample;
impl BatchProcessingExample {
#[allow(dead_code)]
pub async fn run(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = LlmClient::new(Box::new(openai));
let evaluator = Arc::new(AiEvaluator::with_config(
llm_client,
EvaluatorConfig::default(),
));
let batch_config = ProductionPreset::batch_config();
let batch_evaluator = BatchCodeEvaluator::new(evaluator, batch_config);
let codes = vec![
(
"fn add(a: i32, b: i32) -> i32 { a + b }".to_string(),
"rust".to_string(),
),
(
"function add(a, b) { return a + b; }".to_string(),
"javascript".to_string(),
),
(
"def add(a, b): return a + b".to_string(),
"python".to_string(),
),
];
let result = batch_evaluator.evaluate_batch(codes).await?;
println!("Total processed: {}", result.total);
println!("Successes: {}", result.success_count());
println!("Failures: {}", result.failure_count());
println!("Success rate: {:.2}%", result.success_rate() * 100.0);
Ok(())
}
}
pub struct OracleConsensusExample;
impl OracleConsensusExample {
#[allow(dead_code)]
pub async fn run(_api_key: &str) -> Result<()> {
let oracle_config = ProductionPreset::oracle_config();
let mut oracle = AiOracle::new(oracle_config);
let request = crate::ai_evaluator::VerificationRequest {
commitment_title: "Deploy smart contract".to_string(),
commitment_description: Some("Deploy audited smart contract to mainnet".to_string()),
deadline: "2024-12-31".to_string(),
evidence_url: "https://etherscan.io/address/0x123...".to_string(),
evidence_description: Some("Contract deployed with verified source code".to_string()),
};
let decision = oracle.verify_with_consensus(&request).await?;
println!("Consensus Decision: {}", decision.approved);
println!("Confidence: {}", decision.confidence);
println!("Reasoning: {}", decision.reasoning);
let human_decision = true; oracle.record_feedback(
"commitment-123".to_string(),
decision.approved,
decision.confidence,
human_decision,
);
Ok(())
}
}
pub struct CompleteServiceExample;
impl CompleteServiceExample {
#[allow(dead_code)]
pub async fn run(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = Arc::new(LlmClient::new(Box::new(openai)));
let mut service = AiServiceBuilder::new(llm_client)
.evaluator_config(ProductionPreset::evaluator_config())
.with_oracle(ProductionPreset::oracle_config())
.with_access_control()
.build();
let mut access_control = AccessControlManager::new();
access_control.update_tier_config(AccessTierPresets::silver_tier());
let holder = TokenHolder {
user_id: Uuid::new_v4(),
token_id: Uuid::new_v4(),
balance: Decimal::new(1000, 0),
tier: AccessTier::Silver,
};
if let Some(Ok(true)) = service.can_access_feature(&holder, AiFeature::CodeEvaluation) {
let evaluator = service.evaluator();
let code = "fn hello() { println!(\"Hello\"); }";
let result = evaluator.evaluate_code(code, "rust").await?;
service.record_usage(&holder, AiFeature::CodeEvaluation);
println!("Evaluation successful: {}", result.quality_score);
}
Ok(())
}
}
pub struct FraudDetectionExample;
impl FraudDetectionExample {
#[allow(dead_code)]
pub async fn run(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = LlmClient::new(Box::new(openai));
let fraud_detector = AiFraudDetector::new(llm_client);
let request = crate::ai_evaluator::FraudCheckRequest {
content_type: "Task completion claim".to_string(),
content: "I have completed all 50 tasks! Here's proof: [screenshot]".to_string(),
commitments_made: 50,
commitments_fulfilled: 2, avg_quality_score: Some(85.0),
};
let result = fraud_detector.check_fraud(&request).await?;
println!("Risk Level: {:?}", result.risk_level);
println!("Risk Score: {}", result.risk_score);
println!("Suspicious Indicators:");
for indicator in &result.indicators {
println!(" - {indicator}");
}
println!("Recommendation: {}", result.recommendation);
Ok(())
}
}
pub struct IntegrationExample;
impl IntegrationExample {
#[allow(dead_code)]
pub async fn web_service_integration(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = Arc::new(LlmClient::new(Box::new(openai)));
let service = AiServiceHub::new(llm_client);
let code_to_evaluate = "fn main() {}";
let evaluator = service.evaluator();
match evaluator.evaluate_code(code_to_evaluate, "rust").await {
Ok(result) => {
println!("✓ Evaluation successful");
println!("Quality: {}/100", result.quality_score);
}
Err(e) => {
eprintln!("✗ Evaluation failed: {e}");
}
}
Ok(())
}
#[allow(dead_code)]
pub async fn background_job_processing(api_key: &str) -> Result<()> {
let openai = OpenAiClient::with_default_model(api_key);
let llm_client = LlmClient::new(Box::new(openai));
let evaluator = Arc::new(AiEvaluator::with_config(
llm_client,
ProductionPreset::evaluator_config(),
));
let batch_config = BatchConfig::with_concurrency(20).with_continue_on_error(true);
let batch_evaluator = BatchCodeEvaluator::new(evaluator, batch_config);
let queued_codes = vec![
];
let results = batch_evaluator.evaluate_batch(queued_codes).await?;
println!("Processed {} items", results.total);
println!("Success rate: {:.1}%", results.success_rate() * 100.0);
Ok(())
}
}