@polymorphism-tech/morph-spec 2.2.0 → 2.4.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/CLAUDE.md +314 -1673
- package/LICENSE +72 -72
- package/README.md +515 -516
- package/bin/detect-agents.js +225 -225
- package/bin/morph-spec.js +358 -173
- package/bin/render-template.js +302 -302
- package/bin/semantic-detect-agents.js +246 -246
- package/bin/task-manager.js +429 -0
- package/bin/validate-agents-skills.js +251 -251
- package/bin/validate-agents.js +69 -69
- package/bin/validate-phase.js +263 -263
- package/bin/validate.js +369 -0
- package/content/.azure/README.md +293 -293
- package/content/.azure/docs/azure-devops-setup.md +454 -454
- package/content/.azure/docs/branch-strategy.md +398 -398
- package/content/.azure/docs/local-development.md +515 -515
- package/content/.azure/pipelines/pipeline-variables.yml +34 -34
- package/content/.azure/pipelines/prod-pipeline.yml +319 -319
- package/content/.azure/pipelines/staging-pipeline.yml +234 -234
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -75
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -94
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -120
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -90
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-archive.md +79 -79
- package/content/.claude/commands/morph-infra.md +209 -209
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/settings.local.json +15 -15
- package/content/.claude/skills/checklists/code-review.md +226 -0
- package/content/.claude/skills/checklists/morph-checklist.md +117 -0
- package/content/.claude/skills/checklists/simulation-checklist.md +77 -0
- package/content/.claude/skills/infra/bicep-architect.md +126 -419
- package/content/.claude/skills/infra/container-specialist.md +131 -437
- package/content/.claude/skills/infra/devops-engineer.md +119 -405
- package/content/.claude/skills/integrations/asaas-financial.md +130 -333
- package/content/.claude/skills/integrations/azure-identity.md +142 -309
- package/content/.claude/skills/integrations/clerk-auth.md +108 -290
- package/content/.claude/skills/integrations/resend-email.md +119 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +192 -604
- package/content/.claude/skills/specialists/azure-architect.md +142 -142
- package/content/.claude/skills/specialists/code-analyzer.md +235 -0
- package/content/.claude/skills/specialists/dotnet-senior.md +287 -0
- package/content/.claude/skills/specialists/ef-modeler.md +113 -200
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +126 -245
- package/content/.claude/skills/specialists/ms-agent-expert.md +109 -263
- package/content/.claude/skills/specialists/po-pm-advisor.md +197 -197
- package/content/.claude/skills/specialists/standards-architect.md +156 -78
- package/content/.claude/skills/specialists/testing-specialist.md +126 -0
- package/content/.claude/skills/specialists/ui-ux-designer.md +191 -1060
- package/content/.claude/skills/stacks/dotnet-blazor.md +210 -588
- package/content/.claude/skills/stacks/dotnet-nextjs.md +154 -402
- package/content/.claude/skills/workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/workflows/phase-clarify.md} +5 -58
- package/content/.claude/{commands/morph-design.md → skills/workflows/phase-design.md} +16 -86
- package/content/.claude/{commands/morph-setup.md → skills/workflows/phase-setup.md} +9 -17
- package/content/.claude/skills/workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/workflows/phase-uiux.md} +15 -88
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +378 -242
- package/content/.morph/config/config.template.json +89 -108
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/api-nextjs/README.md +241 -241
- package/content/.morph/examples/api-nextjs/contracts.ts +307 -307
- package/content/.morph/examples/api-nextjs/spec.md +399 -399
- package/content/.morph/examples/api-nextjs/tasks.md +168 -168
- package/content/.morph/examples/micro-saas/README.md +125 -125
- package/content/.morph/examples/micro-saas/contracts.cs +358 -358
- package/content/.morph/examples/micro-saas/decisions.md +246 -246
- package/content/.morph/examples/micro-saas/spec.md +236 -236
- package/content/.morph/examples/micro-saas/tasks.md +150 -150
- package/content/.morph/examples/multi-agent/README.md +309 -309
- package/content/.morph/examples/multi-agent/contracts.cs +433 -433
- package/content/.morph/examples/multi-agent/spec.md +479 -479
- package/content/.morph/examples/multi-agent/tasks.md +185 -185
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/examples/state-v3.json +188 -0
- package/content/.morph/features/.gitkeep +25 -25
- package/content/.morph/hooks/README.md +190 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/pre-commit-all.sh +48 -48
- package/content/.morph/hooks/pre-commit-specs.sh +49 -49
- package/content/.morph/hooks/pre-commit-tests.sh +60 -60
- package/content/.morph/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/specs/.gitkeep +20 -20
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/coding.md +377 -377
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/standards/fluent-ui-setup.md +590 -590
- package/content/.morph/standards/migration-guide.md +514 -514
- package/content/.morph/standards/passkeys-auth.md +423 -423
- package/content/.morph/standards/vector-search-rag.md +536 -536
- package/content/.morph/state.json +17 -17
- package/content/.morph/templates/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/component.razor +239 -239
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/contracts.cs +217 -217
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/design-system.css +226 -226
- package/content/.morph/templates/infra/.dockerignore.example +89 -89
- package/content/.morph/templates/infra/Dockerfile.example +82 -82
- package/content/.morph/templates/infra/README.md +286 -286
- package/content/.morph/templates/infra/app-insights.bicep +63 -63
- package/content/.morph/templates/infra/app-service.bicep +164 -164
- package/content/.morph/templates/infra/container-app-env.bicep +49 -49
- package/content/.morph/templates/infra/container-app.bicep +156 -156
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -229
- package/content/.morph/templates/infra/deploy.sh +208 -208
- package/content/.morph/templates/infra/key-vault.bicep +91 -91
- package/content/.morph/templates/infra/main.bicep +189 -189
- package/content/.morph/templates/infra/parameters.dev.json +29 -29
- package/content/.morph/templates/infra/parameters.prod.json +29 -29
- package/content/.morph/templates/infra/parameters.staging.json +29 -29
- package/content/.morph/templates/infra/sql-database.bicep +103 -103
- package/content/.morph/templates/infra/storage.bicep +106 -106
- package/content/.morph/templates/integrations/asaas-client.cs +387 -387
- package/content/.morph/templates/integrations/asaas-webhook.cs +351 -351
- package/content/.morph/templates/integrations/azure-identity-config.cs +288 -288
- package/content/.morph/templates/integrations/clerk-config.cs +258 -258
- package/content/.morph/templates/job.cs +171 -171
- package/content/.morph/templates/migration.cs +83 -83
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/repository.cs +141 -141
- package/content/.morph/templates/saas/subscription.cs +347 -347
- package/content/.morph/templates/saas/tenant.cs +338 -338
- package/content/.morph/templates/service.cs +139 -139
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/sprint-status.yaml +68 -68
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/story.md +143 -143
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/test.cs +239 -239
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/.morph/templates/ui-design-system.md +286 -286
- package/content/.morph/templates/ui-flows.md +336 -336
- package/content/.morph/templates/ui-mockups.md +133 -133
- package/content/.morph/test-infra/example.bicep +59 -59
- package/content/CLAUDE.md +150 -442
- package/content/README.md +79 -79
- package/detectors/config-detector.js +223 -223
- package/detectors/conversation-analyzer.js +163 -163
- package/detectors/index.js +84 -84
- package/detectors/standards-generator.js +275 -275
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
- package/docs/api/scripts/collapse.js +38 -38
- package/docs/api/scripts/commonNav.js +28 -28
- package/docs/api/scripts/linenumber.js +25 -25
- package/docs/api/scripts/nav.js +12 -12
- package/docs/api/scripts/polyfill.js +3 -3
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/docs/api/scripts/prettify/lang-css.js +2 -2
- package/docs/api/scripts/prettify/prettify.js +28 -28
- package/docs/api/scripts/search.js +98 -98
- package/docs/api/styles/jsdoc.css +776 -776
- package/docs/api/styles/prettify.css +80 -80
- package/docs/examples.md +328 -328
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/templates.md +418 -418
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/scripts/postinstall.js +132 -132
- package/src/commands/advance-phase.js +183 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/create-story.js +351 -351
- package/src/commands/detect-agents.js +139 -0
- package/src/commands/detect.js +104 -104
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate.js +149 -149
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/shard-spec.js +224 -224
- package/src/commands/sprint-status.js +250 -250
- package/src/commands/state.js +333 -333
- package/src/commands/sync.js +167 -167
- package/src/commands/task.js +78 -0
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/continuous-validator.js +421 -0
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/learning-system.js +520 -0
- package/src/lib/mockup-generator.js +366 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/ui-detector.js +350 -0
- package/src/lib/validation-runner.js +231 -0
- package/src/lib/validators/architecture-validator.js +387 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/package-validator.js +360 -0
- package/src/lib/validators/ui-contrast-validator.js +422 -0
- package/src/utils/file-copier.js +179 -139
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -1,433 +1,433 @@
|
|
|
1
|
-
// ==============================================================================
|
|
2
|
-
// Multi-Agent System - Contracts
|
|
3
|
-
// Interfaces, DTOs e Enums para sistema multi-agente
|
|
4
|
-
// ==============================================================================
|
|
5
|
-
|
|
6
|
-
using Microsoft.SemanticKernel;
|
|
7
|
-
|
|
8
|
-
namespace MultiAgent.Contracts;
|
|
9
|
-
|
|
10
|
-
// ==============================================================================
|
|
11
|
-
// ENUMS
|
|
12
|
-
// ==============================================================================
|
|
13
|
-
|
|
14
|
-
public enum MessageRole
|
|
15
|
-
{
|
|
16
|
-
User,
|
|
17
|
-
Assistant,
|
|
18
|
-
System
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public enum TaskStatus
|
|
22
|
-
{
|
|
23
|
-
Pending,
|
|
24
|
-
Running,
|
|
25
|
-
Completed,
|
|
26
|
-
Failed,
|
|
27
|
-
Cancelled
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public enum AgentType
|
|
31
|
-
{
|
|
32
|
-
Orchestrator,
|
|
33
|
-
Research,
|
|
34
|
-
Analysis,
|
|
35
|
-
Writing,
|
|
36
|
-
Custom
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// ==============================================================================
|
|
40
|
-
// DTOs - CHAT
|
|
41
|
-
// ==============================================================================
|
|
42
|
-
|
|
43
|
-
public record ChatRequest(
|
|
44
|
-
string Message,
|
|
45
|
-
string? SessionId = null,
|
|
46
|
-
bool Stream = false,
|
|
47
|
-
ChatOptions? Options = null
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
public record ChatOptions(
|
|
51
|
-
int? MaxTokens = null,
|
|
52
|
-
double? Temperature = null,
|
|
53
|
-
string[]? PreferredAgents = null
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
public record ChatResponse(
|
|
57
|
-
string SessionId,
|
|
58
|
-
string Message,
|
|
59
|
-
AgentExecution[] Executions,
|
|
60
|
-
TokenUsage Usage
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
public record StreamEvent(
|
|
64
|
-
string Type, // thinking, agent, content, error, done
|
|
65
|
-
string? Content = null,
|
|
66
|
-
string? AgentId = null,
|
|
67
|
-
string? Status = null,
|
|
68
|
-
TokenUsage? Usage = null
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
// ==============================================================================
|
|
72
|
-
// DTOs - AGENT
|
|
73
|
-
// ==============================================================================
|
|
74
|
-
|
|
75
|
-
public record AgentInfo(
|
|
76
|
-
string Id,
|
|
77
|
-
string Name,
|
|
78
|
-
string Description,
|
|
79
|
-
string[] Capabilities,
|
|
80
|
-
AgentType Type
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
public record AgentExecution(
|
|
84
|
-
string AgentId,
|
|
85
|
-
string Task,
|
|
86
|
-
TaskStatus Status,
|
|
87
|
-
string? Output,
|
|
88
|
-
string? Error,
|
|
89
|
-
TimeSpan Duration,
|
|
90
|
-
TokenUsage Usage
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
public record AgentTask(
|
|
94
|
-
string Id,
|
|
95
|
-
string AgentId,
|
|
96
|
-
string Description,
|
|
97
|
-
string? Input,
|
|
98
|
-
Dictionary<string, object>? Context = null
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
public record AgentResult(
|
|
102
|
-
string TaskId,
|
|
103
|
-
bool Success,
|
|
104
|
-
string? Output,
|
|
105
|
-
string? Error,
|
|
106
|
-
TokenUsage Usage,
|
|
107
|
-
Dictionary<string, object>? Metadata = null
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
// ==============================================================================
|
|
111
|
-
// DTOs - ORCHESTRATION
|
|
112
|
-
// ==============================================================================
|
|
113
|
-
|
|
114
|
-
public record TaskPlan(
|
|
115
|
-
string Understanding,
|
|
116
|
-
SubTask[] SubTasks
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
public record SubTask(
|
|
120
|
-
string AgentId,
|
|
121
|
-
string Task,
|
|
122
|
-
string[]? Dependencies = null,
|
|
123
|
-
int Priority = 0
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
public record ExecutionPlan(
|
|
127
|
-
string RequestId,
|
|
128
|
-
SubTask[] Tasks,
|
|
129
|
-
bool AllowParallel,
|
|
130
|
-
TimeSpan Timeout
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
public record ExecutionResult(
|
|
134
|
-
string RequestId,
|
|
135
|
-
bool Success,
|
|
136
|
-
AgentResult[] Results,
|
|
137
|
-
string? AggregatedOutput,
|
|
138
|
-
TimeSpan TotalDuration,
|
|
139
|
-
TokenUsage TotalUsage
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
// ==============================================================================
|
|
143
|
-
// DTOs - MEMORY
|
|
144
|
-
// ==============================================================================
|
|
145
|
-
|
|
146
|
-
public record Conversation(
|
|
147
|
-
string Id,
|
|
148
|
-
string? UserId,
|
|
149
|
-
List<Message> Messages,
|
|
150
|
-
Dictionary<string, object>? Metadata,
|
|
151
|
-
DateTime CreatedAt,
|
|
152
|
-
DateTime UpdatedAt
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
public record Message(
|
|
156
|
-
string Id,
|
|
157
|
-
MessageRole Role,
|
|
158
|
-
string Content,
|
|
159
|
-
string? AgentId,
|
|
160
|
-
TokenUsage? Usage,
|
|
161
|
-
DateTime Timestamp
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
public record ConversationSummary(
|
|
165
|
-
string Id,
|
|
166
|
-
string Preview,
|
|
167
|
-
int MessageCount,
|
|
168
|
-
DateTime CreatedAt,
|
|
169
|
-
DateTime LastMessageAt
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
// ==============================================================================
|
|
173
|
-
// DTOs - PLUGINS
|
|
174
|
-
// ==============================================================================
|
|
175
|
-
|
|
176
|
-
public record SearchResults(
|
|
177
|
-
string Query,
|
|
178
|
-
List<SearchResult> Items,
|
|
179
|
-
int TotalResults
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
public record SearchResult(
|
|
183
|
-
string Title,
|
|
184
|
-
string Snippet,
|
|
185
|
-
string Url,
|
|
186
|
-
DateTime? PublishedDate = null
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
public record DocumentResult(
|
|
190
|
-
string Id,
|
|
191
|
-
string Title,
|
|
192
|
-
string Content,
|
|
193
|
-
double Score,
|
|
194
|
-
string? Source,
|
|
195
|
-
Dictionary<string, object>? Metadata = null
|
|
196
|
-
);
|
|
197
|
-
|
|
198
|
-
// ==============================================================================
|
|
199
|
-
// DTOs - USAGE & METRICS
|
|
200
|
-
// ==============================================================================
|
|
201
|
-
|
|
202
|
-
public record TokenUsage(
|
|
203
|
-
int PromptTokens,
|
|
204
|
-
int CompletionTokens,
|
|
205
|
-
int TotalTokens
|
|
206
|
-
)
|
|
207
|
-
{
|
|
208
|
-
public static TokenUsage Zero => new(0, 0, 0);
|
|
209
|
-
|
|
210
|
-
public static TokenUsage operator +(TokenUsage a, TokenUsage b) =>
|
|
211
|
-
new(
|
|
212
|
-
a.PromptTokens + b.PromptTokens,
|
|
213
|
-
a.CompletionTokens + b.CompletionTokens,
|
|
214
|
-
a.TotalTokens + b.TotalTokens
|
|
215
|
-
);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
public record UsageMetrics(
|
|
219
|
-
string SessionId,
|
|
220
|
-
DateTime Date,
|
|
221
|
-
int TotalRequests,
|
|
222
|
-
TokenUsage TotalUsage,
|
|
223
|
-
Dictionary<string, int> AgentUsage,
|
|
224
|
-
Dictionary<string, int> PluginUsage,
|
|
225
|
-
decimal EstimatedCost
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
// ==============================================================================
|
|
229
|
-
// INTERFACES - AGENTS
|
|
230
|
-
// ==============================================================================
|
|
231
|
-
|
|
232
|
-
public interface IAgent
|
|
233
|
-
{
|
|
234
|
-
string Id { get; }
|
|
235
|
-
string Name { get; }
|
|
236
|
-
AgentType Type { get; }
|
|
237
|
-
string[] Capabilities { get; }
|
|
238
|
-
|
|
239
|
-
Task<AgentResult> ExecuteAsync(
|
|
240
|
-
AgentTask task,
|
|
241
|
-
CancellationToken ct = default);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
public interface IAgentFactory
|
|
245
|
-
{
|
|
246
|
-
IAgent CreateAgent(AgentType type);
|
|
247
|
-
IAgent CreateAgent(string agentId);
|
|
248
|
-
IEnumerable<AgentInfo> GetAvailableAgents();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// ==============================================================================
|
|
252
|
-
// INTERFACES - ORCHESTRATION
|
|
253
|
-
// ==============================================================================
|
|
254
|
-
|
|
255
|
-
public interface IOrchestrator
|
|
256
|
-
{
|
|
257
|
-
Task<ExecutionResult> ProcessAsync(
|
|
258
|
-
string userMessage,
|
|
259
|
-
Conversation? conversation = null,
|
|
260
|
-
ChatOptions? options = null,
|
|
261
|
-
CancellationToken ct = default);
|
|
262
|
-
|
|
263
|
-
IAsyncEnumerable<StreamEvent> ProcessStreamAsync(
|
|
264
|
-
string userMessage,
|
|
265
|
-
Conversation? conversation = null,
|
|
266
|
-
ChatOptions? options = null,
|
|
267
|
-
CancellationToken ct = default);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
public interface ITaskDecomposer
|
|
271
|
-
{
|
|
272
|
-
Task<TaskPlan> DecomposeAsync(
|
|
273
|
-
string userMessage,
|
|
274
|
-
string? context = null,
|
|
275
|
-
CancellationToken ct = default);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
public interface IResultAggregator
|
|
279
|
-
{
|
|
280
|
-
Task<string> AggregateAsync(
|
|
281
|
-
string originalRequest,
|
|
282
|
-
AgentResult[] results,
|
|
283
|
-
CancellationToken ct = default);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// ==============================================================================
|
|
287
|
-
// INTERFACES - MEMORY
|
|
288
|
-
// ==============================================================================
|
|
289
|
-
|
|
290
|
-
public interface IConversationMemory
|
|
291
|
-
{
|
|
292
|
-
Task<Conversation> GetOrCreateAsync(
|
|
293
|
-
string? sessionId,
|
|
294
|
-
CancellationToken ct = default);
|
|
295
|
-
|
|
296
|
-
Task AddMessageAsync(
|
|
297
|
-
string sessionId,
|
|
298
|
-
Message message,
|
|
299
|
-
CancellationToken ct = default);
|
|
300
|
-
|
|
301
|
-
Task<IReadOnlyList<Message>> GetRecentMessagesAsync(
|
|
302
|
-
string sessionId,
|
|
303
|
-
int count = 10,
|
|
304
|
-
CancellationToken ct = default);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
public interface ISemanticMemory
|
|
308
|
-
{
|
|
309
|
-
Task SaveAsync(
|
|
310
|
-
string collection,
|
|
311
|
-
string id,
|
|
312
|
-
string text,
|
|
313
|
-
Dictionary<string, object>? metadata = null,
|
|
314
|
-
CancellationToken ct = default);
|
|
315
|
-
|
|
316
|
-
Task<IReadOnlyList<DocumentResult>> SearchAsync(
|
|
317
|
-
string collection,
|
|
318
|
-
string query,
|
|
319
|
-
int limit = 5,
|
|
320
|
-
CancellationToken ct = default);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// ==============================================================================
|
|
324
|
-
// INTERFACES - PLUGINS
|
|
325
|
-
// ==============================================================================
|
|
326
|
-
|
|
327
|
-
public interface IWebSearchService
|
|
328
|
-
{
|
|
329
|
-
Task<SearchResults> SearchAsync(
|
|
330
|
-
string query,
|
|
331
|
-
int maxResults = 5,
|
|
332
|
-
CancellationToken ct = default);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
public interface IDocumentService
|
|
336
|
-
{
|
|
337
|
-
Task<IReadOnlyList<DocumentResult>> SearchAsync(
|
|
338
|
-
string query,
|
|
339
|
-
int limit = 3,
|
|
340
|
-
CancellationToken ct = default);
|
|
341
|
-
|
|
342
|
-
Task IndexAsync(
|
|
343
|
-
string id,
|
|
344
|
-
string title,
|
|
345
|
-
string content,
|
|
346
|
-
Dictionary<string, object>? metadata = null,
|
|
347
|
-
CancellationToken ct = default);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// ==============================================================================
|
|
351
|
-
// INTERFACES - INFRASTRUCTURE
|
|
352
|
-
// ==============================================================================
|
|
353
|
-
|
|
354
|
-
public interface ILlmService
|
|
355
|
-
{
|
|
356
|
-
Task<(string Response, TokenUsage Usage)> GenerateAsync(
|
|
357
|
-
string systemPrompt,
|
|
358
|
-
string userMessage,
|
|
359
|
-
string? model = null,
|
|
360
|
-
int? maxTokens = null,
|
|
361
|
-
double? temperature = null,
|
|
362
|
-
CancellationToken ct = default);
|
|
363
|
-
|
|
364
|
-
IAsyncEnumerable<string> GenerateStreamAsync(
|
|
365
|
-
string systemPrompt,
|
|
366
|
-
string userMessage,
|
|
367
|
-
string? model = null,
|
|
368
|
-
int? maxTokens = null,
|
|
369
|
-
double? temperature = null,
|
|
370
|
-
CancellationToken ct = default);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
public interface IEmbeddingService
|
|
374
|
-
{
|
|
375
|
-
Task<float[]> GetEmbeddingAsync(
|
|
376
|
-
string text,
|
|
377
|
-
CancellationToken ct = default);
|
|
378
|
-
|
|
379
|
-
Task<float[][]> GetEmbeddingsAsync(
|
|
380
|
-
string[] texts,
|
|
381
|
-
CancellationToken ct = default);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
public interface IVectorStore
|
|
385
|
-
{
|
|
386
|
-
Task UpsertAsync(
|
|
387
|
-
string collection,
|
|
388
|
-
string id,
|
|
389
|
-
float[] embedding,
|
|
390
|
-
string content,
|
|
391
|
-
Dictionary<string, object>? metadata = null,
|
|
392
|
-
CancellationToken ct = default);
|
|
393
|
-
|
|
394
|
-
Task<IReadOnlyList<(string Id, string Content, double Score, Dictionary<string, object>? Metadata)>> SearchAsync(
|
|
395
|
-
string collection,
|
|
396
|
-
float[] queryEmbedding,
|
|
397
|
-
int limit = 5,
|
|
398
|
-
CancellationToken ct = default);
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// ==============================================================================
|
|
402
|
-
// CONFIGURATION
|
|
403
|
-
// ==============================================================================
|
|
404
|
-
|
|
405
|
-
public record AzureOpenAIConfig
|
|
406
|
-
{
|
|
407
|
-
public string Endpoint { get; init; } = string.Empty;
|
|
408
|
-
public string ApiKey { get; init; } = string.Empty;
|
|
409
|
-
public DeploymentConfig Deployments { get; init; } = new();
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
public record DeploymentConfig
|
|
413
|
-
{
|
|
414
|
-
public string Chat { get; init; } = "gpt-4";
|
|
415
|
-
public string ChatFast { get; init; } = "gpt-35-turbo";
|
|
416
|
-
public string Embedding { get; init; } = "text-embedding-ada-002";
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
public record AgentConfig
|
|
420
|
-
{
|
|
421
|
-
public string Model { get; init; } = "gpt-35-turbo";
|
|
422
|
-
public int MaxTokens { get; init; } = 1500;
|
|
423
|
-
public double Temperature { get; init; } = 0.5;
|
|
424
|
-
public string SystemPrompt { get; init; } = string.Empty;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
public record OrchestratorConfig
|
|
428
|
-
{
|
|
429
|
-
public TimeSpan DefaultTimeout { get; init; } = TimeSpan.FromSeconds(60);
|
|
430
|
-
public int MaxSubTasks { get; init; } = 5;
|
|
431
|
-
public bool AllowParallelExecution { get; init; } = true;
|
|
432
|
-
public int MaxRetries { get; init; } = 2;
|
|
433
|
-
}
|
|
1
|
+
// ==============================================================================
|
|
2
|
+
// Multi-Agent System - Contracts
|
|
3
|
+
// Interfaces, DTOs e Enums para sistema multi-agente
|
|
4
|
+
// ==============================================================================
|
|
5
|
+
|
|
6
|
+
using Microsoft.SemanticKernel;
|
|
7
|
+
|
|
8
|
+
namespace MultiAgent.Contracts;
|
|
9
|
+
|
|
10
|
+
// ==============================================================================
|
|
11
|
+
// ENUMS
|
|
12
|
+
// ==============================================================================
|
|
13
|
+
|
|
14
|
+
public enum MessageRole
|
|
15
|
+
{
|
|
16
|
+
User,
|
|
17
|
+
Assistant,
|
|
18
|
+
System
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public enum TaskStatus
|
|
22
|
+
{
|
|
23
|
+
Pending,
|
|
24
|
+
Running,
|
|
25
|
+
Completed,
|
|
26
|
+
Failed,
|
|
27
|
+
Cancelled
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public enum AgentType
|
|
31
|
+
{
|
|
32
|
+
Orchestrator,
|
|
33
|
+
Research,
|
|
34
|
+
Analysis,
|
|
35
|
+
Writing,
|
|
36
|
+
Custom
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ==============================================================================
|
|
40
|
+
// DTOs - CHAT
|
|
41
|
+
// ==============================================================================
|
|
42
|
+
|
|
43
|
+
public record ChatRequest(
|
|
44
|
+
string Message,
|
|
45
|
+
string? SessionId = null,
|
|
46
|
+
bool Stream = false,
|
|
47
|
+
ChatOptions? Options = null
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
public record ChatOptions(
|
|
51
|
+
int? MaxTokens = null,
|
|
52
|
+
double? Temperature = null,
|
|
53
|
+
string[]? PreferredAgents = null
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
public record ChatResponse(
|
|
57
|
+
string SessionId,
|
|
58
|
+
string Message,
|
|
59
|
+
AgentExecution[] Executions,
|
|
60
|
+
TokenUsage Usage
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
public record StreamEvent(
|
|
64
|
+
string Type, // thinking, agent, content, error, done
|
|
65
|
+
string? Content = null,
|
|
66
|
+
string? AgentId = null,
|
|
67
|
+
string? Status = null,
|
|
68
|
+
TokenUsage? Usage = null
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// ==============================================================================
|
|
72
|
+
// DTOs - AGENT
|
|
73
|
+
// ==============================================================================
|
|
74
|
+
|
|
75
|
+
public record AgentInfo(
|
|
76
|
+
string Id,
|
|
77
|
+
string Name,
|
|
78
|
+
string Description,
|
|
79
|
+
string[] Capabilities,
|
|
80
|
+
AgentType Type
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
public record AgentExecution(
|
|
84
|
+
string AgentId,
|
|
85
|
+
string Task,
|
|
86
|
+
TaskStatus Status,
|
|
87
|
+
string? Output,
|
|
88
|
+
string? Error,
|
|
89
|
+
TimeSpan Duration,
|
|
90
|
+
TokenUsage Usage
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
public record AgentTask(
|
|
94
|
+
string Id,
|
|
95
|
+
string AgentId,
|
|
96
|
+
string Description,
|
|
97
|
+
string? Input,
|
|
98
|
+
Dictionary<string, object>? Context = null
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
public record AgentResult(
|
|
102
|
+
string TaskId,
|
|
103
|
+
bool Success,
|
|
104
|
+
string? Output,
|
|
105
|
+
string? Error,
|
|
106
|
+
TokenUsage Usage,
|
|
107
|
+
Dictionary<string, object>? Metadata = null
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// ==============================================================================
|
|
111
|
+
// DTOs - ORCHESTRATION
|
|
112
|
+
// ==============================================================================
|
|
113
|
+
|
|
114
|
+
public record TaskPlan(
|
|
115
|
+
string Understanding,
|
|
116
|
+
SubTask[] SubTasks
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
public record SubTask(
|
|
120
|
+
string AgentId,
|
|
121
|
+
string Task,
|
|
122
|
+
string[]? Dependencies = null,
|
|
123
|
+
int Priority = 0
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
public record ExecutionPlan(
|
|
127
|
+
string RequestId,
|
|
128
|
+
SubTask[] Tasks,
|
|
129
|
+
bool AllowParallel,
|
|
130
|
+
TimeSpan Timeout
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
public record ExecutionResult(
|
|
134
|
+
string RequestId,
|
|
135
|
+
bool Success,
|
|
136
|
+
AgentResult[] Results,
|
|
137
|
+
string? AggregatedOutput,
|
|
138
|
+
TimeSpan TotalDuration,
|
|
139
|
+
TokenUsage TotalUsage
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
// ==============================================================================
|
|
143
|
+
// DTOs - MEMORY
|
|
144
|
+
// ==============================================================================
|
|
145
|
+
|
|
146
|
+
public record Conversation(
|
|
147
|
+
string Id,
|
|
148
|
+
string? UserId,
|
|
149
|
+
List<Message> Messages,
|
|
150
|
+
Dictionary<string, object>? Metadata,
|
|
151
|
+
DateTime CreatedAt,
|
|
152
|
+
DateTime UpdatedAt
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
public record Message(
|
|
156
|
+
string Id,
|
|
157
|
+
MessageRole Role,
|
|
158
|
+
string Content,
|
|
159
|
+
string? AgentId,
|
|
160
|
+
TokenUsage? Usage,
|
|
161
|
+
DateTime Timestamp
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
public record ConversationSummary(
|
|
165
|
+
string Id,
|
|
166
|
+
string Preview,
|
|
167
|
+
int MessageCount,
|
|
168
|
+
DateTime CreatedAt,
|
|
169
|
+
DateTime LastMessageAt
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// ==============================================================================
|
|
173
|
+
// DTOs - PLUGINS
|
|
174
|
+
// ==============================================================================
|
|
175
|
+
|
|
176
|
+
public record SearchResults(
|
|
177
|
+
string Query,
|
|
178
|
+
List<SearchResult> Items,
|
|
179
|
+
int TotalResults
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
public record SearchResult(
|
|
183
|
+
string Title,
|
|
184
|
+
string Snippet,
|
|
185
|
+
string Url,
|
|
186
|
+
DateTime? PublishedDate = null
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
public record DocumentResult(
|
|
190
|
+
string Id,
|
|
191
|
+
string Title,
|
|
192
|
+
string Content,
|
|
193
|
+
double Score,
|
|
194
|
+
string? Source,
|
|
195
|
+
Dictionary<string, object>? Metadata = null
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
// ==============================================================================
|
|
199
|
+
// DTOs - USAGE & METRICS
|
|
200
|
+
// ==============================================================================
|
|
201
|
+
|
|
202
|
+
public record TokenUsage(
|
|
203
|
+
int PromptTokens,
|
|
204
|
+
int CompletionTokens,
|
|
205
|
+
int TotalTokens
|
|
206
|
+
)
|
|
207
|
+
{
|
|
208
|
+
public static TokenUsage Zero => new(0, 0, 0);
|
|
209
|
+
|
|
210
|
+
public static TokenUsage operator +(TokenUsage a, TokenUsage b) =>
|
|
211
|
+
new(
|
|
212
|
+
a.PromptTokens + b.PromptTokens,
|
|
213
|
+
a.CompletionTokens + b.CompletionTokens,
|
|
214
|
+
a.TotalTokens + b.TotalTokens
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public record UsageMetrics(
|
|
219
|
+
string SessionId,
|
|
220
|
+
DateTime Date,
|
|
221
|
+
int TotalRequests,
|
|
222
|
+
TokenUsage TotalUsage,
|
|
223
|
+
Dictionary<string, int> AgentUsage,
|
|
224
|
+
Dictionary<string, int> PluginUsage,
|
|
225
|
+
decimal EstimatedCost
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
// ==============================================================================
|
|
229
|
+
// INTERFACES - AGENTS
|
|
230
|
+
// ==============================================================================
|
|
231
|
+
|
|
232
|
+
public interface IAgent
|
|
233
|
+
{
|
|
234
|
+
string Id { get; }
|
|
235
|
+
string Name { get; }
|
|
236
|
+
AgentType Type { get; }
|
|
237
|
+
string[] Capabilities { get; }
|
|
238
|
+
|
|
239
|
+
Task<AgentResult> ExecuteAsync(
|
|
240
|
+
AgentTask task,
|
|
241
|
+
CancellationToken ct = default);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
public interface IAgentFactory
|
|
245
|
+
{
|
|
246
|
+
IAgent CreateAgent(AgentType type);
|
|
247
|
+
IAgent CreateAgent(string agentId);
|
|
248
|
+
IEnumerable<AgentInfo> GetAvailableAgents();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// ==============================================================================
|
|
252
|
+
// INTERFACES - ORCHESTRATION
|
|
253
|
+
// ==============================================================================
|
|
254
|
+
|
|
255
|
+
public interface IOrchestrator
|
|
256
|
+
{
|
|
257
|
+
Task<ExecutionResult> ProcessAsync(
|
|
258
|
+
string userMessage,
|
|
259
|
+
Conversation? conversation = null,
|
|
260
|
+
ChatOptions? options = null,
|
|
261
|
+
CancellationToken ct = default);
|
|
262
|
+
|
|
263
|
+
IAsyncEnumerable<StreamEvent> ProcessStreamAsync(
|
|
264
|
+
string userMessage,
|
|
265
|
+
Conversation? conversation = null,
|
|
266
|
+
ChatOptions? options = null,
|
|
267
|
+
CancellationToken ct = default);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
public interface ITaskDecomposer
|
|
271
|
+
{
|
|
272
|
+
Task<TaskPlan> DecomposeAsync(
|
|
273
|
+
string userMessage,
|
|
274
|
+
string? context = null,
|
|
275
|
+
CancellationToken ct = default);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
public interface IResultAggregator
|
|
279
|
+
{
|
|
280
|
+
Task<string> AggregateAsync(
|
|
281
|
+
string originalRequest,
|
|
282
|
+
AgentResult[] results,
|
|
283
|
+
CancellationToken ct = default);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// ==============================================================================
|
|
287
|
+
// INTERFACES - MEMORY
|
|
288
|
+
// ==============================================================================
|
|
289
|
+
|
|
290
|
+
public interface IConversationMemory
|
|
291
|
+
{
|
|
292
|
+
Task<Conversation> GetOrCreateAsync(
|
|
293
|
+
string? sessionId,
|
|
294
|
+
CancellationToken ct = default);
|
|
295
|
+
|
|
296
|
+
Task AddMessageAsync(
|
|
297
|
+
string sessionId,
|
|
298
|
+
Message message,
|
|
299
|
+
CancellationToken ct = default);
|
|
300
|
+
|
|
301
|
+
Task<IReadOnlyList<Message>> GetRecentMessagesAsync(
|
|
302
|
+
string sessionId,
|
|
303
|
+
int count = 10,
|
|
304
|
+
CancellationToken ct = default);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
public interface ISemanticMemory
|
|
308
|
+
{
|
|
309
|
+
Task SaveAsync(
|
|
310
|
+
string collection,
|
|
311
|
+
string id,
|
|
312
|
+
string text,
|
|
313
|
+
Dictionary<string, object>? metadata = null,
|
|
314
|
+
CancellationToken ct = default);
|
|
315
|
+
|
|
316
|
+
Task<IReadOnlyList<DocumentResult>> SearchAsync(
|
|
317
|
+
string collection,
|
|
318
|
+
string query,
|
|
319
|
+
int limit = 5,
|
|
320
|
+
CancellationToken ct = default);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// ==============================================================================
|
|
324
|
+
// INTERFACES - PLUGINS
|
|
325
|
+
// ==============================================================================
|
|
326
|
+
|
|
327
|
+
public interface IWebSearchService
|
|
328
|
+
{
|
|
329
|
+
Task<SearchResults> SearchAsync(
|
|
330
|
+
string query,
|
|
331
|
+
int maxResults = 5,
|
|
332
|
+
CancellationToken ct = default);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
public interface IDocumentService
|
|
336
|
+
{
|
|
337
|
+
Task<IReadOnlyList<DocumentResult>> SearchAsync(
|
|
338
|
+
string query,
|
|
339
|
+
int limit = 3,
|
|
340
|
+
CancellationToken ct = default);
|
|
341
|
+
|
|
342
|
+
Task IndexAsync(
|
|
343
|
+
string id,
|
|
344
|
+
string title,
|
|
345
|
+
string content,
|
|
346
|
+
Dictionary<string, object>? metadata = null,
|
|
347
|
+
CancellationToken ct = default);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// ==============================================================================
|
|
351
|
+
// INTERFACES - INFRASTRUCTURE
|
|
352
|
+
// ==============================================================================
|
|
353
|
+
|
|
354
|
+
public interface ILlmService
|
|
355
|
+
{
|
|
356
|
+
Task<(string Response, TokenUsage Usage)> GenerateAsync(
|
|
357
|
+
string systemPrompt,
|
|
358
|
+
string userMessage,
|
|
359
|
+
string? model = null,
|
|
360
|
+
int? maxTokens = null,
|
|
361
|
+
double? temperature = null,
|
|
362
|
+
CancellationToken ct = default);
|
|
363
|
+
|
|
364
|
+
IAsyncEnumerable<string> GenerateStreamAsync(
|
|
365
|
+
string systemPrompt,
|
|
366
|
+
string userMessage,
|
|
367
|
+
string? model = null,
|
|
368
|
+
int? maxTokens = null,
|
|
369
|
+
double? temperature = null,
|
|
370
|
+
CancellationToken ct = default);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
public interface IEmbeddingService
|
|
374
|
+
{
|
|
375
|
+
Task<float[]> GetEmbeddingAsync(
|
|
376
|
+
string text,
|
|
377
|
+
CancellationToken ct = default);
|
|
378
|
+
|
|
379
|
+
Task<float[][]> GetEmbeddingsAsync(
|
|
380
|
+
string[] texts,
|
|
381
|
+
CancellationToken ct = default);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
public interface IVectorStore
|
|
385
|
+
{
|
|
386
|
+
Task UpsertAsync(
|
|
387
|
+
string collection,
|
|
388
|
+
string id,
|
|
389
|
+
float[] embedding,
|
|
390
|
+
string content,
|
|
391
|
+
Dictionary<string, object>? metadata = null,
|
|
392
|
+
CancellationToken ct = default);
|
|
393
|
+
|
|
394
|
+
Task<IReadOnlyList<(string Id, string Content, double Score, Dictionary<string, object>? Metadata)>> SearchAsync(
|
|
395
|
+
string collection,
|
|
396
|
+
float[] queryEmbedding,
|
|
397
|
+
int limit = 5,
|
|
398
|
+
CancellationToken ct = default);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// ==============================================================================
|
|
402
|
+
// CONFIGURATION
|
|
403
|
+
// ==============================================================================
|
|
404
|
+
|
|
405
|
+
public record AzureOpenAIConfig
|
|
406
|
+
{
|
|
407
|
+
public string Endpoint { get; init; } = string.Empty;
|
|
408
|
+
public string ApiKey { get; init; } = string.Empty;
|
|
409
|
+
public DeploymentConfig Deployments { get; init; } = new();
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
public record DeploymentConfig
|
|
413
|
+
{
|
|
414
|
+
public string Chat { get; init; } = "gpt-4";
|
|
415
|
+
public string ChatFast { get; init; } = "gpt-35-turbo";
|
|
416
|
+
public string Embedding { get; init; } = "text-embedding-ada-002";
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
public record AgentConfig
|
|
420
|
+
{
|
|
421
|
+
public string Model { get; init; } = "gpt-35-turbo";
|
|
422
|
+
public int MaxTokens { get; init; } = 1500;
|
|
423
|
+
public double Temperature { get; init; } = 0.5;
|
|
424
|
+
public string SystemPrompt { get; init; } = string.Empty;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
public record OrchestratorConfig
|
|
428
|
+
{
|
|
429
|
+
public TimeSpan DefaultTimeout { get; init; } = TimeSpan.FromSeconds(60);
|
|
430
|
+
public int MaxSubTasks { get; init; } = 5;
|
|
431
|
+
public bool AllowParallelExecution { get; init; } = true;
|
|
432
|
+
public int MaxRetries { get; init; } = 2;
|
|
433
|
+
}
|