@dawn-ai/langchain 0.7.0 → 0.8.0

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.
package/README.md CHANGED
@@ -4,11 +4,13 @@
4
4
 
5
5
  # @dawn-ai/langchain
6
6
 
7
- LangChain backend adapters Dawn uses to materialize `chain` routes and provider-aware `agent` routes (tool conversion, streaming, retry).
7
+ LangChain backend adapters for Dawn, the TypeScript meta-framework for LangGraph. Dawn uses this package to materialize `chain` routes and provider-aware `agent` routes — handling tool conversion, streaming, and retry.
8
8
 
9
9
  `agent()` materialization resolves a LangChain chat model from the route descriptor. Dawn includes `@langchain/openai` for the default/backcompat path and lazy-loads optional provider packages when an agent selects or infers another provider.
10
10
 
11
- Install optional provider integrations in applications as needed:
11
+ ## Optional provider integrations
12
+
13
+ Install the provider packages your agents use, as needed:
12
14
 
13
15
  ```bash
14
16
  pnpm add @langchain/anthropic # anthropic
@@ -20,7 +22,14 @@ pnpm add @langchain/xai # xai
20
22
  pnpm add @langchain/openrouter # openrouter
21
23
  ```
22
24
 
23
- This is an internal Dawn workspace package. For Dawn documentation, see <https://github.com/cacheplane/dawnai/tree/main/apps/web/content/docs>.
25
+ ## Documentation
26
+
27
+ - [Routes](https://dawnai.org/docs/routes)
28
+ - [Getting started](https://dawnai.org/docs/getting-started)
29
+
30
+ ---
31
+
32
+ ⭐ [Star Dawn on GitHub](https://github.com/cacheplane/dawnai) · 📚 [Read the docs](https://dawnai.org/docs/getting-started) · 💬 [Ask in GitHub Discussions](https://github.com/cacheplane/dawnai/discussions)
24
33
 
25
34
  ## License
26
35
 
@@ -1,5 +1,10 @@
1
1
  import type { BuiltInModelProviderId, ReasoningConfig } from "@dawn-ai/sdk";
2
2
  type Importer = (specifier: string) => Promise<Record<string, unknown>>;
3
+ /** Advisory once-per-process warning; never blocks model construction. */
4
+ export declare function warnOnUnknownModelId(opts: {
5
+ readonly model: string;
6
+ readonly provider: string;
7
+ }): void;
3
8
  export declare function missingProviderPackageMessage(provider: BuiltInModelProviderId, packageName: string): string;
4
9
  export declare function createChatModel(options: {
5
10
  readonly model: string;
@@ -1 +1 @@
1
- {"version":3,"file":"chat-model-factory.d.ts","sourceRoot":"","sources":["../src/chat-model-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE3E,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAoBvE,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCnB"}
1
+ {"version":3,"file":"chat-model-factory.d.ts","sourceRoot":"","sources":["../src/chat-model-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG3E,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAsBvE,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,IAAI,CAYP;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCnB"}
@@ -1,3 +1,4 @@
1
+ import { validateModelId } from "@dawn-ai/sdk";
1
2
  const providerSpecs = {
2
3
  openai: { packageName: "@langchain/openai", exportName: "ChatOpenAI" },
3
4
  anthropic: { packageName: "@langchain/anthropic", exportName: "ChatAnthropic" },
@@ -9,10 +10,26 @@ const providerSpecs = {
9
10
  xai: { packageName: "@langchain/xai", exportName: "ChatXAI" },
10
11
  openrouter: { packageName: "@langchain/openrouter", exportName: "ChatOpenRouter" },
11
12
  };
13
+ const warnedModelIds = new Set();
14
+ /** Advisory once-per-process warning; never blocks model construction. */
15
+ export function warnOnUnknownModelId(opts) {
16
+ const key = `${opts.provider} ${opts.model}`;
17
+ if (warnedModelIds.has(key))
18
+ return;
19
+ const verdict = validateModelId(opts);
20
+ if (verdict.ok)
21
+ return;
22
+ warnedModelIds.add(key);
23
+ const suggestions = verdict.suggestions.map((s) => `"${s}"`).join(", ");
24
+ console.warn(`[dawn:models] model "${opts.model}" is not a known ${verdict.provider} model id.` +
25
+ (suggestions ? ` Did you mean ${suggestions}?` : "") +
26
+ " Proceeding anyway.");
27
+ }
12
28
  export function missingProviderPackageMessage(provider, packageName) {
13
29
  return `Provider "${provider}" requires ${packageName}. Install it with: pnpm add ${packageName}`;
14
30
  }
15
31
  export async function createChatModel(options) {
32
+ warnOnUnknownModelId({ model: options.model, provider: options.provider });
16
33
  const spec = providerSpecs[options.provider];
17
34
  const importer = options.importer ??
18
35
  ((specifier) => import(specifier));
@@ -1,6 +1,6 @@
1
1
  import type { BuiltInModelProviderId, ModelProviderId } from "@dawn-ai/sdk";
2
- export declare const SUPPORTED_AGENT_PROVIDERS: readonly ["openai", "anthropic", "google", "mistral", "groq", "ollama", "xai", "openrouter"];
3
- export declare function inferProvider(model: string): BuiltInModelProviderId | undefined;
2
+ import { inferProvider, SUPPORTED_AGENT_PROVIDERS } from "@dawn-ai/sdk";
3
+ export { inferProvider, SUPPORTED_AGENT_PROVIDERS };
4
4
  export declare function resolveProvider(options: {
5
5
  readonly model: string;
6
6
  readonly provider?: ModelProviderId;
@@ -1 +1 @@
1
- {"version":3,"file":"model-provider-resolver.d.ts","sourceRoot":"","sources":["../src/model-provider-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE3E,eAAO,MAAM,yBAAyB,8FASgB,CAAA;AAItD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAgB/E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC,GAAG,sBAAsB,CAgBzB"}
1
+ {"version":3,"file":"model-provider-resolver.d.ts","sourceRoot":"","sources":["../src/model-provider-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAEvE,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,CAAA;AAInD,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC,GAAG,sBAAsB,CAgBzB"}
@@ -1,31 +1,6 @@
1
- export const SUPPORTED_AGENT_PROVIDERS = [
2
- "openai",
3
- "anthropic",
4
- "google",
5
- "mistral",
6
- "groq",
7
- "ollama",
8
- "xai",
9
- "openrouter",
10
- ];
1
+ import { inferProvider, SUPPORTED_AGENT_PROVIDERS } from "@dawn-ai/sdk";
2
+ export { inferProvider, SUPPORTED_AGENT_PROVIDERS };
11
3
  const supportedProviderSet = new Set(SUPPORTED_AGENT_PROVIDERS);
12
- export function inferProvider(model) {
13
- const normalized = model.trim().toLowerCase();
14
- if (/^(gpt-|o3|o4)/.test(normalized))
15
- return "openai";
16
- if (normalized.startsWith("claude-"))
17
- return "anthropic";
18
- if (normalized.startsWith("gemini-"))
19
- return "google";
20
- if (normalized.startsWith("mistral-") ||
21
- normalized.startsWith("mixtral-") ||
22
- normalized.startsWith("codestral-")) {
23
- return "mistral";
24
- }
25
- if (normalized.startsWith("grok-"))
26
- return "xai";
27
- return undefined;
28
- }
29
4
  export function resolveProvider(options) {
30
5
  if (options.provider !== undefined) {
31
6
  if (supportedProviderSet.has(options.provider)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dawn-ai/langchain",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,9 +33,9 @@
33
33
  "@langchain/langgraph": "^1.3.0",
34
34
  "@langchain/openai": "^1.4.5",
35
35
  "gpt-tokenizer": "^3.4.0",
36
- "@dawn-ai/core": "0.7.0",
37
- "@dawn-ai/sdk": "0.7.0",
38
- "@dawn-ai/workspace": "0.3.0"
36
+ "@dawn-ai/core": "0.8.0",
37
+ "@dawn-ai/sdk": "0.8.0",
38
+ "@dawn-ai/workspace": "0.8.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@langchain/core": "^1.1.47",
@@ -88,7 +88,7 @@
88
88
  "@langchain/xai": "^1.3.18",
89
89
  "@types/node": "25.6.0",
90
90
  "zod": "4.4.3",
91
- "@dawn-ai/config-typescript": "0.7.0"
91
+ "@dawn-ai/config-typescript": "0.8.0"
92
92
  },
93
93
  "scripts": {
94
94
  "build": "tsc -b tsconfig.json",