chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
OPENAI_API_KEY=""
|
||||
OPENAI_CHAT_MODEL_ID=""
|
||||
OPENAI_TEXT_MODEL_ID=""
|
||||
OPENAI_EMBEDDING_MODEL_ID=""
|
||||
OPENAI_ORG_ID=""
|
||||
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=""
|
||||
AZURE_OPENAI_TEXT_DEPLOYMENT_NAME=""
|
||||
AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=""
|
||||
AZURE_OPENAI_ENDPOINT=""
|
||||
AZURE_OPENAI_API_KEY=""
|
||||
AZURE_AI_SEARCH_API_KEY=""
|
||||
AZURE_AI_SEARCH_ENDPOINT=""
|
||||
@@ -0,0 +1,47 @@
|
||||
# SK Python Documentation Examples
|
||||
|
||||
This project contains a collection of examples used in documentation on [learn.microsoft.com](https://learn.microsoft.com/en-us/semantic-kernel/).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [Python](https://www.python.org/downloads/) 3.10 and above
|
||||
- Install Semantic Kernel through PyPi:
|
||||
```bash
|
||||
pip install semantic-kernel
|
||||
```
|
||||
|
||||
## Configuring the sample
|
||||
|
||||
The samples can be configured with a `.env` file in the project which holds api keys and other secrets and configurations.
|
||||
|
||||
Make sure you have an
|
||||
[Open AI API Key](https://platform.openai.com) or
|
||||
[Azure Open AI service key](https://azure.microsoft.com/en-us/products/ai-services/openai-service)
|
||||
|
||||
Copy the `.env.example` file to a new file named `.env`. Then, copy those keys into the `.env` file:
|
||||
|
||||
```
|
||||
GLOBAL_LLM_SERVICE="OpenAI" # Toggle between "OpenAI" or "AzureOpenAI"
|
||||
|
||||
OPENAI_CHAT_MODEL_ID="gpt-3.5-turbo-0125"
|
||||
OPENAI_TEXT_MODEL_ID="gpt-3.5-turbo-instruct"
|
||||
OPENAI_API_KEY=""
|
||||
OPENAI_ORG_ID=""
|
||||
|
||||
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME="gpt-35-turbo"
|
||||
AZURE_OPENAI_TEXT_DEPLOYMENT_NAME="gpt-35-turbo-instruct"
|
||||
AZURE_OPENAI_ENDPOINT=""
|
||||
AZURE_OPENAI_API_KEY=""
|
||||
AZURE_OPENAI_API_VERSION=""
|
||||
```
|
||||
|
||||
_Note: if running the examples with VSCode, it will look for your .env file at the main root of the repository._
|
||||
|
||||
## Running the sample
|
||||
|
||||
To run the console application within Visual Studio Code, just hit `F5`.
|
||||
Otherwise the sample can be run via the command line:
|
||||
|
||||
```
|
||||
python.exe <absolute_path_to_sk_code>/python/samples/learn_resources/plugin.py
|
||||
```
|
||||
@@ -0,0 +1,189 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from azure.identity import AzureCliCredential
|
||||
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.agents import AgentGroupChat, ChatCompletionAgent
|
||||
from semantic_kernel.agents.strategies import (
|
||||
KernelFunctionSelectionStrategy,
|
||||
KernelFunctionTerminationStrategy,
|
||||
)
|
||||
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
||||
from semantic_kernel.contents import ChatHistoryTruncationReducer
|
||||
from semantic_kernel.functions import KernelFunctionFromPrompt
|
||||
|
||||
"""
|
||||
The following sample demonstrates how to create a simple,
|
||||
agent group chat that utilizes a Reviewer Chat Completion
|
||||
Agent along with a Writer Chat Completion Agent to
|
||||
complete a user's task.
|
||||
|
||||
This is the full code sample for the Semantic Kernel Learn Site: How-To: Coordinate Agent Collaboration
|
||||
using Agent Group Chat
|
||||
|
||||
https://learn.microsoft.com/semantic-kernel/frameworks/agent/examples/example-agent-collaboration?pivots=programming-language-python
|
||||
"""
|
||||
|
||||
# Define agent names
|
||||
REVIEWER_NAME = "Reviewer"
|
||||
WRITER_NAME = "Writer"
|
||||
|
||||
|
||||
def create_kernel() -> Kernel:
|
||||
"""Creates a Kernel instance with an Azure OpenAI ChatCompletion service."""
|
||||
kernel = Kernel()
|
||||
kernel.add_service(service=AzureChatCompletion(credential=AzureCliCredential()))
|
||||
return kernel
|
||||
|
||||
|
||||
async def main():
|
||||
# Create a single kernel instance for all agents.
|
||||
kernel = create_kernel()
|
||||
|
||||
# Create ChatCompletionAgents using the same kernel.
|
||||
agent_reviewer = ChatCompletionAgent(
|
||||
kernel=kernel,
|
||||
name=REVIEWER_NAME,
|
||||
instructions="""
|
||||
Your responsibility is to review and identify how to improve user provided content.
|
||||
If the user has provided input or direction for content already provided, specify how to address this input.
|
||||
Never directly perform the correction or provide an example.
|
||||
Once the content has been updated in a subsequent response, review it again until it is satisfactory.
|
||||
|
||||
RULES:
|
||||
- Only identify suggestions that are specific and actionable.
|
||||
- Verify previous suggestions have been addressed.
|
||||
- Never repeat previous suggestions.
|
||||
""",
|
||||
)
|
||||
|
||||
agent_writer = ChatCompletionAgent(
|
||||
kernel=kernel,
|
||||
name=WRITER_NAME,
|
||||
instructions="""
|
||||
Your sole responsibility is to rewrite content according to review suggestions.
|
||||
- Always apply all review directions.
|
||||
- Always revise the content in its entirety without explanation.
|
||||
- Never address the user.
|
||||
""",
|
||||
)
|
||||
|
||||
# Define a selection function to determine which agent should take the next turn.
|
||||
selection_function = KernelFunctionFromPrompt(
|
||||
function_name="selection",
|
||||
prompt=f"""
|
||||
Examine the provided RESPONSE and choose the next participant.
|
||||
State only the name of the chosen participant without explanation.
|
||||
Never choose the participant named in the RESPONSE.
|
||||
|
||||
Choose only from these participants:
|
||||
- {REVIEWER_NAME}
|
||||
- {WRITER_NAME}
|
||||
|
||||
Rules:
|
||||
- If RESPONSE is user input, it is {REVIEWER_NAME}'s turn.
|
||||
- If RESPONSE is by {REVIEWER_NAME}, it is {WRITER_NAME}'s turn.
|
||||
- If RESPONSE is by {WRITER_NAME}, it is {REVIEWER_NAME}'s turn.
|
||||
|
||||
RESPONSE:
|
||||
{{{{$lastmessage}}}}
|
||||
""",
|
||||
)
|
||||
|
||||
# Define a termination function where the reviewer signals completion with "yes".
|
||||
termination_keyword = "yes"
|
||||
|
||||
termination_function = KernelFunctionFromPrompt(
|
||||
function_name="termination",
|
||||
prompt=f"""
|
||||
Examine the RESPONSE and determine whether the content has been deemed satisfactory.
|
||||
If the content is satisfactory, respond with a single word without explanation: {termination_keyword}.
|
||||
If specific suggestions are being provided, it is not satisfactory.
|
||||
If no correction is suggested, it is satisfactory.
|
||||
|
||||
RESPONSE:
|
||||
{{{{$lastmessage}}}}
|
||||
""",
|
||||
)
|
||||
|
||||
history_reducer = ChatHistoryTruncationReducer(target_count=1)
|
||||
|
||||
# Create the AgentGroupChat with selection and termination strategies.
|
||||
chat = AgentGroupChat(
|
||||
agents=[agent_reviewer, agent_writer],
|
||||
selection_strategy=KernelFunctionSelectionStrategy(
|
||||
initial_agent=agent_reviewer,
|
||||
function=selection_function,
|
||||
kernel=kernel,
|
||||
result_parser=lambda result: str(result.value[0]).strip() if result.value[0] is not None else WRITER_NAME,
|
||||
history_variable_name="lastmessage",
|
||||
history_reducer=history_reducer,
|
||||
),
|
||||
termination_strategy=KernelFunctionTerminationStrategy(
|
||||
agents=[agent_reviewer],
|
||||
function=termination_function,
|
||||
kernel=kernel,
|
||||
result_parser=lambda result: termination_keyword in str(result.value[0]).lower(),
|
||||
history_variable_name="lastmessage",
|
||||
maximum_iterations=10,
|
||||
history_reducer=history_reducer,
|
||||
),
|
||||
)
|
||||
|
||||
print(
|
||||
"Ready! Type your input, or 'exit' to quit, 'reset' to restart the conversation. "
|
||||
"You may pass in a file path using @<path_to_file>."
|
||||
)
|
||||
|
||||
is_complete = False
|
||||
while not is_complete:
|
||||
print()
|
||||
user_input = input("User > ").strip()
|
||||
if not user_input:
|
||||
continue
|
||||
|
||||
if user_input.lower() == "exit":
|
||||
is_complete = True
|
||||
break
|
||||
|
||||
if user_input.lower() == "reset":
|
||||
await chat.reset()
|
||||
print("[Conversation has been reset]")
|
||||
continue
|
||||
|
||||
# Try to grab files from the script's current directory
|
||||
if user_input.startswith("@") and len(user_input) > 1:
|
||||
file_name = user_input[1:]
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
file_path = os.path.join(script_dir, file_name)
|
||||
try:
|
||||
if not os.path.exists(file_path):
|
||||
print(f"Unable to access file: {file_path}")
|
||||
continue
|
||||
with open(file_path, encoding="utf-8") as file:
|
||||
user_input = file.read()
|
||||
except Exception:
|
||||
print(f"Unable to access file: {file_path}")
|
||||
continue
|
||||
|
||||
# Add the current user_input to the chat
|
||||
await chat.add_chat_message(message=user_input)
|
||||
|
||||
try:
|
||||
async for response in chat.invoke():
|
||||
if response is None or not response.name:
|
||||
continue
|
||||
print()
|
||||
print(f"# {response.name.upper()}:\n{response.content}")
|
||||
except Exception as e:
|
||||
print(f"Error during chat invocation: {e}")
|
||||
|
||||
# Reset the chat's complete flag for the new conversation round.
|
||||
chat.is_complete = False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,157 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import os
|
||||
|
||||
from azure.identity import AzureCliCredential
|
||||
|
||||
from semantic_kernel.agents import AssistantAgentThread, AzureAssistantAgent
|
||||
from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings
|
||||
from semantic_kernel.contents import StreamingFileReferenceContent
|
||||
|
||||
logging.basicConfig(level=logging.ERROR)
|
||||
|
||||
"""
|
||||
The following sample demonstrates how to create a simple,
|
||||
OpenAI assistant agent that utilizes the code interpreter
|
||||
to analyze uploaded files.
|
||||
|
||||
This is the full code sample for the Semantic Kernel Learn Site: How-To: Open AI Assistant Agent Code Interpreter
|
||||
|
||||
https://learn.microsoft.com/semantic-kernel/frameworks/agent/examples/example-assistant-code?pivots=programming-language-python
|
||||
""" # noqa: E501
|
||||
|
||||
# Let's form the file paths that we will later pass to the assistant
|
||||
csv_file_path_1 = os.path.join(
|
||||
os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
|
||||
"resources",
|
||||
"PopulationByAdmin1.csv",
|
||||
)
|
||||
|
||||
csv_file_path_2 = os.path.join(
|
||||
os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
|
||||
"resources",
|
||||
"PopulationByCountry.csv",
|
||||
)
|
||||
|
||||
|
||||
async def download_file_content(agent: AzureAssistantAgent, file_id: str):
|
||||
try:
|
||||
# Fetch the content of the file using the provided method
|
||||
response_content = await agent.client.files.content(file_id)
|
||||
|
||||
# Get the current working directory of the file
|
||||
current_directory = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Define the path to save the image in the current directory
|
||||
file_path = os.path.join(
|
||||
current_directory, # Use the current directory of the file
|
||||
f"{file_id}.png", # You can modify this to use the actual filename with proper extension
|
||||
)
|
||||
|
||||
# Save content to a file asynchronously
|
||||
with open(file_path, "wb") as file:
|
||||
file.write(response_content.content)
|
||||
|
||||
print(f"File saved to: {file_path}")
|
||||
except Exception as e:
|
||||
print(f"An error occurred while downloading file {file_id}: {str(e)}")
|
||||
|
||||
|
||||
async def download_response_image(agent: AzureAssistantAgent, file_ids: list[str]):
|
||||
if file_ids:
|
||||
# Iterate over file_ids and download each one
|
||||
for file_id in file_ids:
|
||||
await download_file_content(agent, file_id)
|
||||
|
||||
|
||||
async def main():
|
||||
# Create the client using Azure OpenAI resources and configuration
|
||||
client = AzureAssistantAgent.create_client(credential=AzureCliCredential())
|
||||
|
||||
# Upload the files to the client
|
||||
file_ids: list[str] = []
|
||||
for path in [csv_file_path_1, csv_file_path_2]:
|
||||
with open(path, "rb") as file:
|
||||
file = await client.files.create(file=file, purpose="assistants")
|
||||
file_ids.append(file.id)
|
||||
|
||||
# Get the code interpreter tool and resources
|
||||
code_interpreter_tools, code_interpreter_tool_resources = AzureAssistantAgent.configure_code_interpreter_tool(
|
||||
file_ids=file_ids
|
||||
)
|
||||
|
||||
# Create the assistant definition
|
||||
definition = await client.beta.assistants.create(
|
||||
model=AzureOpenAISettings().chat_deployment_name,
|
||||
instructions="""
|
||||
Analyze the available data to provide an answer to the user's question.
|
||||
Always format response using markdown.
|
||||
Always include a numerical index that starts at 1 for any lists or tables.
|
||||
Always sort lists in ascending order.
|
||||
""",
|
||||
name="SampleAssistantAgent",
|
||||
tools=code_interpreter_tools,
|
||||
tool_resources=code_interpreter_tool_resources,
|
||||
)
|
||||
|
||||
# Create the agent using the client and the assistant definition
|
||||
agent = AzureAssistantAgent(
|
||||
client=client,
|
||||
definition=definition,
|
||||
)
|
||||
|
||||
thread: AssistantAgentThread = None
|
||||
|
||||
try:
|
||||
is_complete: bool = False
|
||||
file_ids: list[str] = []
|
||||
while not is_complete:
|
||||
user_input = input("User:> ")
|
||||
if not user_input:
|
||||
continue
|
||||
|
||||
if user_input.lower() == "exit":
|
||||
is_complete = True
|
||||
break
|
||||
|
||||
is_code = False
|
||||
last_role = None
|
||||
async for response in agent.invoke_stream(messages=user_input, thread=thread):
|
||||
current_is_code = response.metadata.get("code", False)
|
||||
|
||||
if current_is_code:
|
||||
if not is_code:
|
||||
print("\n\n```python")
|
||||
is_code = True
|
||||
print(response.content, end="", flush=True)
|
||||
else:
|
||||
if is_code:
|
||||
print("\n```")
|
||||
is_code = False
|
||||
last_role = None
|
||||
if hasattr(response, "role") and response.role is not None and last_role != response.role:
|
||||
print(f"\n# {response.role}: ", end="", flush=True)
|
||||
last_role = response.role
|
||||
print(response.content, end="", flush=True)
|
||||
file_ids.extend([
|
||||
item.file_id for item in response.items if isinstance(item, StreamingFileReferenceContent)
|
||||
])
|
||||
thread = response.thread
|
||||
if is_code:
|
||||
print("```\n")
|
||||
print()
|
||||
|
||||
await download_response_image(agent, file_ids)
|
||||
file_ids.clear()
|
||||
|
||||
finally:
|
||||
print("\nCleaning up resources...")
|
||||
[await client.files.delete(file_id) for file_id in file_ids]
|
||||
await thread.delete() if thread else None
|
||||
await client.beta.assistants.delete(agent.id)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,118 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from azure.identity import AzureCliCredential
|
||||
|
||||
from semantic_kernel.agents import AssistantAgentThread, AzureAssistantAgent
|
||||
from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings
|
||||
from semantic_kernel.contents import StreamingAnnotationContent
|
||||
|
||||
"""
|
||||
The following sample demonstrates how to create a simple,
|
||||
OpenAI assistant agent that utilizes the vector store
|
||||
to answer questions based on the uploaded documents.
|
||||
|
||||
This is the full code sample for the Semantic Kernel Learn Site: How-To: Open AI Assistant Agent File Search
|
||||
|
||||
https://learn.microsoft.com/semantic-kernel/frameworks/agent/examples/example-assistant-search?pivots=programming-language-python
|
||||
"""
|
||||
|
||||
|
||||
def get_filepath_for_filename(filename: str) -> str:
|
||||
base_directory = os.path.join(
|
||||
os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
|
||||
"resources",
|
||||
)
|
||||
return os.path.join(base_directory, filename)
|
||||
|
||||
|
||||
filenames = [
|
||||
"Grimms-The-King-of-the-Golden-Mountain.txt",
|
||||
"Grimms-The-Water-of-Life.txt",
|
||||
"Grimms-The-White-Snake.txt",
|
||||
]
|
||||
|
||||
|
||||
async def main():
|
||||
# Create the client using Azure OpenAI resources and configuration
|
||||
client = AzureAssistantAgent.create_client(credential=AzureCliCredential())
|
||||
|
||||
# Upload the files to the client
|
||||
file_ids: list[str] = []
|
||||
for path in [get_filepath_for_filename(filename) for filename in filenames]:
|
||||
with open(path, "rb") as file:
|
||||
file = await client.files.create(file=file, purpose="assistants")
|
||||
file_ids.append(file.id)
|
||||
|
||||
vector_store = await client.vector_stores.create(
|
||||
name="assistant_search",
|
||||
file_ids=file_ids,
|
||||
)
|
||||
|
||||
# Get the file search tool and resources
|
||||
file_search_tools, file_search_tool_resources = AzureAssistantAgent.configure_file_search_tool(
|
||||
vector_store_ids=vector_store.id
|
||||
)
|
||||
|
||||
# Create the assistant definition
|
||||
definition = await client.beta.assistants.create(
|
||||
model=AzureOpenAISettings().chat_deployment_name,
|
||||
instructions="""
|
||||
The document store contains the text of fictional stories.
|
||||
Always analyze the document store to provide an answer to the user's question.
|
||||
Never rely on your knowledge of stories not included in the document store.
|
||||
Always format response using markdown.
|
||||
""",
|
||||
name="SampleAssistantAgent",
|
||||
tools=file_search_tools,
|
||||
tool_resources=file_search_tool_resources,
|
||||
)
|
||||
|
||||
# Create the agent using the client and the assistant definition
|
||||
agent = AzureAssistantAgent(
|
||||
client=client,
|
||||
definition=definition,
|
||||
)
|
||||
|
||||
thread: AssistantAgentThread = None
|
||||
|
||||
try:
|
||||
is_complete: bool = False
|
||||
while not is_complete:
|
||||
user_input = input("User:> ")
|
||||
if not user_input:
|
||||
continue
|
||||
|
||||
if user_input.lower() == "exit":
|
||||
is_complete = True
|
||||
break
|
||||
|
||||
footnotes: list[StreamingAnnotationContent] = []
|
||||
async for response in agent.invoke_stream(messages=user_input, thread=thread):
|
||||
footnotes.extend([item for item in response.items if isinstance(item, StreamingAnnotationContent)])
|
||||
|
||||
print(f"{response.content}", end="", flush=True)
|
||||
if not thread:
|
||||
thread = response.thread
|
||||
|
||||
print()
|
||||
|
||||
if len(footnotes) > 0:
|
||||
for footnote in footnotes:
|
||||
print(
|
||||
f"\n`{footnote.quote}` => {footnote.file_id} "
|
||||
f"(Index: {footnote.start_index} - {footnote.end_index})"
|
||||
)
|
||||
|
||||
finally:
|
||||
print("\nCleaning up resources...")
|
||||
[await client.files.delete(file_id) for file_id in file_ids]
|
||||
await client.vector_stores.delete(vector_store.id)
|
||||
await thread.delete() if thread else None
|
||||
await client.beta.assistants.delete(agent.id)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,88 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
from azure.identity import AzureCliCredential
|
||||
|
||||
from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread
|
||||
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
|
||||
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
||||
from semantic_kernel.functions import KernelArguments
|
||||
from semantic_kernel.kernel import Kernel
|
||||
|
||||
# Adjust the sys.path so we can use the GitHubPlugin and GitHubSettings classes
|
||||
# This is so we can run the code from the samples/learn_resources/agent_docs directory
|
||||
# If you are running code from your own project, you may not need need to do this.
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
|
||||
from plugins.GithubPlugin.github import GitHubPlugin, GitHubSettings # noqa: E402
|
||||
|
||||
"""
|
||||
The following sample demonstrates how to create a simple,
|
||||
ChatCompletionAgent to use a GitHub plugin to interact
|
||||
with the GitHub API.
|
||||
|
||||
This is the full code sample for the Semantic Kernel Learn Site: How-To: Chat Completion Agent
|
||||
|
||||
https://learn.microsoft.com/semantic-kernel/frameworks/agent/examples/example-chat-agent?pivots=programming-language-python
|
||||
"""
|
||||
|
||||
|
||||
async def main():
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the AzureChatCompletion AI Service to the Kernel
|
||||
service_id = "agent"
|
||||
kernel.add_service(AzureChatCompletion(service_id=service_id, credential=AzureCliCredential()))
|
||||
|
||||
settings = kernel.get_prompt_execution_settings_from_service_id(service_id=service_id)
|
||||
# Configure the function choice behavior to auto invoke kernel functions
|
||||
settings.function_choice_behavior = FunctionChoiceBehavior.Auto()
|
||||
|
||||
# Set your GitHub Personal Access Token (PAT) value here
|
||||
gh_settings = GitHubSettings(token="") # nosec
|
||||
kernel.add_plugin(plugin=GitHubPlugin(gh_settings), plugin_name="GithubPlugin")
|
||||
|
||||
current_time = datetime.now().isoformat()
|
||||
|
||||
# Create the agent
|
||||
agent = ChatCompletionAgent(
|
||||
kernel=kernel,
|
||||
name="SampleAssistantAgent",
|
||||
instructions=f"""
|
||||
You are an agent designed to query and retrieve information from a single GitHub repository in a read-only
|
||||
manner.
|
||||
You are also able to access the profile of the active user.
|
||||
|
||||
Use the current date and time to provide up-to-date details or time-sensitive responses.
|
||||
|
||||
The repository you are querying is a public repository with the following name: microsoft/semantic-kernel
|
||||
|
||||
The current date and time is: {current_time}.
|
||||
""",
|
||||
arguments=KernelArguments(settings=settings),
|
||||
)
|
||||
|
||||
thread: ChatHistoryAgentThread = None
|
||||
is_complete: bool = False
|
||||
while not is_complete:
|
||||
user_input = input("User:> ")
|
||||
if not user_input:
|
||||
continue
|
||||
|
||||
if user_input.lower() == "exit":
|
||||
is_complete = True
|
||||
break
|
||||
|
||||
arguments = KernelArguments(now=datetime.now().strftime("%Y-%m-%d %H:%M"))
|
||||
|
||||
async for response in agent.invoke(messages=user_input, thread=thread, arguments=arguments):
|
||||
print(f"{response.content}")
|
||||
thread = response.thread
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,33 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel.kernel import Kernel
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
# use_azure: True to use Azure OpenAI, False to use OpenAI
|
||||
kernel = add_service(kernel, use_chat=True)
|
||||
|
||||
script_directory = os.path.dirname(__file__)
|
||||
plugins_directory = os.path.join(script_directory, "plugins")
|
||||
writer_plugin = kernel.add_plugin(parent_directory=plugins_directory, plugin_name="WriterPlugin")
|
||||
|
||||
# Run the ShortPoem function with the Kernel Argument.
|
||||
# Kernel arguments can be configured as KernelArguments object
|
||||
# or can be passed as kwargs.
|
||||
result = await kernel.invoke(writer_plugin["ShortPoem"], input="Hello world")
|
||||
|
||||
print(result)
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,99 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel.connectors.ai import PromptExecutionSettings
|
||||
from semantic_kernel.contents import ChatHistory
|
||||
from semantic_kernel.core_plugins import ConversationSummaryPlugin
|
||||
from semantic_kernel.kernel import Kernel
|
||||
from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig
|
||||
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel=kernel, use_chat=True)
|
||||
|
||||
service_id = "default"
|
||||
|
||||
# The following execution settings are used for the ConversationSummaryPlugin
|
||||
execution_settings = PromptExecutionSettings(
|
||||
service_id=service_id, max_tokens=ConversationSummaryPlugin._max_tokens, temperature=0.1, top_p=0.5
|
||||
)
|
||||
prompt_template_config = PromptTemplateConfig(
|
||||
template=ConversationSummaryPlugin._summarize_conversation_prompt_template,
|
||||
description="Given a section of a conversation transcript, summarize the part of the conversation.",
|
||||
execution_settings=execution_settings,
|
||||
allow_dangerously_set_content=True,
|
||||
)
|
||||
|
||||
# Import the ConversationSummaryPlugin
|
||||
kernel.add_plugin(
|
||||
ConversationSummaryPlugin(kernel=kernel, prompt_template_config=prompt_template_config),
|
||||
plugin_name="ConversationSummaryPlugin",
|
||||
)
|
||||
|
||||
|
||||
# <FunctionFromPrompt>
|
||||
# Create the function with the prompt
|
||||
kernel.add_function(
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
template="""{{ConversationSummaryPlugin.SummarizeConversation $history}}
|
||||
User: {{$request}}
|
||||
Assistant: """,
|
||||
description="Chat with the assistant",
|
||||
execution_settings=[
|
||||
PromptExecutionSettings(service_id="default", temperature=0.0, max_tokens=1000),
|
||||
PromptExecutionSettings(service_id="gpt-3.5-turbo", temperature=0.2, max_tokens=4000),
|
||||
PromptExecutionSettings(service_id="gpt-4", temperature=0.3, max_tokens=8000),
|
||||
],
|
||||
input_variables=[
|
||||
InputVariable(name="request", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
),
|
||||
plugin_name="Summarize_Conversation",
|
||||
function_name="Chat",
|
||||
description="Chat with the assistant",
|
||||
)
|
||||
# </FunctionFromPrompt>
|
||||
|
||||
# Create the history
|
||||
history = ChatHistory()
|
||||
|
||||
|
||||
async def main():
|
||||
while True:
|
||||
try:
|
||||
request = input("User:> ")
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
break
|
||||
if request == "exit":
|
||||
break
|
||||
|
||||
result = await kernel.invoke(
|
||||
plugin_name="Summarize_Conversation",
|
||||
function_name="Chat",
|
||||
request=request,
|
||||
history=history,
|
||||
)
|
||||
|
||||
# Add the request to the history
|
||||
history.add_user_message(request)
|
||||
history.add_assistant_message(str(result))
|
||||
|
||||
print(f"Assistant:> {result}")
|
||||
|
||||
print("\n\nExiting chat...")
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,81 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior
|
||||
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
|
||||
from semantic_kernel.contents import ChatHistory
|
||||
from semantic_kernel.prompt_template import PromptTemplateConfig
|
||||
from semantic_kernel.prompt_template.input_variable import InputVariable
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Import the MathPlugin.
|
||||
# <RunningNativeFunction>
|
||||
plugins_directory = os.path.join(os.path.dirname(__file__), "plugins")
|
||||
math_plugin = kernel.add_plugin(parent_directory=plugins_directory, plugin_name="MathPlugin")
|
||||
|
||||
result = await kernel.invoke(
|
||||
math_plugin["Sqrt"],
|
||||
number1=12,
|
||||
)
|
||||
|
||||
print(result)
|
||||
# </RunningNativeFunction>
|
||||
|
||||
# <Chat>
|
||||
kernel = add_service(kernel, use_chat=True)
|
||||
kernel.add_function(
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
template="""{{$chat_history}}{{$input}}""",
|
||||
input_variables=[
|
||||
InputVariable(name="input", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="chat_history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
),
|
||||
execution_settings=OpenAIChatPromptExecutionSettings(
|
||||
service_id="default",
|
||||
temperature=0.0,
|
||||
max_tokens=1000,
|
||||
function_choice_behavior=FunctionChoiceBehavior.Auto(),
|
||||
),
|
||||
plugin_name="Chat",
|
||||
function_name="Chat",
|
||||
description="Chat with the assistant",
|
||||
)
|
||||
chat_history = ChatHistory()
|
||||
while True:
|
||||
try:
|
||||
request = input("Your request: ")
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
break
|
||||
if request.lower() == "exit":
|
||||
break
|
||||
result = await kernel.invoke(
|
||||
plugin_name="Chat",
|
||||
function_name="Chat",
|
||||
input=request,
|
||||
chat_history=chat_history,
|
||||
)
|
||||
print(result)
|
||||
chat_history.add_user_message(request)
|
||||
chat_history.add_assistant_message(str(result))
|
||||
|
||||
print("\n\nExiting...")
|
||||
# </Chat>
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,43 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
from dotenv import dotenv_values
|
||||
from promptflow import PFClient
|
||||
from promptflow.entities import AzureOpenAIConnection
|
||||
|
||||
pf_client = PFClient()
|
||||
|
||||
# Run a single test of a flow
|
||||
#################################################
|
||||
|
||||
# Load the configuration from the .env file
|
||||
config = dotenv_values(".env")
|
||||
deployment_type = config.get("AZURE_OPENAI_DEPLOYMENT_TYPE", None)
|
||||
if deployment_type == "chat-completion":
|
||||
deployment_name = config.get("AZURE_OPENAI_CHAT_COMPLETION_DEPLOYMENT_NAME", None)
|
||||
elif deployment_type == "text-completion":
|
||||
deployment_name = config.get("AZURE_OPENAI_TEXT_COMPLETION_DEPLOYMENT_NAME", None)
|
||||
|
||||
# Define the inputs of the flow
|
||||
inputs = {
|
||||
"text": "What is 2 plus 3?",
|
||||
"deployment_type": deployment_type,
|
||||
"deployment_name": deployment_name,
|
||||
}
|
||||
|
||||
# Initialize an AzureOpenAIConnection object
|
||||
connection = AzureOpenAIConnection(
|
||||
name="AzureOpenAIConnection",
|
||||
type="Custom",
|
||||
api_key=config.get("AZURE_OPENAI_API_KEY", None),
|
||||
api_base=config.get("AZURE_OPENAI_ENDPOINT", None),
|
||||
api_version="2023-03-15-preview",
|
||||
)
|
||||
|
||||
# Add connections to the Prompt flow client
|
||||
pf_client.connections.create_or_update(connection)
|
||||
|
||||
# Run the flow
|
||||
flow_result = pf_client.test(flow="perform_math", inputs=inputs)
|
||||
|
||||
# Print the outputs of the flow
|
||||
print(f"Flow outputs: {flow_result}")
|
||||
@@ -0,0 +1,92 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.connectors.ai import PromptExecutionSettings
|
||||
from semantic_kernel.contents import ChatHistory
|
||||
from semantic_kernel.core_plugins import ConversationSummaryPlugin
|
||||
from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig
|
||||
|
||||
|
||||
async def main():
|
||||
# <KernelCreation>
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel=kernel, use_chat=True)
|
||||
|
||||
service_id = "default"
|
||||
prompt_template_config = PromptTemplateConfig(
|
||||
template=ConversationSummaryPlugin._summarize_conversation_prompt_template,
|
||||
description="Given a section of a conversation transcript, summarize the part of the conversation.",
|
||||
execution_settings=PromptExecutionSettings(
|
||||
service_id=service_id, max_tokens=ConversationSummaryPlugin._max_tokens, temperature=0.1, top_p=0.5
|
||||
),
|
||||
allow_dangerously_set_content=True,
|
||||
)
|
||||
|
||||
# Import the ConversationSummaryPlugin
|
||||
kernel.add_plugin(
|
||||
ConversationSummaryPlugin(kernel=kernel, prompt_template_config=prompt_template_config),
|
||||
plugin_name="ConversationSummaryPlugin",
|
||||
)
|
||||
# </KernelCreation>
|
||||
|
||||
# <FunctionFromPrompt>
|
||||
chat_function = kernel.add_function(
|
||||
plugin_name="Summarize_Conversation",
|
||||
function_name="Chat",
|
||||
description="Chat with the assistant",
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
template="""{{ConversationSummaryPlugin.SummarizeConversation $history}}
|
||||
User: {{$request}}
|
||||
Assistant: """,
|
||||
execution_settings=kernel.get_prompt_execution_settings_from_service_id(service_id=service_id),
|
||||
description="Chat with the assistant",
|
||||
input_variables=[
|
||||
InputVariable(name="request", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
# </FunctionFromPrompt>
|
||||
|
||||
# <Chat>
|
||||
# Create the history
|
||||
history = ChatHistory()
|
||||
|
||||
while True:
|
||||
try:
|
||||
request = input("User:> ")
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
break
|
||||
if request == "exit":
|
||||
break
|
||||
|
||||
result = await kernel.invoke(
|
||||
chat_function,
|
||||
request=request,
|
||||
history=history,
|
||||
)
|
||||
|
||||
# Add the request to the history
|
||||
history.add_user_message(request)
|
||||
history.add_assistant_message(str(result))
|
||||
|
||||
print(f"Assistant:> {result}")
|
||||
print("\n\nExiting chat...")
|
||||
# </Chat>
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,11 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
from promptflow import PFClient
|
||||
|
||||
pf_client = PFClient()
|
||||
|
||||
inputs = {
|
||||
"text": "What would you have left if you spent $3 when you only had $2 to begin with"
|
||||
} # The inputs of the flow.
|
||||
flow_result = pf_client.test(flow="perform_math", inputs=inputs)
|
||||
print(f"Flow outputs: {flow_result}")
|
||||
@@ -0,0 +1,60 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
from typing import Annotated
|
||||
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.functions import kernel_function
|
||||
|
||||
|
||||
# Let's define a light plugin
|
||||
class LightPlugin:
|
||||
is_on: bool = False
|
||||
|
||||
@kernel_function(
|
||||
name="get_state",
|
||||
description="Gets the state of the light.",
|
||||
)
|
||||
def get_state(
|
||||
self,
|
||||
) -> Annotated[str, "the output is a string"]:
|
||||
"""Returns the state result of the light."""
|
||||
return "On" if self.is_on else "Off"
|
||||
|
||||
@kernel_function(
|
||||
name="change_state",
|
||||
description="Changes the state of the light.",
|
||||
)
|
||||
def change_state(
|
||||
self,
|
||||
new_state: Annotated[bool, "the new state of the light"],
|
||||
) -> Annotated[str, "the output is a string"]:
|
||||
"""Changes the state of the light."""
|
||||
self.is_on = new_state
|
||||
state = self.get_state()
|
||||
print(f"The light is now: {state}")
|
||||
return state
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
light_plugin = kernel.add_plugin(
|
||||
LightPlugin(),
|
||||
plugin_name="LightPlugin",
|
||||
)
|
||||
|
||||
result = await kernel.invoke(light_plugin["get_state"])
|
||||
print(f"The light is: {result}")
|
||||
|
||||
print("Changing the light's state...")
|
||||
|
||||
# Kernel Arguments are passed in as kwargs.
|
||||
result = await kernel.invoke(light_plugin["change_state"], new_state=True)
|
||||
print(f"The light is: {result}")
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,118 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
|
||||
import httpx
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from semantic_kernel.functions.kernel_function_decorator import kernel_function
|
||||
|
||||
# region GitHub Models
|
||||
|
||||
|
||||
class Repo(BaseModel):
|
||||
id: int = Field(..., alias="id")
|
||||
name: str = Field(..., alias="full_name")
|
||||
description: str | None = Field(default=None, alias="description")
|
||||
url: str = Field(..., alias="html_url")
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
id: int = Field(..., alias="id")
|
||||
login: str = Field(..., alias="login")
|
||||
name: str | None = Field(default=None, alias="name")
|
||||
company: str | None = Field(default=None, alias="company")
|
||||
url: str = Field(..., alias="html_url")
|
||||
|
||||
|
||||
class Label(BaseModel):
|
||||
id: int = Field(..., alias="id")
|
||||
name: str = Field(..., alias="name")
|
||||
description: str | None = Field(default=None, alias="description")
|
||||
|
||||
|
||||
class Issue(BaseModel):
|
||||
id: int = Field(..., alias="id")
|
||||
number: int = Field(..., alias="number")
|
||||
url: str = Field(..., alias="html_url")
|
||||
title: str = Field(..., alias="title")
|
||||
state: str = Field(..., alias="state")
|
||||
labels: list[Label] = Field(..., alias="labels")
|
||||
when_created: str | None = Field(default=None, alias="created_at")
|
||||
when_closed: str | None = Field(default=None, alias="closed_at")
|
||||
|
||||
|
||||
class IssueDetail(Issue):
|
||||
body: str | None = Field(default=None, alias="body")
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
|
||||
class GitHubSettings(BaseModel):
|
||||
base_url: str = "https://api.github.com"
|
||||
token: str
|
||||
|
||||
|
||||
class GitHubPlugin:
|
||||
def __init__(self, settings: GitHubSettings):
|
||||
self.settings = settings
|
||||
|
||||
@kernel_function
|
||||
async def get_user_profile(self) -> "User":
|
||||
async with self.create_client() as client:
|
||||
response = await self.make_request(client, "/user")
|
||||
return User(**response)
|
||||
|
||||
@kernel_function
|
||||
async def get_repository(self, organization: str, repo: str) -> "Repo":
|
||||
async with self.create_client() as client:
|
||||
response = await self.make_request(client, f"/repos/{organization}/{repo}")
|
||||
return Repo(**response)
|
||||
|
||||
@kernel_function
|
||||
async def get_issues(
|
||||
self,
|
||||
organization: str,
|
||||
repo: str,
|
||||
max_results: int | None = None,
|
||||
state: str = "",
|
||||
label: str = "",
|
||||
assignee: str = "",
|
||||
) -> list["Issue"]:
|
||||
async with self.create_client() as client:
|
||||
path = f"/repos/{organization}/{repo}/issues?"
|
||||
path = self.build_query(path, "state", state)
|
||||
path = self.build_query(path, "assignee", assignee)
|
||||
path = self.build_query(path, "labels", label)
|
||||
path = self.build_query(path, "per_page", str(max_results) if max_results else "")
|
||||
response = await self.make_request(client, path)
|
||||
return [Issue(**issue) for issue in response]
|
||||
|
||||
@kernel_function
|
||||
async def get_issue_detail(self, organization: str, repo: str, issue_id: int) -> "IssueDetail":
|
||||
async with self.create_client() as client:
|
||||
path = f"/repos/{organization}/{repo}/issues/{issue_id}"
|
||||
response = await self.make_request(client, path)
|
||||
return IssueDetail(**response)
|
||||
|
||||
def create_client(self) -> httpx.AsyncClient:
|
||||
headers = {
|
||||
"User-Agent": "request",
|
||||
"Accept": "application/vnd.github+json",
|
||||
"Authorization": f"Bearer {self.settings.token}",
|
||||
"X-GitHub-Api-Version": "2022-11-28",
|
||||
}
|
||||
return httpx.AsyncClient(base_url=self.settings.base_url, headers=headers, timeout=5)
|
||||
|
||||
@staticmethod
|
||||
def build_query(path: str, key: str, value: str) -> str:
|
||||
if value:
|
||||
return f"{path}{key}={value}&"
|
||||
return path
|
||||
|
||||
@staticmethod
|
||||
async def make_request(client: httpx.AsyncClient, path: str) -> dict:
|
||||
print(f"REQUEST: {path}\n")
|
||||
response = await client.get(path)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
@@ -0,0 +1,76 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
# <defineClass>
|
||||
import math
|
||||
from typing import Annotated
|
||||
|
||||
from semantic_kernel.functions.kernel_function_decorator import kernel_function
|
||||
|
||||
|
||||
class Math:
|
||||
# </defineClass>
|
||||
"""
|
||||
Description: MathPlugin provides a set of functions to make Math calculations.
|
||||
|
||||
Usage:
|
||||
kernel.add_plugin(MathPlugin(), plugin_name="math")
|
||||
|
||||
Examples:
|
||||
{{math.Add}} => Returns the sum of input and amount (provided in the KernelArguments)
|
||||
{{math.Subtract}} => Returns the difference of input and amount (provided in the KernelArguments)
|
||||
{{math.Multiply}} => Returns the multiplication of input and number2 (provided in the KernelArguments)
|
||||
{{math.Divide}} => Returns the division of input and number2 (provided in the KernelArguments)
|
||||
"""
|
||||
|
||||
@kernel_function(
|
||||
description="Divide two numbers.",
|
||||
name="Divide",
|
||||
)
|
||||
def divide(
|
||||
self,
|
||||
number1: Annotated[float, "the first number to divide from"],
|
||||
number2: Annotated[float, "the second number to by"],
|
||||
) -> Annotated[float, "The output is a float"]:
|
||||
return float(number1) / float(number2)
|
||||
|
||||
@kernel_function(
|
||||
description="Multiply two numbers. When increasing by a percentage, don't forget to add 1 to the percentage.",
|
||||
name="Multiply",
|
||||
)
|
||||
def multiply(
|
||||
self,
|
||||
number1: Annotated[float, "the first number to multiply"],
|
||||
number2: Annotated[float, "the second number to multiply"],
|
||||
) -> Annotated[float, "The output is a float"]:
|
||||
return float(number1) * float(number2)
|
||||
|
||||
# <defineFunction>
|
||||
@kernel_function(
|
||||
description="Takes the square root of a number",
|
||||
name="Sqrt",
|
||||
)
|
||||
def square_root(
|
||||
self,
|
||||
number1: Annotated[float, "the number to take the square root of"],
|
||||
) -> Annotated[float, "The output is a float"]:
|
||||
return math.sqrt(float(number1))
|
||||
|
||||
# </defineFunction>
|
||||
|
||||
@kernel_function(name="Add")
|
||||
def add(
|
||||
self,
|
||||
number1: Annotated[float, "the first number to add"],
|
||||
number2: Annotated[float, "the second number to add"],
|
||||
) -> Annotated[float, "the output is a float"]:
|
||||
return float(number1) + float(number2)
|
||||
|
||||
@kernel_function(
|
||||
description="Subtracts value to a value",
|
||||
name="Subtract",
|
||||
)
|
||||
def subtract(
|
||||
self,
|
||||
number1: Annotated[float, "the first number"],
|
||||
number2: Annotated[float, "the number to subtract"],
|
||||
) -> Annotated[float, "the output is a float"]:
|
||||
return float(number1) - float(number2)
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"description": "Gets the intent of the user.",
|
||||
"execution_settings": {
|
||||
"default": {
|
||||
"max_tokens": 200,
|
||||
"temperature": 0.5,
|
||||
"top_p": 0.0,
|
||||
"presence_penalty": 0.0,
|
||||
"frequency_penalty": 0.0
|
||||
}
|
||||
},
|
||||
"input_variables": [
|
||||
{
|
||||
"name": "input",
|
||||
"description": "The user's request.",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "history",
|
||||
"description": "The history of the conversation.",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "options",
|
||||
"description": "The options to choose from.",
|
||||
"default": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
[History]
|
||||
{{$history}}
|
||||
|
||||
User: {{$input}}
|
||||
|
||||
---------------------------------------------
|
||||
|
||||
Provide the intent of the user. The intent should be one of the following: {{$options}}
|
||||
|
||||
INTENT:
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"description": "Turn a scenario into a short and entertaining poem.",
|
||||
"execution_settings": {
|
||||
"default": {
|
||||
"max_tokens": 200,
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.0,
|
||||
"presence_penalty": 0.0,
|
||||
"frequency_penalty": 0.0
|
||||
}
|
||||
},
|
||||
"input_variables": [
|
||||
{
|
||||
"name": "input",
|
||||
"description": "The scenario to turn into a poem.",
|
||||
"default": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Generate a short funny poem or limerick to explain the given event. Be creative and be funny. Let your imagination run wild.
|
||||
Event:{{$input}}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"description": "Summarizes the conversation.",
|
||||
"execution_settings": {
|
||||
"default": {
|
||||
"max_tokens": 4000,
|
||||
"temperature": 0.3
|
||||
}
|
||||
},
|
||||
"input_variables": [
|
||||
{
|
||||
"name": "input",
|
||||
"description": "The user's request.",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "history",
|
||||
"description": "The history of the conversation.",
|
||||
"default": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{{ConversationSummaryPlugin.SummarizeConversation $history}}
|
||||
User: {{$request}}
|
||||
Assistant:
|
||||
@@ -0,0 +1,36 @@
|
||||
The King of the Golden Mountain
|
||||
By the Grimm Brothers
|
||||
|
||||
There was once a merchant who had only one child, a son, that was very young, and barely able to run alone. He had two richly laden ships then making a voyage upon the seas, in which he had embarked all his wealth, in the hope of making great gains, when the news came that both were lost. Thus from being a rich man he became all at once so very poor that nothing was left to him but one small plot of land; and there he often went in an evening to take his walk, and ease his mind of a little of his trouble.
|
||||
|
||||
One day, as he was roaming along in a brown study, thinking with no great comfort on what he had been and what he now was, and was like to be, all on a sudden there stood before him a little, rough-looking, black dwarf. ’Prithee, friend, why so sorrowful?’ said he to the merchant; ’what is it you take so deeply to heart?’ ’If you would do me any good I would willingly tell you,’ said the merchant. ’Who knows but I may?’ said the little man: ’tell me what ails you, and perhaps you will find I may be of some use.’ Then the merchant told him how all his wealth was gone to the bottom of the sea, and how he had nothing left but that little plot of land. ’Oh, trouble not yourself about that,’ said the dwarf; ’only undertake to bring me here, twelve years hence, whatever meets you first on your going home, and I will give you as much as you please.’ The merchant thought this was no great thing to ask; that it would most likely be his dog or his cat, or something of that sort, but forgot his little boy Heinel; so he agreed to the bargain, and signed and sealed the bond to do what was asked of him.
|
||||
|
||||
But as he drew near home, his little boy was so glad to see him that he crept behind him, and laid fast hold of his legs, and looked up in his face and laughed. Then the father started, trembling with fear and horror, and saw what it was that he had bound himself to do; but as no gold was come, he made himself easy by thinking that it was only a joke that the dwarf was playing him, and that, at any rate, when the money came, he should see the bearer, and would not take it in.
|
||||
|
||||
About a month afterwards he went upstairs into a lumber-room to look for some old iron, that he might sell it and raise a little money; and there, instead of his iron, he saw a large pile of gold lying on the floor. At the sight of this he was overjoyed, and forgetting all about his son, went into trade again, and became a richer merchant than before.
|
||||
|
||||
Meantime little Heinel grew up, and as the end of the twelve years drew near the merchant began to call to mind his bond, and became very sad and thoughtful; so that care and sorrow were written upon his face. The boy one day asked what was the matter, but his father would not tell for some time; at last, however, he said that he had, without knowing it, sold him for gold to a little, ugly-looking, black dwarf, and that the twelve years were coming round when he must keep his word. Then Heinel said, ’Father, give yourself very little trouble about that; I shall be too much for the little man.’
|
||||
|
||||
When the time came, the father and son went out together to the place agreed upon: and the son drew a circle on the ground, and set himself and his father in the middle of it. The little black dwarf soon came, and walked round and round about the circle, but could not find any way to get into it, and he either could not, or dared not, jump over it. At last the boy said to him. ’Have you anything to say to us, my friend, or what do you want?’ Now Heinel had found a friend in a good fairy, that was fond of him, and had told him what to do; for this fairy knew what good luck was in store for him. ’Have you brought me what you said you would?’ said the dwarf to the merchant. The old man held his tongue, but Heinel said again, ’What do you want here?’ The dwarf said, ’I come to talk with your father, not with you.’ ’You have cheated and taken in my father,’ said the son; ’pray give him up his bond at once.’ ’Fair and softly,’ said the little old man; ’right is right; I have paid my money, and your father has had it, and spent it; so be so good as to let me have what I paid it for.’ ’You must have my consent to that first,’ said Heinel, ’so please to step in here, and let us talk it over.’ The old man grinned, and showed his teeth, as if he should have been very glad to get into the circle if he could. Then at last, after a long talk, they came to terms. Heinel agreed that his father must give him up, and that so far the dwarf should have his way: but, on the other hand, the fairy had told Heinel what fortune was in store for him, if he followed his own course; and he did not choose to be given up to his hump-backed friend, who seemed so anxious for his company.
|
||||
|
||||
So, to make a sort of drawn battle of the matter, it was settled that Heinel should be put into an open boat, that lay on the sea-shore hard by; that the father should push him off with his own hand, and that he should thus be set adrift, and left to the bad or good luck of wind and weather. Then he took leave of his father, and set himself in the boat, but before it got far off a wave struck it, and it fell with one side low in the water, so the merchant thought that poor Heinel was lost, and went home very sorrowful, while the dwarf went his way, thinking that at any rate he had had his revenge.
|
||||
|
||||
The boat, however, did not sink, for the good fairy took care of her friend, and soon raised the boat up again, and it went safely on. The young man sat safe within, till at length it ran ashore upon an unknown land. As he jumped upon the shore he saw before him a beautiful castle but empty and dreary within, for it was enchanted. ’Here,’ said he to himself, ’must I find the prize the good fairy told me of.’ So he once more searched the whole palace through, till at last he found a white snake, lying coiled up on a cushion in one of the chambers.
|
||||
|
||||
Now the white snake was an enchanted princess; and she was very glad to see him, and said, ’Are you at last come to set me free? Twelve long years have I waited here for the fairy to bring you hither as she promised, for you alone can save me. This night twelve men will come: their faces will be black, and they will be dressed in chain armour. They will ask what you do here, but give no answer; and let them do what they will–beat, whip, pinch, prick, or torment you–bear all; only speak not a word, and at twelve o’clock they must go away. The second night twelve others will come: and the third night twenty-four, who will even cut off your head; but at the twelfth hour of that night their power is gone, and I shall be free, and will come and bring you the Water of Life, and will wash you with it, and bring you back to life and health.’ And all came to pass as she had said; Heinel bore all, and spoke not a word; and the third night the princess came, and fell on his neck and kissed him. Joy and gladness burst forth throughout the castle, the wedding was celebrated, and he was crowned king of the Golden Mountain.
|
||||
|
||||
They lived together very happily, and the queen had a son. And thus eight years had passed over their heads, when the king thought of his father; and he began to long to see him once again. But the queen was against his going, and said, ’I know well that misfortunes will come upon us if you go.’ However, he gave her no rest till she agreed. At his going away she gave him a wishing-ring, and said, ’Take this ring, and put it on your finger; whatever you wish it will bring you; only promise never to make use of it to bring me hence to your father’s house.’ Then he said he would do what she asked, and put the ring on his finger, and wished himself near the town where his father lived.
|
||||
|
||||
Heinel found himself at the gates in a moment; but the guards would not let him go in, because he was so strangely clad. So he went up to a neighbouring hill, where a shepherd dwelt, and borrowed his old frock, and thus passed unknown into the town. When he came to his father’s house, he said he was his son; but the merchant would not believe him, and said he had had but one son, his poor Heinel, who he knew was long since dead: and as he was only dressed like a poor shepherd, he would not even give him anything to eat. The king, however, still vowed that he was his son, and said, ’Is there no mark by which you would know me if I am really your son?’ ’Yes,’ said his mother, ’our Heinel had a mark like a raspberry on his right arm.’ Then he showed them the mark, and they knew that what he had said was true.
|
||||
|
||||
He next told them how he was king of the Golden Mountain, and was married to a princess, and had a son seven years old. But the merchant said, ’that can never be true; he must be a fine king truly who travels about in a shepherd’s frock!’ At this the son was vexed; and forgetting his word, turned his ring, and wished for his queen and son. In an instant they stood before him; but the queen wept, and said he had broken his word, and bad luck would follow. He did all he could to soothe her, and she at last seemed to be appeased; but she was not so in truth, and was only thinking how she should punish him.
|
||||
|
||||
One day he took her to walk with him out of the town, and showed her the spot where the boat was set adrift upon the wide waters. Then he sat himself down, and said, ’I am very much tired; sit by me, I will rest my head in your lap, and sleep a while.’ As soon as he had fallen asleep, however, she drew the ring from his finger, and crept softly away, and wished herself and her son at home in their kingdom. And when he awoke he found himself alone, and saw that the ring was gone from his finger. ’I can never go back to my father’s house,’ said he; ’they would say I am a sorcerer: I will journey forth into the world, till I come again to my kingdom.’
|
||||
|
||||
So saying he set out and travelled till he came to a hill, where three giants were sharing their father’s goods; and as they saw him pass they cried out and said, ’Little men have sharp wits; he shall part the goods between us.’ Now there was a sword that cut off an enemy’s head whenever the wearer gave the words, ’Heads off!’; a cloak that made the owner invisible, or gave him any form he pleased; and a pair of boots that carried the wearer wherever he wished. Heinel said they must first let him try these wonderful things, then he might know how to set a value upon them. Then they gave him the cloak, and he wished himself a fly, and in a moment he was a fly. ’The cloak is very well,’ said he: ’now give me the sword.’ ’No,’ said they; ’not unless you undertake not to say, “Heads off!” for if you do we are all dead men.’ So they gave it him, charging him to try it on a tree. He next asked for the boots also; and the moment he had all three in his power, he wished himself at the Golden Mountain; and there he was at once. So the giants were left behind with no goods to share or quarrel about.
|
||||
|
||||
As Heinel came near his castle he heard the sound of merry music; and the people around told him that his queen was about to marry another husband. Then he threw his cloak around him, and passed through the castle hall, and placed himself by the side of the queen, where no one saw him. But when anything to eat was put upon her plate, he took it away and ate it himself; and when a glass of wine was handed to her, he took it and drank it; and thus, though they kept on giving her meat and drink, her plate and cup were always empty.
|
||||
|
||||
Upon this, fear and remorse came over her, and she went into her chamber alone, and sat there weeping; and he followed her there. ’Alas!’ said she to herself, ’was I not once set free? Why then does this enchantment still seem to bind me?’
|
||||
|
||||
’False and fickle one!’ said he. ’One indeed came who set thee free, and he is now near thee again; but how have you used him? Ought he to have had such treatment from thee?’ Then he went out and sent away the company, and said the wedding was at an end, for that he was come back to the kingdom. But the princes, peers, and great men mocked at him. However, he would enter into no parley with them, but only asked them if they would go in peace or not. Then they turned upon him and tried to seize him; but he drew his sword. ’Heads Off!’ cried he; and with the word the traitors’ heads fell before him, and Heinel was once more king of the Golden Mountain.
|
||||
@@ -0,0 +1,44 @@
|
||||
The Water of Life
|
||||
By the Grimm Brothers
|
||||
|
||||
Long before you or I were born, there reigned, in a country a great way off, a king who had three sons. This king once fell very ill–so ill that nobody thought he could live. His sons were very much grieved at their father’s sickness; and as they were walking together very mournfully in the garden of the palace, a little old man met them and asked what was the matter. They told him that their father was very ill, and that they were afraid nothing could save him. ’I know what would,’ said the little old man; ’it is the Water of Life. If he could have a draught of it he would be well again; but it is very hard to get.’ Then the eldest son said, ’I will soon find it’: and he went to the sick king, and begged that he might go in search of the Water of Life, as it was the only thing that could save him. ’No,’ said the king. ’I had rather die than place you in such great danger as you must meet with in your journey.’ But he begged so hard that the king let him go; and the prince thought to himself, ’If I bring my father this water, he will make me sole heir to his kingdom.’
|
||||
|
||||
Then he set out: and when he had gone on his way some time he came to a deep valley, overhung with rocks and woods; and as he looked around, he saw standing above him on one of the rocks a little ugly dwarf, with a sugarloaf cap and a scarlet cloak; and the dwarf called to him and said, ’Prince, whither so fast?’ ’What is that to thee, you ugly imp?’ said the prince haughtily, and rode on.
|
||||
|
||||
But the dwarf was enraged at his behaviour, and laid a fairy spell of ill-luck upon him; so that as he rode on the mountain pass became narrower and narrower, and at last the way was so straitened that he could not go to step forward: and when he thought to have turned his horse round and go back the way he came, he heard a loud laugh ringing round him, and found that the path was closed behind him, so that he was shut in all round. He next tried to get off his horse and make his way on foot, but again the laugh rang in his ears, and he found himself unable to move a step, and thus he was forced to abide spellbound.
|
||||
|
||||
Meantime the old king was lingering on in daily hope of his son’s return, till at last the second son said, ’Father, I will go in search of the Water of Life.’ For he thought to himself, ’My brother is surely dead, and the kingdom will fall to me if I find the water.’ The king was at first very unwilling to let him go, but at last yielded to his wish. So he set out and followed the same road which his brother had done, and met with the same elf, who stopped him at the same spot in the mountains, saying, as before, ’Prince, prince, whither so fast?’ ’Mind your own affairs, busybody!’ said the prince scornfully, and rode on.
|
||||
|
||||
But the dwarf put the same spell upon him as he put on his elder brother, and he, too, was at last obliged to take up his abode in the heart of the mountains. Thus it is with proud silly people, who think themselves above everyone else, and are too proud to ask or take advice.
|
||||
|
||||
When the second prince had thus been gone a long time, the youngest son said he would go and search for the Water of Life, and trusted he should soon be able to make his father well again. So he set out, and the dwarf met him too at the same spot in the valley, among the mountains, and said, ’Prince, whither so fast?’ And the prince said, ’I am going in search of the Water of Life, because my father is ill, and like to die: can you help me? Pray be kind, and aid me if you can!’ ’Do you know where it is to be found?’ asked the dwarf. ’No,’ said the prince, ’I do not. Pray tell me if you know.’ ’Then as you have spoken to me kindly, and are wise enough to seek for advice, I will tell you how and where to go. The water you seek springs from a well in an enchanted castle; and, that you may be able to reach it in safety, I will give you an iron wand and two little loaves of bread; strike the iron door of the castle three times with the wand, and it will open: two hungry lions will be lying down inside gaping for their prey, but if you throw them the bread they will let you pass; then hasten on to the well, and take some of the Water of Life before the clock strikes twelve; for if you tarry longer the door will shut upon you for ever.’
|
||||
|
||||
Then the prince thanked his little friend with the scarlet cloak for his friendly aid, and took the wand and the bread, and went travelling on and on, over sea and over land, till he came to his journey’s end, and found everything to be as the dwarf had told him. The door flew open at the third stroke of the wand, and when the lions were quieted he went on through the castle and came at length to a beautiful hall. Around it he saw several knights sitting in a trance; then he pulled off their rings and put them on his own fingers. In another room he saw on a table a sword and a loaf of bread, which he also took. Further on he came to a room where a beautiful young lady sat upon a couch; and she welcomed him joyfully, and said, if he would set her free from the spell that bound her, the kingdom should be his, if he would come back in a year and marry her. Then she told him that the well that held the Water of Life was in the palace gardens; and bade him make haste, and draw what he wanted before the clock struck twelve.
|
||||
|
||||
He walked on; and as he walked through beautiful gardens he came to a delightful shady spot in which stood a couch; and he thought to himself, as he felt tired, that he would rest himself for a while, and gaze on the lovely scenes around him. So he laid himself down, and sleep fell upon him unawares, so that he did not wake up till the clock was striking a quarter to twelve. Then he sprang from the couch dreadfully frightened, ran to the well, filled a cup that was standing by him full of water, and hastened to get away in time. Just as he was going out of the iron door it struck twelve, and the door fell so quickly upon him that it snapped off a piece of his heel.
|
||||
|
||||
When he found himself safe, he was overjoyed to think that he had got the Water of Life; and as he was going on his way homewards, he passed by the little dwarf, who, when he saw the sword and the loaf, said, ’You have made a noble prize; with the sword you can at a blow slay whole armies, and the bread will never fail you.’ Then the prince thought to himself, ’I cannot go home to my father without my brothers’; so he said, ’My dear friend, cannot you tell me where my two brothers are, who set out in search of the Water of Life before me, and never came back?’ ’I have shut them up by a charm between two mountains,’ said the dwarf, ’because they were proud and ill-behaved, and scorned to ask advice.’ The prince begged so hard for his brothers, that the dwarf at last set them free, though unwillingly, saying, ’Beware of them, for they have bad hearts.’ Their brother, however, was greatly rejoiced to see them, and told them all that had happened to him; how he had found the Water of Life, and had taken a cup full of it; and how he had set a beautiful princess free from a spell that bound her; and how she had engaged to wait a whole year, and then to marry him, and to give him the kingdom.
|
||||
|
||||
Then they all three rode on together, and on their way home came to a country that was laid waste by war and a dreadful famine, so that it was feared all must die for want. But the prince gave the king of the land the bread, and all his kingdom ate of it. And he lent the king the wonderful sword, and he slew the enemy’s army with it; and thus the kingdom was once more in peace and plenty. In the same manner he befriended two other countries through which they passed on their way.
|
||||
|
||||
When they came to the sea, they got into a ship and during their voyage the two eldest said to themselves, ’Our brother has got the water which we could not find, therefore our father will forsake us and give him the kingdom, which is our right’; so they were full of envy and revenge, and agreed together how they could ruin him. Then they waited till he was fast asleep, and poured the Water of Life out of the cup, and took it for themselves, giving him bitter sea-water instead.
|
||||
|
||||
When they came to their journey’s end, the youngest son brought his cup to the sick king, that he might drink and be healed. Scarcely, however, had he tasted the bitter sea-water when he became worse even than he was before; and then both the elder sons came in, and blamed the youngest for what they had done; and said that he wanted to poison their father, but that they had found the Water of Life, and had brought it with them. He no sooner began to drink of what they brought him, than he felt his sickness leave him, and was as strong and well as in his younger days. Then they went to their brother, and laughed at him, and said, ’Well, brother, you found the Water of Life, did you? You have had the trouble and we shall have the reward. Pray, with all your cleverness, why did not you manage to keep your eyes open? Next year one of us will take away your beautiful princess, if you do not take care. You had better say nothing about this to our father, for he does not believe a word you say; and if you tell tales, you shall lose your life into the bargain: but be quiet, and we will let you off.’
|
||||
|
||||
The old king was still very angry with his youngest son, and thought that he really meant to have taken away his life; so he called his court together, and asked what should be done, and all agreed that he ought to be put to death. The prince knew nothing of what was going on, till one day, when the king’s chief huntsmen went a-hunting with him, and they were alone in the wood together, the huntsman looked so sorrowful that the prince said, ’My friend, what is the matter with you?’ ’I cannot and dare not tell you,’ said he. But the prince begged very hard, and said, ’Only tell me what it is, and do not think I shall be angry, for I will forgive you.’ ’Alas!’ said the huntsman; ’the king has ordered me to shoot you.’ The prince started at this, and said, ’Let me live, and I will change dresses with you; you shall take my royal coat to show to my father, and do you give me your shabby one.’ ’With all my heart,’ said the huntsman; ’I am sure I shall be glad to save you, for I could not have shot you.’ Then he took the prince’s coat, and gave him the shabby one, and went away through the wood.
|
||||
|
||||
Some time after, three grand embassies came to the old king’s court, with rich gifts of gold and precious stones for his youngest son; now all these were sent from the three kings to whom he had lent his sword and loaf of bread, in order to rid them of their enemy and feed their people. This touched the old king’s heart, and he thought his son might still be guiltless, and said to his court, ’O that my son were still alive! how it grieves me that I had him killed!’ ’He is still alive,’ said the huntsman; ’and I am glad that I had pity on him, but let him go in peace, and brought home his royal coat.’ At this the king was overwhelmed with joy, and made it known throughout all his kingdom, that if his son would come back to his court he would forgive him.
|
||||
|
||||
Meanwhile the princess was eagerly waiting till her deliverer should come back; and had a road made leading up to her palace all of shining gold; and told her courtiers that whoever came on horseback, and rode straight up to the gate upon it, was her true lover; and that they must let him in: but whoever rode on one side of it, they must be sure was not the right one; and that they must send him away at once.
|
||||
|
||||
The time soon came, when the eldest brother thought that he would make haste to go to the princess, and say that he was the one who had set her free, and that he should have her for his wife, and the kingdom with her. As he came before the palace and saw the golden road, he stopped to look at it, and he thought to himself, ’It is a pity to ride upon this beautiful road’; so he turned aside and rode on the right-hand side of it. But when he came to the gate, the guards, who had seen the road he took, said to him, he could not be what he said he was, and must go about his business.
|
||||
|
||||
The second prince set out soon afterwards on the same errand; and when he came to the golden road, and his horse had set one foot upon it, he stopped to look at it, and thought it very beautiful, and said to himself, ’What a pity it is that anything should tread here!’ Then he too turned aside and rode on the left side of it. But when he came to the gate the guards said he was not the true prince, and that he too must go away about his business; and away he went.
|
||||
|
||||
Now when the full year was come round, the third brother left the forest in which he had lain hid for fear of his father’s anger, and set out in search of his betrothed bride. So he journeyed on, thinking of her all the way, and rode so quickly that he did not even see what the road was made of, but went with his horse straight over it; and as he came to the gate it flew open, and the princess welcomed him with joy, and said he was her deliverer, and should now be her husband and lord of the kingdom. When the first joy at their meeting was over, the princess told him she had heard of his father having forgiven him, and of his wish to have him home again: so, before his wedding with the princess, he went to visit his father, taking her with him. Then he told him everything; how his brothers had cheated and robbed him, and yet that he had borne all those wrongs for the love of his father. And the old king was very angry, and wanted to punish his wicked sons; but they made their escape, and got into a ship and sailed away over the wide sea, and where they went to nobody knew and nobody cared.
|
||||
|
||||
And now the old king gathered together his court, and asked all his kingdom to come and celebrate the wedding of his son and the princess. And young and old, noble and squire, gentle and simple, came at once on the summons; and among the rest came the friendly dwarf, with the sugarloaf hat, and a new scarlet cloak.
|
||||
|
||||
And the wedding was held, and the merry bells run.
|
||||
And all the good people they danced and they sung,
|
||||
And feasted and frolick’d I can’t tell how long.
|
||||
@@ -0,0 +1,28 @@
|
||||
The White Snake
|
||||
By the Grimm Brothers
|
||||
|
||||
A long time ago there lived a king who was famed for his wisdom through all the land. Nothing was hidden from him, and it seemed as if news of the most secret things was brought to him through the air. But he had a strange custom; every day after dinner, when the table was cleared, and no one else was present, a trusty servant had to bring him one more dish. It was covered, however, and even the servant did not know what was in it, neither did anyone know, for the king never took off the cover to eat of it until he was quite alone.
|
||||
|
||||
This had gone on for a long time, when one day the servant, who took away the dish, was overcome with such curiosity that he could not help carrying the dish into his room. When he had carefully locked the door, he lifted up the cover, and saw a white snake lying on the dish. But when he saw it he could not deny himself the pleasure of tasting it, so he cut of a little bit and put it into his mouth. No sooner had it touched his tongue than he heard a strange whispering of little voices outside his window. He went and listened, and then noticed that it was the sparrows who were chattering together, and telling one another of all kinds of things which they had seen in the fields and woods. Eating the snake had given him power of understanding the language of animals.
|
||||
|
||||
Now it so happened that on this very day the queen lost her most beautiful ring, and suspicion of having stolen it fell upon this trusty servant, who was allowed to go everywhere. The king ordered the man to be brought before him, and threatened with angry words that unless he could before the morrow point out the thief, he himself should be looked upon as guilty and executed. In vain he declared his innocence; he was dismissed with no better answer.
|
||||
|
||||
In his trouble and fear he went down into the courtyard and took thought how to help himself out of his trouble. Now some ducks were sitting together quietly by a brook and taking their rest; and, whilst they were making their feathers smooth with their bills, they were having a confidential conversation together. The servant stood by and listened. They were telling one another of all the places where they had been waddling about all the morning, and what good food they had found; and one said in a pitiful tone: ’Something lies heavy on my stomach; as I was eating in haste I swallowed a ring which lay under the queen’s window.’ The servant at once seized her by the neck, carried her to the kitchen, and said to the cook: ’Here is a fine duck; pray, kill her.’ ’Yes,’ said the cook, and weighed her in his hand; ’she has spared no trouble to fatten herself, and has been waiting to be roasted long enough.’ So he cut off her head, and as she was being dressed for the spit, the queen’s ring was found inside her.
|
||||
|
||||
The servant could now easily prove his innocence; and the king, to make amends for the wrong, allowed him to ask a favour, and promised him the best place in the court that he could wish for. The servant refused everything, and only asked for a horse and some money for travelling, as he had a mind to see the world and go about a little. When his request was granted he set out on his way, and one day came to a pond, where he saw three fishes caught in the reeds and gasping for water. Now, though it is said that fishes are dumb, he heard them lamenting that they must perish so miserably, and, as he had a kind heart, he got off his horse and put the three prisoners back into the water. They leapt with delight, put out their heads, and cried to him: ’We will remember you and repay you for saving us!’
|
||||
|
||||
He rode on, and after a while it seemed to him that he heard a voice in the sand at his feet. He listened, and heard an ant-king complain: ’Why cannot folks, with their clumsy beasts, keep off our bodies? That stupid horse, with his heavy hoofs, has been treading down my people without mercy!’ So he turned on to a side path and the ant-king cried out to him: ’We will remember you–one good turn deserves another!’
|
||||
|
||||
The path led him into a wood, and there he saw two old ravens standing by their nest, and throwing out their young ones. ’Out with you, you idle, good-for-nothing creatures!’ cried they; ’we cannot find food for you any longer; you are big enough, and can provide for yourselves.’ But the poor young ravens lay upon the ground, flapping their wings, and crying: ’Oh, what helpless chicks we are! We must shift for ourselves, and yet we cannot fly! What can we do, but lie here and starve?’ So the good young fellow alighted and killed his horse with his sword, and gave it to them for food. Then they came hopping up to it, satisfied their hunger, and cried: ’We will remember you–one good turn deserves another!’
|
||||
|
||||
And now he had to use his own legs, and when he had walked a long way, he came to a large city. There was a great noise and crowd in the streets, and a man rode up on horseback, crying aloud: ’The king’s daughter wants a husband; but whoever seeks her hand must perform a hard task, and if he does not succeed he will forfeit his life.’ Many had already made the attempt, but in vain; nevertheless when the youth saw the king’s daughter he was so overcome by her great beauty that he forgot all danger, went before the king, and declared himself a suitor.
|
||||
|
||||
So he was led out to the sea, and a gold ring was thrown into it, before his eyes; then the king ordered him to fetch this ring up from the bottom of the sea, and added: ’If you come up again without it you will be thrown in again and again until you perish amid the waves.’ All the people grieved for the handsome youth; then they went away, leaving him alone by the sea.
|
||||
|
||||
He stood on the shore and considered what he should do, when suddenly he saw three fishes come swimming towards him, and they were the very fishes whose lives he had saved. The one in the middle held a mussel in its mouth, which it laid on the shore at the youth’s feet, and when he had taken it up and opened it, there lay the gold ring in the shell. Full of joy he took it to the king and expected that he would grant him the promised reward.
|
||||
|
||||
But when the proud princess perceived that he was not her equal in birth, she scorned him, and required him first to perform another task. She went down into the garden and strewed with her own hands ten sacksful of millet-seed on the grass; then she said: ’Tomorrow morning before sunrise these must be picked up, and not a single grain be wanting.’
|
||||
|
||||
The youth sat down in the garden and considered how it might be possible to perform this task, but he could think of nothing, and there he sat sorrowfully awaiting the break of day, when he should be led to death. But as soon as the first rays of the sun shone into the garden he saw all the ten sacks standing side by side, quite full, and not a single grain was missing. The ant-king had come in the night with thousands and thousands of ants, and the grateful creatures had by great industry picked up all the millet-seed and gathered them into the sacks.
|
||||
|
||||
Presently the king’s daughter herself came down into the garden, and was amazed to see that the young man had done the task she had given him. But she could not yet conquer her proud heart, and said: ’Although he has performed both the tasks, he shall not be my husband until he had brought me an apple from the Tree of Life.’ The youth did not know where the Tree of Life stood, but he set out, and would have gone on for ever, as long as his legs would carry him, though he had no hope of finding it. After he had wandered through three kingdoms, he came one evening to a wood, and lay down under a tree to sleep. But he heard a rustling in the branches, and a golden apple fell into his hand. At the same time three ravens flew down to him, perched themselves upon his knee, and said: ’We are the three young ravens whom you saved from starving; when we had grown big, and heard that you were seeking the Golden Apple, we flew over the sea to the end of the world, where the Tree of Life stands, and have brought you the apple.’ The youth, full of joy, set out homewards, and took the Golden Apple to the king’s beautiful daughter, who had now no more excuses left to make. They cut the Apple of Life in two and ate it together; and then her heart became full of love for him, and they lived in undisturbed happiness to a great age.
|
||||
@@ -0,0 +1,744 @@
|
||||
UID,iso2,iso3,code3,Province_State,Country_Region,Lat,Long,Combined_Key,Population
|
||||
5601,BE,BEL,56,Antwerp,Belgium,51.2195,4.4024,"Antwerp, Belgium",1869730
|
||||
5602,BE,BEL,56,Brussels,Belgium,50.8503,4.3517,"Brussels, Belgium",1218255
|
||||
5603,BE,BEL,56,East Flanders,Belgium,51.0362,3.7373,"East Flanders, Belgium",1525255
|
||||
5604,BE,BEL,56,Flemish Brabant,Belgium,50.9167,4.5833,"Flemish Brabant, Belgium",1155843
|
||||
5605,BE,BEL,56,Hainaut,Belgium,50.5257,4.0621,"Hainaut, Belgium",1346840
|
||||
5606,BE,BEL,56,Liege,Belgium,50.4496,5.8492,"Liege, Belgium",1109800
|
||||
5607,BE,BEL,56,Limburg,Belgium,50.9739,5.342,"Limburg, Belgium",877370
|
||||
5608,BE,BEL,56,Luxembourg,Belgium,50.0547,5.4677,"Luxembourg, Belgium",286752
|
||||
5609,BE,BEL,56,Namur,Belgium,50.331,4.8221,"Namur, Belgium",495832
|
||||
5611,BE,BEL,56,Walloon Brabant,Belgium,50.4,4.35,"Walloon Brabant, Belgium",406019
|
||||
5612,BE,BEL,56,West Flanders,Belgium,51.0536,3.1458,"West Flanders, Belgium",1200945
|
||||
7601,BR,BRA,76,Acre,Brazil,-9.0238,-70.812,"Acre, Brazil",881935
|
||||
7602,BR,BRA,76,Alagoas,Brazil,-9.5713,-36.782,"Alagoas, Brazil",3337357
|
||||
7603,BR,BRA,76,Amapa,Brazil,0.902,-52.003,"Amapa, Brazil",845731
|
||||
7604,BR,BRA,76,Amazonas,Brazil,-3.4168,-65.8561,"Amazonas, Brazil",4144597
|
||||
7605,BR,BRA,76,Bahia,Brazil,-12.5797,-41.7007,"Bahia, Brazil",14873064
|
||||
7606,BR,BRA,76,Ceara,Brazil,-5.4984,-39.3206,"Ceara, Brazil",9132078
|
||||
7607,BR,BRA,76,Distrito Federal,Brazil,-15.7998,-47.8645,"Distrito Federal, Brazil",3015268
|
||||
7608,BR,BRA,76,Espirito Santo,Brazil,-19.1834,-40.3089,"Espirito Santo, Brazil",4018650
|
||||
7609,BR,BRA,76,Goias,Brazil,-15.827,-49.8362,"Goias, Brazil",7018354
|
||||
7610,BR,BRA,76,Maranhao,Brazil,-4.9609,-45.2744,"Maranhao, Brazil",7075181
|
||||
7611,BR,BRA,76,Mato Grosso,Brazil,-12.6819,-56.9211,"Mato Grosso, Brazil",3484466
|
||||
7612,BR,BRA,76,Mato Grosso do Sul,Brazil,-20.7722,-54.7852,"Mato Grosso do Sul, Brazil",2778986
|
||||
7613,BR,BRA,76,Minas Gerais,Brazil,-18.5122,-44.555,"Minas Gerais, Brazil",21168791
|
||||
7614,BR,BRA,76,Para,Brazil,-1.9981,-54.9306,"Para, Brazil",8602865
|
||||
7615,BR,BRA,76,Paraiba,Brazil,-7.24,-36.782,"Paraiba, Brazil",4018127
|
||||
7616,BR,BRA,76,Parana,Brazil,-25.2521,-52.0215,"Parana, Brazil",11433957
|
||||
7617,BR,BRA,76,Pernambuco,Brazil,-8.8137,-36.9541,"Pernambuco, Brazil",9557071
|
||||
7618,BR,BRA,76,Piaui,Brazil,-7.7183,-42.7289,"Piaui, Brazil",3273227
|
||||
7619,BR,BRA,76,Rio de Janeiro,Brazil,-22.9068,-43.1729,"Rio de Janeiro, Brazil",17264943
|
||||
7620,BR,BRA,76,Rio Grande do Norte,Brazil,-5.4026,-36.9541,"Rio Grande do Norte, Brazil",3506853
|
||||
7621,BR,BRA,76,Rio Grande do Sul,Brazil,-30.0346,-51.2177,"Rio Grande do Sul, Brazil",11377239
|
||||
7622,BR,BRA,76,Rondonia,Brazil,-11.5057,-63.5806,"Rondonia, Brazil",1777225
|
||||
7623,BR,BRA,76,Roraima,Brazil,-2.7376,-62.0751,"Roraima, Brazil",605761
|
||||
7624,BR,BRA,76,Santa Catarina,Brazil,-27.2423,-50.2189,"Santa Catarina, Brazil",7164788
|
||||
7625,BR,BRA,76,Sao Paulo,Brazil,-23.5505,-46.6333,"Sao Paulo, Brazil",45919049
|
||||
7626,BR,BRA,76,Sergipe,Brazil,-10.5741,-37.3857,"Sergipe, Brazil",2298696
|
||||
7627,BR,BRA,76,Tocantins,Brazil,-10.1753,-48.2982,"Tocantins, Brazil",1572866
|
||||
15201,CL,CHL,152,Antofagasta,Chile,-23.6509,-70.3975,"Antofagasta, Chile",607534
|
||||
15202,CL,CHL,152,Araucania,Chile,-38.9489,-72.3311,"Araucania, Chile",957224
|
||||
15203,CL,CHL,152,Arica y Parinacota,Chile,-18.594,-69.4785,"Arica y Parinacota, Chile",226068
|
||||
15204,CL,CHL,152,Atacama,Chile,-27.5661,-70.0503,"Atacama, Chile",288944
|
||||
15205,CL,CHL,152,Aysen,Chile,-45.9864,-73.7669,"Aysen, Chile",103158
|
||||
15206,CL,CHL,152,Biobio,Chile,-37.4464,-72.1416,"Biobio, Chile",1556805
|
||||
15207,CL,CHL,152,Coquimbo,Chile,-29.959,-71.3389,"Coquimbo, Chile",757586
|
||||
15208,CL,CHL,152,Los Lagos,Chile,-41.9198,-72.1416,"Los Lagos, Chile",828708
|
||||
15209,CL,CHL,152,Los Rios,Chile,-40.231,-72.3311,"Los Rios, Chile",384837
|
||||
15210,CL,CHL,152,Magallanes,Chile,-52.368,-70.9863,"Magallanes, Chile",166533
|
||||
15211,CL,CHL,152,Maule,Chile,-35.5183,-71.6885,"Maule, Chile",1044950
|
||||
15212,CL,CHL,152,Metropolitana,Chile,-33.4376,-70.6505,"Metropolitana, Chile",7112808
|
||||
15213,CL,CHL,152,Nuble,Chile,-36.7226,-71.7622,"Nuble, Chile",480609
|
||||
15214,CL,CHL,152,OHiggins,Chile,-34.5755,-71.0022,"OHiggins, Chile",914555
|
||||
15215,CL,CHL,152,Tarapaca,Chile,-19.9232,-69.5132,"Tarapaca, Chile",330558
|
||||
15216,CL,CHL,152,Valparaiso,Chile,-33.0472,-71.6127,"Valparaiso, Chile",1815902
|
||||
17001,CO,COL,170,Amazonas,Colombia,-1.4429,-71.5724,"Amazonas, Colombia",76589
|
||||
17002,CO,COL,170,Antioquia,Colombia,7.1986,-75.3412,"Antioquia, Colombia",6407102
|
||||
17003,CO,COL,170,Arauca,Colombia,7.0762,-70.7105,"Arauca, Colombia",262174
|
||||
17004,CO,COL,170,Atlantico,Colombia,10.6966,-74.8741,"Atlantico, Colombia",2535517
|
||||
17005,CO,COL,170,Bolivar,Colombia,8.6704,-74.03,"Bolivar, Colombia",2070110
|
||||
17006,CO,COL,170,Boyaca,Colombia,5.4545,-73.362,"Boyaca, Colombia",1217376
|
||||
17007,CO,COL,170,Caldas,Colombia,5.2983,-75.2479,"Caldas, Colombia",998255
|
||||
17008,CO,COL,170,Capital District,Colombia,4.711,-74.0721,"Capital District, Colombia",7412566
|
||||
17009,CO,COL,170,Caqueta,Colombia,0.8699,-73.8419,"Caqueta, Colombia",401489
|
||||
17010,CO,COL,170,Casanare,Colombia,5.7589,-71.5724,"Casanare, Colombia",420504
|
||||
17011,CO,COL,170,Cauca,Colombia,2.705,-76.826,"Cauca, Colombia",1464488
|
||||
17012,CO,COL,170,Cesar,Colombia,9.3373,-73.6536,"Cesar, Colombia",1200574
|
||||
17013,CO,COL,170,Choco,Colombia,5.2528,-76.826,"Choco, Colombia",534826
|
||||
17014,CO,COL,170,Cordoba,Colombia,8.0493,-75.574,"Cordoba, Colombia",1784783
|
||||
17015,CO,COL,170,Cundinamarca,Colombia,5.026,-74.03,"Cundinamarca, Colombia",2919060
|
||||
17016,CO,COL,170,Guainia,Colombia,2.5854,-68.5247,"Guainia, Colombia",48114
|
||||
17017,CO,COL,170,Guaviare,Colombia,1.0654,-73.2603,"Guaviare, Colombia",82767
|
||||
17018,CO,COL,170,Huila,Colombia,2.5359,-75.5277,"Huila, Colombia",1100386
|
||||
17019,CO,COL,170,La Guajira,Colombia,11.3548,-72.5205,"La Guajira, Colombia",880560
|
||||
17020,CO,COL,170,Magdalena,Colombia,10.4113,-74.4057,"Magdalena, Colombia",1341746
|
||||
17021,CO,COL,170,Meta,Colombia,3.272,-73.0877,"Meta, Colombia",1039722
|
||||
17022,CO,COL,170,Narino,Colombia,1.2892,-77.3579,"Narino, Colombia",1630592
|
||||
17023,CO,COL,170,Norte de Santander,Colombia,7.9463,-72.8988,"Norte de Santander, Colombia",1491689
|
||||
17024,CO,COL,170,Putumayo,Colombia,0.436,-75.5277,"Putumayo, Colombia",348182
|
||||
17025,CO,COL,170,Quindio,Colombia,4.461,-75.6674,"Quindio, Colombia",539904
|
||||
17026,CO,COL,170,Risaralda,Colombia,5.3158,-75.9928,"Risaralda, Colombia",943401
|
||||
17027,CO,COL,170,San Andres y Providencia,Colombia,12.5567,-81.7185,"San Andres y Providencia, Colombia",61280
|
||||
17028,CO,COL,170,Santander,Colombia,6.6437,-73.6536,"Santander, Colombia",2184837
|
||||
17029,CO,COL,170,Sucre,Colombia,8.814,-74.7233,"Sucre, Colombia",904863
|
||||
17030,CO,COL,170,Tolima,Colombia,4.0925,-75.1545,"Tolima, Colombia",1330187
|
||||
17031,CO,COL,170,Valle del Cauca,Colombia,3.8009,-76.6413,"Valle del Cauca, Colombia",4475886
|
||||
17032,CO,COL,170,Vaupes,Colombia,0.8554,-70.812,"Vaupes, Colombia",40797
|
||||
17033,CO,COL,170,Vichada,Colombia,4.4234,-69.2878,"Vichada, Colombia",107808
|
||||
234,FO,FRO,234,Faroe Islands,Denmark,61.8926,-6.9118,"Faroe Islands, Denmark",48865
|
||||
304,GL,GRL,304,Greenland,Denmark,71.7069,-42.6043,"Greenland, Denmark",56772
|
||||
254,GF,GUF,254,French Guiana,France,4,-53,"French Guiana, France",298682
|
||||
258,PF,PYF,258,French Polynesia,France,-17.6797,-149.4068,"French Polynesia, France",280904
|
||||
312,GP,GLP,312,Guadeloupe,France,16.265,-61.551,"Guadeloupe, France",400127
|
||||
474,MQ,MTQ,474,Martinique,France,14.6415,-61.0242,"Martinique, France",375265
|
||||
175,YT,MYT,175,Mayotte,France,-12.8275,45.166244,"Mayotte, France",272813
|
||||
540,NC,NCL,540,New Caledonia,France,-20.904305,165.618042,"New Caledonia, France",285491
|
||||
638,RE,REU,638,Reunion,France,-21.1151,55.5364,"Reunion, France",895308
|
||||
652,BL,BLM,652,Saint Barthelemy,France,17.9,-62.8333,"Saint Barthelemy, France",9885
|
||||
666,PM,SPM,666,Saint Pierre and Miquelon,France,46.8852,-56.3159,"Saint Pierre and Miquelon, France",5795
|
||||
663,MF,MAF,663,St Martin,France,18.0708,-63.0501,"St Martin, France",38659
|
||||
876,WF,WLF,876,Wallis and Futuna,France,-14.2938,-178.1165,"Wallis and Futuna, France",15289
|
||||
27601,DE,DEU,276,Baden-Wurttemberg,Germany,48.6616,9.3501,"Baden-Wurttemberg, Germany",11103043
|
||||
27602,DE,DEU,276,Bayern,Germany,48.7904,11.4979,"Bayern, Germany",13140183
|
||||
27603,DE,DEU,276,Berlin,Germany,52.52,13.405,"Berlin, Germany",3664088
|
||||
27604,DE,DEU,276,Brandenburg,Germany,52.4125,12.5316,"Brandenburg, Germany",2531071
|
||||
27605,DE,DEU,276,Bremen,Germany,53.0793,8.8017,"Bremen, Germany",680130
|
||||
27606,DE,DEU,276,Hamburg,Germany,53.5511,9.9937,"Hamburg, Germany",1852478
|
||||
27607,DE,DEU,276,Hessen,Germany,50.6521,9.1624,"Hessen, Germany",6293154
|
||||
27608,DE,DEU,276,Mecklenburg-Vorpommern,Germany,53.6127,12.4296,"Mecklenburg-Vorpommern, Germany",1610774
|
||||
27609,DE,DEU,276,Niedersachsen,Germany,52.6367,9.8451,"Niedersachsen, Germany",8003421
|
||||
27610,DE,DEU,276,Nordrhein-Westfalen,Germany,51.4332,7.6616,"Nordrhein-Westfalen, Germany",17925570
|
||||
27611,DE,DEU,276,Rheinland-Pfalz,Germany,50.1183,7.309,"Rheinland-Pfalz, Germany",4098391
|
||||
27612,DE,DEU,276,Saarland,Germany,49.3964,7.023,"Saarland, Germany",983991
|
||||
27613,DE,DEU,276,Sachsen,Germany,51.1045,13.2017,"Sachsen, Germany",4056941
|
||||
27614,DE,DEU,276,Sachsen-Anhalt,Germany,51.9503,11.6923,"Sachsen-Anhalt, Germany",2180684
|
||||
27615,DE,DEU,276,Schleswig-Holstein,Germany,54.2194,9.6961,"Schleswig-Holstein, Germany",2910875
|
||||
27616,DE,DEU,276,Thuringen,Germany,51.011,10.8453,"Thuringen, Germany",2120237
|
||||
35601,IN,IND,356,Andaman and Nicobar Islands,India,11.225999,92.968178,"Andaman and Nicobar Islands, India",417036
|
||||
35602,IN,IND,356,Andhra Pradesh,India,15.9129,79.74,"Andhra Pradesh, India",53903393
|
||||
35603,IN,IND,356,Arunachal Pradesh,India,27.768456,96.384277,"Arunachal Pradesh, India",1570458
|
||||
35604,IN,IND,356,Assam,India,26.357149,92.830441,"Assam, India",35607039
|
||||
35605,IN,IND,356,Bihar,India,25.679658,85.60484,"Bihar, India",124799926
|
||||
35606,IN,IND,356,Chandigarh,India,30.733839,76.768278,"Chandigarh, India",1158473
|
||||
35607,IN,IND,356,Chhattisgarh,India,21.264705,82.035366,"Chhattisgarh, India",29436231
|
||||
35608,IN,IND,356,Dadra and Nagar Haveli and Daman and Diu,India,20.194742,73.080901,"Dadra and Nagar Haveli and Daman and Diu, India",615724
|
||||
35609,IN,IND,356,Delhi,India,28.646519,77.10898,"Delhi, India",18710922
|
||||
35610,IN,IND,356,Goa,India,15.359682,74.057396,"Goa, India",1586250
|
||||
35611,IN,IND,356,Gujarat,India,22.694884,71.590923,"Gujarat, India",63872399
|
||||
35612,IN,IND,356,Haryana,India,29.20004,76.332824,"Haryana, India",28204692
|
||||
35613,IN,IND,356,Himachal Pradesh,India,31.927213,77.233081,"Himachal Pradesh, India",7451955
|
||||
35614,IN,IND,356,Jammu and Kashmir,India,33.75943,76.612638,"Jammu and Kashmir, India",13606320
|
||||
35615,IN,IND,356,Jharkhand,India,23.654536,85.557631,"Jharkhand, India",38593948
|
||||
35616,IN,IND,356,Karnataka,India,14.70518,76.166436,"Karnataka, India",67562686
|
||||
35617,IN,IND,356,Kerala,India,10.450898,76.405749,"Kerala, India",35699443
|
||||
35618,IN,IND,356,Ladakh,India,34.1526,77.5771,"Ladakh, India",274289
|
||||
35619,IN,IND,356,Madhya Pradesh,India,23.541513,78.289633,"Madhya Pradesh, India",85358965
|
||||
35620,IN,IND,356,Maharashtra,India,19.449759,76.108221,"Maharashtra, India",123144223
|
||||
35621,IN,IND,356,Manipur,India,24.738975,93.882541,"Manipur, India",3091545
|
||||
35622,IN,IND,356,Meghalaya,India,25.536934,91.278882,"Meghalaya, India",3366710
|
||||
35623,IN,IND,356,Mizoram,India,23.309381,92.83822,"Mizoram, India",1239244
|
||||
35624,IN,IND,356,Nagaland,India,26.06702,94.470302,"Nagaland, India",2249695
|
||||
35625,IN,IND,356,Odisha,India,20.505428,84.418059,"Odisha, India",46356334
|
||||
35626,IN,IND,356,Puducherry,India,11.882658,78.86498,"Puducherry, India",1413542
|
||||
35627,IN,IND,356,Punjab,India,30.841465,75.40879,"Punjab, India",30141373
|
||||
35628,IN,IND,356,Rajasthan,India,26.583423,73.847973,"Rajasthan, India",81032689
|
||||
35629,IN,IND,356,Sikkim,India,27.571671,88.472712,"Sikkim, India",690251
|
||||
35630,IN,IND,356,Tamil Nadu,India,11.006091,78.400624,"Tamil Nadu, India",77841267
|
||||
35631,IN,IND,356,Telangana,India,18.1124,79.0193,"Telangana, India",39362732
|
||||
35632,IN,IND,356,Tripura,India,23.746783,91.743565,"Tripura, India",4169794
|
||||
35633,IN,IND,356,Uttar Pradesh,India,26.925425,80.560982,"Uttar Pradesh, India",237882725
|
||||
35634,IN,IND,356,Uttarakhand,India,30.156447,79.197608,"Uttarakhand, India",11250858
|
||||
35635,IN,IND,356,West Bengal,India,23.814082,87.979803,"West Bengal, India",99609303
|
||||
35637,IN,IND,356,Lakshadweep,India,13.6999972,72.1833326,"Lakshadweep, India",64429
|
||||
38013,IT,ITA,380,Abruzzo,Italy,42.35122196,13.39843823,"Abruzzo, Italy",1311580
|
||||
38017,IT,ITA,380,Basilicata,Italy,40.63947052,15.80514834,"Basilicata, Italy",562869
|
||||
38018,IT,ITA,380,Calabria,Italy,38.90597598,16.59440194,"Calabria, Italy",1947131
|
||||
38015,IT,ITA,380,Campania,Italy,40.83956555,14.25084984,"Campania, Italy",5801692
|
||||
38008,IT,ITA,380,Emilia-Romagna,Italy,44.49436681,11.3417208,"Emilia-Romagna, Italy",4459477
|
||||
38006,IT,ITA,380,Friuli Venezia Giulia,Italy,45.6494354,13.76813649,"Friuli Venezia Giulia, Italy",1215220
|
||||
38012,IT,ITA,380,Lazio,Italy,41.89277044,12.48366722,"Lazio, Italy",5879082
|
||||
38007,IT,ITA,380,Liguria,Italy,44.41149315,8.9326992,"Liguria, Italy",1550640
|
||||
38003,IT,ITA,380,Lombardia,Italy,45.46679409,9.190347404,"Lombardia, Italy",10060574
|
||||
38011,IT,ITA,380,Marche,Italy,43.61675973,13.5188753,"Marche, Italy",1525271
|
||||
38014,IT,ITA,380,Molise,Italy,41.55774754,14.65916051,"Molise, Italy",305617
|
||||
38041,IT,ITA,380,P.A. Bolzano,Italy,46.49933453,11.35662422,"P.A. Bolzano, Italy",532318
|
||||
38042,IT,ITA,380,P.A. Trento,Italy,46.06893511,11.12123097,"P.A. Trento, Italy",541418
|
||||
38001,IT,ITA,380,Piemonte,Italy,45.0732745,7.680687483,"Piemonte, Italy",4356406
|
||||
38016,IT,ITA,380,Puglia,Italy,41.12559576,16.86736689,"Puglia, Italy",4029053
|
||||
38020,IT,ITA,380,Sardegna,Italy,39.21531192,9.110616306,"Sardegna, Italy",1639591
|
||||
38019,IT,ITA,380,Sicilia,Italy,38.11569725,13.3623567,"Sicilia, Italy",4999891
|
||||
38009,IT,ITA,380,Toscana,Italy,43.76923077,11.25588885,"Toscana, Italy",3729641
|
||||
38010,IT,ITA,380,Umbria,Italy,43.10675841,12.38824698,"Umbria, Italy",882015
|
||||
38002,IT,ITA,380,Valle d'Aosta,Italy,45.73750286,7.320149366,"Valle d'Aosta, Italy",125666
|
||||
38005,IT,ITA,380,Veneto,Italy,45.43490485,12.33845213,"Veneto, Italy",4905854
|
||||
39201,JP,JPN,392,Aichi,Japan,35.035551,137.211621,"Aichi, Japan",7552239
|
||||
39202,JP,JPN,392,Akita,Japan,39.748679,140.408228,"Akita, Japan",966490
|
||||
39203,JP,JPN,392,Aomori,Japan,40.781541,140.828896,"Aomori, Japan",1246371
|
||||
39204,JP,JPN,392,Chiba,Japan,35.510141,140.198917,"Chiba, Japan",6259382
|
||||
39205,JP,JPN,392,Ehime,Japan,33.624835,132.856842,"Ehime, Japan",1339215
|
||||
39206,JP,JPN,392,Fukui,Japan,35.846614,136.224654,"Fukui, Japan",767937
|
||||
39207,JP,JPN,392,Fukuoka,Japan,33.526032,130.666949,"Fukuoka, Japan",5103679
|
||||
39208,JP,JPN,392,Fukushima,Japan,37.378867,140.223295,"Fukushima, Japan",1845519
|
||||
39209,JP,JPN,392,Gifu,Japan,35.778671,137.055925,"Gifu, Japan",1986587
|
||||
39210,JP,JPN,392,Gunma,Japan,36.504479,138.985605,"Gunma, Japan",1942456
|
||||
39211,JP,JPN,392,Hiroshima,Japan,34.605309,132.788719,"Hiroshima, Japan",2804177
|
||||
39212,JP,JPN,392,Hokkaido,Japan,43.385711,142.552318,"Hokkaido, Japan",5250049
|
||||
39213,JP,JPN,392,Hyogo,Japan,35.039913,134.828057,"Hyogo, Japan",5466190
|
||||
39214,JP,JPN,392,Ibaraki,Japan,36.303588,140.319591,"Ibaraki, Japan",2860307
|
||||
39215,JP,JPN,392,Ishikawa,Japan,36.769464,136.771027,"Ishikawa, Japan",1137649
|
||||
39216,JP,JPN,392,Iwate,Japan,39.593287,141.361777,"Iwate, Japan",1226816
|
||||
39217,JP,JPN,392,Kagawa,Japan,34.217292,133.969047,"Kagawa, Japan",956347
|
||||
39218,JP,JPN,392,Kagoshima,Japan,31.009484,130.430665,"Kagoshima, Japan",1602273
|
||||
39219,JP,JPN,392,Kanagawa,Japan,35.415312,139.338983,"Kanagawa, Japan",9198268
|
||||
39220,JP,JPN,392,Kochi,Japan,33.422519,133.367307,"Kochi, Japan",698029
|
||||
39221,JP,JPN,392,Kumamoto,Japan,32.608154,130.745231,"Kumamoto, Japan",1747567
|
||||
39222,JP,JPN,392,Kyoto,Japan,35.253815,135.443341,"Kyoto, Japan",2582957
|
||||
39223,JP,JPN,392,Mie,Japan,34.508018,136.376013,"Mie, Japan",1780882
|
||||
39224,JP,JPN,392,Miyagi,Japan,38.446859,140.927086,"Miyagi, Japan",2306365
|
||||
39225,JP,JPN,392,Miyazaki,Japan,32.193204,131.299374,"Miyazaki, Japan",1073301
|
||||
39226,JP,JPN,392,Nagano,Japan,36.132134,138.045528,"Nagano, Japan",2048790
|
||||
39227,JP,JPN,392,Nagasaki,Japan,33.235712,129.608033,"Nagasaki, Japan",1326524
|
||||
39228,JP,JPN,392,Nara,Japan,34.317451,135.871644,"Nara, Japan",1330123
|
||||
39229,JP,JPN,392,Niigata,Japan,37.521819,138.918647,"Niigata, Japan",2223106
|
||||
39230,JP,JPN,392,Oita,Japan,33.200697,131.43324,"Oita, Japan",1135434
|
||||
39231,JP,JPN,392,Okayama,Japan,34.89246,133.826252,"Okayama, Japan",1889586
|
||||
39232,JP,JPN,392,Okinawa,Japan,25.768923,126.668016,"Okinawa, Japan",1453168
|
||||
39233,JP,JPN,392,Osaka,Japan,34.620965,135.507481,"Osaka, Japan",8809363
|
||||
39234,JP,JPN,392,Saga,Japan,33.286977,130.115738,"Saga, Japan",814711
|
||||
39235,JP,JPN,392,Saitama,Japan,35.997101,139.347635,"Saitama, Japan",7349693
|
||||
39236,JP,JPN,392,Shiga,Japan,35.215827,136.138064,"Shiga, Japan",1413943
|
||||
39237,JP,JPN,392,Shimane,Japan,35.07076,132.554064,"Shimane, Japan",674346
|
||||
39238,JP,JPN,392,Shizuoka,Japan,34.916975,138.407784,"Shizuoka, Japan",3643528
|
||||
39239,JP,JPN,392,Tochigi,Japan,36.689912,139.819213,"Tochigi, Japan",1933990
|
||||
39240,JP,JPN,392,Tokushima,Japan,33.919178,134.242091,"Tokushima, Japan",727977
|
||||
39241,JP,JPN,392,Tokyo,Japan,35.711343,139.446921,"Tokyo, Japan",13920663
|
||||
39242,JP,JPN,392,Tottori,Japan,35.359069,133.863619,"Tottori, Japan",555558
|
||||
39243,JP,JPN,392,Toyama,Japan,36.637464,137.269346,"Toyama, Japan",1043502
|
||||
39244,JP,JPN,392,Wakayama,Japan,33.911879,135.505446,"Wakayama, Japan",924933
|
||||
39245,JP,JPN,392,Yamagata,Japan,38.448396,140.102154,"Yamagata, Japan",1077666
|
||||
39246,JP,JPN,392,Yamaguchi,Japan,34.20119,131.573293,"Yamaguchi, Japan",1358336
|
||||
39247,JP,JPN,392,Yamanashi,Japan,35.612364,138.611489,"Yamanashi, Japan",810956
|
||||
45801,MY,MYS,458,Johor,Malaysia,1.4854,103.7618,"Johor, Malaysia",3768200
|
||||
45802,MY,MYS,458,Kedah,Malaysia,6.1184,100.3685,"Kedah, Malaysia",2185900
|
||||
45803,MY,MYS,458,Kelantan,Malaysia,6.1254,102.2381,"Kelantan, Malaysia",1892200
|
||||
45804,MY,MYS,458,Melaka,Malaysia,2.1896,102.2501,"Melaka, Malaysia",932700
|
||||
45805,MY,MYS,458,Negeri Sembilan,Malaysia,2.7258,101.9424,"Negeri Sembilan, Malaysia",1132100
|
||||
45806,MY,MYS,458,Pahang,Malaysia,3.8126,103.3256,"Pahang, Malaysia",1677100
|
||||
45807,MY,MYS,458,Perak,Malaysia,4.5921,101.0901,"Perak, Malaysia",2514300
|
||||
45808,MY,MYS,458,Perlis,Malaysia,6.4449,100.2048,"Perlis, Malaysia",254600
|
||||
45809,MY,MYS,458,Pulau Pinang,Malaysia,5.4141,100.3288,"Pulau Pinang, Malaysia",1777600
|
||||
45810,MY,MYS,458,Sabah,Malaysia,5.9788,116.0753,"Sabah, Malaysia",3904700
|
||||
45811,MY,MYS,458,Sarawak,Malaysia,1.5533,110.3592,"Sarawak, Malaysia",2818100
|
||||
45812,MY,MYS,458,Selangor,Malaysia,3.0738,101.5183,"Selangor, Malaysia",6541900
|
||||
45813,MY,MYS,458,Terengganu,Malaysia,5.3117,103.1324,"Terengganu, Malaysia",1250100
|
||||
45814,MY,MYS,458,W.P. Kuala Lumpur,Malaysia,3.139,101.6869,"W.P. Kuala Lumpur, Malaysia",1778400
|
||||
45815,MY,MYS,458,W.P. Labuan,Malaysia,5.2831,115.2308,"W.P. Labuan, Malaysia",99400
|
||||
45816,MY,MYS,458,W.P. Putrajaya,Malaysia,2.9264,101.6964,"W.P. Putrajaya, Malaysia",105400
|
||||
48401,MX,MEX,484,Aguascalientes,Mexico,21.8853,-102.2916,"Aguascalientes, Mexico",1434635
|
||||
48402,MX,MEX,484,Baja California,Mexico,30.8406,-115.2838,"Baja California, Mexico",3634868
|
||||
48403,MX,MEX,484,Baja California Sur,Mexico,26.0444,-111.6661,"Baja California Sur, Mexico",804708
|
||||
48404,MX,MEX,484,Campeche,Mexico,19.8301,-90.5349,"Campeche, Mexico",1000617
|
||||
48405,MX,MEX,484,Chiapas,Mexico,16.7569,-93.1292,"Chiapas, Mexico",5730367
|
||||
48406,MX,MEX,484,Chihuahua,Mexico,28.633,-106.0691,"Chihuahua, Mexico",3801487
|
||||
48407,MX,MEX,484,Ciudad de Mexico,Mexico,19.4326,-99.1332,"Ciudad de Mexico, Mexico",9018645
|
||||
48408,MX,MEX,484,Coahuila,Mexico,27.0587,-101.7068,"Coahuila, Mexico",3218720
|
||||
48409,MX,MEX,484,Colima,Mexico,19.1223,-104.0072,"Colima, Mexico",785153
|
||||
48410,MX,MEX,484,Durango,Mexico,24.5593,-104.6588,"Durango, Mexico",1868996
|
||||
48411,MX,MEX,484,Guanajuato,Mexico,21.019,-101.2574,"Guanajuato, Mexico",6228175
|
||||
48412,MX,MEX,484,Guerrero,Mexico,17.4392,-99.5451,"Guerrero, Mexico",3657048
|
||||
48413,MX,MEX,484,Hidalgo,Mexico,20.0911,-98.7624,"Hidalgo, Mexico",3086414
|
||||
48414,MX,MEX,484,Jalisco,Mexico,20.6595,-103.3494,"Jalisco, Mexico",8409693
|
||||
48415,MX,MEX,484,Mexico,Mexico,19.4969,-99.7233,"Mexico, Mexico",17427790
|
||||
48416,MX,MEX,484,Michoacan,Mexico,19.5665,-101.7068,"Michoacan, Mexico",4825401
|
||||
48417,MX,MEX,484,Morelos,Mexico,18.6813,-99.1013,"Morelos, Mexico",2044058
|
||||
48418,MX,MEX,484,Nayarit,Mexico,21.7514,-104.8455,"Nayarit, Mexico",1288571
|
||||
48419,MX,MEX,484,Nuevo Leon,Mexico,25.5922,-99.9962,"Nuevo Leon, Mexico",5610153
|
||||
48420,MX,MEX,484,Oaxaca,Mexico,17.0732,-96.7266,"Oaxaca, Mexico",4143593
|
||||
48421,MX,MEX,484,Puebla,Mexico,19.0414,-98.2063,"Puebla, Mexico",6604451
|
||||
48422,MX,MEX,484,Queretaro,Mexico,20.5888,-100.3899,"Queretaro, Mexico",2279637
|
||||
48423,MX,MEX,484,Quintana Roo,Mexico,19.1817,-88.4791,"Quintana Roo, Mexico",1723259
|
||||
48424,MX,MEX,484,San Luis Potosi,Mexico,22.1565,-100.9855,"San Luis Potosi, Mexico",2866142
|
||||
48425,MX,MEX,484,Sinaloa,Mexico,25.1721,-107.4795,"Sinaloa, Mexico",3156674
|
||||
48426,MX,MEX,484,Sonora,Mexico,29.2972,-110.3309,"Sonora, Mexico",3074745
|
||||
48427,MX,MEX,484,Tabasco,Mexico,17.8409,-92.6189,"Tabasco, Mexico",2572287
|
||||
48428,MX,MEX,484,Tamaulipas,Mexico,24.2669,-98.8363,"Tamaulipas, Mexico",3650602
|
||||
48429,MX,MEX,484,Tlaxcala,Mexico,19.3139,-98.2404,"Tlaxcala, Mexico",1380011
|
||||
48430,MX,MEX,484,Veracruz,Mexico,19.1738,-96.1342,"Veracruz, Mexico",8539862
|
||||
48431,MX,MEX,484,Yucatan,Mexico,20.7099,-89.0943,"Yucatan, Mexico",2259098
|
||||
48432,MX,MEX,484,Zacatecas,Mexico,22.7709,-102.5832,"Zacatecas, Mexico",1666426
|
||||
49801,MD,MDA,498,Anenii Noi,Moldova,46.8833,29.2167,"Anenii Noi, Moldova",81710
|
||||
49802,MD,MDA,498,Balti,Moldova,47.754,27.9184,"Balti, Moldova",127561
|
||||
49803,MD,MDA,498,Basarabeasca,Moldova,46.3333,28.9667,"Basarabeasca, Moldova",28978
|
||||
49804,MD,MDA,498,Bender,Moldova,46.8228,29.462,"Bender, Moldova",91197
|
||||
49805,MD,MDA,498,Briceni,Moldova,48.36,27.0858,"Briceni, Moldova",78027
|
||||
49806,MD,MDA,498,Cahul,Moldova,45.9167,28.1833,"Cahul, Moldova",119231
|
||||
49807,MD,MDA,498,Calarasi,Moldova,47.25,28.3,"Calarasi, Moldova",75075
|
||||
49808,MD,MDA,498,Camenca,Moldova,48.0319,28.6978,"Camenca, Moldova",8871
|
||||
49809,MD,MDA,498,Cantemir,Moldova,46.2854,28.1979,"Cantemir, Moldova",60001
|
||||
49810,MD,MDA,498,Causeni,Moldova,46.6333,29.4,"Causeni, Moldova",90612
|
||||
49811,MD,MDA,498,Ceadir-Lunga,Moldova,46.057,28.826,"Ceadir-Lunga, Moldova",16605
|
||||
49812,MD,MDA,498,Chisinau,Moldova,47.0105,28.8638,"Chisinau, Moldova",712218
|
||||
49813,MD,MDA,498,Cimislia,Moldova,46.5289,28.7838,"Cimislia, Moldova",60925
|
||||
49814,MD,MDA,498,Comrat,Moldova,46.2956,28.6549,"Comrat, Moldova",72254
|
||||
49815,MD,MDA,498,Criuleni,Moldova,47.212,29.1617,"Criuleni, Moldova",46442
|
||||
49816,MD,MDA,498,Donduseni,Moldova,48.2372,27.6104,"Donduseni, Moldova",87092
|
||||
49817,MD,MDA,498,Drochia,Moldova,48.0333,27.75,"Drochia, Moldova",43015
|
||||
49818,MD,MDA,498,Dubasari,Moldova,47.267,29.167,"Dubasari, Moldova",28500
|
||||
49819,MD,MDA,498,Edinet,Moldova,48.1667,27.3167,"Edinet, Moldova",90320
|
||||
49820,MD,MDA,498,Falesti,Moldova,47.5,27.72,"Falesti, Moldova",89389
|
||||
49821,MD,MDA,498,Floresti,Moldova,47.8933,28.3014,"Floresti, Moldova",155646
|
||||
49822,MD,MDA,498,Glodeni,Moldova,47.7667,27.5167,"Glodeni, Moldova",119762
|
||||
49823,MD,MDA,498,Grigoriopol,Moldova,47.1536,29.2964,"Grigoriopol, Moldova",9381
|
||||
49824,MD,MDA,498,Hincesti,Moldova,46.8167,28.5833,"Hincesti, Moldova",97704
|
||||
49825,MD,MDA,498,Ialoveni,Moldova,46.9439,28.7772,"Ialoveni, Moldova",51056
|
||||
49826,MD,MDA,498,Leova,Moldova,46.4806,28.2644,"Leova, Moldova",64924
|
||||
49827,MD,MDA,498,Nisporeni,Moldova,47.0833,28.1833,"Nisporeni, Moldova",56510
|
||||
49828,MD,MDA,498,Ocnita,Moldova,48.4061,27.4859,"Ocnita, Moldova",116271
|
||||
49829,MD,MDA,498,Orhei,Moldova,47.3735,28.822,"Orhei, Moldova",48105
|
||||
49830,MD,MDA,498,Rezina,Moldova,47.7333,28.95,"Rezina, Moldova",69454
|
||||
49831,MD,MDA,498,Ribnita,Moldova,47.7667,29,"Ribnita, Moldova",47949
|
||||
49832,MD,MDA,498,Riscani,Moldova,47.9679,27.5565,"Riscani, Moldova",87153
|
||||
49833,MD,MDA,498,Singerei,Moldova,47.6333,28.15,"Singerei, Moldova",42227
|
||||
49834,MD,MDA,498,Slobozia,Moldova,46.7333,29.7,"Slobozia, Moldova",14618
|
||||
49835,MD,MDA,498,Soldanesti,Moldova,47.8167,28.8,"Soldanesti, Moldova",94986
|
||||
49836,MD,MDA,498,Soroca,Moldova,48.1618,28.3011,"Soroca, Moldova",70594
|
||||
49837,MD,MDA,498,Stefan Voda,Moldova,46.5153,29.5297,"Stefan Voda, Moldova",88900
|
||||
49838,MD,MDA,498,Straseni,Moldova,47.1333,28.6167,"Straseni, Moldova",43154
|
||||
49839,MD,MDA,498,Taraclia,Moldova,45.9,28.6667,"Taraclia, Moldova",70126
|
||||
49840,MD,MDA,498,Telenesti,Moldova,47.5032,28.3535,"Telenesti, Moldova",383806
|
||||
49841,MD,MDA,498,Tiraspol,Moldova,46.85,29.6333,"Tiraspol, Moldova",133807
|
||||
49842,MD,MDA,498,Transnistria,Moldova,47.2153,29.463,"Transnistria, Moldova",110545
|
||||
49843,MD,MDA,498,Ungheni,Moldova,47.2077,27.8073,"Ungheni, Moldova",30804
|
||||
49844,MD,MDA,498,Vulcanesti,Moldova,45.6833,28.4042,"Vulcanesti, Moldova",12185
|
||||
52801,NL,NLD,528,Drenthe,Netherlands,52.862485,6.618435,"Drenthe, Netherlands",493682
|
||||
52802,NL,NLD,528,Flevoland,Netherlands,52.550383,5.515162,"Flevoland, Netherlands",423021
|
||||
52803,NL,NLD,528,Friesland,Netherlands,53.087337,5.7925,"Friesland, Netherlands",649957
|
||||
52804,NL,NLD,528,Gelderland,Netherlands,52.061738,5.939114,"Gelderland, Netherlands",2085952
|
||||
52805,NL,NLD,528,Groningen,Netherlands,53.217922,6.741514,"Groningen, Netherlands",585866
|
||||
52806,NL,NLD,528,Limburg,Netherlands,51.209227,5.93387,"Limburg, Netherlands",1117201
|
||||
52807,NL,NLD,528,Noord-Brabant,Netherlands,51.561174,5.184942,"Noord-Brabant, Netherlands",2562955
|
||||
52808,NL,NLD,528,Noord-Holland,Netherlands,52.600906,4.918688,"Noord-Holland, Netherlands",2879527
|
||||
52809,NL,NLD,528,Overijssel,Netherlands,52.444558,6.441722,"Overijssel, Netherlands",1162406
|
||||
52810,NL,NLD,528,Utrecht,Netherlands,52.084251,5.163824,"Utrecht, Netherlands",1354834
|
||||
52811,NL,NLD,528,Zeeland,Netherlands,51.47936,3.861559,"Zeeland, Netherlands",383488
|
||||
52812,NL,NLD,528,Zuid-Holland,Netherlands,51.937835,4.462114,"Zuid-Holland, Netherlands",3708696
|
||||
533,AW,ABW,533,Aruba,Netherlands,12.5211,-69.9683,"Aruba, Netherlands",106766
|
||||
531,CW,CUW,531,Curacao,Netherlands,12.1696,-68.99,"Curacao, Netherlands",164100
|
||||
534,SX,SXM,534,Sint Maarten,Netherlands,18.0425,-63.0548,"Sint Maarten, Netherlands",42882
|
||||
535,BQ,BES,535,"Bonaire, Sint Eustatius and Saba",Netherlands,12.1784,-68.2385,"Bonaire, Sint Eustatius and Saba, Netherlands",26221
|
||||
184,CK,COK,184,Cook Islands,New Zealand,-21.2367,-159.7777,"Cook Islands, New Zealand",17459
|
||||
570,NU,NIU,570,Niue,New Zealand,-19.0544,-169.8672,"Niue, New Zealand",1650
|
||||
56601,NG,NGA,566,Abia,Nigeria,5.4527,7.5248,"Abia, Nigeria",3727347
|
||||
56602,NG,NGA,566,Adamawa,Nigeria,9.3265,12.3984,"Adamawa, Nigeria",4248436
|
||||
56603,NG,NGA,566,Akwa Ibom,Nigeria,4.9057,7.8537,"Akwa Ibom, Nigeria",5482177
|
||||
56604,NG,NGA,566,Anambra,Nigeria,6.2209,6.937,"Anambra, Nigeria",5527809
|
||||
56605,NG,NGA,566,Bauchi,Nigeria,10.7761,9.9992,"Bauchi, Nigeria",6537314
|
||||
56606,NG,NGA,566,Bayelsa,Nigeria,4.7719,6.0699,"Bayelsa, Nigeria",2277961
|
||||
56607,NG,NGA,566,Benue,Nigeria,7.3369,8.7404,"Benue, Nigeria",5741815
|
||||
56608,NG,NGA,566,Borno,Nigeria,11.8846,13.152,"Borno, Nigeria",5860183
|
||||
56609,NG,NGA,566,Cross River,Nigeria,5.8702,8.5988,"Cross River, Nigeria",3866269
|
||||
56610,NG,NGA,566,Delta,Nigeria,5.704,5.9339,"Delta, Nigeria",5663362
|
||||
56611,NG,NGA,566,Ebonyi,Nigeria,6.2649,8.0137,"Ebonyi, Nigeria",2880383
|
||||
56612,NG,NGA,566,Edo,Nigeria,6.6342,5.9304,"Edo, Nigeria",4235595
|
||||
56613,NG,NGA,566,Ekiti,Nigeria,7.719,5.311,"Ekiti, Nigeria",3270798
|
||||
56614,NG,NGA,566,Enugu,Nigeria,6.5364,7.4356,"Enugu, Nigeria",4411119
|
||||
56615,NG,NGA,566,Federal Capital Territory,Nigeria,8.8941,7.186,"Federal Capital Territory, Nigeria",3564126
|
||||
56616,NG,NGA,566,Gombe,Nigeria,10.3638,11.1928,"Gombe, Nigeria",3256962
|
||||
56617,NG,NGA,566,Imo,Nigeria,5.572,7.0588,"Imo, Nigeria",5408756
|
||||
56618,NG,NGA,566,Jigawa,Nigeria,12.228,9.5616,"Jigawa, Nigeria",5828163
|
||||
56619,NG,NGA,566,Kaduna,Nigeria,10.3764,7.7095,"Kaduna, Nigeria",8252366
|
||||
56620,NG,NGA,566,Kano,Nigeria,11.7471,8.5247,"Kano, Nigeria",13076892
|
||||
56621,NG,NGA,566,Katsina,Nigeria,12.3797,7.6306,"Katsina, Nigeria",7831319
|
||||
56622,NG,NGA,566,Kebbi,Nigeria,11.4942,4.2333,"Kebbi, Nigeria",4440050
|
||||
56623,NG,NGA,566,Kogi,Nigeria,7.7337,6.6906,"Kogi, Nigeria",4473490
|
||||
56624,NG,NGA,566,Kwara,Nigeria,8.9669,4.3874,"Kwara, Nigeria",3192893
|
||||
56625,NG,NGA,566,Lagos,Nigeria,6.5236,3.6006,"Lagos, Nigeria",12550598
|
||||
56626,NG,NGA,566,Nasarawa,Nigeria,8.4998,8.1997,"Nasarawa, Nigeria",2523395
|
||||
56627,NG,NGA,566,Niger,Nigeria,9.9309,5.5983,"Niger, Nigeria",5556247
|
||||
56628,NG,NGA,566,Ogun,Nigeria,6.998,3.4737,"Ogun, Nigeria",5217716
|
||||
56629,NG,NGA,566,Ondo,Nigeria,6.9149,5.1478,"Ondo, Nigeria",4671695
|
||||
56630,NG,NGA,566,Osun,Nigeria,7.5629,4.52,"Osun, Nigeria",4705589
|
||||
56631,NG,NGA,566,Oyo,Nigeria,8.1574,3.6147,"Oyo, Nigeria",7840864
|
||||
56632,NG,NGA,566,Plateau,Nigeria,9.2182,9.5179,"Plateau, Nigeria",4200442
|
||||
56633,NG,NGA,566,Rivers,Nigeria,4.8396,6.9112,"Rivers, Nigeria",7303924
|
||||
56634,NG,NGA,566,Sokoto,Nigeria,13.0533,5.3223,"Sokoto, Nigeria",4998090
|
||||
56635,NG,NGA,566,Taraba,Nigeria,7.9994,10.774,"Taraba, Nigeria",3066834
|
||||
56636,NG,NGA,566,Yobe,Nigeria,12.2939,11.439,"Yobe, Nigeria",3294137
|
||||
56637,NG,NGA,566,Zamfara,Nigeria,12.1222,6.2236,"Zamfara, Nigeria",4515427
|
||||
58601,PK,PAK,586,Azad Jammu and Kashmir,Pakistan,34.027401,73.947253,"Azad Jammu and Kashmir, Pakistan",4045366
|
||||
58602,PK,PAK,586,Balochistan,Pakistan,28.328492,65.898403,"Balochistan, Pakistan",12344408
|
||||
58603,PK,PAK,586,Gilgit-Baltistan,Pakistan,35.792146,74.982138,"Gilgit-Baltistan, Pakistan",1013584
|
||||
58604,PK,PAK,586,Islamabad,Pakistan,33.665087,73.121219,"Islamabad, Pakistan",2006572
|
||||
58605,PK,PAK,586,Khyber Pakhtunkhwa,Pakistan,34.485332,72.09169,"Khyber Pakhtunkhwa, Pakistan",30523371
|
||||
58606,PK,PAK,586,Punjab,Pakistan,30.811346,72.139132,"Punjab, Pakistan",110012442
|
||||
58607,PK,PAK,586,Sindh,Pakistan,26.009446,68.776807,"Sindh, Pakistan",47886051
|
||||
60401,PE,PER,604,Amazonas,Peru,-5.077253,-78.050172,"Amazonas, Peru",426800
|
||||
60402,PE,PER,604,Ancash,Peru,-9.407125,-77.671795,"Ancash, Peru",1180600
|
||||
60403,PE,PER,604,Apurimac,Peru,-14.027713,-72.975378,"Apurimac, Peru",430700
|
||||
60404,PE,PER,604,Arequipa,Peru,-15.843524,-72.475539,"Arequipa, Peru",1497400
|
||||
60405,PE,PER,604,Ayacucho,Peru,-14.091648,-74.08344,"Ayacucho, Peru",668200
|
||||
60406,PE,PER,604,Cajamarca,Peru,-6.430284,-78.745596,"Cajamarca, Peru",1453700
|
||||
60407,PE,PER,604,Callao,Peru,-11.954609,-77.136042,"Callao, Peru",1129900
|
||||
60408,PE,PER,604,Cusco,Peru,-13.191068,-72.153609,"Cusco, Peru",1357100
|
||||
60409,PE,PER,604,Huancavelica,Peru,-13.023888,-75.00277,"Huancavelica, Peru",365300
|
||||
60410,PE,PER,604,Huanuco,Peru,-9.421676,-76.040642,"Huanuco, Peru",760300
|
||||
60411,PE,PER,604,Ica,Peru,-14.235097,-75.574821,"Ica, Peru",975200
|
||||
60412,PE,PER,604,Junin,Peru,-11.541783,-74.876968,"Junin, Peru",1361500
|
||||
60413,PE,PER,604,La Libertad,Peru,-7.92139,-78.370238,"La Libertad, Peru",2016800
|
||||
60414,PE,PER,604,Lambayeque,Peru,-6.353049,-79.824113,"Lambayeque, Peru",1310800
|
||||
60415,PE,PER,604,Lima,Peru,-11.766533,-76.604498,"Lima, Peru",10628500
|
||||
60416,PE,PER,604,Loreto,Peru,-4.124847,-74.424115,"Loreto, Peru",1027600
|
||||
60417,PE,PER,604,Madre de Dios,Peru,-11.972699,-70.53172,"Madre de Dios, Peru",173800
|
||||
60418,PE,PER,604,Moquegua,Peru,-16.860271,-70.839046,"Moquegua, Peru",192700
|
||||
60419,PE,PER,604,Pasco,Peru,-10.39655,-75.307635,"Pasco, Peru",271900
|
||||
60420,PE,PER,604,Piura,Peru,-5.133361,-80.335861,"Piura, Peru",2048000
|
||||
60421,PE,PER,604,Puno,Peru,-14.995827,-69.922726,"Puno, Peru",1238000
|
||||
60422,PE,PER,604,San Martin,Peru,-7.039531,-76.729127,"San Martin, Peru",899600
|
||||
60423,PE,PER,604,Tacna,Peru,-17.644161,-70.27756,"Tacna, Peru",371000
|
||||
60424,PE,PER,604,Tumbes,Peru,-3.857496,-80.545255,"Tumbes, Peru",251500
|
||||
60425,PE,PER,604,Ucayali,Peru,-9.621718,-73.444929,"Ucayali, Peru",589100
|
||||
61601,PL,POL,616,Dolnoslaskie,Poland,51.134,16.8842,"Dolnoslaskie, Poland",2901225
|
||||
61602,PL,POL,616,Kujawsko-pomorskie,Poland,53.1648,18.4834,"Kujawsko-pomorskie, Poland",2077775
|
||||
61603,PL,POL,616,Lubelskie,Poland,51.2494,23.1011,"Lubelskie, Poland",2117619
|
||||
61604,PL,POL,616,Lubuskie,Poland,52.2275,15.2559,"Lubuskie, Poland",1014548
|
||||
61605,PL,POL,616,Lodzkie,Poland,51.4635,19.1727,"Lodzkie, Poland",2466322
|
||||
61606,PL,POL,616,Malopolskie,Poland,49.7225,20.2503,"Malopolskie, Poland",3400577
|
||||
61607,PL,POL,616,Mazowieckie,Poland,51.8927,21.0022,"Mazowieckie, Poland",5403412
|
||||
61608,PL,POL,616,Opolskie,Poland,50.8004,17.938,"Opolskie, Poland",986506
|
||||
61609,PL,POL,616,Podkarpackie,Poland,50.0575,22.0896,"Podkarpackie, Poland",2129015
|
||||
61610,PL,POL,616,Podlaskie,Poland,53.0697,22.9675,"Podlaskie, Poland",1181533
|
||||
61611,PL,POL,616,Pomorskie,Poland,54.2944,18.1531,"Pomorskie, Poland",2333523
|
||||
61612,PL,POL,616,Slaskie,Poland,50.5717,19.322,"Slaskie, Poland",4533565
|
||||
61613,PL,POL,616,Swietokrzyskie,Poland,50.6261,20.9406,"Swietokrzyskie, Poland",1241546
|
||||
61614,PL,POL,616,Warminsko-mazurskie,Poland,53.8671,20.7028,"Warminsko-mazurskie, Poland",1428983
|
||||
61615,PL,POL,616,Wielkopolskie,Poland,52.28,17.3523,"Wielkopolskie, Poland",3493969
|
||||
61616,PL,POL,616,Zachodniopomorskie,Poland,53.4658,15.1823,"Zachodniopomorskie, Poland",1701030
|
||||
64201,RO,ROU,642,Alba,Romania,46.1559,23.5556,"Alba, Romania",74000
|
||||
64202,RO,ROU,642,Arad,Romania,46.176,21.319,"Arad, Romania",409072
|
||||
64203,RO,ROU,642,Arges,Romania,45.0723,24.8143,"Arges, Romania",612431
|
||||
64204,RO,ROU,642,Bacau,Romania,46.5833,26.9167,"Bacau, Romania",616168
|
||||
64205,RO,ROU,642,Bihor,Romania,47.0158,22.1723,"Bihor, Romania",575398
|
||||
64206,RO,ROU,642,Bistrita-Nasaud,Romania,47.2486,24.5323,"Bistrita-Nasaud, Romania",277861
|
||||
64207,RO,ROU,642,Botosani,Romania,47.745,26.6621,"Botosani, Romania",412626
|
||||
64208,RO,ROU,642,Braila,Romania,45.271,27.9743,"Braila, Romania",304925
|
||||
64209,RO,ROU,642,Brasov,Romania,45.6667,25.6167,"Brasov, Romania",549217
|
||||
64210,RO,ROU,642,Bucuresti,Romania,44.4268,26.1025,"Bucuresti, Romania",1883425
|
||||
64211,RO,ROU,642,Buzau,Romania,45.1667,26.8167,"Buzau, Romania",432054
|
||||
64212,RO,ROU,642,Calarasi,Romania,44.2085,27.3137,"Calarasi, Romania",285050
|
||||
64213,RO,ROU,642,Caras-Severin,Romania,45.114,22.0741,"Caras-Severin, Romania",274277
|
||||
64214,RO,ROU,642,Cluj,Romania,46.7667,23.5833,"Cluj, Romania",691106
|
||||
64215,RO,ROU,642,Constanta,Romania,44.1773,28.6529,"Constanta, Romania",684082
|
||||
64216,RO,ROU,642,Covasna,Romania,45.8446,26.1687,"Covasna, Romania",210177
|
||||
64217,RO,ROU,642,Dambovita,Romania,44.929,25.4254,"Dambovita, Romania",518745
|
||||
64218,RO,ROU,642,Dolj,Romania,44.1623,23.6325,"Dolj, Romania",660544
|
||||
64219,RO,ROU,642,Galati,Romania,45.4382,28.0563,"Galati, Romania",536167
|
||||
64220,RO,ROU,642,Giurgiu,Romania,43.9008,25.9739,"Giurgiu, Romania",265494
|
||||
64221,RO,ROU,642,Gorj,Romania,44.9486,23.2427,"Gorj, Romania",334238
|
||||
64222,RO,ROU,642,Harghita,Romania,46.4929,25.6457,"Harghita, Romania",304969
|
||||
64223,RO,ROU,642,Hunedoara,Romania,45.7697,22.9203,"Hunedoara, Romania",396253
|
||||
64224,RO,ROU,642,Ialomita,Romania,44.6031,27.379,"Ialomita, Romania",258669
|
||||
64225,RO,ROU,642,Iasi,Romania,47.1598,27.5872,"Iasi, Romania",772348
|
||||
64226,RO,ROU,642,Ilfov,Romania,44.5355,26.2325,"Ilfov, Romania",388738
|
||||
64227,RO,ROU,642,Maramures,Romania,47.6738,23.7456,"Maramures, Romania",516562
|
||||
64228,RO,ROU,642,Mehedinti,Romania,44.5515,22.9044,"Mehedinti, Romania",254570
|
||||
64229,RO,ROU,642,Mures,Romania,46.557,24.6723,"Mures, Romania",550846
|
||||
64230,RO,ROU,642,Neamt,Romania,46.9759,26.3819,"Neamt, Romania",470766
|
||||
64231,RO,ROU,642,Olt,Romania,44.2008,24.5023,"Olt, Romania",415530
|
||||
64232,RO,ROU,642,Prahova,Romania,45.0892,26.0829,"Prahova, Romania",762886
|
||||
64233,RO,ROU,642,Salaj,Romania,47.2091,23.2122,"Salaj, Romania",224384
|
||||
64234,RO,ROU,642,Satu Mare,Romania,47.79,22.89,"Satu Mare, Romania",329079
|
||||
64235,RO,ROU,642,Sibiu,Romania,45.7969,24.15,"Sibiu, Romania",375992
|
||||
64236,RO,ROU,642,Suceava,Romania,47.6514,26.2556,"Suceava, Romania",634810
|
||||
64237,RO,ROU,642,Teleorman,Romania,44.016,25.2987,"Teleorman, Romania",360178
|
||||
64238,RO,ROU,642,Timis,Romania,45.8139,21.3331,"Timis, Romania",683540
|
||||
64239,RO,ROU,642,Tulcea,Romania,45.1767,28.8052,"Tulcea, Romania",201462
|
||||
64240,RO,ROU,642,Valcea,Romania,45.0798,24.0835,"Valcea, Romania",355320
|
||||
64241,RO,ROU,642,Vaslui,Romania,46.6381,27.7288,"Vaslui, Romania",395500
|
||||
64242,RO,ROU,642,Vrancea,Romania,45.8135,27.0658,"Vrancea, Romania",340310
|
||||
64301,RU,RUS,643,Adygea Republic,Russia,44.6939006,40.1520421,"Adygea Republic, Russia",453376
|
||||
64302,RU,RUS,643,Altai Krai,Russia,52.6932243,82.6931424,"Altai Krai, Russia",2350080
|
||||
64303,RU,RUS,643,Altai Republic,Russia,50.7114101,86.8572186,"Altai Republic, Russia",218063
|
||||
64304,RU,RUS,643,Amur Oblast,Russia,52.8032368,128.437295,"Amur Oblast, Russia",798424
|
||||
64305,RU,RUS,643,Arkhangelsk Oblast,Russia,63.5589686,43.1221646,"Arkhangelsk Oblast, Russia",1155028
|
||||
64306,RU,RUS,643,Astrakhan Oblast,Russia,47.1878186,47.608851,"Astrakhan Oblast, Russia",1017514
|
||||
64307,RU,RUS,643,Bashkortostan Republic,Russia,54.8573563,57.1439682,"Bashkortostan Republic, Russia",4063293
|
||||
64308,RU,RUS,643,Belgorod Oblast,Russia,50.7080119,37.5837615,"Belgorod Oblast, Russia",1549876
|
||||
64309,RU,RUS,643,Bryansk Oblast,Russia,52.8873315,33.415853,"Bryansk Oblast, Russia",1210982
|
||||
64310,RU,RUS,643,Buryatia Republic,Russia,52.7182426,109.492143,"Buryatia Republic, Russia",984511
|
||||
64311,RU,RUS,643,Chechen Republic,Russia,43.3976147,45.6985005,"Chechen Republic, Russia",1436981
|
||||
64312,RU,RUS,643,Chelyabinsk Oblast,Russia,54.4223954,61.1865846,"Chelyabinsk Oblast, Russia",3493036
|
||||
64313,RU,RUS,643,Chukotka Autonomous Okrug,Russia,66.0006475,169.4900869,"Chukotka Autonomous Okrug, Russia",49348
|
||||
64314,RU,RUS,643,Chuvashia Republic,Russia,55.4259922,47.0849429,"Chuvashia Republic, Russia",1231117
|
||||
64315,RU,RUS,643,Dagestan Republic,Russia,43.0574916,47.1332224,"Dagestan Republic, Russia",3063885
|
||||
64316,RU,RUS,643,Ingushetia Republic,Russia,43.11542075,45.01713552,"Ingushetia Republic, Russia",488043
|
||||
64317,RU,RUS,643,Irkutsk Oblast,Russia,56.6370122,104.719221,"Irkutsk Oblast, Russia",2404195
|
||||
64318,RU,RUS,643,Ivanovo Oblast,Russia,56.9167446,41.4352137,"Ivanovo Oblast, Russia",1014646
|
||||
64319,RU,RUS,643,Jewish Autonomous Okrug,Russia,48.57527615,132.6630746,"Jewish Autonomous Okrug, Russia",162014
|
||||
64320,RU,RUS,643,Kabardino-Balkarian Republic,Russia,43.4806048,43.5978976,"Kabardino-Balkarian Republic, Russia",865828
|
||||
64321,RU,RUS,643,Kaliningrad Oblast,Russia,54.7293041,21.1489473,"Kaliningrad Oblast, Russia",994599
|
||||
64322,RU,RUS,643,Kalmykia Republic,Russia,46.2313018,45.3275745,"Kalmykia Republic, Russia",275413
|
||||
64323,RU,RUS,643,Kaluga Oblast,Russia,54.4382773,35.5272854,"Kaluga Oblast, Russia",1012056
|
||||
64324,RU,RUS,643,Kamchatka Krai,Russia,57.1914882,160.0383819,"Kamchatka Krai, Russia",315557
|
||||
64325,RU,RUS,643,Karachay-Cherkess Republic,Russia,43.7368326,41.7267991,"Karachay-Cherkess Republic, Russia",466305
|
||||
64326,RU,RUS,643,Karelia Republic,Russia,62.6194031,33.4920267,"Karelia Republic, Russia",622484
|
||||
64327,RU,RUS,643,Kemerovo Oblast,Russia,54.5335781,87.342861,"Kemerovo Oblast, Russia",2694877
|
||||
64328,RU,RUS,643,Khabarovsk Krai,Russia,51.6312684,136.121524,"Khabarovsk Krai, Russia",1328302
|
||||
64329,RU,RUS,643,Khakassia Republic,Russia,53.72258845,91.44293627,"Khakassia Republic, Russia",537513
|
||||
64330,RU,RUS,643,Khanty-Mansi Autonomous Okrug,Russia,61.0259025,69.0982628,"Khanty-Mansi Autonomous Okrug, Russia",1532243
|
||||
64331,RU,RUS,643,Kirov Oblast,Russia,57.9665589,49.4074599,"Kirov Oblast, Russia",1283238
|
||||
64332,RU,RUS,643,Komi Republic,Russia,63.9881421,54.3326073,"Komi Republic, Russia",840873
|
||||
64333,RU,RUS,643,Kostroma Oblast,Russia,58.424756,44.2533273,"Kostroma Oblast, Russia",643324
|
||||
64334,RU,RUS,643,Krasnodar Krai,Russia,45.7684014,39.0261044,"Krasnodar Krai, Russia",5603420
|
||||
64335,RU,RUS,643,Krasnoyarsk Krai,Russia,63.3233807,97.0979974,"Krasnoyarsk Krai, Russia",2876497
|
||||
64336,RU,RUS,643,Kurgan Oblast,Russia,55.7655302,64.5632681,"Kurgan Oblast, Russia",845537
|
||||
64337,RU,RUS,643,Kursk Oblast,Russia,51.6568453,36.4852695,"Kursk Oblast, Russia",1115237
|
||||
64338,RU,RUS,643,Leningrad Oblast,Russia,60.1853296,32.3925325,"Leningrad Oblast, Russia",1813816
|
||||
64339,RU,RUS,643,Lipetsk Oblast,Russia,52.6935178,39.1122664,"Lipetsk Oblast, Russia",1150201
|
||||
64340,RU,RUS,643,Magadan Oblast,Russia,62.48858785,153.9903764,"Magadan Oblast, Russia",144091
|
||||
64341,RU,RUS,643,Mari El Republic,Russia,56.5767504,47.8817512,"Mari El Republic, Russia",682333
|
||||
64342,RU,RUS,643,Mordovia Republic,Russia,54.4419829,44.4661144,"Mordovia Republic, Russia",805056
|
||||
64343,RU,RUS,643,Moscow,Russia,55.7504461,37.6174943,"Moscow, Russia",12506468
|
||||
64344,RU,RUS,643,Moscow Oblast,Russia,55.5043158,38.0353929,"Moscow Oblast, Russia",7503385
|
||||
64345,RU,RUS,643,Murmansk Oblast,Russia,68.0000418,33.9999151,"Murmansk Oblast, Russia",753557
|
||||
64346,RU,RUS,643,Nenets Autonomous Okrug,Russia,68.27557185,57.1686375,"Nenets Autonomous Okrug, Russia",43997
|
||||
64347,RU,RUS,643,Nizhny Novgorod Oblast,Russia,55.4718033,44.0911594,"Nizhny Novgorod Oblast, Russia",3234752
|
||||
64348,RU,RUS,643,North Ossetia - Alania Republic,Russia,42.7933611,44.6324493,"North Ossetia - Alania Republic, Russia",701765
|
||||
64349,RU,RUS,643,Novgorod Oblast,Russia,58.2843833,32.5169757,"Novgorod Oblast, Russia",606476
|
||||
64350,RU,RUS,643,Novosibirsk Oblast,Russia,54.9720169,79.4813924,"Novosibirsk Oblast, Russia",2788849
|
||||
64351,RU,RUS,643,Omsk Oblast,Russia,56.0935263,73.5099936,"Omsk Oblast, Russia",1960081
|
||||
64352,RU,RUS,643,Orel Oblast,Russia,52.9685433,36.0692477,"Orel Oblast, Russia",747247
|
||||
64353,RU,RUS,643,Orenburg Oblast,Russia,52.0269262,54.7276647,"Orenburg Oblast, Russia",1977720
|
||||
64354,RU,RUS,643,Penza Oblast,Russia,53.1655415,44.7879181,"Penza Oblast, Russia",1331655
|
||||
64355,RU,RUS,643,Perm Krai,Russia,58.5951603,56.3159546,"Perm Krai, Russia",2623122
|
||||
64356,RU,RUS,643,Primorsky Krai,Russia,45.0819456,134.726645,"Primorsky Krai, Russia",1913037
|
||||
64357,RU,RUS,643,Pskov Oblast,Russia,57.5358729,28.8586826,"Pskov Oblast, Russia",636546
|
||||
64358,RU,RUS,643,Rostov Oblast,Russia,47.6222451,40.7957942,"Rostov Oblast, Russia",4220452
|
||||
64359,RU,RUS,643,Ryazan Oblast,Russia,54.4226732,40.5705246,"Ryazan Oblast, Russia",1121474
|
||||
64360,RU,RUS,643,Saint Petersburg,Russia,59.9606739,30.1586551,"Saint Petersburg, Russia",5351935
|
||||
64361,RU,RUS,643,Sakha (Yakutiya) Republic,Russia,66.941626,129.642371,"Sakha (Yakutiya) Republic, Russia",964330
|
||||
64362,RU,RUS,643,Sakhalin Oblast,Russia,49.7219665,143.448533,"Sakhalin Oblast, Russia",490181
|
||||
64363,RU,RUS,643,Samara Oblast,Russia,53.2128813,50.8914633,"Samara Oblast, Russia",3193514
|
||||
64364,RU,RUS,643,Saratov Oblast,Russia,51.6520555,46.8631952,"Saratov Oblast, Russia",2462950
|
||||
64365,RU,RUS,643,Smolensk Oblast,Russia,55.0343496,33.0192065,"Smolensk Oblast, Russia",949348
|
||||
64366,RU,RUS,643,Stavropol Krai,Russia,44.8632577,43.4406913,"Stavropol Krai, Russia",2800674
|
||||
64367,RU,RUS,643,Sverdlovsk Oblast,Russia,58.6414755,61.8021546,"Sverdlovsk Oblast, Russia",4325256
|
||||
64368,RU,RUS,643,Tambov Oblast,Russia,52.9019574,41.3578918,"Tambov Oblast, Russia",1033552
|
||||
64369,RU,RUS,643,Tatarstan Republic,Russia,55.7648572,52.43104273,"Tatarstan Republic, Russia",3894284
|
||||
64370,RU,RUS,643,Tomsk Oblast,Russia,58.6124279,82.0475315,"Tomsk Oblast, Russia",1078280
|
||||
64371,RU,RUS,643,Tula Oblast,Russia,53.9570701,37.3690909,"Tula Oblast, Russia",1491855
|
||||
64372,RU,RUS,643,Tver Oblast,Russia,57.1134475,35.1744428,"Tver Oblast, Russia",1283873
|
||||
64373,RU,RUS,643,Tyumen Oblast,Russia,58.8206488,70.3658837,"Tyumen Oblast, Russia",3692400
|
||||
64374,RU,RUS,643,Tyva Republic,Russia,51.4017149,93.8582593,"Tyva Republic, Russia",321722
|
||||
64375,RU,RUS,643,Udmurt Republic,Russia,57.1961165,52.6959832,"Udmurt Republic, Russia",1513044
|
||||
64376,RU,RUS,643,Ulyanovsk Oblast,Russia,54.1463177,47.2324921,"Ulyanovsk Oblast, Russia",1246618
|
||||
64377,RU,RUS,643,Vladimir Oblast,Russia,56.0503336,40.6561633,"Vladimir Oblast, Russia",1378337
|
||||
64378,RU,RUS,643,Volgograd Oblast,Russia,49.6048339,44.2903582,"Volgograd Oblast, Russia",2521276
|
||||
64379,RU,RUS,643,Vologda Oblast,Russia,60.0391461,43.1215213,"Vologda Oblast, Russia",1176689
|
||||
64380,RU,RUS,643,Voronezh Oblast,Russia,50.9800393,40.1506507,"Voronezh Oblast, Russia",2333768
|
||||
64381,RU,RUS,643,Yamalo-Nenets Autonomous Okrug,Russia,67.1471631,74.3415488,"Yamalo-Nenets Autonomous Okrug, Russia",538547
|
||||
64382,RU,RUS,643,Yaroslavl Oblast,Russia,57.7781976,39.0021095,"Yaroslavl Oblast, Russia",1265684
|
||||
64383,RU,RUS,643,Zabaykalsky Krai,Russia,52.248521,115.956325,"Zabaykalsky Krai, Russia",1072806
|
||||
70301,SK,SVK,703,Banska Bystrica,Slovakia,48.7363,19.1462,"Banska Bystrica, Slovakia",657119
|
||||
70302,SK,SVK,703,Bratislava,Slovakia,48.1486,17.107,"Bratislava, Slovakia",603699
|
||||
70303,SK,SVK,703,Kosice,Slovakia,48.7164,21.2611,"Kosice, Slovakia",771947
|
||||
70304,SK,SVK,703,Nitra,Slovakia,48.3061,18.0764,"Nitra, Slovakia",708498
|
||||
70305,SK,SVK,703,Presov,Slovakia,49.0018,21.2393,"Presov, Slovakia",798596
|
||||
70306,SK,SVK,703,Trencin,Slovakia,48.8849,18.0335,"Trencin, Slovakia",600386
|
||||
70307,SK,SVK,703,Trnava,Slovakia,48.3709,17.5833,"Trnava, Slovakia",554172
|
||||
70308,SK,SVK,703,Zilina,Slovakia,49.2194,18.7408,"Zilina, Slovakia",694763
|
||||
72401,ES,ESP,724,Andalusia,Spain,37.5443,-4.7278,"Andalusia, Spain",8427405
|
||||
72402,ES,ESP,724,Aragon,Spain,41.5976,-0.9057,"Aragon, Spain",1320586
|
||||
72403,ES,ESP,724,Asturias,Spain,43.3614,-5.8593,"Asturias, Spain",1022205
|
||||
72404,ES,ESP,724,Baleares,Spain,39.710358,2.995148,"Baleares, Spain",1188220
|
||||
72405,ES,ESP,724,Canarias,Spain,28.2916,-16.6291,"Canarias, Spain",2206901
|
||||
72406,ES,ESP,724,Cantabria,Spain,43.1828,-3.9878,"Cantabria, Spain",581641
|
||||
72407,ES,ESP,724,Castilla - La Mancha,Spain,39.2796,-3.0977,"Castilla - La Mancha, Spain",2034877
|
||||
72408,ES,ESP,724,Castilla y Leon,Spain,41.8357,-4.3976,"Castilla y Leon, Spain",2407733
|
||||
72409,ES,ESP,724,Catalonia,Spain,41.5912,1.5209,"Catalonia, Spain",7566431
|
||||
72410,ES,ESP,724,Ceuta,Spain,35.8894,-5.3213,"Ceuta, Spain",84829
|
||||
72411,ES,ESP,724,C. Valenciana,Spain,39.484,-0.7533,"C. Valenciana, Spain",4974969
|
||||
72412,ES,ESP,724,Extremadura,Spain,39.4937,-6.0679,"Extremadura, Spain",1065424
|
||||
72413,ES,ESP,724,Galicia,Spain,42.5751,-8.1339,"Galicia, Spain",2700441
|
||||
72414,ES,ESP,724,Madrid,Spain,40.4168,-3.7038,"Madrid, Spain",6641649
|
||||
72415,ES,ESP,724,Melilla,Spain,35.2923,-2.9381,"Melilla, Spain",84689
|
||||
72416,ES,ESP,724,Murcia,Spain,37.9922,-1.1307,"Murcia, Spain",1487663
|
||||
72417,ES,ESP,724,Navarra,Spain,42.6954,-1.6761,"Navarra, Spain",649946
|
||||
72418,ES,ESP,724,Pais Vasco,Spain,42.9896,-2.6189,"Pais Vasco, Spain",2177880
|
||||
72419,ES,ESP,724,La Rioja,Spain,42.2871,-2.5396,"La Rioja, Spain",313571
|
||||
75201,SE,SWE,752,Blekinge,Sweden,56.2784,15.018,"Blekinge, Sweden",159606
|
||||
75202,SE,SWE,752,Dalarna,Sweden,61.0917,14.6664,"Dalarna, Sweden",287966
|
||||
75203,SE,SWE,752,Gavleborg,Sweden,61.3012,16.1534,"Gavleborg, Sweden",287382
|
||||
75204,SE,SWE,752,Gotland,Sweden,57.4684,18.4867,"Gotland, Sweden",59686
|
||||
75205,SE,SWE,752,Halland,Sweden,56.8967,12.8034,"Halland, Sweden",333848
|
||||
75206,SE,SWE,752,Jamtland Harjedalen,Sweden,63.1712,14.9592,"Jamtland Harjedalen, Sweden",130810
|
||||
75207,SE,SWE,752,Jonkoping,Sweden,57.3708,14.3439,"Jonkoping, Sweden",363599
|
||||
75208,SE,SWE,752,Kalmar,Sweden,57.235,16.1849,"Kalmar, Sweden",245446
|
||||
75209,SE,SWE,752,Kronoberg,Sweden,56.7183,14.4115,"Kronoberg, Sweden",201469
|
||||
75210,SE,SWE,752,Norrbotten,Sweden,66.8309,20.3992,"Norrbotten, Sweden",250093
|
||||
75211,SE,SWE,752,Orebro,Sweden,59.535,15.0066,"Orebro, Sweden",304805
|
||||
75212,SE,SWE,752,Ostergotland,Sweden,58.3454,15.5198,"Ostergotland, Sweden",465495
|
||||
75213,SE,SWE,752,Skane,Sweden,55.9903,13.5958,"Skane, Sweden",1377827
|
||||
75214,SE,SWE,752,Sormland,Sweden,59.0336,16.7519,"Sormland, Sweden",297540
|
||||
75215,SE,SWE,752,Stockholm,Sweden,59.6025,18.1384,"Stockholm, Sweden",2377081
|
||||
75216,SE,SWE,752,Uppsala,Sweden,60.0092,17.2715,"Uppsala, Sweden",383713
|
||||
75217,SE,SWE,752,Varmland,Sweden,59.7294,13.2354,"Varmland, Sweden",282414
|
||||
75218,SE,SWE,752,Vasterbotten,Sweden,65.3337,16.5162,"Vasterbotten, Sweden",271736
|
||||
75219,SE,SWE,752,Vasternorrland,Sweden,63.4276,17.7292,"Vasternorrland, Sweden",245347
|
||||
75220,SE,SWE,752,Vastmanland,Sweden,59.6714,16.2159,"Vastmanland, Sweden",275845
|
||||
75221,SE,SWE,752,Vastra Gotaland,Sweden,58.2528,13.0596,"Vastra Gotaland, Sweden",1725881
|
||||
80401,UA,UKR,804,Cherkasy Oblast,Ukraine,49.4444,32.0598,"Cherkasy Oblast, Ukraine",1206351
|
||||
80402,UA,UKR,804,Chernihiv Oblast,Ukraine,51.4982,31.2893,"Chernihiv Oblast, Ukraine",1005745
|
||||
80403,UA,UKR,804,Chernivtsi Oblast,Ukraine,48.2917,25.9352,"Chernivtsi Oblast, Ukraine",904374
|
||||
80404,UA,UKR,804,Crimea Republic*,Ukraine,45.2835,34.2008,"Crimea Republic*, Ukraine",1913731
|
||||
80405,UA,UKR,804,Dnipropetrovsk Oblast,Ukraine,48.4647,35.0462,"Dnipropetrovsk Oblast, Ukraine",3206477
|
||||
80406,UA,UKR,804,Donetsk Oblast,Ukraine,48.0159,37.8028,"Donetsk Oblast, Ukraine",4165901
|
||||
80407,UA,UKR,804,Ivano-Frankivsk Oblast,Ukraine,48.9226,24.7111,"Ivano-Frankivsk Oblast, Ukraine",1373252
|
||||
80408,UA,UKR,804,Kharkiv Oblast,Ukraine,49.9935,36.2304,"Kharkiv Oblast, Ukraine",2675598
|
||||
80409,UA,UKR,804,Kherson Oblast,Ukraine,46.6354,32.6169,"Kherson Oblast, Ukraine",1037640
|
||||
80410,UA,UKR,804,Khmelnytskyi Oblast,Ukraine,49.423,26.9871,"Khmelnytskyi Oblast, Ukraine",1264705
|
||||
80411,UA,UKR,804,Kiev,Ukraine,50.4501,30.5234,"Kiev, Ukraine",2950800
|
||||
80412,UA,UKR,804,Kiev Oblast,Ukraine,50.053,30.7667,"Kiev Oblast, Ukraine",1767940
|
||||
80413,UA,UKR,804,Kirovohrad Oblast,Ukraine,48.5079,32.2623,"Kirovohrad Oblast, Ukraine",945549
|
||||
80414,UA,UKR,804,Luhansk Oblast,Ukraine,48.574,39.3078,"Luhansk Oblast, Ukraine",2151833
|
||||
80415,UA,UKR,804,Lviv Oblast,Ukraine,49.8397,24.0297,"Lviv Oblast, Ukraine",2522021
|
||||
80416,UA,UKR,804,Mykolaiv Oblast,Ukraine,46.975,31.9946,"Mykolaiv Oblast, Ukraine",2522021
|
||||
80417,UA,UKR,804,Odessa Oblast,Ukraine,46.4846,30.7326,"Odessa Oblast, Ukraine",2380308
|
||||
80418,UA,UKR,804,Poltava Oblast,Ukraine,49.5883,34.5514,"Poltava Oblast, Ukraine",1400439
|
||||
80419,UA,UKR,804,Rivne Oblast,Ukraine,50.6199,26.2516,"Rivne Oblast, Ukraine",1157301
|
||||
80420,UA,UKR,804,Sevastopol*,Ukraine,44.6054,33.522,"Sevastopol*, Ukraine",443211
|
||||
80421,UA,UKR,804,Sumy Oblast,Ukraine,50.9077,34.7981,"Sumy Oblast, Ukraine",1081418
|
||||
80422,UA,UKR,804,Ternopil Oblast,Ukraine,49.5535,25.5948,"Ternopil Oblast, Ukraine",1045879
|
||||
80423,UA,UKR,804,Vinnytsia Oblast,Ukraine,49.2331,28.4682,"Vinnytsia Oblast, Ukraine",1560394
|
||||
80424,UA,UKR,804,Volyn Oblast,Ukraine,50.7472,25.3254,"Volyn Oblast, Ukraine",1035330
|
||||
80425,UA,UKR,804,Zakarpattia Oblast,Ukraine,48.6208,22.2879,"Zakarpattia Oblast, Ukraine",1256802
|
||||
80426,UA,UKR,804,Zaporizhia Oblast,Ukraine,47.8388,35.1396,"Zaporizhia Oblast, Ukraine",1705836
|
||||
80427,UA,UKR,804,Zhytomyr Oblast,Ukraine,50.2547,28.6587,"Zhytomyr Oblast, Ukraine",1220193
|
||||
82601,GB,GBR,826,England,United Kingdom,52.3555,-1.1743,"England, United Kingdom",55977200
|
||||
82602,GB,GBR,826,Northern Ireland,United Kingdom,54.7877,-6.4923,"Northern Ireland, United Kingdom",1881600
|
||||
82603,GB,GBR,826,Scotland,United Kingdom,56.4907,-4.2026,"Scotland, United Kingdom",5463300
|
||||
82604,GB,GBR,826,Wales,United Kingdom,52.1307,-3.7837,"Wales, United Kingdom",3138600
|
||||
60,BM,BMU,60,Bermuda,United Kingdom,32.3078,-64.7505,"Bermuda, United Kingdom",62273
|
||||
92,VG,VGB,92,British Virgin Islands,United Kingdom,18.4207,-64.64,"British Virgin Islands, United Kingdom",30237
|
||||
136,KY,CYM,136,Cayman Islands,United Kingdom,19.3133,-81.2546,"Cayman Islands, United Kingdom",65720
|
||||
8261,GB,GBR,826,Channel Islands,United Kingdom,49.3723,-2.3644,"Channel Islands, United Kingdom",170499
|
||||
831,GG,GGY,831,Guernsey,United Kingdom,49.448196,-2.58949,"Guernsey, United Kingdom",63000
|
||||
832,JE,JEY,832,Jersey,United Kingdom,49.2138,-2.1358,"Jersey, United Kingdom",109300
|
||||
238,FK,FLK,238,Falkland Islands (Malvinas),United Kingdom,-51.7963,-59.5236,"Falkland Islands (Malvinas), United Kingdom",3483
|
||||
292,GI,GIB,292,Gibraltar,United Kingdom,36.1408,-5.3536,"Gibraltar, United Kingdom",33691
|
||||
833,IM,IMN,833,Isle of Man,United Kingdom,54.2361,-4.5481,"Isle of Man, United Kingdom",85032
|
||||
500,MS,MSR,500,Montserrat,United Kingdom,16.742498,-62.187366,"Montserrat, United Kingdom",4999
|
||||
796,TC,TCA,796,Turks and Caicos Islands,United Kingdom,21.694,-71.7979,"Turks and Caicos Islands, United Kingdom",38718
|
||||
612,PN,PCN,612,Pitcairn Islands,United Kingdom,-24.3768,-128.3242,"Pitcairn Islands, United Kingdom",67
|
||||
660,AI,AIA,660,Anguilla,United Kingdom,18.2206,-63.0686,"Anguilla, United Kingdom",15002
|
||||
654,SH,SHN,654,"Saint Helena, Ascension and Tristan da Cunha",United Kingdom,-7.9467,-14.3559,"Saint Helena, Ascension and Tristan da Cunha, United Kingdom",5661
|
||||
3601,AU,AUS,36,Australian Capital Territory,Australia,-35.4735,149.0124,"Australian Capital Territory, Australia",428100
|
||||
3602,AU,AUS,36,New South Wales,Australia,-33.8688,151.2093,"New South Wales, Australia",8118000
|
||||
3603,AU,AUS,36,Northern Territory,Australia,-12.4634,130.8456,"Northern Territory, Australia",245600
|
||||
3604,AU,AUS,36,Queensland,Australia,-27.4698,153.0251,"Queensland, Australia",5115500
|
||||
3605,AU,AUS,36,South Australia,Australia,-34.9285,138.6007,"South Australia, Australia",1756500
|
||||
3606,AU,AUS,36,Tasmania,Australia,-42.8821,147.3272,"Tasmania, Australia",535500
|
||||
3607,AU,AUS,36,Victoria,Australia,-37.8136,144.9631,"Victoria, Australia",6629900
|
||||
3608,AU,AUS,36,Western Australia,Australia,-31.9505,115.8605,"Western Australia, Australia",2630600
|
||||
12401,CA,CAN,124,Alberta,Canada,53.9333,-116.5765,"Alberta, Canada",4442879
|
||||
12402,CA,CAN,124,British Columbia,Canada,53.7267,-127.6476,"British Columbia, Canada",5214805
|
||||
12403,CA,CAN,124,Manitoba,Canada,53.7609,-98.8139,"Manitoba, Canada",1383765
|
||||
12404,CA,CAN,124,New Brunswick,Canada,46.5653,-66.4619,"New Brunswick, Canada",789225
|
||||
12405,CA,CAN,124,Newfoundland and Labrador,Canada,53.1355,-57.6604,"Newfoundland and Labrador, Canada",520553
|
||||
12406,CA,CAN,124,Northwest Territories,Canada,64.8255,-124.8457,"Northwest Territories,Canada",45504
|
||||
12407,CA,CAN,124,Nova Scotia,Canada,44.682,-63.7443,"Nova Scotia, Canada",992055
|
||||
12408,CA,CAN,124,Ontario,Canada,51.2538,-85.3232,"Ontario, Canada",14826276
|
||||
12409,CA,CAN,124,Prince Edward Island,Canada,46.5107,-63.4168,"Prince Edward Island, Canada",164318
|
||||
12410,CA,CAN,124,Quebec,Canada,52.9399,-73.5491,"Quebec, Canada",8604495
|
||||
12411,CA,CAN,124,Saskatchewan,Canada,52.9399,-106.4509,"Saskatchewan, Canada",1179844
|
||||
12412,CA,CAN,124,Yukon,Canada,64.2823,-135,"Yukon, Canada",42986
|
||||
12416,CA,CAN,124,Nunavut,Canada,70.2998,-83.1076,"Nunavut, Canada",39403
|
||||
15601,CN,CHN,156,Anhui,China,31.8257,117.2264,"Anhui, China",61027171
|
||||
15602,CN,CHN,156,Beijing,China,40.1824,116.4142,"Beijing, China",21893095
|
||||
15603,CN,CHN,156,Chongqing,China,30.0572,107.874,"Chongqing, China",32054159
|
||||
15604,CN,CHN,156,Fujian,China,26.0789,117.9874,"Fujian, China",41540086
|
||||
15605,CN,CHN,156,Gansu,China,35.7518,104.2861,"Gansu, China",25019831
|
||||
15606,CN,CHN,156,Guangdong,China,23.3417,113.4244,"Guangdong, China",126012510
|
||||
15607,CN,CHN,156,Guangxi,China,23.8298,108.7881,"Guangxi, China",50126804
|
||||
15608,CN,CHN,156,Guizhou,China,26.8154,106.8748,"Guizhou, China",38562148
|
||||
15609,CN,CHN,156,Hainan,China,19.1959,109.7453,"Hainan, China",10081232
|
||||
15610,CN,CHN,156,Hebei,China,37.8957,114.9042,"Hebei, China",74610235
|
||||
15611,CN,CHN,156,Heilongjiang,China,47.862,127.7615,"Heilongjiang, China",31850088
|
||||
15612,CN,CHN,156,Henan,China,33.882,113.614,"Henan, China",99365519
|
||||
15613,CN,CHN,156,Hubei,China,30.9756,112.2707,"Hubei, China",57752557
|
||||
15614,CN,CHN,156,Hunan,China,27.6104,111.7088,"Hunan, China",66444864
|
||||
15615,CN,CHN,156,Inner Mongolia,China,44.0935,113.9448,"Inner Mongolia, China",24049155
|
||||
15616,CN,CHN,156,Jiangsu,China,32.9711,119.455,"Jiangsu, China",84748016
|
||||
15617,CN,CHN,156,Jiangxi,China,27.614,115.7221,"Jiangxi, China",45188635
|
||||
15618,CN,CHN,156,Jilin,China,43.6661,126.1923,"Jilin, China",24073453
|
||||
15619,CN,CHN,156,Liaoning,China,41.2956,122.6085,"Liaoning, China",42591407
|
||||
15620,CN,CHN,156,Ningxia,China,37.2692,106.1655,"Ningxia, China",7202654
|
||||
15621,CN,CHN,156,Qinghai,China,35.7452,95.9956,"Qinghai, China",5923957
|
||||
15622,CN,CHN,156,Shaanxi,China,35.1917,108.8701,"Shaanxi, China",39528999
|
||||
15623,CN,CHN,156,Shandong,China,36.3427,118.1498,"Shandong, China",101527453
|
||||
15624,CN,CHN,156,Shanghai,China,31.202,121.4491,"Shanghai, China",24870895
|
||||
15625,CN,CHN,156,Shanxi,China,37.5777,112.2922,"Shanxi, China",34915616
|
||||
15626,CN,CHN,156,Sichuan,China,30.6171,102.7103,"Sichuan, China",83674866
|
||||
15627,CN,CHN,156,Tianjin,China,39.3054,117.323,"Tianjin, China",13866009
|
||||
15628,CN,CHN,156,Tibet,China,31.6927,88.0924,"Tibet, China",3648100
|
||||
15629,CN,CHN,156,Xinjiang,China,41.1129,85.2401,"Xinjiang, China",25852345
|
||||
15630,CN,CHN,156,Yunnan,China,24.974,101.487,"Yunnan, China",47209277
|
||||
15631,CN,CHN,156,Zhejiang,China,29.1832,120.0934,"Zhejiang, China",64567588
|
||||
344,HK,HKG,344,Hong Kong,China,22.3,114.2,"Hong Kong, China",7496988
|
||||
446,MO,MAC,446,Macau,China,22.1667,113.55,"Macau, China",649342
|
||||
16,AS,ASM,16,American Samoa,US,-14.271,-170.132,"American Samoa, US",55641
|
||||
316,GU,GUM,316,Guam,US,13.4443,144.7937,"Guam, US",164229
|
||||
580,MP,MNP,580,Northern Mariana Islands,US,15.0979,145.6739,"Northern Mariana Islands, US",55144
|
||||
850,VI,VIR,850,Virgin Islands,US,18.3358,-64.8963,"Virgin Islands, US",107268
|
||||
630,PR,PRI,630,Puerto Rico,US,18.2208,-66.5901,"Puerto Rico, US",3193694
|
||||
84000001,US,USA,840,Alabama,US,32.3182,-86.9023,"Alabama, US",4903185
|
||||
84000002,US,USA,840,Alaska,US,61.3707,-152.4044,"Alaska, US",731545
|
||||
84000004,US,USA,840,Arizona,US,33.7298,-111.4312,"Arizona, US",7278717
|
||||
84000005,US,USA,840,Arkansas,US,34.9697,-92.3731,"Arkansas, US",3017804
|
||||
84000006,US,USA,840,California,US,36.1162,-119.6816,"California, US",39512223
|
||||
84000008,US,USA,840,Colorado,US,39.0598,-105.3111,"Colorado, US",5758736
|
||||
84000009,US,USA,840,Connecticut,US,41.5978,-72.7554,"Connecticut, US",3565287
|
||||
84000010,US,USA,840,Delaware,US,39.3185,-75.5071,"Delaware, US",973764
|
||||
84000011,US,USA,840,District of Columbia,US,38.8974,-77.0268,"District of Columbia, US",705749
|
||||
84000012,US,USA,840,Florida,US,27.7663,-81.6868,"Florida, US",21477737
|
||||
84000013,US,USA,840,Georgia,US,33.0406,-83.6431,"Georgia, US",10617423
|
||||
84000015,US,USA,840,Hawaii,US,21.0943,-157.4983,"Hawaii, US",1415872
|
||||
84000016,US,USA,840,Idaho,US,44.2405,-114.4788,"Idaho, US",1787065
|
||||
84000017,US,USA,840,Illinois,US,40.3495,-88.9861,"Illinois, US",12671821
|
||||
84000018,US,USA,840,Indiana,US,39.8494,-86.2583,"Indiana, US",6732219
|
||||
84000019,US,USA,840,Iowa,US,42.0115,-93.2105,"Iowa, US",3155070
|
||||
84000020,US,USA,840,Kansas,US,38.5266,-96.7265,"Kansas, US",2913314
|
||||
84000021,US,USA,840,Kentucky,US,37.6681,-84.6701,"Kentucky, US",4467673
|
||||
84000022,US,USA,840,Louisiana,US,31.1695,-91.8678,"Louisiana, US",4648794
|
||||
84000023,US,USA,840,Maine,US,44.6939,-69.3819,"Maine, US",1344212
|
||||
84000024,US,USA,840,Maryland,US,39.0639,-76.8021,"Maryland, US",6045680
|
||||
84000025,US,USA,840,Massachusetts,US,42.2302,-71.5301,"Massachusetts, US",6892503
|
||||
84000026,US,USA,840,Michigan,US,43.3266,-84.5361,"Michigan, US",9986857
|
||||
84000027,US,USA,840,Minnesota,US,45.6945,-93.9002,"Minnesota, US",5639632
|
||||
84000028,US,USA,840,Mississippi,US,32.7416,-89.6787,"Mississippi, US",2976149
|
||||
84000029,US,USA,840,Missouri,US,38.4561,-92.2884,"Missouri, US",6137428
|
||||
84000030,US,USA,840,Montana,US,46.9219,-110.4544,"Montana, US",1068778
|
||||
84000031,US,USA,840,Nebraska,US,41.1254,-98.2681,"Nebraska, US",1934408
|
||||
84000032,US,USA,840,Nevada,US,38.3135,-117.0554,"Nevada, US",3080156
|
||||
84000033,US,USA,840,New Hampshire,US,43.4525,-71.5639,"New Hampshire, US",1359711
|
||||
84000034,US,USA,840,New Jersey,US,40.2989,-74.521,"New Jersey, US",8882190
|
||||
84000035,US,USA,840,New Mexico,US,34.8405,-106.2485,"New Mexico, US",2096829
|
||||
84000036,US,USA,840,New York,US,42.1657,-74.9481,"New York, US",19453561
|
||||
84000037,US,USA,840,North Carolina,US,35.6301,-79.8064,"North Carolina, US",10488084
|
||||
84000038,US,USA,840,North Dakota,US,47.5289,-99.784,"North Dakota, US",762062
|
||||
84000039,US,USA,840,Ohio,US,40.3888,-82.7649,"Ohio, US",11689100
|
||||
84000040,US,USA,840,Oklahoma,US,35.5653,-96.9289,"Oklahoma, US",3956971
|
||||
84000041,US,USA,840,Oregon,US,44.572,-122.0709,"Oregon, US",4217737
|
||||
84000042,US,USA,840,Pennsylvania,US,40.5908,-77.2098,"Pennsylvania, US",12801989
|
||||
84000044,US,USA,840,Rhode Island,US,41.6809,-71.5118,"Rhode Island, US",1059361
|
||||
84000045,US,USA,840,South Carolina,US,33.8569,-80.945,"South Carolina, US",5148714
|
||||
84000046,US,USA,840,South Dakota,US,44.2998,-99.4388,"South Dakota, US",884659
|
||||
84000047,US,USA,840,Tennessee,US,35.7478,-86.6923,"Tennessee, US",6829174
|
||||
84000048,US,USA,840,Texas,US,31.0545,-97.5635,"Texas, US",28995881
|
||||
84000049,US,USA,840,Utah,US,40.15,-111.8624,"Utah, US",3205958
|
||||
84000050,US,USA,840,Vermont,US,44.0459,-72.7107,"Vermont, US",623989
|
||||
84000051,US,USA,840,Virginia,US,37.7693,-78.17,"Virginia, US",8535519
|
||||
84000053,US,USA,840,Washington,US,47.4009,-121.4905,"Washington, US",7614893
|
||||
84000054,US,USA,840,West Virginia,US,38.4912,-80.9545,"West Virginia, US",1792147
|
||||
84000055,US,USA,840,Wisconsin,US,44.2685,-89.6165,"Wisconsin, US",5822434
|
||||
84000056,US,USA,840,Wyoming,US,42.756,-107.3025,"Wyoming, US",578759
|
||||
|
@@ -0,0 +1,199 @@
|
||||
UID,iso2,iso3,code3,Country_Region,Lat,Long,Population
|
||||
4,AF,AFG,4,Afghanistan,33.93911,67.709953,38928341
|
||||
8,AL,ALB,8,Albania,41.1533,20.1683,2877800
|
||||
10,AQ,ATA,10,Antarctica,-71.9499,23.347,0
|
||||
12,DZ,DZA,12,Algeria,28.0339,1.6596,43851043
|
||||
20,AD,AND,20,Andorra,42.5063,1.5218,77265
|
||||
24,AO,AGO,24,Angola,-11.2027,17.8739,32866268
|
||||
28,AG,ATG,28,Antigua and Barbuda,17.0608,-61.7964,97928
|
||||
32,AR,ARG,32,Argentina,-38.4161,-63.6167,45195777
|
||||
51,AM,ARM,51,Armenia,40.0691,45.0382,2963234
|
||||
40,AT,AUT,40,Austria,47.5162,14.5501,9006400
|
||||
31,AZ,AZE,31,Azerbaijan,40.1431,47.5769,10139175
|
||||
44,BS,BHS,44,Bahamas,25.025885,-78.035889,393248
|
||||
48,BH,BHR,48,Bahrain,26.0275,50.55,1701583
|
||||
50,BD,BGD,50,Bangladesh,23.685,90.3563,164689383
|
||||
52,BB,BRB,52,Barbados,13.1939,-59.5432,287371
|
||||
112,BY,BLR,112,Belarus,53.7098,27.9534,9449321
|
||||
56,BE,BEL,56,Belgium,50.8333,4.469936,11492641
|
||||
84,BZ,BLZ,84,Belize,17.1899,-88.4976,397621
|
||||
204,BJ,BEN,204,Benin,9.3077,2.3158,12123198
|
||||
64,BT,BTN,64,Bhutan,27.5142,90.4336,771612
|
||||
68,BO,BOL,68,Bolivia,-16.2902,-63.5887,11673029
|
||||
70,BA,BIH,70,Bosnia and Herzegovina,43.9159,17.6791,3280815
|
||||
72,BW,BWA,72,Botswana,-22.3285,24.6849,2351625
|
||||
76,BR,BRA,76,Brazil,-14.235,-51.9253,212559409
|
||||
96,BN,BRN,96,Brunei,4.5353,114.7277,437483
|
||||
100,BG,BGR,100,Bulgaria,42.7339,25.4858,6948445
|
||||
854,BF,BFA,854,Burkina Faso,12.2383,-1.5616,20903278
|
||||
104,MM,MMR,104,Burma,21.9162,95.956,54409794
|
||||
108,BI,BDI,108,Burundi,-3.3731,29.9189,11890781
|
||||
132,CV,CPV,132,Cabo Verde,16.5388,-23.0418,555988
|
||||
116,KH,KHM,116,Cambodia,11.55,104.9167,16718971
|
||||
120,CM,CMR,120,Cameroon,3.848,11.5021,26545864
|
||||
140,CF,CAF,140,Central African Republic,6.6111,20.9394,4829764
|
||||
148,TD,TCD,148,Chad,15.4542,18.7322,16425859
|
||||
152,CL,CHL,152,Chile,-35.6751,-71.543,19116209
|
||||
170,CO,COL,170,Colombia,4.5709,-74.2973,50882884
|
||||
178,CG,COG,178,Congo (Brazzaville),-0.228,15.8277,5518092
|
||||
180,CD,COD,180,Congo (Kinshasa),-4.0383,21.7587,89561404
|
||||
174,KM,COM,174,Comoros,-11.6455,43.3333,869595
|
||||
188,CR,CRI,188,Costa Rica,9.7489,-83.7534,5094114
|
||||
384,CI,CIV,384,Cote d'Ivoire,7.54,-5.5471,26378275
|
||||
191,HR,HRV,191,Croatia,45.1,15.2,4105268
|
||||
192,CU,CUB,192,Cuba,21.521757,-77.781167,11326616
|
||||
196,CY,CYP,196,Cyprus,35.1264,33.4299,1207361
|
||||
203,CZ,CZE,203,Czechia,49.8175,15.473,10708982
|
||||
208,DK,DNK,208,Denmark,56.2639,9.5018,5837213
|
||||
262,DJ,DJI,262,Djibouti,11.8251,42.5903,988002
|
||||
212,DM,DMA,212,Dominica,15.415,-61.371,71991
|
||||
214,DO,DOM,214,Dominican Republic,18.7357,-70.1627,10847904
|
||||
218,EC,ECU,218,Ecuador,-1.8312,-78.1834,17643060
|
||||
818,EG,EGY,818,Egypt,26.820553,30.802498,102334403
|
||||
222,SV,SLV,222,El Salvador,13.7942,-88.8965,6486201
|
||||
226,GQ,GNQ,226,Equatorial Guinea,1.6508,10.2679,1402985
|
||||
232,ER,ERI,232,Eritrea,15.1794,39.7823,3546427
|
||||
233,EE,EST,233,Estonia,58.5953,25.0136,1326539
|
||||
748,SZ,SWZ,748,Eswatini,-26.5225,31.4659,1160164
|
||||
231,ET,ETH,231,Ethiopia,9.145,40.4897,114963583
|
||||
242,FJ,FJI,242,Fiji,-17.7134,178.065,896444
|
||||
246,FI,FIN,246,Finland,61.92411,25.748151,5540718
|
||||
250,FR,FRA,250,France,46.2276,2.2137,65249843
|
||||
266,GA,GAB,266,Gabon,-0.8037,11.6094,2225728
|
||||
270,GM,GMB,270,Gambia,13.4432,-15.3101,2416664
|
||||
268,GE,GEO,268,Georgia,42.3154,43.3569,3989175
|
||||
276,DE,DEU,276,Germany,51.165691,10.451526,83155031
|
||||
288,GH,GHA,288,Ghana,7.9465,-1.0232,31072945
|
||||
300,GR,GRC,300,Greece,39.0742,21.8243,10423056
|
||||
308,GD,GRD,308,Grenada,12.1165,-61.679,112519
|
||||
320,GT,GTM,320,Guatemala,15.7835,-90.2308,17915567
|
||||
324,GN,GIN,324,Guinea,9.9456,-9.6966,13132792
|
||||
624,GW,GNB,624,Guinea-Bissau,11.8037,-15.1804,1967998
|
||||
328,GY,GUY,328,Guyana,4.860416,-58.93018,786559
|
||||
332,HT,HTI,332,Haiti,18.9712,-72.2852,11402533
|
||||
336,VA,VAT,336,Holy See,41.9029,12.4534,809
|
||||
340,HN,HND,340,Honduras,15.2,-86.2419,9904608
|
||||
348,HU,HUN,348,Hungary,47.1625,19.5033,9660350
|
||||
352,IS,ISL,352,Iceland,64.9631,-19.0208,341250
|
||||
356,IN,IND,356,India,20.593684,78.96288,1380004385
|
||||
360,ID,IDN,360,Indonesia,-0.7893,113.9213,273523621
|
||||
364,IR,IRN,364,Iran,32.427908,53.688046,83992953
|
||||
368,IQ,IRQ,368,Iraq,33.223191,43.679291,40222503
|
||||
372,IE,IRL,372,Ireland,53.1424,-7.6921,4937796
|
||||
376,IL,ISR,376,Israel,31.046051,34.851612,8655541
|
||||
380,IT,ITA,380,Italy,41.87194,12.56738,60461828
|
||||
388,JM,JAM,388,Jamaica,18.1096,-77.2975,2961161
|
||||
392,JP,JPN,392,Japan,36.204824,138.252924,126476458
|
||||
400,JO,JOR,400,Jordan,31.24,36.51,10203140
|
||||
398,KZ,KAZ,398,Kazakhstan,48.0196,66.9237,18776707
|
||||
404,KE,KEN,404,Kenya,-0.0236,37.9062,53771300
|
||||
296,KI,KIR,296,Kiribati,-3.3704,-168.734,117606
|
||||
408,KP,PRK,408,"Korea, North",40.3399,127.5101,25778815
|
||||
410,KR,KOR,410,"Korea, South",35.907757,127.766922,51269183
|
||||
383,XK,XKS,383,Kosovo,42.602636,20.902977,1810366
|
||||
414,KW,KWT,414,Kuwait,29.31166,47.481766,4270563
|
||||
417,KG,KGZ,417,Kyrgyzstan,41.20438,74.766098,6524191
|
||||
418,LA,LAO,418,Laos,19.85627,102.495496,7275556
|
||||
428,LV,LVA,428,Latvia,56.8796,24.6032,1886202
|
||||
422,LB,LBN,422,Lebanon,33.8547,35.8623,6825442
|
||||
426,LS,LSO,426,Lesotho,-29.61,28.2336,2142252
|
||||
430,LR,LBR,430,Liberia,6.428055,-9.429499,5057677
|
||||
434,LY,LBY,434,Libya,26.3351,17.228331,6871287
|
||||
438,LI,LIE,438,Liechtenstein,47.14,9.55,38137
|
||||
440,LT,LTU,440,Lithuania,55.1694,23.8813,2722291
|
||||
442,LU,LUX,442,Luxembourg,49.8153,6.1296,625976
|
||||
450,MG,MDG,450,Madagascar,-18.766947,46.869107,27691019
|
||||
454,MW,MWI,454,Malawi,-13.2543,34.3015,19129955
|
||||
458,MY,MYS,458,Malaysia,4.210484,101.975766,32365998
|
||||
462,MV,MDV,462,Maldives,3.2028,73.2207,540542
|
||||
466,ML,MLI,466,Mali,17.570692,-3.996166,20250834
|
||||
470,MT,MLT,470,Malta,35.9375,14.3754,441539
|
||||
584,MH,MHL,584,Marshall Islands,7.1315,171.1845,58413
|
||||
478,MR,MRT,478,Mauritania,21.0079,-10.9408,4649660
|
||||
480,MU,MUS,480,Mauritius,-20.348404,57.552152,1271767
|
||||
484,MX,MEX,484,Mexico,23.6345,-102.5528,127792286
|
||||
583,FM,FSM,583,Micronesia,7.4256,150.5508,113815
|
||||
498,MD,MDA,498,Moldova,47.4116,28.3699,4027690
|
||||
492,MC,MCO,492,Monaco,43.7333,7.4167,39244
|
||||
496,MN,MNG,496,Mongolia,46.8625,103.8467,3278292
|
||||
499,ME,MNE,499,Montenegro,42.708678,19.37439,628062
|
||||
504,MA,MAR,504,Morocco,31.7917,-7.0926,36910558
|
||||
508,MZ,MOZ,508,Mozambique,-18.665695,35.529562,31255435
|
||||
516,NA,NAM,516,Namibia,-22.9576,18.4904,2540916
|
||||
520,NR,NRU,520,Nauru,-0.5228,166.9315,10834
|
||||
524,NP,NPL,524,Nepal,28.1667,84.25,29136808
|
||||
528,NL,NLD,528,Netherlands,52.1326,5.2913,17134873
|
||||
554,NZ,NZL,554,New Zealand,-40.9006,174.886,4822233
|
||||
558,NI,NIC,558,Nicaragua,12.865416,-85.207229,6624554
|
||||
562,NE,NER,562,Niger,17.607789,8.081666,24206636
|
||||
566,NG,NGA,566,Nigeria,9.082,8.6753,206139587
|
||||
807,MK,MKD,807,North Macedonia,41.6086,21.7453,2083380
|
||||
578,NO,NOR,578,Norway,60.472,8.4689,5421242
|
||||
512,OM,OMN,512,Oman,21.512583,55.923255,5106622
|
||||
586,PK,PAK,586,Pakistan,30.3753,69.3451,220892331
|
||||
585,PW,PLW,8,Palau,7.515,134.5825,18008
|
||||
591,PA,PAN,591,Panama,8.538,-80.7821,4314768
|
||||
598,PG,PNG,598,Papua New Guinea,-6.314993,143.95555,8947027
|
||||
600,PY,PRY,600,Paraguay,-23.4425,-58.4438,7132530
|
||||
604,PE,PER,604,Peru,-9.19,-75.0152,32971846
|
||||
608,PH,PHL,608,Philippines,12.879721,121.774017,109581085
|
||||
616,PL,POL,616,Poland,51.9194,19.1451,37846605
|
||||
620,PT,PRT,620,Portugal,39.3999,-8.2245,10196707
|
||||
634,QA,QAT,634,Qatar,25.3548,51.1839,2881060
|
||||
642,RO,ROU,642,Romania,45.9432,24.9668,19237682
|
||||
643,RU,RUS,643,Russia,61.52401,105.318756,145934460
|
||||
646,RW,RWA,646,Rwanda,-1.9403,29.8739,12952209
|
||||
659,KN,KNA,659,Saint Kitts and Nevis,17.357822,-62.782998,53192
|
||||
662,LC,LCA,662,Saint Lucia,13.9094,-60.9789,183629
|
||||
670,VC,VCT,670,Saint Vincent and the Grenadines,12.9843,-61.2872,110947
|
||||
882,WS,WSM,882,Samoa,-13.759,-172.1046,196130
|
||||
674,SM,SMR,674,San Marino,43.9424,12.4578,33938
|
||||
678,ST,STP,678,Sao Tome and Principe,0.1864,6.6131,219161
|
||||
682,SA,SAU,682,Saudi Arabia,23.885942,45.079162,34813867
|
||||
686,SN,SEN,686,Senegal,14.4974,-14.4524,16743930
|
||||
688,RS,SRB,688,Serbia,44.0165,21.0059,8737370
|
||||
690,SC,SYC,690,Seychelles,-4.6796,55.492,98340
|
||||
694,SL,SLE,694,Sierra Leone,8.460555,-11.779889,7976985
|
||||
702,SG,SGP,702,Singapore,1.2833,103.8333,5850343
|
||||
703,SK,SVK,703,Slovakia,48.669,19.699,5434712
|
||||
705,SI,SVN,705,Slovenia,46.1512,14.9955,2078932
|
||||
90,SB,SLB,90,Solomon Islands,-9.6457,160.1562,652858
|
||||
706,SO,SOM,706,Somalia,5.152149,46.199616,15893219
|
||||
710,ZA,ZAF,710,South Africa,-30.5595,22.9375,59308690
|
||||
728,SS,SSD,728,South Sudan,6.877,31.307,11193729
|
||||
724,ES,ESP,724,Spain,40.463667,-3.74922,46754783
|
||||
144,LK,LKA,144,Sri Lanka,7.873054,80.771797,21413250
|
||||
729,SD,SDN,729,Sudan,12.8628,30.2176,43849269
|
||||
740,SR,SUR,740,Suriname,3.9193,-56.0278,586634
|
||||
752,SE,SWE,752,Sweden,60.128161,18.643501,10099270
|
||||
756,CH,CHE,756,Switzerland,46.8182,8.2275,8654618
|
||||
760,SY,SYR,760,Syria,34.802075,38.996815,17500657
|
||||
158,TW,TWN,158,Taiwan*,23.7,121,23816775
|
||||
762,TJ,TJK,762,Tajikistan,38.861,71.2761,9537642
|
||||
834,TZ,TZA,834,Tanzania,-6.369028,34.888822,59734213
|
||||
764,TH,THA,764,Thailand,15.870032,100.992541,69799978
|
||||
626,TL,TLS,626,Timor-Leste,-8.874217,125.727539,1318442
|
||||
768,TG,TGO,768,Togo,8.6195,0.8248,8278737
|
||||
776,TO,TON,776,Tonga,-21.179,-175.1982,105697
|
||||
780,TT,TTO,780,Trinidad and Tobago,10.6918,-61.2225,1399491
|
||||
788,TN,TUN,788,Tunisia,33.886917,9.537499,11818618
|
||||
792,TR,TUR,792,Turkey,38.9637,35.2433,84339067
|
||||
798,TV,TUV,798,Tuvalu,-7.1095,177.6493,11792
|
||||
800,UG,UGA,800,Uganda,1.373333,32.290275,45741000
|
||||
804,UA,UKR,804,Ukraine,48.3794,31.1656,43733759
|
||||
784,AE,ARE,784,United Arab Emirates,23.424076,53.847818,9890400
|
||||
826,GB,GBR,826,United Kingdom,55.3781,-3.436,67886004
|
||||
858,UY,URY,858,Uruguay,-32.5228,-55.7658,3473727
|
||||
860,UZ,UZB,860,Uzbekistan,41.377491,64.585262,33469199
|
||||
548,VU,VUT,548,Vanuatu,-15.3767,166.9592,292680
|
||||
862,VE,VEN,862,Venezuela,6.4238,-66.5897,28435943
|
||||
704,VN,VNM,704,Vietnam,14.058324,108.277199,97338583
|
||||
275,PS,PSE,275,West Bank and Gaza,31.9522,35.2332,5101416
|
||||
732,EH,ESH,732,Western Sahara,24.2155,-12.8858,597330
|
||||
887,YE,YEM,887,Yemen,15.552727,48.516388,29825968
|
||||
894,ZM,ZMB,894,Zambia,-13.133897,27.849332,18383956
|
||||
716,ZW,ZWE,716,Zimbabwe,-19.015438,29.154857,14862927
|
||||
36,AU,AUS,36,Australia,-25,133,25459700
|
||||
124,CA,CAN,124,Canada,60,-95,38246108
|
||||
156,CN,CHN,156,China,35.8617,104.19545,1411778724
|
||||
840,US,USA,840,US,40,-100,329466283
|
||||
|
@@ -0,0 +1,9 @@
|
||||
Women's suffrage is when women got the right to vote. A long time ago, only men could vote and make decisions. This was not fair because women should have the same rights as men. Women wanted to vote too, so they started asking for it. It took a long time, and they had to work very hard to make people listen to them. Many men did not think women should vote, and this made it very hard for the women.
|
||||
|
||||
The women who fought for voting were called suffragets. They did many things to show they wanted the right to vote. Some gave speeches, others made signs and marched in the streets. Some even went to jail because they refused to stop fighting for what they believed was right. It was scary for some of the women, but they knew how important it was to keep trying. They wanted to change the world so that it was more fair for everyone.
|
||||
|
||||
One of the most important suffragets was Susan B. Anthony. She worked very hard to help women get the right to vote. She gave speeches and wrote letters to the goverment to make them change the laws. Susan never gave up, even when people said mean things to her. Another important person was Elizabeth Cady Stanton. She also helped fight for women's rights and was friends with Susan B. Anthony. Together, they made a great team and helped make big changes.
|
||||
|
||||
Finally, in 1920, the 19th amendment was passed in the United States. This law gave women the right to vote. It was a huge victory for the suffragets, and they were very happy. Many women went to vote for the first time, and it felt like they were finally equal with men. It took many years and a lot of hard work, but the women never gave up. They kept fighting until they won.
|
||||
|
||||
Women's suffrage is very important because it shows that if you work hard and believe in something, you can make a change. The women who fought for the right to vote showed bravery and strengh, and they helped make the world a better place. Today, women can vote because of them, and it's important to remember their hard work. We should always stand up for what is right, just like the suffragets did.
|
||||
@@ -0,0 +1,93 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
|
||||
import semantic_kernel as sk
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel.connectors.ai.prompt_execution_settings import PromptExecutionSettings
|
||||
from semantic_kernel.contents.chat_history import ChatHistory
|
||||
from semantic_kernel.core_plugins import ConversationSummaryPlugin
|
||||
from semantic_kernel.prompt_template import PromptTemplateConfig
|
||||
from semantic_kernel.prompt_template.input_variable import InputVariable
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize the kernel
|
||||
kernel = sk.Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel=kernel, use_chat=True)
|
||||
|
||||
service_id = "default"
|
||||
execution_settings = PromptExecutionSettings(
|
||||
service_id=service_id, max_tokens=ConversationSummaryPlugin._max_tokens, temperature=0.1, top_p=0.5
|
||||
)
|
||||
|
||||
template = (
|
||||
"BEGIN CONTENT TO SUMMARIZE:\n{{" + "$history" + "}}\n{{" + "$input" + "}}\n"
|
||||
"END CONTENT TO SUMMARIZE.\nSummarize the conversation in 'CONTENT TO"
|
||||
" SUMMARIZE', identifying main points of discussion and any"
|
||||
" conclusions that were reached.\nDo not incorporate other general"
|
||||
" knowledge.\nSummary is in plain text, in complete sentences, with no markup"
|
||||
" or tags.\n\nBEGIN SUMMARY:\n"
|
||||
)
|
||||
|
||||
prompt_template_config = PromptTemplateConfig(
|
||||
template=template,
|
||||
description="Given a section of a conversation transcript, summarize the part of the conversation.",
|
||||
execution_settings=execution_settings,
|
||||
input_variables=[
|
||||
InputVariable(name="input", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
# Import the ConversationSummaryPlugin
|
||||
kernel.add_plugin(
|
||||
ConversationSummaryPlugin(kernel=kernel, prompt_template_config=prompt_template_config),
|
||||
plugin_name="ConversationSummaryPlugin",
|
||||
)
|
||||
|
||||
summarize_function = kernel.get_function(
|
||||
plugin_name="ConversationSummaryPlugin", function_name="SummarizeConversation"
|
||||
)
|
||||
|
||||
# Create the history
|
||||
history = ChatHistory()
|
||||
|
||||
while True:
|
||||
try:
|
||||
request = input("User:> ")
|
||||
except KeyboardInterrupt:
|
||||
print("\n\nExiting chat...")
|
||||
return False
|
||||
except EOFError:
|
||||
print("\n\nExiting chat...")
|
||||
return False
|
||||
|
||||
if request == "exit":
|
||||
print("\n\nExiting chat...")
|
||||
return False
|
||||
|
||||
result = await kernel.invoke(
|
||||
summarize_function,
|
||||
input=request,
|
||||
history=history,
|
||||
)
|
||||
|
||||
# Add the request to the history
|
||||
history.add_user_message(request)
|
||||
history.add_assistant_message(str(result))
|
||||
|
||||
print(f"Assistant:> {result}")
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,161 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
from functools import reduce
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.contents import ChatHistory
|
||||
from semantic_kernel.contents.chat_message_content import ChatMessageContent
|
||||
from semantic_kernel.contents.streaming_chat_message_content import StreamingChatMessageContent
|
||||
from semantic_kernel.contents.utils.author_role import AuthorRole
|
||||
from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig
|
||||
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel=kernel, use_chat=True)
|
||||
|
||||
# An ideal prompt for this is {{$history}}{{$request}} as those
|
||||
# get cleanly parsed into a new chat_history object while invoking
|
||||
# the function. Another possibility is create the prompt as {{$history}}
|
||||
# and make sure to add the user message to the history before invoking.
|
||||
chat_function = kernel.add_function(
|
||||
plugin_name="Conversation",
|
||||
function_name="Chat",
|
||||
description="Chat with the assistant",
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
template="{{$history}}{{$request}}",
|
||||
description="Chat with the assistant",
|
||||
input_variables=[
|
||||
InputVariable(name="request", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
choices = ["ContinueConversation", "EndConversation"]
|
||||
chat_function_intent = kernel.add_function(
|
||||
plugin_name="Conversation",
|
||||
function_name="getIntent",
|
||||
description="Chat with the assistant",
|
||||
template_format="handlebars",
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
template="""
|
||||
<message role="system">Instructions: What is the intent of this request?
|
||||
Do not explain the reasoning, just reply back with the intent. If you are unsure, reply with {{choices[0]}}.
|
||||
Choices: {{choices}}.</message>
|
||||
|
||||
{{#each few_shot_examples}}
|
||||
{{#each this.messages}}
|
||||
{{#message role=role}}
|
||||
{{~content~}}
|
||||
{{/message}}
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
|
||||
{{#each chat_history.messages}}
|
||||
{{#message role=role}}
|
||||
{{~content~}}
|
||||
{{/message}}
|
||||
{{/each}}
|
||||
|
||||
<message role="user">{{request}}</message>
|
||||
<message role="system">Intent:</message>
|
||||
""",
|
||||
description="Chat with the assistant",
|
||||
template_format="handlebars",
|
||||
input_variables=[
|
||||
InputVariable(name="request", description="The user input", is_required=True),
|
||||
InputVariable(
|
||||
name="chat_history",
|
||||
description="The history of the conversation",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
InputVariable(
|
||||
name="choices",
|
||||
description="The choices for the user to select from",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
InputVariable(
|
||||
name="few_shot_examples",
|
||||
description="The few shot examples to help the user",
|
||||
is_required=True,
|
||||
allow_dangerously_set_content=True,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
few_shot_examples = [
|
||||
ChatHistory(
|
||||
messages=[
|
||||
ChatMessageContent(
|
||||
role=AuthorRole.USER, content="Can you send a very quick approval to the marketing team?"
|
||||
),
|
||||
ChatMessageContent(role=AuthorRole.SYSTEM, content="Intent:"),
|
||||
ChatMessageContent(role=AuthorRole.ASSISTANT, content="ContinueConversation"),
|
||||
]
|
||||
),
|
||||
ChatHistory(
|
||||
messages=[
|
||||
ChatMessageContent(role=AuthorRole.USER, content="Thanks, I'm done for now"),
|
||||
ChatMessageContent(role=AuthorRole.SYSTEM, content="Intent:"),
|
||||
ChatMessageContent(role=AuthorRole.ASSISTANT, content="EndConversation"),
|
||||
]
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
async def main():
|
||||
# Create the history
|
||||
history = ChatHistory()
|
||||
|
||||
while True:
|
||||
try:
|
||||
request = input("User:> ")
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
break
|
||||
|
||||
result = await kernel.invoke(
|
||||
plugin_name="Conversation",
|
||||
function_name="getIntent",
|
||||
request=request,
|
||||
history=history,
|
||||
choices=choices,
|
||||
few_shot_examples=few_shot_examples,
|
||||
)
|
||||
if str(result) == "EndConversation":
|
||||
break
|
||||
|
||||
result = kernel.invoke_stream(
|
||||
plugin_name="Conversation",
|
||||
function_name="Chat",
|
||||
request=request,
|
||||
history=history,
|
||||
)
|
||||
all_chunks = []
|
||||
print("Assistant:> ", end="")
|
||||
async for chunk in result:
|
||||
if isinstance(chunk[0], StreamingChatMessageContent) and chunk[0].role == AuthorRole.ASSISTANT:
|
||||
all_chunks.append(chunk[0])
|
||||
print(str(chunk[0]), end="")
|
||||
print()
|
||||
|
||||
history.add_user_message(request)
|
||||
history.add_assistant_message(str(reduce(lambda x, y: x + y, all_chunks)))
|
||||
|
||||
print("\n\nExiting chat...")
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,46 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
# <NecessaryPackages>
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel import Kernel
|
||||
|
||||
# </NecessaryPackages>
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize the kernel
|
||||
# <KernelCreation>
|
||||
kernel = Kernel()
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel, use_chat=True)
|
||||
# </KernelCreation>
|
||||
|
||||
# <InvokeUtcNow>
|
||||
# Import the TimePlugin and add it to the kernel
|
||||
from semantic_kernel.core_plugins import TimePlugin
|
||||
|
||||
time = kernel.add_plugin(TimePlugin(), "TimePlugin")
|
||||
|
||||
# Invoke the Today function
|
||||
current_time = await kernel.invoke(time["today"])
|
||||
print(f"The current date is: {current_time}\n")
|
||||
# </InvokeUtcNow>
|
||||
|
||||
# <InvokeShortPoem>
|
||||
# Import the WriterPlugin from the plugins directory.
|
||||
script_directory = os.path.dirname(__file__)
|
||||
plugins_directory = os.path.join(script_directory, "plugins")
|
||||
kernel.add_plugin(parent_directory=plugins_directory, plugin_name="WriterPlugin")
|
||||
# Run the short poem function with the Kernel Argument
|
||||
poem_result = await kernel.invoke(function_name="ShortPoem", plugin_name="WriterPlugin", input=str(current_time))
|
||||
print(f"The poem result:\n\n{poem_result}")
|
||||
# </InvokeShortPoem>
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,260 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import asyncio
|
||||
|
||||
from samples.sk_service_configurator import add_service
|
||||
from semantic_kernel import Kernel
|
||||
from semantic_kernel.connectors.ai import PromptExecutionSettings
|
||||
from semantic_kernel.functions import KernelArguments
|
||||
from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig
|
||||
|
||||
|
||||
async def main(delay: int = 0):
|
||||
# <KernelCreation>
|
||||
# Initialize the kernel
|
||||
kernel = Kernel()
|
||||
|
||||
# Add the service to the kernel
|
||||
# use_chat: True to use chat completion, False to use text completion
|
||||
kernel = add_service(kernel=kernel, use_chat=True)
|
||||
# </KernelCreation>
|
||||
print(
|
||||
"This sample uses different prompts with the same request, they are related to Emails, "
|
||||
"Tasks and Documents, make sure to include that in your request."
|
||||
)
|
||||
request = input("Your request: ")
|
||||
arguments = KernelArguments(request=request, settings=PromptExecutionSettings(max_tokens=100))
|
||||
# <InitialPrompt> 0.0 Initial prompt
|
||||
prompt = "What is the intent of this request? {{$request}}"
|
||||
# </InitialPrompt>
|
||||
# <InvokeInitialPrompt>
|
||||
print("0.0 Initial prompt")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_zero", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
# </InvokeInitialPrompt>
|
||||
|
||||
# <MoreSpecificPrompt> 1.0 Make the prompt more specific
|
||||
prompt = """What is the intent of this request? {{$request}}
|
||||
You can choose between SendEmail, SendMessage, CompleteTask, CreateDocument."""
|
||||
# </MoreSpecificPrompt>
|
||||
print("1.0 Make the prompt more specific")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_one", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <StructuredPrompt> 2.0 Add structure to the output with formatting
|
||||
prompt = """Instructions: What is the intent of this request?
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument.
|
||||
User Input: {{$request}}
|
||||
Intent: """
|
||||
# </StructuredPrompt>
|
||||
print("2.0 Add structure to the output with formatting")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_two", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <FormattedPrompt> 2.1 Add structure to the output with formatting (using Markdown and JSON)
|
||||
prompt = """## Instructions
|
||||
Provide the intent of the request using the following format:
|
||||
```json
|
||||
{
|
||||
"intent": {intent}
|
||||
}
|
||||
```
|
||||
|
||||
## Choices
|
||||
You can choose between the following intents:
|
||||
```json
|
||||
["SendEmail", "SendMessage", "CompleteTask", "CreateDocument"]
|
||||
```
|
||||
|
||||
## User Input
|
||||
The user input is:
|
||||
```json
|
||||
{
|
||||
"request": "{{$request}}"\n'
|
||||
}
|
||||
```
|
||||
|
||||
## Intent"""
|
||||
# </FormattedPrompt>
|
||||
print("2.1 Add structure to the output with formatting (using Markdown and JSON)")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_two_one", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <FewShotPrompt> 3.0 Provide examples with few-shot prompting
|
||||
prompt = """Instructions: What is the intent of this request?
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument.
|
||||
|
||||
User Input: Can you send a very quick approval to the marketing team?
|
||||
Intent: SendMessage
|
||||
|
||||
User Input: Can you send the full update to the marketing team?
|
||||
Intent: SendEmail
|
||||
|
||||
User Input: {{$request}}
|
||||
Intent: """
|
||||
# </FewShotPrompt>
|
||||
print("3.0 Provide examples with few-shot prompting")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_three", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <AvoidPrompt> 4.0 Tell the AI what to do to avoid doing something wrong
|
||||
prompt = """Instructions: What is the intent of this request?
|
||||
If you don't know the intent, don't guess; instead respond with "Unknown".
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
|
||||
|
||||
User Input: Can you send a very quick approval to the marketing team?
|
||||
Intent: SendMessage
|
||||
|
||||
User Input: Can you send the full update to the marketing team?
|
||||
Intent: SendEmail
|
||||
|
||||
User Input: {{$request}}
|
||||
Intent: """
|
||||
# </AvoidPrompt>
|
||||
print("4.0 Tell the AI what to do to avoid doing something wrong")
|
||||
print("-------------------------")
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_four", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <ContextPrompt> 5.0 Provide context to the AI through a chat history of this user
|
||||
history = (
|
||||
"User input: I hate sending emails, no one ever reads them.\n"
|
||||
"AI response: I'm sorry to hear that. Messages may be a better way to communicate."
|
||||
)
|
||||
prompt = """Instructions: What is the intent of this request?\n"
|
||||
If you don't know the intent, don't guess; instead respond with "Unknown".
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
|
||||
|
||||
User Input: Can you send a very quick approval to the marketing team?
|
||||
Intent: SendMessage
|
||||
|
||||
User Input: Can you send the full update to the marketing team?
|
||||
Intent: SendEmail
|
||||
|
||||
{{$history}}
|
||||
User Input: {{$request}}
|
||||
Intent: """
|
||||
# </ContextPrompt>
|
||||
print("5.0 Provide context to the AI")
|
||||
print("-------------------------")
|
||||
arguments["history"] = history
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_five", plugin_name="sample_plugin", prompt=prompt, arguments=arguments
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <RolePrompt> 6.0 Using message roles in chat completion prompts
|
||||
history = """
|
||||
<message role="user">I hate sending emails, no one ever reads them.</message>
|
||||
<message role="assistant">I'm sorry to hear that. Messages may be a better way to communicate.</message>
|
||||
"""
|
||||
|
||||
prompt = """
|
||||
<message role="system">Instructions: What is the intent of this request?
|
||||
If you don't know the intent, don't guess; instead respond with "Unknown".
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.</message>
|
||||
|
||||
<message role="user">Can you send a very quick approval to the marketing team?</message>
|
||||
<message role="system">Intent:</message>
|
||||
<message role="assistant">SendMessage</message>
|
||||
|
||||
<message role="user">Can you send the full update to the marketing team?</message>
|
||||
<message role="system">Intent:</message>
|
||||
<message role="assistant">SendEmail</message>
|
||||
|
||||
{{$history}}
|
||||
<message role="user">{{$request}}</message>
|
||||
<message role="system">Intent:</message>
|
||||
"""
|
||||
# </RolePrompt>
|
||||
print("6.0 Using message roles in chat completion prompts")
|
||||
print("-------------------------")
|
||||
arguments["history"] = history
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_six",
|
||||
plugin_name="sample_plugin",
|
||||
prompt=prompt,
|
||||
arguments=arguments,
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
input_variables=[InputVariable(name="history", allow_dangerously_set_content=True)]
|
||||
),
|
||||
)
|
||||
print(result)
|
||||
await asyncio.sleep(delay)
|
||||
print("-------------------------")
|
||||
|
||||
# <BonusPrompt> 7.0 Give your AI words of encouragement
|
||||
history = """
|
||||
<message role="user">I hate sending emails, no one ever reads them.</message>
|
||||
<message role="assistant">I'm sorry to hear that. Messages may be a better way to communicate.</message>
|
||||
"""
|
||||
|
||||
prompt = """
|
||||
<message role="system">Instructions: What is the intent of this request?
|
||||
If you don't know the intent, don't guess; instead respond with "Unknown".
|
||||
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
|
||||
Bonus: You'll get $20 if you get this right.</message>
|
||||
|
||||
<message role="user">Can you send a very quick approval to the marketing team?</message>
|
||||
<message role="system">Intent:</message>
|
||||
<message role="assistant">SendMessage</message>
|
||||
|
||||
<message role="user">Can you send the full update to the marketing team?</message>
|
||||
<message role="system">Intent:</message>
|
||||
<message role="assistant">SendEmail</message>
|
||||
|
||||
{{$history}}
|
||||
<message role="user">{{$request}}</message>
|
||||
<message role="system">Intent:</message>
|
||||
"""
|
||||
# </BonusPrompt>
|
||||
print("7.0 Give your AI words of encouragement")
|
||||
print("-------------------------")
|
||||
arguments["history"] = history
|
||||
result = await kernel.invoke_prompt(
|
||||
function_name="sample_seven",
|
||||
plugin_name="sample_plugin",
|
||||
prompt=prompt,
|
||||
arguments=arguments,
|
||||
prompt_template_config=PromptTemplateConfig(
|
||||
input_variables=[InputVariable(name="history", allow_dangerously_set_content=True)]
|
||||
),
|
||||
)
|
||||
print(result)
|
||||
print("-------------------------")
|
||||
|
||||
|
||||
# Run the main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user