@effect/ai-openrouter 4.0.0-beta.7 → 4.0.0-beta.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,33 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * The `OpenRouterClient` module provides an Effect service for calling
3
+ * OpenRouter's chat completions API. It wraps the generated OpenRouter HTTP
4
+ * client with Effect-native constructors, layers, typed errors, and streaming
5
+ * support.
6
+ *
7
+ * **Common tasks**
8
+ *
9
+ * - Build a client from explicit options with {@link make}
10
+ * - Provide the client to an application with {@link layer} or {@link layerConfig}
11
+ * - Create non-streaming chat completions with {@link Service.createChatCompletion}
12
+ * - Create server-sent event chat completion streams with
13
+ * {@link Service.createChatCompletionStream}
14
+ * - Customize authentication, base URL, OpenRouter ranking headers, or the
15
+ * underlying HTTP client through {@link Options}
16
+ *
17
+ * **Gotchas**
18
+ *
19
+ * - Streaming requests are sent directly to `/chat/completions` with `stream`
20
+ * and `stream_options.include_usage` enabled by this module.
21
+ * - OpenRouter API failures, HTTP client failures, and schema decoding failures
22
+ * are mapped into `AiError` values for the exported service methods.
23
+ *
24
+ * @since 4.0.0
3
25
  */
4
26
  import type * as Config from "effect/Config";
27
+ import * as Context from "effect/Context";
5
28
  import * as Effect from "effect/Effect";
6
29
  import * as Layer from "effect/Layer";
7
30
  import type * as Redacted from "effect/Redacted";
8
- import * as ServiceMap from "effect/ServiceMap";
9
31
  import * as Stream from "effect/Stream";
10
32
  import type * as AiError from "effect/unstable/ai/AiError";
11
33
  import * as HttpClient from "effect/unstable/http/HttpClient";
@@ -14,11 +36,13 @@ import * as Generated from "./Generated.ts";
14
36
  /**
15
37
  * The OpenRouter client service interface.
16
38
  *
39
+ * **Details**
40
+ *
17
41
  * Provides methods for interacting with OpenRouter's Chat Completions API,
18
42
  * including both synchronous and streaming message creation.
19
43
  *
20
- * @since 1.0.0
21
44
  * @category models
45
+ * @since 4.0.0
22
46
  */
23
47
  export interface Service {
24
48
  readonly client: Generated.OpenRouterClient;
@@ -32,24 +56,40 @@ export interface Service {
32
56
  ], AiError.AiError>;
33
57
  }
34
58
  /**
35
- * @since 1.0.0
36
- * @category Models
59
+ * Decoded `data` payload from an OpenRouter chat completion streaming chunk.
60
+ *
61
+ * **Details**
62
+ *
63
+ * The payload contains streamed choices, model metadata, optional usage, and may
64
+ * include an OpenRouter error object for a streamed response.
65
+ *
66
+ * @category models
67
+ * @since 4.0.0
37
68
  */
38
69
  export type ChatStreamingResponseChunkData = typeof Generated.ChatStreamingResponseChunk.fields.data.Type;
39
- declare const OpenRouterClient_base: ServiceMap.ServiceClass<OpenRouterClient, "@effect/ai-openrouter/OpenRouterClient", Service>;
70
+ declare const OpenRouterClient_base: Context.ServiceClass<OpenRouterClient, "@effect/ai-openrouter/OpenRouterClient", Service>;
40
71
  /**
41
72
  * Service identifier for the OpenRouter client.
42
73
  *
43
- * @since 1.0.0
44
- * @category service
74
+ * **When to use**
75
+ *
76
+ * Use when accessing or providing the OpenRouter client service through
77
+ * Effect's context.
78
+ *
79
+ * @see {@link make} for constructing an OpenRouter client effectfully
80
+ * @see {@link layer} for providing a client from explicit options
81
+ * @see {@link layerConfig} for providing a client from `Config`
82
+ *
83
+ * @category services
84
+ * @since 4.0.0
45
85
  */
46
86
  export declare class OpenRouterClient extends OpenRouterClient_base {
47
87
  }
