✨ Thinking
This commit is contained in:
137
DysonNetwork.Insight/Thought/README.md
Normal file
137
DysonNetwork.Insight/Thought/README.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# DysonNetwork Insight Thought API
|
||||
|
||||
The Thought API provides conversational AI capabilities for users of the Solar Network. It allows users to engage in chat-like conversations with an AI assistant powered by semantic kernel and connected to various tools.
|
||||
|
||||
This service is handled by the Insight, when using with the Gateway, the `/api` should be replaced with `/insight`
|
||||
|
||||
## Features
|
||||
|
||||
- Streaming chat responses using Server-Sent Events (SSE)
|
||||
- Conversation context management with sequences
|
||||
- Caching for improved performance
|
||||
- Authentication required for all operations
|
||||
|
||||
## Endpoints
|
||||
|
||||
### POST /api/thought
|
||||
|
||||
Initiates or continues a chat conversation.
|
||||
|
||||
#### Parameters
|
||||
- `UserMessage` (string, required): The message from the user
|
||||
- `SequenceId` (Guid, optional): ID of existing conversation sequence. If not provided, a new sequence is created.
|
||||
|
||||
#### Response
|
||||
- Content-Type: `text/event-stream`
|
||||
- Streaming response with assistant messages
|
||||
- Status: 401 if not authenticated
|
||||
- Status: 403 if sequence doesn't belong to user
|
||||
|
||||
#### Example Usage
|
||||
```bash
|
||||
curl -X POST "http://localhost:5000/api/thought" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"UserMessage": "Hello, how can I help with the Solar Network?",
|
||||
"SequenceId": null
|
||||
}'
|
||||
```
|
||||
|
||||
### GET /api/thought/sequences
|
||||
|
||||
Lists all thinking sequences for the authenticated user.
|
||||
|
||||
#### Parameters
|
||||
- `offset` (int, default 0): Number of sequences to skip for pagination
|
||||
- `take` (int, default 20): Maximum number of sequences to return
|
||||
|
||||
#### Response
|
||||
- `200 OK`: Array of `SnThinkingSequence`
|
||||
- `401 Unauthorized`: If not authenticated
|
||||
- Headers:
|
||||
- `X-Total`: Total number of sequences before pagination
|
||||
|
||||
#### Example Usage
|
||||
```bash
|
||||
curl -X GET "http://localhost:5000/api/thought/sequences?take=10"
|
||||
```
|
||||
|
||||
### GET /api/thought/sequences/{sequenceId}
|
||||
|
||||
Retrieves all thoughts (messages) in a specific conversation sequence.
|
||||
|
||||
#### Parameters
|
||||
- `sequenceId` (Guid, path): ID of the sequence to retrieve
|
||||
|
||||
#### Response
|
||||
- `200 OK`: Array of `SnThinkingThought` ordered by creation date
|
||||
- `401 Unauthorized`: If not authenticated
|
||||
- `404 Not Found`: If sequence doesn't exist or doesn't belong to user
|
||||
|
||||
#### Example Usage
|
||||
```bash
|
||||
curl -X GET "http://localhost:5000/api/thought/sequences/12345678-1234-1234-1234-123456789abc"
|
||||
```
|
||||
|
||||
## Data Models
|
||||
|
||||
### StreamThinkingRequest
|
||||
```csharp
|
||||
{
|
||||
string UserMessage, // Required
|
||||
Guid? SequenceId // Optional
|
||||
}
|
||||
```
|
||||
|
||||
### SnThinkingSequence
|
||||
```csharp
|
||||
{
|
||||
Guid Id,
|
||||
string? Topic,
|
||||
Guid AccountId
|
||||
}
|
||||
```
|
||||
|
||||
### SnThinkingThought
|
||||
```csharp
|
||||
{
|
||||
Guid Id,
|
||||
string? Content,
|
||||
List<SnCloudFileReferenceObject> Files,
|
||||
ThinkingThoughtRole Role,
|
||||
Guid SequenceId,
|
||||
SnThinkingSequence Sequence
|
||||
}
|
||||
```
|
||||
|
||||
### ThinkingThoughtRole (enum)
|
||||
- `Assistant`
|
||||
- `User`
|
||||
|
||||
## Caching
|
||||
|
||||
The API uses Redis-based caching for conversation thoughts:
|
||||
- Thoughts are cached for 10 minutes with group-based invalidation
|
||||
- Cache is invalidated when new thoughts are added to a sequence
|
||||
- Improves performance for accessing conversation history
|
||||
|
||||
## Authentication
|
||||
|
||||
All endpoints require authentication through the current user session. Sequence access is validated against the authenticated user's account ID.
|
||||
|
||||
## Error Responses
|
||||
|
||||
- `401 Unauthorized`: Authentication required
|
||||
- `403 Forbidden`: Access denied (sequence ownership)
|
||||
- `404 Not Found`: Resource not found
|
||||
|
||||
## Streaming Details
|
||||
|
||||
The POST endpoint returns a stream of assistant responses using Server-Sent Events format. Clients should handle the streaming response and display messages incrementally.
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Built with ASP.NET Core and Semantic Kernel
|
||||
- Uses PostgreSQL via Entity Framework Core
|
||||
- Integrated with Ollama for AI completion
|
||||
- Caching via Redis
|
||||
Reference in New Issue
Block a user