@asklumora/sdk 0.1.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.
Files changed (67) hide show
  1. package/README.md +1162 -0
  2. package/dist/examples/chat.d.ts +2 -0
  3. package/dist/examples/chat.d.ts.map +1 -0
  4. package/dist/examples/chat.js +17 -0
  5. package/dist/examples/chat.js.map +1 -0
  6. package/dist/examples/custom-assistant.d.ts +2 -0
  7. package/dist/examples/custom-assistant.d.ts.map +1 -0
  8. package/dist/examples/custom-assistant.js +22 -0
  9. package/dist/examples/custom-assistant.js.map +1 -0
  10. package/dist/examples/game-ai.d.ts +2 -0
  11. package/dist/examples/game-ai.d.ts.map +1 -0
  12. package/dist/examples/game-ai.js +24 -0
  13. package/dist/examples/game-ai.js.map +1 -0
  14. package/dist/examples/providers.d.ts +2 -0
  15. package/dist/examples/providers.d.ts.map +1 -0
  16. package/dist/examples/providers.js +17 -0
  17. package/dist/examples/providers.js.map +1 -0
  18. package/dist/examples/streaming.d.ts +2 -0
  19. package/dist/examples/streaming.d.ts.map +1 -0
  20. package/dist/examples/streaming.js +10 -0
  21. package/dist/examples/streaming.js.map +1 -0
  22. package/dist/src/client.d.ts +34 -0
  23. package/dist/src/client.d.ts.map +1 -0
  24. package/dist/src/client.js +154 -0
  25. package/dist/src/client.js.map +1 -0
  26. package/dist/src/env.d.ts +11 -0
  27. package/dist/src/env.d.ts.map +1 -0
  28. package/dist/src/env.js +24 -0
  29. package/dist/src/env.js.map +1 -0
  30. package/dist/src/index.d.ts +11 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +6 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/providers/base.d.ts +14 -0
  35. package/dist/src/providers/base.d.ts.map +1 -0
  36. package/dist/src/providers/base.js +13 -0
  37. package/dist/src/providers/base.js.map +1 -0
  38. package/dist/src/providers/gemini.d.ts +18 -0
  39. package/dist/src/providers/gemini.d.ts.map +1 -0
  40. package/dist/src/providers/gemini.js +102 -0
  41. package/dist/src/providers/gemini.js.map +1 -0
  42. package/dist/src/providers/openai.d.ts +19 -0
  43. package/dist/src/providers/openai.d.ts.map +1 -0
  44. package/dist/src/providers/openai.js +132 -0
  45. package/dist/src/providers/openai.js.map +1 -0
  46. package/dist/src/providers/xai.d.ts +19 -0
  47. package/dist/src/providers/xai.d.ts.map +1 -0
  48. package/dist/src/providers/xai.js +105 -0
  49. package/dist/src/providers/xai.js.map +1 -0
  50. package/dist/src/types/chat.d.ts +50 -0
  51. package/dist/src/types/chat.d.ts.map +1 -0
  52. package/dist/src/types/chat.js +2 -0
  53. package/dist/src/types/chat.js.map +1 -0
  54. package/dist/src/types/game.d.ts +30 -0
  55. package/dist/src/types/game.d.ts.map +1 -0
  56. package/dist/src/types/game.js +2 -0
  57. package/dist/src/types/game.js.map +1 -0
  58. package/dist/src/types/training.d.ts +28 -0
  59. package/dist/src/types/training.d.ts.map +1 -0
  60. package/dist/src/types/training.js +2 -0
  61. package/dist/src/types/training.js.map +1 -0
  62. package/examples/chat.ts +19 -0
  63. package/examples/custom-assistant.ts +25 -0
  64. package/examples/game-ai.ts +26 -0
  65. package/examples/providers.ts +21 -0
  66. package/examples/streaming.ts +12 -0
  67. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAErE,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,qBAA0B;IAMzC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqC5D,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;IAgC/E,OAAO,CAAC,OAAO;CAMhB"}
