Skip to main content

sim_codec_chat/
lib.rs

1//! Canonical chat transcript codec for SIM.
2//!
3//! This crate provides `codec:chat`, a provider-neutral text format for
4//! model request, response, event, and card transcripts represented as
5//! `Expr::Map` values.
6
7#![forbid(unsafe_code)]
8#![deny(missing_docs)]
9
10mod base64;
11mod canonical;
12mod cookbook;
13mod expr;
14mod helpers;
15mod ollama;
16mod output_grammar;
17mod parts;
18pub mod providers;
19
20#[cfg(test)]
21mod tests;
22
23pub use canonical::{ChatCodec, ChatCodecLib};
24pub use helpers::{
25    is_model_request_expr, model_card_expr, model_error_expr, model_request_messages_expr,
26    model_response_expr, validate_chat_transcript,
27};
28pub use ollama::{
29    OllamaCodec, OllamaCodecLib, OllamaRequestOptions, decode_ollama_response,
30    decode_ollama_response_with_limits, decode_ollama_stream, decode_ollama_stream_with_limits,
31    encode_ollama_request,
32};
33pub use parts::{number_field, text_part, usage_record};
34pub use providers::anthropic::{
35    AnthropicCodec, AnthropicCodecLib, AnthropicCodecOptions, AnthropicRequestOptions,
36    anthropic_codec_symbol, decode_anthropic_request, decode_anthropic_request_with_limits,
37    decode_anthropic_response, decode_anthropic_response_with_limits, decode_anthropic_stream,
38    decode_anthropic_stream_events, decode_anthropic_stream_events_with_limits,
39    decode_anthropic_stream_with_limits, encode_anthropic_request, encode_anthropic_response,
40};
41pub use providers::lemonade::{
42    LemonadeCodec, LemonadeCodecLib, LemonadeCodecOptions, LemonadeRequestOptions,
43    decode_lemonade_request, decode_lemonade_request_with_limits, decode_lemonade_response,
44    decode_lemonade_response_with_limits, decode_lemonade_stream,
45    decode_lemonade_stream_with_limits, encode_lemonade_request, encode_lemonade_response,
46    lemonade_codec_symbol,
47};
48pub use providers::lm_studio::{
49    LmStudioCodec, LmStudioCodecLib, LmStudioCodecOptions, LmStudioRequestOptions,
50    decode_lm_studio_request, decode_lm_studio_request_with_limits, decode_lm_studio_response,
51    decode_lm_studio_response_with_limits, decode_lm_studio_stream,
52    decode_lm_studio_stream_with_limits, encode_lm_studio_request, encode_lm_studio_response,
53    lm_studio_codec_symbol,
54};
55pub use providers::openai::{
56    OpenAiCodec, OpenAiCodecLib, OpenAiCodecOptions, OpenAiRequestOptions, decode_openai_request,
57    decode_openai_request_with_limits, decode_openai_response, decode_openai_response_with_limits,
58    decode_openai_stream, decode_openai_stream_with_limits, encode_openai_request,
59    encode_openai_response, openai_codec_symbol,
60};
61pub use providers::profile::{
62    CodecProfile, RequestWire, StreamWire, anthropic_profile, lemonade_profile, lm_studio_profile,
63    ollama_profile, openai_profile,
64};
65
66/// Cookbook recipes for this codec, embedded at build time.
67pub static RECIPES: sim_cookbook::EmbeddedDir =
68    include!(concat!(env!("OUT_DIR"), "/cookbook_recipes.rs"));