-
-
Notifications
You must be signed in to change notification settings - Fork 82
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'refs/heads/main' into databases-abstractions
# Conflicts: # LangChain.sln # src/Databases/Sqlite/src/LangChain.Databases.Sqlite.csproj
- Loading branch information
Showing
70 changed files
with
1,520 additions
and
127 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: dependabot auto-approve and auto-merge | ||
on: pull_request | ||
|
||
permissions: | ||
contents: write | ||
pull-requests: write | ||
|
||
jobs: | ||
dependabot: | ||
runs-on: ubuntu-latest | ||
if: ${{ github.actor == 'dependabot[bot]' && github.repository_owner == 'tryAGI' }} | ||
steps: | ||
- name: Dependabot metadata | ||
id: metadata | ||
uses: dependabot/fetch-metadata@0fb21704c18a42ce5aa8d720ea4b912f5e6babef | ||
with: | ||
github-token: "${{ secrets.GITHUB_TOKEN }}" | ||
|
||
- name: Approve a PR | ||
run: gh pr review --approve "$PR_URL" | ||
env: | ||
PR_URL: ${{ github.event.pull_request.html_url }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Enable auto-merge for Dependabot PRs | ||
run: gh pr merge --auto --merge "$PR_URL" | ||
env: | ||
PR_URL: ${{ github.event.pull_request.html_url }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# LangChain CLI | ||
|
||
This is a console utility that will help you use our library for such tasks: | ||
- Summarize text | ||
- Generate release notes | ||
- Generate changelog | ||
- Generate documentation | ||
- Generate code snippets | ||
- Generate code samples | ||
- Generate code documentation | ||
|
||
## Usage: | ||
``` | ||
dotnet tool install -g langchain.cli | ||
langchain auth openai OPENAI_API_KEY | ||
langchain summarize --input README.md --output SUMMARY.md | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
using System.CommandLine; | ||
|
||
namespace LangChain.Cli.Commands.Auth; | ||
|
||
public class AuthCommand : Command | ||
{ | ||
public AuthCommand() : base(name: "auth", description: "Authenticates a provider.") | ||
{ | ||
AddCommand(new OpenAiCommand()); | ||
AddCommand(new OpenRouterCommand()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
using System.CommandLine; | ||
using OpenAI.Constants; | ||
|
||
namespace LangChain.Cli.Commands.Auth; | ||
|
||
public class OpenAiCommand : Command | ||
{ | ||
public OpenAiCommand() : base(name: Providers.OpenAi, description: "Authenticates OpenAI provider.") | ||
{ | ||
var apiKeyArgument = new Argument<string>( | ||
name: "Api key", | ||
description: "OpenAI API key from https://platform.openai.com/account/api-keys"); | ||
var modelOption = new Option<string>( | ||
aliases: ["--model", "-m"], | ||
getDefaultValue: () => ChatModels.Gpt35Turbo, | ||
description: "Model to use for commands"); | ||
AddArgument(apiKeyArgument); | ||
AddOption(modelOption); | ||
|
||
this.SetHandler(HandleAsync, apiKeyArgument, modelOption); | ||
} | ||
|
||
private static async Task HandleAsync(string apiKey, string model) | ||
{ | ||
await Helpers.AuthenticateWithApiKeyAsync(apiKey, model, Providers.OpenAi).ConfigureAwait(false); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
using System.CommandLine; | ||
using LangChain.Providers.OpenRouter; | ||
using OpenAI.Constants; | ||
|
||
namespace LangChain.Cli.Commands.Auth; | ||
|
||
public class OpenRouterCommand : Command | ||
{ | ||
public OpenRouterCommand() : base(name: Providers.OpenRouter, description: "Authenticates OpenRouter provider.") | ||
{ | ||
var apiKeyArgument = new Argument<string>( | ||
name: "Api key", | ||
description: "OpenRouter API key from https://openrouter.ai/keys"); | ||
var modelOption = new Option<string>( | ||
aliases: ["--model", "-m"], | ||
getDefaultValue: () => OpenRouterModelProvider.GetModelById(OpenRouterModelIds.Mistral7BInstructFree), | ||
description: "Model to use for commands"); | ||
AddArgument(apiKeyArgument); | ||
AddOption(modelOption); | ||
|
||
this.SetHandler(HandleAsync, apiKeyArgument, modelOption); | ||
} | ||
|
||
private static async Task HandleAsync(string apiKey, string model) | ||
{ | ||
await Helpers.AuthenticateWithApiKeyAsync(apiKey, model, Providers.OpenRouter).ConfigureAwait(false); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
using System.CommandLine; | ||
|
||
namespace LangChain.Cli.Commands; | ||
|
||
public class GenerateCommand : Command | ||
{ | ||
public GenerateCommand() : base(name: "generate", description: "Generates text using a prompt.") | ||
{ | ||
var inputPathArgument = CommonArguments.InputPath; | ||
var outputPathArgument = CommonArguments.OutputPath; | ||
AddArgument(inputPathArgument); | ||
AddArgument(outputPathArgument); | ||
|
||
this.SetHandler(HandleAsync, inputPathArgument, outputPathArgument); | ||
} | ||
|
||
private static async Task HandleAsync(string inputPath, string outputPath) | ||
{ | ||
var inputText = await File.ReadAllTextAsync(inputPath).ConfigureAwait(false); | ||
|
||
var outputText = await Helpers.GenerateUsingAuthenticatedModelAsync(inputText).ConfigureAwait(false); | ||
|
||
await File.WriteAllTextAsync(outputPath, outputText).ConfigureAwait(false); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
using System.CommandLine; | ||
|
||
namespace LangChain.Cli.Commands; | ||
|
||
public class SummarizeCommand : Command | ||
{ | ||
public SummarizeCommand() : base(name: "summarize", description: "Summarizes text using a provider.") | ||
{ | ||
var inputPathArgument = CommonArguments.InputPath; | ||
var outputPathArgument = CommonArguments.OutputPath; | ||
var wordCountOption = new Option<int>( | ||
aliases: ["--word-count", "-w"], getDefaultValue: () => 20, description: "Word count for summary"); | ||
|
||
AddArgument(inputPathArgument); | ||
AddArgument(outputPathArgument); | ||
AddOption(wordCountOption); | ||
|
||
this.SetHandler(HandleAsync, inputPathArgument, outputPathArgument, wordCountOption); | ||
} | ||
|
||
private static async Task HandleAsync(string inputPath, string outputPath, int wordCount) | ||
{ | ||
var inputText = await File.ReadAllTextAsync(inputPath).ConfigureAwait(false); | ||
|
||
var outputText = await Helpers.GenerateUsingAuthenticatedModelAsync( | ||
$""" | ||
Please summarize the the following text in {wordCount} words or less: | ||
{inputText} | ||
""").ConfigureAwait(false); | ||
|
||
await File.WriteAllTextAsync(outputPath, outputText).ConfigureAwait(false); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
using System.CommandLine; | ||
|
||
namespace LangChain.Cli; | ||
|
||
public static class CommonArguments | ||
{ | ||
public static Argument<string> InputPath => new( | ||
name: "Input file", | ||
description: "Input file path"); | ||
|
||
public static Argument<string> OutputPath => new ( | ||
name: "Output file", | ||
description: "Output file path"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
using LangChain.Providers; | ||
using LangChain.Providers.OpenAI; | ||
using LangChain.Providers.OpenRouter; | ||
|
||
namespace LangChain.Cli; | ||
|
||
public static class Helpers | ||
{ | ||
public static string GetSettingsFolder() | ||
{ | ||
var folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "LangChainDotnet.Cli"); | ||
Directory.CreateDirectory(folder); | ||
|
||
return folder; | ||
} | ||
|
||
public static async Task AuthenticateWithApiKeyAsync(string apiKey, string model, string provider) | ||
{ | ||
var settingsFolder = GetSettingsFolder(); | ||
|
||
await File.WriteAllTextAsync(Path.Combine(settingsFolder, "provider.txt"), provider).ConfigureAwait(false); | ||
await File.WriteAllTextAsync(Path.Combine(settingsFolder, "model.txt"), model).ConfigureAwait(false); | ||
await File.WriteAllTextAsync(Path.Combine(settingsFolder, "api_key.txt"), apiKey).ConfigureAwait(false); | ||
} | ||
|
||
public static async Task<string> GenerateUsingAuthenticatedModelAsync(string prompt) | ||
{ | ||
var settingsFolder = GetSettingsFolder(); | ||
|
||
ChatModel model; | ||
switch (await File.ReadAllTextAsync(Path.Combine(settingsFolder, "provider.txt")).ConfigureAwait(false)) | ||
{ | ||
case Providers.OpenAi: | ||
{ | ||
var provider = new OpenAiProvider(apiKey: await File.ReadAllTextAsync(Path.Combine(settingsFolder, "api_key.txt")).ConfigureAwait(false)); | ||
model = new OpenAiChatModel(provider, id: await File.ReadAllTextAsync(Path.Combine(settingsFolder, "model.txt")).ConfigureAwait(false)); | ||
break; | ||
|
||
} | ||
case Providers.OpenRouter: | ||
{ | ||
var provider = new OpenRouterProvider(apiKey: await File.ReadAllTextAsync(Path.Combine(settingsFolder, "api_key.txt")).ConfigureAwait(false)); | ||
model = new OpenRouterModel(provider, id: await File.ReadAllTextAsync(Path.Combine(settingsFolder, "model.txt")).ConfigureAwait(false)); | ||
break; | ||
} | ||
default: | ||
throw new NotSupportedException("Provider not supported."); | ||
} | ||
|
||
return await model.GenerateAsync(prompt).ConfigureAwait(false); | ||
} | ||
} |
Oops, something went wrong.