openai_rust_sdk/
lib.rs

1//! # Batch `OpenAI` SDK with YARA Rule Validation and `OpenAI` API Client
2//!
3//! This crate provides a comprehensive SDK for integrating `OpenAI`'s API with YARA rule validation,
4//! including support for chat completions, streaming responses, and automated testing.
5
6#![allow(missing_docs)]
7#![allow(clippy::missing_docs_in_private_items)]
8// Allow clippy warnings that are cosmetic or would require extensive refactoring
9#![allow(clippy::missing_const_for_fn)]
10#![allow(clippy::return_self_not_must_use)]
11#![allow(clippy::use_self)]
12#![allow(clippy::cast_precision_loss)]
13#![allow(clippy::float_cmp)]
14#![allow(clippy::derive_partial_eq_without_eq)]
15#![allow(clippy::case_sensitive_file_extension_comparisons)]
16#![allow(clippy::match_wildcard_for_single_variants)]
17#![allow(clippy::option_if_let_else)]
18#![allow(clippy::doc_markdown)]
19#![allow(clippy::match_same_arms)]
20#![allow(clippy::unused_self)]
21#![allow(clippy::unused_async)]
22#![allow(clippy::unnecessary_wraps)]
23#![allow(clippy::items_after_statements)]
24#![allow(clippy::future_not_send)]
25#![allow(clippy::significant_drop_tightening)]
26#![allow(clippy::significant_drop_in_scrutinee)]
27#![allow(clippy::cast_possible_truncation)]
28#![allow(clippy::enum_variant_names)]
29#![allow(clippy::needless_raw_string_hashes)]
30#![allow(clippy::redundant_closure_for_method_calls)]
31#![allow(clippy::struct_excessive_bools)]
32#![allow(clippy::needless_pass_by_ref_mut)]
33#![allow(clippy::uninlined_format_args)]
34#![allow(clippy::single_char_pattern)]
35#![allow(clippy::manual_string_new)]
36#![allow(clippy::struct_field_names)]
37#![allow(clippy::redundant_clone)]
38#![allow(clippy::cast_possible_wrap)]
39#![allow(clippy::cast_sign_loss)]
40#![allow(clippy::unreadable_literal)]
41#![allow(clippy::multiple_crate_versions)]
42//!
43//! ## Features
44//!
45//! - **`OpenAI` API Client**: Full-featured client with streaming support
46//! - **Chat Completions**: Support for role-based conversations and prompt templates
47//! - **Streaming Support**: Real-time streaming responses with Server-Sent Events
48//! - **YARA Rule Validation**: Complete validation pipeline using the yara-x engine
49//! - **`OpenAI` Batch API Integration**: Generate and manage batch jobs for rule creation
50//! - **Comprehensive Testing**: Unit tests, integration tests, and performance benchmarks
51//! - **Error Handling**: Robust error handling with detailed validation results
52//! - **Performance Metrics**: Compilation time, memory usage, and rule complexity analysis
53//!
54//! ## Quick Start - `OpenAI` API
55
56// Allow unused imports where they are required for serde attributes to work properly
57#![allow(unused_imports)]
58//!
59//! ```rust,no_run
60//! use openai_rust_sdk::{OpenAIClient, ChatBuilder};
61//!
62//! # tokio_test::block_on(async {
63//! let client = OpenAIClient::new("your-api-key")?;
64//!
65//! // Simple text generation
66//! let response = client.generate_text("gpt-4", "Hello, world!").await?;
67//! println!("Response: {response}");
68//!
69//! // Chat conversation
70//! let conversation = ChatBuilder::new()
71//!     .developer("You are a helpful assistant")
72//!     .user("What is Rust?");
73//!
74//! let response = client.chat("gpt-4", conversation).await?;
75//! println!("Chat response: {response}");
76//! # Ok::<(), openai_rust_sdk::OpenAIError>(())
77//! # }).unwrap();
78//! ```
79//!
80//! ## Quick Start - YARA Validation
81//!
82//! ```rust,ignore
83//! # #[cfg(feature = "yara")]
84//! use openai_rust_sdk::testing::YaraValidator;
85//!
86//! # #[cfg(feature = "yara")]
87//! # tokio_test::block_on(async {
88//! let validator = YaraValidator::new();
89//! let rule = r#"
90//! rule test_rule {
91//!     strings:
92//!         $hello = "Hello World"
93//!     condition:
94//!         $hello
95//! }
96//! "#;
97//!
98//! let result = validator.validate_rule(rule)?;
99//! println!("Rule is valid: {}", result.is_valid);
100//! # Ok::<(), anyhow::Error>(())
101//! # }).unwrap();
102//! ```
103//!
104//! ## Modules
105//!
106//! - [`client`]: Main `OpenAI` client with all API functionality
107//! - [`api`]: Individual API modules (responses, streaming)
108//! - [`models`]: Data models for requests and responses
109//! - [`testing`]: YARA validation and testing functionality
110//! - [`error`]: Error types and handling
111//!
112//! ## Examples
113//!
114//! See the `examples/` directory for complete usage examples:
115//! - `chat_completion.rs`: Chat completions and streaming examples
116//! - `full_integration.rs`: Complete workflow demonstration
117//! - `basic_validation.rs`: Simple rule validation
118//! - `streaming_demo.rs`: Streaming API integration
119//! - `error_handling.rs`: Error handling patterns
120
121#![warn(missing_docs)]
122#![warn(clippy::missing_docs_in_private_items)]
123
124/// Common macros for reducing code duplication
125#[macro_use]
126pub mod macros;
127
128// Re-export shortened serde traits for use across the codebase
129pub use macros::{De, Ser};
130
131/// `OpenAI` API functionality
132pub mod api;
133/// Function and schema builders
134pub mod builders;
135/// Client implementations and builders
136pub mod client;
137/// Constants used throughout the SDK
138pub mod constants;
139/// Error types and handling
140pub mod error;
141/// Helper utilities to reduce code duplication
142pub mod helpers;
143/// Data models and types
144pub mod models;
145/// Prompt engineering utilities and builders
146pub mod prompt_engineering;
147/// JSON Schema utilities
148pub mod schema;
149/// YARA testing and validation functionality
150pub mod testing;
151
152// Re-export main OpenAI API types for convenience
153pub use api::batch::BatchApi;
154pub use api::streaming::StreamingApi;
155pub use api::{
156    AssistantsApi, CustomToolsApi, FineTuningApi, FunctionsApi, RealtimeAudioApi, ResponsesApi,
157    RunsApi, ThreadsApi, VectorStoresApi,
158};
159pub use builders::{FunctionBuilder, ObjectSchemaBuilder};
160pub use client::{from_env, from_env_with_base_url, ChatBuilder, OpenAIClient};
161pub use error::{OpenAIError, Result};
162pub use models::{assistants::*, functions::*, responses::*};
163pub use prompt_engineering::{
164    Example, PromptBuilder, PromptPatterns, PromptTemplateBuilder, XmlContentBuilder,
165};
166pub use schema::{EnhancedSchemaBuilder, JsonSchema, SchemaBuilder};
167
168// Re-export testing functionality
169pub use testing::batch_generator::BatchJobGenerator;
170
171// Re-export YARA testing functionality when feature is enabled
172#[cfg(feature = "yara")]
173pub use testing::{
174    test_cases::YaraTestCases,
175    yara_validator::{ValidationError, ValidationResult, YaraValidator},
176};