llmsdk_provider/language_model/
result.rs1use std::collections::HashMap;
7
8use serde::{Deserialize, Serialize};
9
10use crate::error::Result;
11use crate::shared::{Headers, ProviderMetadata, RequestInfo, Warning};
12
13use super::BoxStream;
14use super::content::Content;
15use super::finish_reason::FinishReason;
16use super::stream_part::StreamPart;
17use super::usage::Usage;
18
19#[derive(Debug, Clone)]
21pub struct GenerateResult {
22 pub content: Vec<Content>,
24 pub finish_reason: FinishReason,
26 pub usage: Usage,
28 pub provider_metadata: Option<ProviderMetadata>,
30 pub request: Option<RequestInfo>,
32 pub response: Option<GenerateResponse>,
34 pub warnings: Vec<Warning>,
36}
37
38#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
40pub struct GenerateResponse {
41 #[serde(flatten)]
43 pub metadata: ResponseMetadata,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub body: Option<crate::json::JsonValue>,
47}
48
49#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
51pub struct ResponseMetadata {
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub id: Option<String>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub timestamp: Option<String>,
58 #[serde(default, rename = "modelId", skip_serializing_if = "Option::is_none")]
60 pub model_id: Option<String>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub headers: Option<Headers>,
64}
65
66#[expect(
72 missing_debug_implementations,
73 reason = "BoxStream is not Debug; trait obj has no useful repr"
74)]
75pub struct StreamResult {
76 pub stream: BoxStream<Result<StreamPart>>,
78 pub request: Option<RequestInfo>,
80 pub response: Option<StreamResponse>,
82}
83
84#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
86pub struct StreamResponse {
87 #[serde(default, skip_serializing_if = "Option::is_none")]
89 pub headers: Option<Headers>,
90}
91
92pub type SupportedUrls = HashMap<String, Vec<UrlPattern>>;
98
99#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
101pub struct UrlPattern(pub String);
102
103impl UrlPattern {
104 pub fn new(pattern: impl Into<String>) -> Self {
106 Self(pattern.into())
107 }
108
109 #[must_use]
111 pub fn as_str(&self) -> &str {
112 &self.0
113 }
114}