@@ -0,0 +1,132 @@
1
+ import { requireEnv } from "../env.js";
2
+ import { LumoraProviderError } from "./base.js";
3
+ export class OpenAIProvider {
4
+ name = "openai";
5
+ defaultModel;
6
+ apiKey;
7
+ baseUrl;
8
+ constructor(options = {}) {
9
+ this.apiKey = requireEnv("OPENAI_API_KEY", options.apiKey);
10
+ this.baseUrl = options.baseUrl ?? "https://api.openai.com/v1";
11
+ this.defaultModel = options.defaultModel ?? "gpt-4o-mini";
12
+ }
13
+ async chat(request) {
14
+ const model = request.model ?? this.defaultModel;
15
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
16
+ method: "POST",
17
+ headers: this.headers(),
18
+ body: JSON.stringify({
19
+ model,
20
+ messages: withMemory(request),
21
+ temperature: request.temperature,
22
+ max_tokens: request.maxTokens,
23
+ tools: request.tools?.map((tool) => ({
24
+ type: "function",
25
+ function: {
26
+ name: tool.name,
27
+ description: tool.description,
28
+ parameters: tool.parameters
29
+ }
30
+ }))
31
+ })
32
+ });
33
+ const json = await readJson(response, this.name);
34
+ const choice = json.choices?.[0];
35
+ return {
36
+ provider: this.name,
37
+ model,
38
+ text: choice?.message?.content ?? "",
39
+ toolCalls: choice?.message?.tool_calls?.map((call) => ({
40
+ id: call.id,
41
+ name: call.function?.name,
42
+ arguments: safeJson(call.function?.arguments)
43
+ })),
44
+ raw: json
45
+ };
46
+ }
47
+ async *streamChat(request) {
48
+ const model = request.model ?? this.defaultModel;
49
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
50
+ method: "POST",
51
+ headers: this.headers(),
52
+ body: JSON.stringify({
53
+ model,
54
+ messages: withMemory(request),
55
+ temperature: request.temperature,
56
+ max_tokens: request.maxTokens,
57
+ stream: true
58
+ })
59
+ });
60
+ if (!response.ok || !response.body) {
61
+ throw new LumoraProviderError("OpenAI streaming request failed.", this.name, response.status, await response.text());
62
+ }
63
+ for await (const event of streamServerSentEvents(response.body)) {
64
+ if (event === "[DONE]") {
65
+ yield { provider: this.name, model, text: "", done: true };
66
+ return;
67
+ }
68
+ const json = safeJson(event);
69
+ const text = json.choices?.[0]?.delta?.content ?? "";
70
+ if (text) {
71
+ yield { provider: this.name, model, text, done: false, raw: json };
72
+ }
73
+ }
74
+ }
75
+ headers() {
76
+ return {
77
+ "Authorization": `Bearer ${this.apiKey}`,
78
+ "Content-Type": "application/json"
79
+ };
80
+ }
81
+ }
82
+ function withMemory(request) {
83
+ const memory = request.memory?.map((entry) => `- ${entry.content}`).join("\n");
84
+ if (!memory) {
85
+ return request.messages;
86
+ }
87
+ return [
88
+ {
89
+ role: "system",
90
+ content: `Long-term memory available for this conversation:\n${memory}`
91
+ },
92
+ ...request.messages
93
+ ];
94
+ }
95
+ async function readJson(response, provider) {
96
+ const json = await response.json().catch(() => undefined);
97
+ if (!response.ok) {
98
+ throw new LumoraProviderError("OpenAI request failed.", provider, response.status, json);
99
+ }
100
+ return json;
101
+ }
102
+ function safeJson(value) {
103
+ if (!value) {
104
+ return {};
105
+ }
106
+ try {
107
+ return JSON.parse(value);
108
+ }
109
+ catch {
110
+ return {};
111
+ }
112
+ }
113
+ async function* streamServerSentEvents(stream) {
114
+ const reader = stream.getReader();
115
+ const decoder = new TextDecoder();
116
+ let buffer = "";
117
+ while (true) {
118
+ const { done, value } = await reader.read();
119
+ if (done) {
120
+ return;
121
+ }
122
+ buffer += decoder.decode(value, { stream: true });
123
+ const lines = buffer.split("\n");
124
+ buffer = lines.pop() ?? "";
125
+ for (const line of lines) {
126
+ if (line.startsWith("data: ")) {
127
+ yield line.slice(6).trim();
128
+ }
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { LumoraChatRequest, LumoraChatResponse, LumoraStreamChunk } from "../types/chat.js";
2
+ import { type LumoraProvider } from "./base.js";
3
+ interface XAIProviderOptions {
4
+ apiKey?: string;
5
+ baseUrl?: string;
6
+ defaultModel?: string;
7
+ }
8
+ export declare class XAIProvider implements LumoraProvider {
9
+ readonly name: "xai";
10
+ readonly defaultModel: string;
11
+ private readonly apiKey;
12
+ private readonly baseUrl;
13
+ constructor(options?: XAIProviderOptions);
14
+ chat(request: LumoraChatRequest): Promise<LumoraChatResponse>;
15
+ streamChat(request: LumoraChatRequest): AsyncIterable<LumoraStreamChunk>;
16
+ private headers;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../../src/providers/xai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAErE,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,kBAAuB;IAMtC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuB5D,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;IAgC/E,OAAO,CAAC,OAAO;CAMhB"}
@@ -0,0 +1,105 @@
1
+ import { requireEnv } from "../env.js";
2
+ import { LumoraProviderError } from "./base.js";
3
+ export class XAIProvider {
4
+ name = "xai";
5
+ defaultModel;
6
+ apiKey;
7
+ baseUrl;
8
+ constructor(options = {}) {
9
+ this.apiKey = requireEnv("XAI_API_KEY", options.apiKey);
10
+ this.baseUrl = options.baseUrl ?? "https://api.x.ai/v1";
11
+ this.defaultModel = options.defaultModel ?? "grok-2-latest";
12
+ }
13
+ async chat(request) {
14
+ const model = request.model ?? this.defaultModel;
15
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
16
+ method: "POST",
17
+ headers: this.headers(),
18
+ body: JSON.stringify({
19
+ model,
20
+ messages: request.messages,
21
+ temperature: request.temperature,
22
+ max_tokens: request.maxTokens
23
+ })
24
+ });
25
+ const json = await readJson(response, this.name);
26
+ return {
27
+ provider: this.name,
28
+ model,
29
+ text: json.choices?.[0]?.message?.content ?? "",
30
+ raw: json
31
+ };
32
+ }
33
+ async *streamChat(request) {
34
+ const model = request.model ?? this.defaultModel;
35
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
36
+ method: "POST",
37
+ headers: this.headers(),
38
+ body: JSON.stringify({
39
+ model,
40
+ messages: request.messages,
41
+ temperature: request.temperature,
42
+ max_tokens: request.maxTokens,
43
+ stream: true
44
+ })
45
+ });
46
+ if (!response.ok || !response.body) {
47
+ throw new LumoraProviderError("xAI streaming request failed.", this.name, response.status, await response.text());
48
+ }
49
+ for await (const event of streamServerSentEvents(response.body)) {
50
+ if (event === "[DONE]") {
51
+ yield { provider: this.name, model, text: "", done: true };
52
+ return;
53
+ }
54
+ const json = safeJson(event);
55
+ const text = json.choices?.[0]?.delta?.content ?? "";
56
+ if (text) {
57
+ yield { provider: this.name, model, text, done: false, raw: json };
58
+ }
59
+ }
60
+ }
61
+ headers() {
62
+ return {
63
+ "Authorization": `Bearer ${this.apiKey}`,
64
+ "Content-Type": "application/json"
65
+ };
66
+ }
67
+ }
68
+ async function readJson(response, provider) {
69
+ const json = await response.json().catch(() => undefined);
70
+ if (!response.ok) {
71
+ throw new LumoraProviderError("xAI request failed.", provider, response.status, json);
72
+ }
73
+ return json;
74
+ }
75
+ function safeJson(value) {
76
+ if (!value) {
77
+ return {};
78
+ }
79
+ try {
80
+ return JSON.parse(value);
81
+ }
82
+ catch {
83
+ return {};
84
+ }
85
+ }
86
+ async function* streamServerSentEvents(stream) {
87
+ const reader = stream.getReader();
88
+ const decoder = new TextDecoder();
89
+ let buffer = "";
90
+ while (true) {
91
+ const { done, value } = await reader.read();
92
+ if (done) {
93
+ return;
94
+ }
95
+ buffer += decoder.decode(value, { stream: true });
96
+ const lines = buffer.split("\n");
97
+ buffer = lines.pop() ?? "";
98
+ for (const line of lines) {
99
+ if (line.startsWith("data: ")) {
100
+ yield line.slice(6).trim();
101
+ }
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=xai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.js","sourceRoot":"","sources":["../../../src/providers/xai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export type LumoraProviderName = "openai" | "xai" | "gemini";
2
+ export type LumoraRole = "system" | "user" | "assistant" | "tool";
3
+ export interface LumoraMessage {
4
+ role: LumoraRole;
5
+ content: string;
6
+ name?: string;
7
+ toolCallId?: string;
8
+ }
9
+ export interface LumoraTool {
10
+ name: string;
11
+ description?: string;
12
+ parameters: Record<string, unknown>;
13
+ }
14
+ export interface LumoraToolCall {
15
+ id: string;
16
+ name: string;
17
+ arguments: Record<string, unknown>;
18
+ }
19
+ export interface LumoraChatRequest {
20
+ messages: LumoraMessage[];
21
+ model?: string;
22
+ provider?: LumoraProviderName;
23
+ temperature?: number;
24
+ maxTokens?: number;
25
+ tools?: LumoraTool[];
26
+ memory?: LumoraMemoryEntry[];
27
+ metadata?: Record<string, unknown>;
28
+ }
29
+ export interface LumoraChatResponse {
30
+ provider: LumoraProviderName;
31
+ model: string;
32
+ text: string;
33
+ toolCalls?: LumoraToolCall[];
34
+ raw?: unknown;
35
+ }
36
+ export interface LumoraStreamChunk {
37
+ provider: LumoraProviderName;
38
+ model: string;
39
+ text: string;
40
+ done: boolean;
41
+ raw?: unknown;
42
+ }
43
+ export interface LumoraMemoryEntry {
44
+ id?: string;
45
+ content: string;
46
+ importance?: number;
47
+ createdAt?: string;
48
+ metadata?: Record<string, unknown>;
49
+ }
50
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/types/chat.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/types/chat.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { LumoraMemoryEntry } from "./chat.js";
2
+ export interface LumoraGameCharacter {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ personality?: string;
7
+ memory?: LumoraMemoryEntry[];
8
+ metadata?: Record<string, unknown>;
9
+ }
10
+ export interface LumoraGameContext {
11
+ world?: string;
12
+ scene?: string;
13
+ player?: string;
14
+ questState?: Record<string, unknown>;
15
+ lore?: string[];
16
+ }
17
+ export interface LumoraNpcDialogueRequest {
18
+ character: LumoraGameCharacter;
19
+ context: LumoraGameContext;
20
+ playerMessage: string;
21
+ model?: string;
22
+ provider?: "openai" | "xai" | "gemini";
23
+ }
24
+ export interface LumoraQuestRequest {
25
+ context: LumoraGameContext;
26
+ objective?: string;
27
+ model?: string;
28
+ provider?: "openai" | "xai" | "gemini";
29
+ }
30
+ //# sourceMappingURL=game.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../src/types/game.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../../src/types/game.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ export type LumoraKnowledgeSourceType = "document" | "website" | "dataset" | "text";
2
+ export interface LumoraKnowledgeSource {
3
+ type: LumoraKnowledgeSourceType;
4
+ name: string;
5
+ content?: string;
6
+ url?: string;
7
+ metadata?: Record<string, unknown>;
8
+ }
9
+ export interface LumoraAssistantConfig {
10
+ name: string;
11
+ instructions: string;
12
+ provider?: "openai" | "xai" | "gemini";
13
+ model?: string;
14
+ knowledge?: LumoraKnowledgeSource[];
15
+ tools?: string[];
16
+ metadata?: Record<string, unknown>;
17
+ }
18
+ export interface LumoraAssistant {
19
+ id: string;
20
+ name: string;
21
+ instructions: string;
22
+ provider: "openai" | "xai" | "gemini";
23
+ model: string;
24
+ knowledge: LumoraKnowledgeSource[];
25
+ tools: string[];
26
+ metadata?: Record<string, unknown>;
27
+ }
28
+ //# sourceMappingURL=training.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training.d.ts","sourceRoot":"","sources":["../../../src/types/training.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,yBAAyB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=training.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training.js","sourceRoot":"","sources":["../../../src/types/training.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import "dotenv/config";
2
+ import { createLumoraClient } from "@asklumora/sdk";
3
+
4
+ const lumora = createLumoraClient();
5
+
6
+ const response = await lumora.chat({
7
+ messages: [
8
+ {
9
+ role: "system",
10
+ content: "You are Lumora, a clear and helpful AI assistant."
11
+ },
12
+ {
13
+ role: "user",
14
+ content: "Write a short welcome message for a game studio using Lumora."
15
+ }
16
+ ]
17
+ });
18
+
19
+ console.log(response.text);
@@ -0,0 +1,25 @@
1
+ import "dotenv/config";
2
+ import { createLumoraClient } from "@asklumora/sdk";
3
+
4
+ const lumora = createLumoraClient();
5
+
6
+ const assistant = lumora.createAssistant({
7
+ name: "Retail Support Expert",
8
+ instructions: "Answer as a concise support assistant for a retail business.",
9
+ knowledge: [
10
+ {
11
+ type: "text",
12
+ name: "Return policy",
13
+ content: "Customers can return unused items within 30 days with proof of purchase."
14
+ },
15
+ {
16
+ type: "website",
17
+ name: "Help Center",
18
+ url: "https://example.com/help"
19
+ }
20
+ ]
21
+ });
22
+
23
+ const response = await lumora.chatWithAssistant(assistant, "Can I return an item after two weeks?");
24
+
25
+ console.log(response.text);
@@ -0,0 +1,26 @@
1
+ import "dotenv/config";
2
+ import { createLumoraClient } from "@asklumora/sdk";
3
+
4
+ const lumora = createLumoraClient();
5
+
6
+ const dialogue = await lumora.npcDialogue({
7
+ character: {
8
+ id: "blacksmith-mira",
9
+ name: "Mira",
10
+ description: "A village blacksmith who remembers every blade she has forged.",
11
+ personality: "Warm, direct, and protective of the town.",
12
+ memory: [
13
+ {
14
+ content: "The player saved Mira's apprentice from the old mine."
15
+ }
16
+ ]
17
+ },
18
+ context: {
19
+ world: "A coastal fantasy kingdom where storms reveal ancient ruins.",
20
+ scene: "The player enters Mira's forge at midnight.",
21
+ lore: ["The lighthouse bell rings when sea spirits are near."]
22
+ },
23
+ playerMessage: "I need a weapon before the tide rises."
24
+ });
25
+
26
+ console.log(dialogue.text);
@@ -0,0 +1,21 @@
1
+ import "dotenv/config";
2
+ import { createLumoraClient } from "@asklumora/sdk";
3
+
4
+ const lumora = createLumoraClient();
5
+
6
+ const openai = await lumora.chat({
7
+ provider: "openai",
8
+ messages: [{ role: "user", content: "Explain Lumora in one sentence." }]
9
+ });
10
+
11
+ const xai = await lumora.chat({
12
+ provider: "xai",
13
+ messages: [{ role: "user", content: "Explain Lumora in one sentence." }]
14
+ });
15
+
16
+ const gemini = await lumora.chat({
17
+ provider: "gemini",
18
+ messages: [{ role: "user", content: "Explain Lumora in one sentence." }]
19
+ });
20
+
21
+ console.log({ openai: openai.text, xai: xai.text, gemini: gemini.text });
@@ -0,0 +1,12 @@
1
+ import "dotenv/config";
2
+ import { createLumoraClient } from "@asklumora/sdk";
3
+
4
+ const lumora = createLumoraClient();
5
+
6
+ for await (const chunk of lumora.streamChat({
7
+ messages: [{ role: "user", content: "Give me three product ideas for AI-powered games." }]
8
+ })) {
9
+ process.stdout.write(chunk.text);
10
+ }
11
+
12
+ process.stdout.write("\n");
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@asklumora/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for building Lumora AI chat, custom assistants, and game AI experiences.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "examples",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "typecheck": "tsc -p tsconfig.json --noEmit"
23
+ },
24
+ "keywords": [
25
+ "lumora",
26
+ "ai",
27
+ "sdk",
28
+ "openai",
29
+ "xai",
30
+ "gemini",
31
+ "chat",
32
+ "games"
33
+ ],
34
+ "author": "Ask Lumora",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "dotenv": "^16.4.5"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^20.14.10",
41
+ "typescript": "^5.5.4"
42
+ },
43
+ "engines": {
44
+ "node": ">=18.0.0"
45
+ }
46
+ }