funera-core 0.2.5

Core LLM agent engine — ReAct loop, providers, tools, skills, middleware, security
Documentation
use async_openai::{
    Client,
    config::OpenAIConfig,
    error::OpenAIError,
    types::{chat::CreateChatCompletionStreamResponse, stream::StreamResponse},
};
use serde_json::Value as JsonValue;

use crate::provider::{ChatProvider, build_standard_request_json};

pub struct OpenAIProvider;

impl ChatProvider for OpenAIProvider {
    type Chunk = CreateChatCompletionStreamResponse;

    fn build_request_json(
        model: &str,
        messages: &[JsonValue],
        skill_content: &str,
        tools_json: &JsonValue,
    ) -> JsonValue {
        build_standard_request_json(model, messages, skill_content, tools_json)
    }

    async fn create_stream(
        client: &Client<OpenAIConfig>,
        request_json: JsonValue,
    ) -> Result<StreamResponse<Self::Chunk>, OpenAIError> {
        client
            .chat()
            .create_stream_byot::<JsonValue, Self::Chunk>(request_json)
            .await
    }
}