48
88
  /**
49
89
  * Configuration options for creating an OpenRouter client.
50
90
  *
51
- * @since 1.0.0
52
91
  * @category models
92
+ * @since 4.0.0
53
93
  */
54
94
  export type Options = {
55
95
  readonly apiKey?: Redacted.Redacted<string> | undefined;
@@ -65,36 +105,80 @@ export type Options = {
65
105
  /**
66
106
  * Optional transformer for the underlying HTTP client.
67
107
  *
68
- * Use this to add middleware, logging, or custom request/response handling.
108
+ * **When to use**
109
+ *
110
+ * Use to add middleware, logging, or custom request/response handling.
69
111
  */
70
112
  readonly transformClient?: ((client: HttpClient.HttpClient) => HttpClient.HttpClient) | undefined;
71
113
  };
72
114
  /**
73
- * Creates an OpenRouter client service with the given options.
115
+ * Creates an OpenRouter client service from explicit options.
116
+ *
117
+ * **When to use**
118
+ *
119
+ * Use to construct the OpenRouter client service inside an effect when you need
120
+ * the service value directly.
121
+ *
122
+ * **Details**
123
+ *
124
+ * The returned service uses the current `HttpClient`, prepends `apiUrl` or
125
+ * `https://openrouter.ai/api/v1`, adds the bearer token and optional
126
+ * `HTTP-Referer` and `X-Title` headers, accepts JSON responses, and applies
127
+ * `transformClient` when provided.
128
+ *
129
+ * **Gotchas**
130
+ *
131
+ * Scoped `OpenRouterConfig.withClientTransform` applies to generated client
132
+ * request methods. Streaming chat completion requests are sent directly by this
133
+ * module and do not read that scoped transform.
134
+ *
135
+ * @see {@link layer} for providing this client from explicit options
136
+ * @see {@link layerConfig} for loading client settings from `Config`
74
137
  *
75
- * @since 1.0.0
76
138
  * @category constructors
139
+ * @since 4.0.0
77
140
  */
78
141
  export declare const make: (options: Options) => Effect.Effect<Service, never, HttpClient.HttpClient>;
79
142
  /**
80
143
  * Creates a layer for the OpenRouter client with the given options.
81
144
  *
82
- * @since 1.0.0
145
+ * **When to use**
146
+ *
147
+ * Use when you already have the OpenRouter client options in code and want to
148
+ * provide `OpenRouterClient` as a layer.
149
+ *
150
+ * @see {@link make} for constructing the client service effectfully
151
+ * @see {@link layerConfig} for loading client settings from `Config`
152
+ *
83
153
  * @category layers
154
+ * @since 4.0.0
84
155
  */
85
156
  export declare const layer: (options: Options) => Layer.Layer<OpenRouterClient, never, HttpClient.HttpClient>;
86
157
  /**
87
- * Creates a layer for the OpenRouter client, loading the requisite
88
- * configuration via Effect's `Config` module.
158
+ * Creates a layer for the OpenRouter client from provided `Config` values.
159
+ *
160
+ * **When to use**
161
+ *
162
+ * Use when OpenRouter client settings should be read from Effect `Config`
163
+ * values while providing `OpenRouterClient` as a layer.
164
+ *
165
+ * **Details**
166
+ *
167
+ * Only config values supplied in `options` are loaded. Omitted fields are
168
+ * passed to `make` as `undefined`, and `transformClient` is forwarded as a
169
+ * plain option.
170
+ *
171
+ * @see {@link make} for constructing the client service effectfully
172
+ * @see {@link layer} for providing the client from already-resolved options
89
173
  *
90
- * @since 1.0.0
91
174
  * @category layers
175
+ * @since 4.0.0
92
176
  */
93
177
  export declare const layerConfig: (options?: {
94
178
  /**
95
179
  * The config value to load for the API key.
96
180
  */
97
- readonly apiKey?: Config.Config<Redacted.Redacted<string>> | undefined;
181
+ readonly apiKey?: Config.Config<Redacted.Redacted<string> | undefined> | undefined;
98
182
  /**
99
183
  * The config value to load for the API URL.
100
184
  */
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterClient.d.ts","sourceRoot":"","sources":["../src/OpenRouterClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenRouterClient.d.ts","sourceRoot":"","sources":["../src/OpenRouterClient.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
+ import * as Context from "effect/Context";
1
2
  import * as Effect from "effect/Effect";
2
3
  import { identity } from "effect/Function";
3
4
  import * as Layer from "effect/Layer";
4
5
  import * as Predicate from "effect/Predicate";
5
6
  import * as Schema from "effect/Schema";
6
- import * as ServiceMap from "effect/ServiceMap";
7
7
  import * as Stream from "effect/Stream";
8
8
  import * as Sse from "effect/unstable/encoding/Sse";
9
9
  import * as HttpBody from "effect/unstable/http/HttpBody";
@@ -18,22 +18,52 @@ import { OpenRouterConfig } from "./OpenRouterConfig.js";
18
18
  /**
19
19
  * Service identifier for the OpenRouter client.
20
20
  *
21
- * @since 1.0.0
22
- * @category service
21
+ * **When to use**
22
+ *
23
+ * Use when accessing or providing the OpenRouter client service through
24
+ * Effect's context.
25
+ *
26
+ * @see {@link make} for constructing an OpenRouter client effectfully
27
+ * @see {@link layer} for providing a client from explicit options
28
+ * @see {@link layerConfig} for providing a client from `Config`
29
+ *
30
+ * @category services
31
+ * @since 4.0.0
23
32
  */
24
- export class OpenRouterClient extends /*#__PURE__*/ServiceMap.Service()("@effect/ai-openrouter/OpenRouterClient") {}
33
+ export class OpenRouterClient extends /*#__PURE__*/Context.Service()("@effect/ai-openrouter/OpenRouterClient") {}
25
34
  // =============================================================================
26
35
  // Constructor
27
36
  // =============================================================================
28
37
  /**
29
- * Creates an OpenRouter client service with the given options.
38
+ * Creates an OpenRouter client service from explicit options.
39
+ *
40
+ * **When to use**
41
+ *
42
+ * Use to construct the OpenRouter client service inside an effect when you need
43
+ * the service value directly.
44
+ *
45
+ * **Details**
46
+ *
47
+ * The returned service uses the current `HttpClient`, prepends `apiUrl` or
48
+ * `https://openrouter.ai/api/v1`, adds the bearer token and optional
49
+ * `HTTP-Referer` and `X-Title` headers, accepts JSON responses, and applies
50
+ * `transformClient` when provided.
51
+ *
52
+ * **Gotchas**
53
+ *
54
+ * Scoped `OpenRouterConfig.withClientTransform` applies to generated client
55
+ * request methods. Streaming chat completion requests are sent directly by this
56
+ * module and do not read that scoped transform.
57
+ *
58
+ * @see {@link layer} for providing this client from explicit options
59
+ * @see {@link layerConfig} for loading client settings from `Config`
30
60
  *
31
- * @since 1.0.0
32
61
  * @category constructors
62
+ * @since 4.0.0
33
63
  */
34
64
  export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
35
65
  const baseClient = yield* HttpClient.HttpClient;
36
- const httpClient = baseClient.pipe(HttpClient.mapRequest(request => request.pipe(HttpClientRequest.prependUrl(options.apiUrl ?? "https://openrouter.ai/api/v1"), options.apiKey ? HttpClientRequest.bearerToken(options.apiKey) : identity, options.siteReferrer ? HttpClientRequest.setHeader("HTTP-Referrer", options.siteReferrer) : identity, options.siteTitle ? HttpClientRequest.setHeader("X-Title", options.siteTitle) : identity, HttpClientRequest.acceptJson)), options.transformClient ?? identity);
66
+ const httpClient = baseClient.pipe(HttpClient.mapRequest(request => request.pipe(HttpClientRequest.prependUrl(options.apiUrl ?? "https://openrouter.ai/api/v1"), options.apiKey ? HttpClientRequest.bearerToken(options.apiKey) : identity, options.siteReferrer ? HttpClientRequest.setHeader("HTTP-Referer", options.siteReferrer) : identity, options.siteTitle ? HttpClientRequest.setHeader("X-Title", options.siteTitle) : identity, HttpClientRequest.acceptJson)), options.transformClient ?? identity);
37
67
  const httpClientOk = HttpClient.filterStatusOk(httpClient);
38
68
  const client = Generated.make(httpClient, {
39
69
  transformClient: Effect.fnUntraced(function* (client) {
@@ -87,16 +117,37 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
87
117
  /**
88
118
  * Creates a layer for the OpenRouter client with the given options.
89
119
  *
90
- * @since 1.0.0
120
+ * **When to use**
121
+ *
122
+ * Use when you already have the OpenRouter client options in code and want to
123
+ * provide `OpenRouterClient` as a layer.
124
+ *
125
+ * @see {@link make} for constructing the client service effectfully
126
+ * @see {@link layerConfig} for loading client settings from `Config`
127
+ *
91
128
  * @category layers
129
+ * @since 4.0.0
92
130
  */
93
131
  export const layer = options => Layer.effect(OpenRouterClient, make(options));
94
132
  /**
95
- * Creates a layer for the OpenRouter client, loading the requisite
96
- * configuration via Effect's `Config` module.
133
+ * Creates a layer for the OpenRouter client from provided `Config` values.
134
+ *
135
+ * **When to use**
136
+ *
137
+ * Use when OpenRouter client settings should be read from Effect `Config`
138
+ * values while providing `OpenRouterClient` as a layer.
139
+ *
140
+ * **Details**
141
+ *
142
+ * Only config values supplied in `options` are loaded. Omitted fields are
143
+ * passed to `make` as `undefined`, and `transformClient` is forwarded as a
144
+ * plain option.
145
+ *
146
+ * @see {@link make} for constructing the client service effectfully
147
+ * @see {@link layer} for providing the client from already-resolved options
97
148
  *
98
- * @since 1.0.0
99
149
  * @category layers
150
+ * @since 4.0.0
100
151
  */
101
152
  export const layerConfig = options => Layer.effect(OpenRouterClient, Effect.gen(function* () {
102
153
  const apiKey = Predicate.isNotUndefined(options?.apiKey) ? yield* options.apiKey : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterClient.js","names":["Effect","identity","Layer","Predicate","Schema","ServiceMap","Stream","Sse","HttpBody","HttpClient","HttpClientRequest","Generated","Errors","OpenRouterConfig","OpenRouterClient","Service","make","fnUntraced","options","baseClient","httpClient","pipe","mapRequest","request","prependUrl","apiUrl","apiKey","bearerToken","siteReferrer","setHeader","siteTitle","acceptJson","transformClient","httpClientOk","filterStatusOk","client","config","getOrUndefined","isNotUndefined","createChatCompletion","payload","sendChatCompletionRequest","includeResponse","catchTags","SendChatCompletionRequest400","error","fail","mapClientError","SendChatCompletionRequest401","SendChatCompletionRequest429","SendChatCompletionRequest500","HttpClientError","mapHttpClientError","SchemaError","mapSchemaError","buildChatCompletionStream","response","stream","decodeText","pipeThroughChannel","decode","mapEffect","event","decodeChatCompletionSseData","data","takeWhile","Retry","die","fromEffect","createChatCompletionStream","execute","post","body","jsonUnsafe","stream_options","include_usage","map","catchTag","of","layer","effect","layerConfig","gen","undefined","ChatStreamingResponseChunkDataFromString","fromJsonString","ChatStreamingResponseChunk","fields","decodeChatStreamingResponseChunkData","decodeUnknownEffect","succeed"],"sources":["../src/OpenRouterClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"OpenRouterClient.js","names":["Context","Effect","identity","Layer","Predicate","Schema","Stream","Sse","HttpBody","HttpClient","HttpClientRequest","Generated","Errors","OpenRouterConfig","OpenRouterClient","Service","make","fnUntraced","options","baseClient","httpClient","pipe","mapRequest","request","prependUrl","apiUrl","apiKey","bearerToken","siteReferrer","setHeader","siteTitle","acceptJson","transformClient","httpClientOk","filterStatusOk","client","config","getOrUndefined","isNotUndefined","createChatCompletion","payload","sendChatCompletionRequest","includeResponse","catchTags","SendChatCompletionRequest400","error","fail","mapClientError","SendChatCompletionRequest401","SendChatCompletionRequest429","SendChatCompletionRequest500","HttpClientError","mapHttpClientError","SchemaError","mapSchemaError","buildChatCompletionStream","response","stream","decodeText","pipeThroughChannel","decode","mapEffect","event","decodeChatCompletionSseData","data","takeWhile","Retry","die","fromEffect","createChatCompletionStream","execute","post","body","jsonUnsafe","stream_options","include_usage","map","catchTag","of","layer","effect","layerConfig","gen","undefined","ChatStreamingResponseChunkDataFromString","fromJsonString","ChatStreamingResponseChunk","fields","decodeChatStreamingResponseChunkData","decodeUnknownEffect","succeed"],"sources":["../src/OpenRouterClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,45 +1,156 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * The `OpenRouterConfig` module provides scoped contextual configuration for
3
+ * OpenRouter request execution. It lets a workflow customize the HTTP client
4
+ * used by generated OpenRouter request methods without rebuilding the
5
+ * `OpenRouterClient` layer.
6
+ *
7
+ * **Mental model**
8
+ *
9
+ * - {@link OpenRouterConfig} is a context service carrying optional
10
+ * OpenRouter-specific request configuration
11
+ * - {@link withClientTransform} provides that service around one effect
12
+ * - Generated request methods read the current context and apply the transform
13
+ * to their `HttpClient`
14
+ * - The scoped configuration only applies while the returned effect is run
15
+ *
16
+ * **Common tasks**
17
+ *
18
+ * - Add request logging, retries, proxy routing, headers, or test doubles with
19
+ * {@link withClientTransform}
20
+ * - Scope OpenRouter client customization to one workflow without changing the
21
+ * shared client layer
22
+ *
23
+ * **Gotchas**
24
+ *
25
+ * - Each {@link withClientTransform} call replaces the current scoped
26
+ * transform for the supplied effect; compose transforms manually when both
27
+ * behaviors should apply
28
+ * - The transform receives and returns an `HttpClient`, so it should preserve
29
+ * the OpenRouter request contract while adding behavior around it
30
+ * - Streaming chat completion requests are sent directly by `OpenRouterClient`
31
+ * and do not read this scoped transform
32
+ *
33
+ * @since 4.0.0
3
34
  */
35
+ import * as Context from "effect/Context";
4
36
  import * as Effect from "effect/Effect";
5
- import * as ServiceMap from "effect/ServiceMap";
6
37
  import type { HttpClient } from "effect/unstable/http/HttpClient";
7
- declare const OpenRouterConfig_base: ServiceMap.ServiceClass<OpenRouterConfig, "@effect/ai-openrouter/OpenRouterConfig", OpenRouterConfig.Service>;
38
+ declare const OpenRouterConfig_base: Context.ServiceClass<OpenRouterConfig, "@effect/ai-openrouter/OpenRouterConfig", OpenRouterConfig.Service>;
8
39
  /**
9
- * @since 1.0.0
40
+ * Context service carrying scoped OpenRouter provider configuration for client
41
+ * operations.
42
+ *
43
+ * **When to use**
44
+ *
45
+ * Use as the context service tag when manually providing or reading scoped
46
+ * OpenRouter provider configuration in an Effect context.
47
+ *
48
+ * @see {@link withClientTransform} for scoping an HTTP client transformation
49
+ *
10
50
  * @category services
51
+ * @since 4.0.0
11
52
  */
12
53
  export declare class OpenRouterConfig extends OpenRouterConfig_base {
13
54
  /**
14
- * @since 1.0.0
55
+ * Gets the configured OpenRouter service from the current context when present.
56
+ *
57
+ * @since 4.0.0
15
58
  */
16
59
  static readonly getOrUndefined: Effect.Effect<typeof OpenRouterConfig.Service | undefined>;
17
60
  }
18
61
  /**
19
- * @since 1.0.0
62
+ * Types associated with the `OpenRouterConfig` context service.
63
+ *
64
+ * @since 4.0.0
20
65
  */
21
66
  export declare namespace OpenRouterConfig {
22
67
  /**
23
- * @since 1.0.0
68
+ * Configuration values read by OpenRouter provider operations when resolving
69
+ * the generated HTTP client.
70
+ *
24
71
  * @category models
72
+ * @since 4.0.0
25
73
  */
26
74
  interface Service {
27
75
  readonly transformClient?: ((client: HttpClient) => HttpClient) | undefined;
28
76
  }
29
77
  }
30
78
  /**
31
- * @since 1.0.0
79
+ * Provides a scoped transform for the OpenRouter HTTP client used by provider
80
+ * operations.
81
+ *
82
+ * **When to use**
83
+ *
84
+ * Use when a single effect or workflow needs temporary OpenRouter HTTP client
85
+ * customization without rebuilding the client layer.
86
+ *
87
+ * **Details**
88
+ *
89
+ * Supports both data-first and data-last forms. The transform is stored in the
90
+ * scoped `OpenRouterConfig` service and read by generated OpenRouter request
91
+ * operations while running the supplied effect.
92
+ *
93
+ * **Gotchas**
94
+ *
95
+ * If a transform is already present in the scoped config, this helper replaces
96
+ * it. Compose transforms manually when both should apply. Streaming chat
97
+ * completion requests are sent directly by `OpenRouterClient.make` and do not
98
+ * read this scoped transform.
99
+ *
32
100
  * @category configuration
101
+ * @since 4.0.0
33
102
  */
34
103
  export declare const withClientTransform: {
35
104
  /**
36
- * @since 1.0.0
105
+ * Provides a scoped transform for the OpenRouter HTTP client used by provider
106
+ * operations.
107
+ *
108
+ * **When to use**
109
+ *
110
+ * Use when a single effect or workflow needs temporary OpenRouter HTTP client
111
+ * customization without rebuilding the client layer.
112
+ *
113
+ * **Details**
114
+ *
115
+ * Supports both data-first and data-last forms. The transform is stored in the
116
+ * scoped `OpenRouterConfig` service and read by generated OpenRouter request
117
+ * operations while running the supplied effect.
118
+ *
119
+ * **Gotchas**
120
+ *
121
+ * If a transform is already present in the scoped config, this helper replaces
122
+ * it. Compose transforms manually when both should apply. Streaming chat
123
+ * completion requests are sent directly by `OpenRouterClient.make` and do not
124
+ * read this scoped transform.
125
+ *
37
126
  * @category configuration
127
+ * @since 4.0.0
38
128
  */
39
129
  (transform: (client: HttpClient) => HttpClient): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
40
130
  /**
41
- * @since 1.0.0
131
+ * Provides a scoped transform for the OpenRouter HTTP client used by provider
132
+ * operations.
133
+ *
134
+ * **When to use**
135
+ *
136
+ * Use when a single effect or workflow needs temporary OpenRouter HTTP client
137
+ * customization without rebuilding the client layer.
138
+ *
139
+ * **Details**
140
+ *
141
+ * Supports both data-first and data-last forms. The transform is stored in the
142
+ * scoped `OpenRouterConfig` service and read by generated OpenRouter request
143
+ * operations while running the supplied effect.
144
+ *
145
+ * **Gotchas**
146
+ *
147
+ * If a transform is already present in the scoped config, this helper replaces
148
+ * it. Compose transforms manually when both should apply. Streaming chat
149
+ * completion requests are sent directly by `OpenRouterClient.make` and do not
150
+ * read this scoped transform.
151
+ *
42
152
  * @category configuration
153
+ * @since 4.0.0
43
154
  */
44
155
  <A, E, R>(self: Effect.Effect<A, E, R>, transform: (client: HttpClient) => HttpClient): Effect.Effect<A, E, R>;
45
156
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterConfig.d.ts","sourceRoot":"","sources":["../src/OpenRouterConfig.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;;AAEjE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGO;IAC3C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,CAGzF;CACF;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC;;;OAGG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,GAAG,SAAS,CAAA;KAC5E;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAChC;;;OAGG;IACH,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClH;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,GAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAsB1B,CAAA"}
1
+ {"version":3,"file":"OpenRouterConfig.d.ts","sourceRoot":"","sources":["../src/OpenRouterConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;;AAEjE;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,qBAGO;IAC3C;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,CAGzF;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC;;;;;;OAMG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,GAAG,SAAS,CAAA;KAC5E;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAChC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClH;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,GAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAgE1B,CAAA"}
@@ -1,22 +1,86 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * The `OpenRouterConfig` module provides scoped contextual configuration for
3
+ * OpenRouter request execution. It lets a workflow customize the HTTP client
4
+ * used by generated OpenRouter request methods without rebuilding the
5
+ * `OpenRouterClient` layer.
6
+ *
7
+ * **Mental model**
8
+ *
9
+ * - {@link OpenRouterConfig} is a context service carrying optional
10
+ * OpenRouter-specific request configuration
11
+ * - {@link withClientTransform} provides that service around one effect
12
+ * - Generated request methods read the current context and apply the transform
13
+ * to their `HttpClient`
14
+ * - The scoped configuration only applies while the returned effect is run
15
+ *
16
+ * **Common tasks**
17
+ *
18
+ * - Add request logging, retries, proxy routing, headers, or test doubles with
19
+ * {@link withClientTransform}
20
+ * - Scope OpenRouter client customization to one workflow without changing the
21
+ * shared client layer
22
+ *
23
+ * **Gotchas**
24
+ *
25
+ * - Each {@link withClientTransform} call replaces the current scoped
26
+ * transform for the supplied effect; compose transforms manually when both
27
+ * behaviors should apply
28
+ * - The transform receives and returns an `HttpClient`, so it should preserve
29
+ * the OpenRouter request contract while adding behavior around it
30
+ * - Streaming chat completion requests are sent directly by `OpenRouterClient`
31
+ * and do not read this scoped transform
32
+ *
33
+ * @since 4.0.0
3
34
  */
35
+ import * as Context from "effect/Context";
4
36
  import * as Effect from "effect/Effect";
5
37
  import { dual } from "effect/Function";
6
- import * as ServiceMap from "effect/ServiceMap";
7
38
  /**
8
- * @since 1.0.0
39
+ * Context service carrying scoped OpenRouter provider configuration for client
40
+ * operations.
41
+ *
42
+ * **When to use**
43
+ *
44
+ * Use as the context service tag when manually providing or reading scoped
45
+ * OpenRouter provider configuration in an Effect context.
46
+ *
47
+ * @see {@link withClientTransform} for scoping an HTTP client transformation
48
+ *
9
49
  * @category services
50
+ * @since 4.0.0
10
51
  */
11
- export class OpenRouterConfig extends /*#__PURE__*/ServiceMap.Service()("@effect/ai-openrouter/OpenRouterConfig") {
52
+ export class OpenRouterConfig extends /*#__PURE__*/Context.Service()("@effect/ai-openrouter/OpenRouterConfig") {
12
53
  /**
13
- * @since 1.0.0
54
+ * Gets the configured OpenRouter service from the current context when present.
55
+ *
56
+ * @since 4.0.0
14
57
  */
15
- static getOrUndefined = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.services(), services => services.mapUnsafe.get(OpenRouterConfig.key));
58
+ static getOrUndefined = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.context(), services => services.mapUnsafe.get(OpenRouterConfig.key));
16
59
  }
17
60
  /**
18
- * @since 1.0.0
61
+ * Provides a scoped transform for the OpenRouter HTTP client used by provider
62
+ * operations.
63
+ *
64
+ * **When to use**
65
+ *
66
+ * Use when a single effect or workflow needs temporary OpenRouter HTTP client
67
+ * customization without rebuilding the client layer.
68
+ *
69
+ * **Details**
70
+ *
71
+ * Supports both data-first and data-last forms. The transform is stored in the
72
+ * scoped `OpenRouterConfig` service and read by generated OpenRouter request
73
+ * operations while running the supplied effect.
74
+ *
75
+ * **Gotchas**
76
+ *
77
+ * If a transform is already present in the scoped config, this helper replaces
78
+ * it. Compose transforms manually when both should apply. Streaming chat
79
+ * completion requests are sent directly by `OpenRouterClient.make` and do not
80
+ * read this scoped transform.
81
+ *
19
82
  * @category configuration
83
+ * @since 4.0.0
20
84
  */
21
85
  export const withClientTransform = /*#__PURE__*/dual(2, (self, transformClient) => Effect.flatMap(OpenRouterConfig.getOrUndefined, config => Effect.provideService(self, OpenRouterConfig, {
22
86
  ...config,
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterConfig.js","names":["Effect","dual","ServiceMap","OpenRouterConfig","Service","getOrUndefined","map","services","mapUnsafe","get","key","withClientTransform","self","transformClient","flatMap","config","provideService"],"sources":["../src/OpenRouterConfig.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAG/C;;;;AAIA,OAAM,MAAOC,gBAAiB,sBAAQD,UAAU,CAACE,OAAO,EAGrD,CAAC,wCAAwC,CAAC;EAC3C;;;EAGA,OAAgBC,cAAc,gBAA+DL,MAAM,CAACM,GAAG,cACrGN,MAAM,CAACO,QAAQ,EAAS,EACvBA,QAAQ,IAAKA,QAAQ,CAACC,SAAS,CAACC,GAAG,CAACN,gBAAgB,CAACO,GAAG,CAAC,CAC3D;;AAgBH;;;;AAIA,OAAO,MAAMC,mBAAmB,gBAc5BV,IAAI,CAeN,CAAC,EACD,CAACW,IAAI,EAAEC,eAAe,KACpBb,MAAM,CAACc,OAAO,CACZX,gBAAgB,CAACE,cAAc,EAC9BU,MAAM,IAAKf,MAAM,CAACgB,cAAc,CAACJ,IAAI,EAAET,gBAAgB,EAAE;EAAE,GAAGY,MAAM;EAAEF;AAAe,CAAE,CAAC,CAC1F,CACJ","ignoreList":[]}
1
+ {"version":3,"file":"OpenRouterConfig.js","names":["Context","Effect","dual","OpenRouterConfig","Service","getOrUndefined","map","context","services","mapUnsafe","get","key","withClientTransform","self","transformClient","flatMap","config","provideService"],"sources":["../src/OpenRouterConfig.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AAGtC;;;;;;;;;;;;;;AAcA,OAAM,MAAOC,gBAAiB,sBAAQH,OAAO,CAACI,OAAO,EAGlD,CAAC,wCAAwC,CAAC;EAC3C;;;;;EAKA,OAAgBC,cAAc,gBAA+DJ,MAAM,CAACK,GAAG,cACrGL,MAAM,CAACM,OAAO,EAAS,EACtBC,QAAQ,IAAKA,QAAQ,CAACC,SAAS,CAACC,GAAG,CAACP,gBAAgB,CAACQ,GAAG,CAAC,CAC3D;;AAqBH;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,OAAO,MAAMC,mBAAmB,gBAwD5BV,IAAI,CAyDN,CAAC,EACD,CAACW,IAAI,EAAEC,eAAe,KACpBb,MAAM,CAACc,OAAO,CACZZ,gBAAgB,CAACE,cAAc,EAC9BW,MAAM,IAAKf,MAAM,CAACgB,cAAc,CAACJ,IAAI,EAAEV,gBAAgB,EAAE;EAAE,GAAGa,MAAM;EAAEF;AAAe,CAAE,CAAC,CAC1F,CACJ","ignoreList":[]}